On 26 May 2015, at 10:02, Samuel Pitoiset samuel.pitoiset@gmail.com wrote:
On 05/26/2015 12:22 AM, Pierre Moreau wrote:
Signed-off-by: Pierre Moreau pierre.morrow@free.fr
drm/nouveau/nouveau_acpi.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drm/nouveau/nouveau_acpi.c b/drm/nouveau/nouveau_acpi.c index 36f4a40..073f7d7 100644 --- a/drm/nouveau/nouveau_acpi.c +++ b/drm/nouveau/nouveau_acpi.c @@ -88,15 +88,14 @@ static int nouveau_evaluate_optimus_dsm(acpi_handle handle, int func, int arg, u for (i = 0; i < 4; i++) args_buff[i] = (arg >> i * 8) & 0xFF;
- *result = 0; obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, nouveau_op_dsm_rid, func, &argv4, ACPI_TYPE_BUFFER); if (!obj) { acpi_handle_info(handle, "failed to evaluate _DSM\n"); return AE_ERROR; } else {
if (obj->buffer.length == 4) {
*result |= obj->buffer.pointer[0];
if (!result && obj->buffer.length == 4) {
*result = obj->buffer.pointer[0];
segfault here if result is NULL! ;)
Good catch!
*result |= (obj->buffer.pointer[1] << 8); *result |= (obj->buffer.pointer[2] << 16); *result |= (obj->buffer.pointer[3] << 24);
@@ -322,18 +321,17 @@ void nouveau_register_dsm_handler(void) /* Must be called for Optimus models before the card can be turned off */ void nouveau_switcheroo_optimus_dsm(void) {
- u32 result = 0; if (!nouveau_dsm_priv.optimus_detected) return; nouveau_evaluate_optimus_dsm(nouveau_dsm_priv.dhandle, NOUVEAU_DSM_OPTIMUS_FLAGS,
0x3, &result);
nouveau_evaluate_optimus_dsm(nouveau_dsm_priv.dhandle, NOUVEAU_DSM_OPTIMUS_CAPS, NOUVEAU_DSM_OPTIMUS_SET_POWERDOWN,0x3, NULL);
&result);
}NULL);