Merge branch 'acpica' into release
authorLen Brown <len.brown@intel.com>
Fri, 18 Mar 2011 22:06:08 +0000 (18:06 -0400)
committerLen Brown <len.brown@intel.com>
Fri, 18 Mar 2011 22:06:08 +0000 (18:06 -0400)
1  2 
arch/x86/include/asm/acpi.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/evgpe.c

index aa92684aa67471ab4499ad27b70eda75f7acbcf2,4ea15ca89b2b1110c4d0f6032d8ddee9256fb0b4..ef14da1f4ec53264075ef94c8a090f235e89ad45
@@@ -88,6 -88,7 +88,7 @@@ extern int acpi_disabled
  extern int acpi_pci_disabled;
  extern int acpi_skip_timer_override;
  extern int acpi_use_timer_override;
+ extern int acpi_fix_pin2_polarity;
  
  extern u8 acpi_sci_flags;
  extern int acpi_sci_override_gsi;
@@@ -112,8 -113,9 +113,8 @@@ static inline void acpi_disable_pci(voi
        acpi_noirq_set();
  }
  
 -/* routines for saving/restoring kernel state */
 -extern int acpi_save_state_mem(void);
 -extern void acpi_restore_state_mem(void);
 +/* Low-level suspend routine. */
 +extern int acpi_suspend_lowlevel(void);
  
  extern unsigned long acpi_wakeup_address;
  
index edc25867ad9d92ca4a23ef6fc7aa9c5f66c5862a,01bcab1c5cc4452400190c93477a7d9d1eb12dcf..c7f743ca395bbcaf91d4b046cee29b804b871c3a
@@@ -89,25 -89,6 +89,6 @@@ union acpi_parse_object
  #define ACPI_MAX_MUTEX                  7
  #define ACPI_NUM_MUTEX                  ACPI_MAX_MUTEX+1
  
- #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
- #ifdef DEFINE_ACPI_GLOBALS
- /* Debug names for the mutexes above */
- static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
-       "ACPI_MTX_Interpreter",
-       "ACPI_MTX_Namespace",
-       "ACPI_MTX_Tables",
-       "ACPI_MTX_Events",
-       "ACPI_MTX_Caches",
-       "ACPI_MTX_Memory",
-       "ACPI_MTX_CommandComplete",
-       "ACPI_MTX_CommandReady"
- };
- #endif
- #endif
  /* Lock structure for reader/writer interfaces */
  
  struct acpi_rw_lock {
@@@ -416,15 -397,10 +397,15 @@@ struct acpi_gpe_handler_info 
        u8 originally_enabled;  /* True if GPE was originally enabled */
  };
  
 +struct acpi_gpe_notify_object {
 +      struct acpi_namespace_node *node;
 +      struct acpi_gpe_notify_object *next;
 +};
 +
  union acpi_gpe_dispatch_info {
        struct acpi_namespace_node *method_node;        /* Method node for this GPE level */
        struct acpi_gpe_handler_info *handler;  /* Installed GPE handler */
 -      struct acpi_namespace_node *device_node;        /* Parent _PRW device for implicit notify */
 +      struct acpi_gpe_notify_object device;   /* List of _PRW devices for implicit notify */
  };
  
  /*
index f4725212eb488fd1b37a3c2cc21735dbeb2282ad,67d44ef2fbc1cd82fd8792139258b02b5d28badc..65c79add3b1982ae3432a830c4c94f37be60f39d
@@@ -373,6 -373,15 +373,15 @@@ u32 acpi_ev_gpe_detect(struct acpi_gpe_
  
                        gpe_register_info = &gpe_block->register_info[i];
  
+                       /*
+                        * Optimization: If there are no GPEs enabled within this
+                        * register, we can safely ignore the entire register.
+                        */
+                       if (!(gpe_register_info->enable_for_run |
+                             gpe_register_info->enable_for_wake)) {
+                               continue;
+                       }
                        /* Read the Status Register */
  
                        status =
@@@ -457,7 -466,6 +466,7 @@@ static void ACPI_SYSTEM_XFACE acpi_ev_a
        acpi_status status;
        struct acpi_gpe_event_info *local_gpe_event_info;
        struct acpi_evaluate_info *info;
 +      struct acpi_gpe_notify_object *notify_object;
  
        ACPI_FUNCTION_TRACE(ev_asynch_execute_gpe_method);
  
                 * from this thread -- because handlers may in turn run other
                 * control methods.
                 */
 -              status =
 -                  acpi_ev_queue_notify_request(local_gpe_event_info->dispatch.
 -                                               device_node,
 -                                               ACPI_NOTIFY_DEVICE_WAKE);
 +              status = acpi_ev_queue_notify_request(
 +                              local_gpe_event_info->dispatch.device.node,
 +                              ACPI_NOTIFY_DEVICE_WAKE);
 +
 +              notify_object = local_gpe_event_info->dispatch.device.next;
 +              while (ACPI_SUCCESS(status) && notify_object) {
 +                      status = acpi_ev_queue_notify_request(
 +                                      notify_object->node,
 +                                      ACPI_NOTIFY_DEVICE_WAKE);
 +                      notify_object = notify_object->next;
 +              }
 +
                break;
  
        case ACPI_GPE_DISPATCH_METHOD: