Re: [PATCH] ACPI / ACPICA: Collect event statistics in respective event structures

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday, January 27, 2011, Moore, Robert wrote:
> Rafael,

Hi,

> Yes, as we discussed, ACPICA will be implementing the global counters.
> 
> We have a prototype here; we will look at your prototype and hopefully integrate the best of both.

Great, thanks!

> Lin Ming went off and got married and is now on honeymoon

Wow, great!

> -- so I'm handling the emergency stuff and other things. I am trying to get
> to this soon, as well as the global lock changes.

There's no hurry on my side.  I'm going to post a patch fixing the "root
object with _PRW" issue I've told you about recently, but apart from this I
don't know of any urgent issues related to ACPICA.

Thanks,
Rafael


> >-----Original Message-----
> >From: Rafael J. Wysocki [mailto:rjw@xxxxxxx]
> >Sent: Wednesday, January 26, 2011 3:58 PM
> >To: ACPI Devel Maling List
> >Cc: Len Brown; Moore, Robert; Lin, Ming M
> >Subject: [PATCH] ACPI / ACPICA: Collect event statistics in respective
> >event structures
> >
> >From: Rafael J. Wysocki <rjw@xxxxxxx>
> >
> >Fixed event and GPE statistics are collected with the help of the
> >newly introduced global events handler, which is suboptimal, because
> >the statistics should rather be collected by ACPICA and stored in
> >the objects that represent those GPEs and fixed events.  That will
> >allow every host OS using ACPICA to access the statistics without
> >major modifications.  Moreover, the interfaces used by host OSes to
> >get event status information can be extended in a straightforward way
> >to also return the event statistics provided that those statistics
> >are collected at the ACPICA level.
> >
> >Extend struct acpi_gpe_event_info and struct acpi_fixed_event_info
> >so that event statistics can be stored in these structures.  Modify
> >acpi_ev_gpe_dispatch() and acpi_ev_fixed_event_dispatch() so that
> >they increment GPE and fixed event counters, respectively.  Add
> >functions allowing the host OS to modify the GPE and event counters
> >and functions.  Add total GPE event counter and functions for
> >manipulating it.
> >
> >Modify acpi_get_event_status() and acpi_get_gpe_status() to return
> >current values of the appropriate event counters, if necessary, in
> >addition to the "usual" event status information.
> >
> >Rework the kernel's code reporting GPE and fixed event statistics
> >through sysfs to take the above changes into account.
> >
> >Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx>
> >---
> >
> >Hi,
> >
> >I posted a previous version of this patch before the 2.6.38 merge window,
> >but it didn't get much attention except for comments from Lin Ming.
> >
> >I'm still thinking that we shouldn't use the global event handler
> >introduced
> >during the .38 merge window for collecting event statistics.  I'm fine with
> >using it for other purposes (although quite frankly I don't see what other
> >purposes in particular it may be useful for at the moment), but in my
> >opinion
> >the GPE and fixed events statistics should be collected by ACPICA and
> >exported
> >to the host OSes through a uniform and clean interface.
> >
> >The $subject patch attempts to add the collecting of event and GPE
> >statistics
> >to ACPICA and reworks the Linux kernel code depending on the global handler
> >to
> >use the new interface.
> >
> >This particular version of the patch hasn't been really tested yet,
> >although I
> >made sure that the code would compile.  Still, the modifications since the
> >previous version were pretty minor and mostly related to removing the newly
> >introduced hooks for the global handler, so I expect the patch to work.
> >
> >Please review and let me know what you think.
> >
> >Thanks,
> >Rafael
> >
> >---
> > drivers/acpi/acpica/acglobal.h |    3 -
> > drivers/acpi/acpica/aclocal.h  |    7 ++
> > drivers/acpi/acpica/evevent.c  |    3 -
> > drivers/acpi/acpica/evgpe.c    |   38 ++++++++++++
> > drivers/acpi/acpica/evxfevnt.c |   33 ++++++++++-
> > drivers/acpi/acpica/evxfgpe.c  |   44 ++++++++++++++-
> > drivers/acpi/scan.c            |    2
> > drivers/acpi/sysfs.c           |  120 +++++++++++++-----------------------
> >-----
> > include/acpi/acpiosxf.h        |    3 -
> > include/acpi/acpixf.h          |   14 ++++
> > 10 files changed, 174 insertions(+), 93 deletions(-)
> >
> >Index: linux-2.6/drivers/acpi/acpica/aclocal.h
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/aclocal.h
> >+++ linux-2.6/drivers/acpi/acpica/aclocal.h
> >@@ -406,6 +406,11 @@ struct acpi_predefined_data {
> >  *
> >
> >***************************************************************************
> >*/
> >
> >+/* Event statistics. */
> >+struct acpi_event_stats {
> >+      u32 count;
> >+};
> >+
> > /* Dispatch info for each GPE -- either a method or handler, cannot be
> >both */
> >
> > struct acpi_gpe_handler_info {
> >@@ -432,6 +437,7 @@ struct acpi_gpe_event_info {
> >       u8 flags;               /* Misc info about this GPE */
> >       u8 gpe_number;          /* This GPE */
> >       u8 runtime_count;       /* References to a run GPE */
> >+      struct acpi_event_stats stats;  /* GPE event statistics */
> > };
> >
> > /* Information about a GPE register pair, one per each status/enable pair
> >in an array */
> >@@ -501,6 +507,7 @@ struct acpi_fixed_event_info {
> >       u8 enable_register_id;
> >       u16 status_bit_mask;
> >       u16 enable_bit_mask;
> >+      struct acpi_event_stats stats;  /* Fixed event statistics */
> > };
> >
> > /* Information used during field processing */
> >Index: linux-2.6/drivers/acpi/acpica/evgpe.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/evgpe.c
> >+++ linux-2.6/drivers/acpi/acpica/evgpe.c
> >@@ -640,6 +640,7 @@ acpi_status acpi_ev_finish_gpe(struct ac
> >  *              This function executes at interrupt level.
> >  *
> >
> >***************************************************************************
> >***/
> >+static struct acpi_event_stats acpi_ev_gpe_stats;
> >
> > u32
> > acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
> >@@ -650,9 +651,11 @@ acpi_ev_gpe_dispatch(struct acpi_namespa
> >
> >       ACPI_FUNCTION_TRACE(ev_gpe_dispatch);
> >
> >+      gpe_event_info->stats.count++;
> >+      acpi_ev_gpe_stats.count++;
> >+
> >       /* Invoke global event handler if present */
> >
> >-      acpi_gpe_count++;
> >       if (acpi_gbl_global_event_handler) {
> >               acpi_gbl_global_event_handler(ACPI_EVENT_TYPE_GPE, gpe_device,
> >                                             gpe_number,
> >@@ -748,3 +751,36 @@ acpi_ev_gpe_dispatch(struct acpi_namespa
> >
> >       return_UINT32(ACPI_INTERRUPT_HANDLED);
> > }
> >+
> >+
> >+/*************************************************************************
> >******
> >+ *
> >+ * FUNCTION:    acpi_total_gpe_stats_count
> >+ *
> >+ * PARAMETERS:  None
> >+ *
> >+ * RETURN:      Current value of the total GPE events counter.
> >+ *
> >+ * DESCRIPTION: Return the counted number of GPE events.
> >+ *
> >+
> >***************************************************************************
> >***/
> >+u32 acpi_total_gpe_stats_count(void)
> >+{
> >+      return acpi_ev_gpe_stats.count;
> >+}
> >+
> >+/*************************************************************************
> >******
> >+ *
> >+ * FUNCTION:    acpi_total_gpe_stats_count
> >+ *
> >+ * PARAMETERS:  gpe_device      - New value of the total GPE events
> >counter.
> >+ *
> >+ * RETURN:      None
> >+ *
> >+ * DESCRIPTION: Set the total GPE events counter to the given value.
> >+ *
> >+
> >***************************************************************************
> >***/
> >+void acpi_set_total_gpe_stats_count(u32 count)
> >+{
> >+      acpi_ev_gpe_stats.count = count;
> >+}
> >Index: linux-2.6/include/acpi/acpixf.h
> >===================================================================
> >--- linux-2.6.orig/include/acpi/acpixf.h
> >+++ linux-2.6/include/acpi/acpixf.h
> >@@ -287,7 +287,10 @@ acpi_status acpi_disable_event(u32 event
> >
> > acpi_status acpi_clear_event(u32 event);
> >
> >-acpi_status acpi_get_event_status(u32 event, acpi_event_status *
> >event_status);
> >+acpi_status acpi_get_event_status(u32 event,
> >+                                acpi_event_status *event_status, u32 *count);
> >+
> >+acpi_status acpi_set_event_stats_count(u32 event, u32 count);
> >
> > /*
> >  * GPE Interfaces
> >@@ -306,7 +309,10 @@ acpi_status acpi_set_gpe_wake_mask(acpi_
> >
> > acpi_status
> > acpi_get_gpe_status(acpi_handle gpe_device,
> >-                  u32 gpe_number, acpi_event_status *event_status);
> >+                  u32 gpe_number, acpi_event_status *event_status, u32
> >*count);
> >+
> >+acpi_status acpi_set_gpe_stats_count(acpi_handle gpe_device, u32
> >gpe_number,
> >+                                   u32 count);
> >
> > acpi_status acpi_disable_all_gpes(void);
> >
> >@@ -323,6 +329,10 @@ acpi_status acpi_remove_gpe_block(acpi_h
> >
> > acpi_status acpi_update_all_gpes(void);
> >
> >+u32 acpi_total_gpe_stats_count(void);
> >+
> >+void acpi_set_total_gpe_stats_count(u32 count);
> >+
> > /*
> >  * Resource interfaces
> >  */
> >Index: linux-2.6/drivers/acpi/sysfs.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/sysfs.c
> >+++ linux-2.6/drivers/acpi/sysfs.c
> >@@ -406,11 +406,9 @@ struct event_counter {
> >       u32 flags;
> > };
> >
> >-static struct event_counter *all_counters;
> > static u32 num_gpes;
> > static u32 num_counters;
> > static struct attribute **all_attrs;
> >-static u32 acpi_gpe_count;
> >
> > static struct attribute_group interrupt_stats_attr_group = {
> >       .name = "interrupts",
> >@@ -420,11 +418,6 @@ static struct kobj_attribute *counter_at
> >
> > static void delete_gpe_attr_array(void)
> > {
> >-      struct event_counter *tmp = all_counters;
> >-
> >-      all_counters = NULL;
> >-      kfree(tmp);
> >-
> >       if (counter_attrs) {
> >               int i;
> >
> >@@ -438,47 +431,7 @@ static void delete_gpe_attr_array(void)
> >       return;
> > }
> >
> >-static void gpe_count(u32 gpe_number)
> >-{
> >-      acpi_gpe_count++;
> >-
> >-      if (!all_counters)
> >-              return;
> >-
> >-      if (gpe_number < num_gpes)
> >-              all_counters[gpe_number].count++;
> >-      else
> >-              all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS +
> >-                           COUNT_ERROR].count++;
> >-
> >-      return;
> >-}
> >-
> >-static void fixed_event_count(u32 event_number)
> >-{
> >-      if (!all_counters)
> >-              return;
> >-
> >-      if (event_number < ACPI_NUM_FIXED_EVENTS)
> >-              all_counters[num_gpes + event_number].count++;
> >-      else
> >-              all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS +
> >-                           COUNT_ERROR].count++;
> >-
> >-      return;
> >-}
> >-
> >-static void acpi_gbl_event_handler(u32 event_type, acpi_handle device,
> >-      u32 event_number, void *context)
> >-{
> >-      if (event_type == ACPI_EVENT_TYPE_GPE)
> >-              gpe_count(event_number);
> >-
> >-      if (event_type == ACPI_EVENT_TYPE_FIXED)
> >-              fixed_event_count(event_number);
> >-}
> >-
> >-static int get_status(u32 index, acpi_event_status *status,
> >+static int get_status(u32 index, acpi_event_status *status, u32 *count,
> >                     acpi_handle *handle)
> > {
> >       int result = 0;
> >@@ -493,9 +446,9 @@ static int get_status(u32 index, acpi_ev
> >                                       "Invalid GPE 0x%x\n", index));
> >                       goto end;
> >               }
> >-              result = acpi_get_gpe_status(*handle, index, status);
> >+              result = acpi_get_gpe_status(*handle, index, status, count);
> >       } else if (index < (num_gpes + ACPI_NUM_FIXED_EVENTS))
> >-              result = acpi_get_event_status(index - num_gpes, status);
> >+              result = acpi_get_event_status(index - num_gpes, status,
> >count);
> >
> > end:
> >       return result;
> >@@ -505,27 +458,38 @@ static ssize_t counter_show(struct kobje
> >                           struct kobj_attribute *attr, char *buf)
> > {
> >       int index = attr - counter_attrs;
> >-      int size;
> >+      int size = 0;
> >       acpi_handle handle;
> >       acpi_event_status status;
> >+      u32 count;
> >       int result = 0;
> >
> >-      all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI].count =
> >-          acpi_irq_handled;
> >-      all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT].count
> >=
> >-          acpi_irq_not_handled;
> >-      all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count =
> >-          acpi_gpe_count;
> >-      size = sprintf(buf, "%8d", all_counters[index].count);
> >-
> >       /* "gpe_all" or "sci" */
> >-      if (index >= num_gpes + ACPI_NUM_FIXED_EVENTS)
> >+      if (index >= num_gpes + ACPI_NUM_FIXED_EVENTS) {
> >+              index -= num_gpes + ACPI_NUM_FIXED_EVENTS;
> >+              switch (index) {
> >+              case COUNT_GPE:
> >+                      count = acpi_total_gpe_stats_count();
> >+                      break;
> >+              case COUNT_SCI:
> >+                      count = acpi_irq_handled;
> >+                      break;
> >+              case COUNT_SCI_NOT:
> >+                      count = acpi_irq_not_handled;
> >+                      break;
> >+              default:
> >+                      goto end;
> >+              }
> >+              size = sprintf(buf, "%8d", count);
> >               goto end;
> >+      }
> >
> >-      result = get_status(index, &status, &handle);
> >+      result = get_status(index, &status, &count, &handle);
> >       if (result)
> >               goto end;
> >
> >+      size = sprintf(buf, "%8d", count);
> >+
> >       if (!(status & ACPI_EVENT_FLAG_HANDLE))
> >               size += sprintf(buf + size, "   invalid");
> >       else if (status & ACPI_EVENT_FLAG_ENABLED)
> >@@ -551,21 +515,26 @@ static ssize_t counter_set(struct kobjec
> > {
> >       int index = attr - counter_attrs;
> >       acpi_event_status status;
> >+      u32 count;
> >       acpi_handle handle;
> >       int result = 0;
> >
> >       if (index == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI) {
> >               int i;
> >-              for (i = 0; i < num_counters; ++i)
> >-                      all_counters[i].count = 0;
> >-              acpi_gpe_count = 0;
> >+              for (i = 0; i < num_gpes; ++i) {
> >+                      if (!acpi_get_gpe_device(index, &handle))
> >+                              acpi_set_gpe_stats_count(handle, index, 0);
> >+              }
> >+              for (i = num_gpes; i < num_gpes + ACPI_NUM_FIXED_EVENTS; ++i)
> >+                      acpi_set_event_stats_count(index, 0);
> >+              acpi_set_total_gpe_stats_count(0);
> >               acpi_irq_handled = 0;
> >               acpi_irq_not_handled = 0;
> >               goto end;
> >       }
> >
> >       /* show the event status for both GPEs and Fixed Events */
> >-      result = get_status(index, &status, &handle);
> >+      result = get_status(index, &status, &count, &handle);
> >       if (result)
> >               goto end;
> >
> >@@ -586,7 +555,8 @@ static ssize_t counter_set(struct kobjec
> >                        (status & ACPI_EVENT_FLAG_SET))
> >                       result = acpi_clear_gpe(handle, index);
> >               else
> >-                      all_counters[index].count = strtoul(buf, NULL, 0);
> >+                      acpi_set_gpe_stats_count(handle, index,
> >+                                               strtoul(buf, NULL, 0));
> >       } else if (index < num_gpes + ACPI_NUM_FIXED_EVENTS) {
> >               int event = index - num_gpes;
> >               if (!strcmp(buf, "disable\n") &&
> >@@ -599,9 +569,9 @@ static ssize_t counter_set(struct kobjec
> >                        (status & ACPI_EVENT_FLAG_SET))
> >                       result = acpi_clear_event(event);
> >               else
> >-                      all_counters[index].count = strtoul(buf, NULL, 0);
> >-      } else
> >-              all_counters[index].count = strtoul(buf, NULL, 0);
> >+                      acpi_set_event_stats_count(index,
> >+                                                 strtoul(buf, NULL, 0));
> >+      }
> >
> >       if (ACPI_FAILURE(result))
> >               result = -EINVAL;
> >@@ -611,10 +581,9 @@ end:
> >
> > void acpi_irq_stats_init(void)
> > {
> >-      acpi_status status;
> >       int i;
> >
> >-      if (all_counters)
> >+      if (all_attrs)
> >               return;
> >
> >       num_gpes = acpi_current_gpe_count;
> >@@ -625,15 +594,6 @@ void acpi_irq_stats_init(void)
> >       if (all_attrs == NULL)
> >               return;
> >
> >-      all_counters = kzalloc(sizeof(struct event_counter) * (num_counters),
> >-                             GFP_KERNEL);
> >-      if (all_counters == NULL)
> >-              goto fail;
> >-
> >-      status = acpi_install_global_event_handler(acpi_gbl_event_handler,
> >NULL);
> >-      if (ACPI_FAILURE(status))
> >-              goto fail;
> >-
> >       counter_attrs = kzalloc(sizeof(struct kobj_attribute) *
> >(num_counters),
> >                               GFP_KERNEL);
> >       if (counter_attrs == NULL)
> >Index: linux-2.6/drivers/acpi/acpica/evxfevnt.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/evxfevnt.c
> >+++ linux-2.6/drivers/acpi/acpica/evxfevnt.c
> >@@ -302,13 +302,15 @@ ACPI_EXPORT_SYMBOL(acpi_clear_event)
> >  * PARAMETERS:  Event           - The fixed event
> >  *              event_status    - Where the current status of the event
> >will
> >  *                                be returned
> >+ *              count           - Where to store the current event counter
> >value
> >  *
> >  * RETURN:      Status
> >  *
> >  * DESCRIPTION: Obtains and returns the current status of the event
> >  *
> >
> >***************************************************************************
> >***/
> >-acpi_status acpi_get_event_status(u32 event, acpi_event_status *
> >event_status)
> >+acpi_status acpi_get_event_status(u32 event,
> >+                                acpi_event_status *event_status, u32 *count)
> > {
> >       acpi_status status = AE_OK;
> >       u32 value;
> >@@ -347,7 +349,36 @@ acpi_status acpi_get_event_status(u32 ev
> >       if (acpi_gbl_fixed_event_handlers[event].handler)
> >               *event_status |= ACPI_EVENT_FLAG_HANDLE;
> >
> >+      if (count)
> >+              *count = acpi_gbl_fixed_event_info[event].stats.count;
> >+
> >       return_ACPI_STATUS(status);
> > }
> >
> > ACPI_EXPORT_SYMBOL(acpi_get_event_status)
> >+
> >+/*************************************************************************
> >******
> >+ *
> >+ * FUNCTION:    acpi_set_event_stats_count
> >+ *
> >+ * PARAMETERS:  Event           - The fixed event
> >+ *              count           - New value of the event counter
> >+ *
> >+ * RETURN:      Status
> >+ *
> >+ * DESCRIPTION: Set the event counter of the given fixed event to a new
> >value.
> >+ *
> >+
> >***************************************************************************
> >***/
> >+acpi_status acpi_set_event_stats_count(u32 event, u32 count)
> >+{
> >+      ACPI_FUNCTION_TRACE(acpi_set_event_stats_count);
> >+
> >+      if (event > ACPI_EVENT_MAX) {
> >+              return_ACPI_STATUS(AE_BAD_PARAMETER);
> >+      }
> >+
> >+      acpi_gbl_fixed_event_info[event].stats.count = count;
> >+
> >+      return_ACPI_STATUS(AE_OK);
> >+}
> >+ACPI_EXPORT_SYMBOL(acpi_set_event_stats_count)
> >Index: linux-2.6/drivers/acpi/acpica/evxfgpe.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/evxfgpe.c
> >+++ linux-2.6/drivers/acpi/acpica/evxfgpe.c
> >@@ -375,6 +375,7 @@ ACPI_EXPORT_SYMBOL(acpi_clear_gpe)
> >  *              gpe_number      - GPE level within the GPE block
> >  *              event_status    - Where the current status of the event
> >will
> >  *                                be returned
> >+ *              count           - Where to store the current event counter
> >value
> >  *
> >  * RETURN:      Status
> >  *
> >@@ -383,7 +384,7 @@ ACPI_EXPORT_SYMBOL(acpi_clear_gpe)
> >
> >***************************************************************************
> >***/
> > acpi_status
> > acpi_get_gpe_status(acpi_handle gpe_device,
> >-                  u32 gpe_number, acpi_event_status *event_status)
> >+                  u32 gpe_number, acpi_event_status *event_status, u32
> >*count)
> > {
> >       acpi_status status = AE_OK;
> >       struct acpi_gpe_event_info *gpe_event_info;
> >@@ -408,6 +409,9 @@ acpi_get_gpe_status(acpi_handle gpe_devi
> >       if (gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK)
> >               *event_status |= ACPI_EVENT_FLAG_HANDLE;
> >
> >+      if (count)
> >+              *count = gpe_event_info->stats.count;
> >+
> >       unlock_and_exit:
> >       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
> >       return_ACPI_STATUS(status);
> >@@ -415,6 +419,44 @@ acpi_get_gpe_status(acpi_handle gpe_devi
> >
> > ACPI_EXPORT_SYMBOL(acpi_get_gpe_status)
> >
> >+/*************************************************************************
> >******
> >+ *
> >+ * FUNCTION:    acpi_set_gpe_stats_count
> >+ *
> >+ * PARAMETERS:  gpe_device      - Parent GPE Device. NULL for GPE0/GPE1
> >+ *              gpe_number      - GPE level within the GPE block
> >+ *              count           - New value of the event counter
> >+ *
> >+ * RETURN:      Status
> >+ *
> >+ * DESCRIPTION: Set the event counter of the given GPE to a new value.
> >+ *
> >+
> >***************************************************************************
> >***/
> >+acpi_status acpi_set_gpe_stats_count(acpi_handle gpe_device, u32
> >gpe_number,
> >+                                     u32 count)
> >+{
> >+      struct acpi_gpe_event_info *gpe_event_info;
> >+      acpi_cpu_flags flags;
> >+      acpi_status status = AE_OK;
> >+
> >+      ACPI_FUNCTION_TRACE(acpi_set_gpe_stats_count);
> >+
> >+      flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
> >+
> >+      /* Ensure that we have a valid GPE number */
> >+
> >+      gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
> >+      if (gpe_event_info) {
> >+              gpe_event_info->stats.count = count;
> >+      } else {
> >+              status = AE_BAD_PARAMETER;
> >+      }
> >+
> >+      acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
> >+      return_ACPI_STATUS(status);
> >+}
> >+ACPI_EXPORT_SYMBOL(acpi_set_gpe_stats_count)
> >+
> >
> >/**************************************************************************
> >****
> >  *
> >  * FUNCTION:    acpi_disable_all_gpes
> >Index: linux-2.6/drivers/acpi/scan.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/scan.c
> >+++ linux-2.6/drivers/acpi/scan.c
> >@@ -809,7 +809,7 @@ static void acpi_bus_set_run_wake_flags(
> >
> >       status = acpi_get_gpe_status(device->wakeup.gpe_device,
> >                                       device->wakeup.gpe_number,
> >-                                              &event_status);
> >+                                              &event_status, NULL);
> >       if (status == AE_OK)
> >               device->wakeup.flags.run_wake =
> >                               !!(event_status & ACPI_EVENT_FLAG_HANDLE);
> >Index: linux-2.6/drivers/acpi/acpica/evevent.c
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/evevent.c
> >+++ linux-2.6/drivers/acpi/acpica/evevent.c
> >@@ -221,7 +221,6 @@ u32 acpi_ev_fixed_event_detect(void)
> >                        * Found an active (signalled) event. Invoke global event
> >                        * handler if present.
> >                        */
> >-                      acpi_fixed_event_count[i]++;
> >                       if (acpi_gbl_global_event_handler) {
> >                               acpi_gbl_global_event_handler
> >                                   (ACPI_EVENT_TYPE_FIXED, NULL, i,
> >@@ -253,6 +252,8 @@ static u32 acpi_ev_fixed_event_dispatch(
> >
> >       ACPI_FUNCTION_ENTRY();
> >
> >+      acpi_gbl_fixed_event_info[event].stats.count++;
> >+
> >       /* Clear the status bit */
> >
> >       (void)acpi_write_bit_register(acpi_gbl_fixed_event_info[event].
> >Index: linux-2.6/include/acpi/acpiosxf.h
> >===================================================================
> >--- linux-2.6.orig/include/acpi/acpiosxf.h
> >+++ linux-2.6/include/acpi/acpiosxf.h
> >@@ -177,9 +177,6 @@ acpi_os_install_interrupt_handler(u32 gs
> > acpi_status
> > acpi_os_remove_interrupt_handler(u32 gsi, acpi_osd_handler
> >service_routine);
> >
> >-void acpi_os_gpe_count(u32 gpe_number);
> >-void acpi_os_fixed_event_count(u32 fixed_event_number);
> >-
> > /*
> >  * Threads and Scheduling
> >  */
> >Index: linux-2.6/drivers/acpi/acpica/acglobal.h
> >===================================================================
> >--- linux-2.6.orig/drivers/acpi/acpica/acglobal.h
> >+++ linux-2.6/drivers/acpi/acpica/acglobal.h
> >@@ -146,9 +146,6 @@ u8 acpi_gbl_system_awake_and_running;
> >
> > extern u32 acpi_gbl_nesting_level;
> >
> >-ACPI_EXTERN u32 acpi_gpe_count;
> >-ACPI_EXTERN u32 acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS];
> >-
> > /* Support for dynamic control method tracing mechanism */
> >
> > ACPI_EXTERN u32 acpi_gbl_original_dbg_level;
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux