diff options
Diffstat (limited to 'drivers/acpi/acpica/evgpeutil.c')
-rw-r--r-- | drivers/acpi/acpica/evgpeutil.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/acpi/acpica/evgpeutil.c b/drivers/acpi/acpica/evgpeutil.c index 3c43796b8361..cb50dd91bc18 100644 --- a/drivers/acpi/acpica/evgpeutil.c +++ b/drivers/acpi/acpica/evgpeutil.c | |||
@@ -54,7 +54,7 @@ ACPI_MODULE_NAME("evgpeutil") | |||
54 | * FUNCTION: acpi_ev_walk_gpe_list | 54 | * FUNCTION: acpi_ev_walk_gpe_list |
55 | * | 55 | * |
56 | * PARAMETERS: gpe_walk_callback - Routine called for each GPE block | 56 | * PARAMETERS: gpe_walk_callback - Routine called for each GPE block |
57 | * Context - Value passed to callback | 57 | * context - Value passed to callback |
58 | * | 58 | * |
59 | * RETURN: Status | 59 | * RETURN: Status |
60 | * | 60 | * |
@@ -347,6 +347,8 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, | |||
347 | void *context) | 347 | void *context) |
348 | { | 348 | { |
349 | struct acpi_gpe_event_info *gpe_event_info; | 349 | struct acpi_gpe_event_info *gpe_event_info; |
350 | struct acpi_gpe_notify_info *notify; | ||
351 | struct acpi_gpe_notify_info *next; | ||
350 | u32 i; | 352 | u32 i; |
351 | u32 j; | 353 | u32 j; |
352 | 354 | ||
@@ -365,10 +367,28 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, | |||
365 | 367 | ||
366 | if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == | 368 | if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == |
367 | ACPI_GPE_DISPATCH_HANDLER) { | 369 | ACPI_GPE_DISPATCH_HANDLER) { |
370 | |||
371 | /* Delete an installed handler block */ | ||
372 | |||
368 | ACPI_FREE(gpe_event_info->dispatch.handler); | 373 | ACPI_FREE(gpe_event_info->dispatch.handler); |
369 | gpe_event_info->dispatch.handler = NULL; | 374 | gpe_event_info->dispatch.handler = NULL; |
370 | gpe_event_info->flags &= | 375 | gpe_event_info->flags &= |
371 | ~ACPI_GPE_DISPATCH_MASK; | 376 | ~ACPI_GPE_DISPATCH_MASK; |
377 | } else if ((gpe_event_info-> | ||
378 | flags & ACPI_GPE_DISPATCH_MASK) == | ||
379 | ACPI_GPE_DISPATCH_NOTIFY) { | ||
380 | |||
381 | /* Delete the implicit notification device list */ | ||
382 | |||
383 | notify = gpe_event_info->dispatch.notify_list; | ||
384 | while (notify) { | ||
385 | next = notify->next; | ||
386 | ACPI_FREE(notify); | ||
387 | notify = next; | ||
388 | } | ||
389 | gpe_event_info->dispatch.notify_list = NULL; | ||
390 | gpe_event_info->flags &= | ||
391 | ~ACPI_GPE_DISPATCH_MASK; | ||
372 | } | 392 | } |
373 | } | 393 | } |
374 | } | 394 | } |