Message ID | 1432592573-13743-4-git-send-email-pierre.morrow@free.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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! ;) > *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); > + 0x3, NULL); > > nouveau_evaluate_optimus_dsm(nouveau_dsm_priv.dhandle, > NOUVEAU_DSM_OPTIMUS_CAPS, > NOUVEAU_DSM_OPTIMUS_SET_POWERDOWN, > - &result); > + NULL); > > } >
> 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); >> + 0x3, NULL); >> nouveau_evaluate_optimus_dsm(nouveau_dsm_priv.dhandle, >> NOUVEAU_DSM_OPTIMUS_CAPS, >> NOUVEAU_DSM_OPTIMUS_SET_POWERDOWN, >> - &result); >> + NULL); >> }
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]; *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); + 0x3, NULL); nouveau_evaluate_optimus_dsm(nouveau_dsm_priv.dhandle, NOUVEAU_DSM_OPTIMUS_CAPS, NOUVEAU_DSM_OPTIMUS_SET_POWERDOWN, - &result); + NULL); }
Signed-off-by: Pierre Moreau <pierre.morrow@free.fr> --- drm/nouveau/nouveau_acpi.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)