Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jun 2012 16:07:59 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r237650 - vendor-sys/acpica/dist/source/components/events
Message-ID:  <201206271607.q5RG7xlN019519@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Wed Jun 27 16:07:58 2012
New Revision: 237650
URL: http://svn.freebsd.org/changeset/base/237650

Log:
  Do not malloc(9) while holding a spin lock, to avoid panic.  Note it was
  submitted upstream and it should be fixed in the next ACPICA release.
  
  Discussed with:	Moore, Robert (robert dot moore at intel dot com)

Modified:
  vendor-sys/acpica/dist/source/components/events/evxfgpe.c

Modified: vendor-sys/acpica/dist/source/components/events/evxfgpe.c
==============================================================================
--- vendor-sys/acpica/dist/source/components/events/evxfgpe.c	Wed Jun 27 16:07:01 2012	(r237649)
+++ vendor-sys/acpica/dist/source/components/events/evxfgpe.c	Wed Jun 27 16:07:58 2012	(r237650)
@@ -298,7 +298,7 @@ AcpiSetupGpeForWake (
     ACPI_STATUS             Status;
     ACPI_GPE_EVENT_INFO     *GpeEventInfo;
     ACPI_NAMESPACE_NODE     *DeviceNode;
-    ACPI_GPE_NOTIFY_INFO    *Notify;
+    ACPI_GPE_NOTIFY_INFO    *NewNotify, *Notify;
     ACPI_CPU_FLAGS          Flags;
 
 
@@ -334,6 +334,12 @@ AcpiSetupGpeForWake (
         return_ACPI_STATUS (AE_BAD_PARAMETER);
     }
 
+    NewNotify = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_NOTIFY_INFO));
+    if (!NewNotify)
+    {
+        return_ACPI_STATUS (AE_NO_MEMORY);
+    }
+
     Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
 
     /* Ensure that we have a valid GPE number */
@@ -384,16 +390,10 @@ AcpiSetupGpeForWake (
 
         /* Add this device to the notify list for this GPE */
 
-        Notify = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_NOTIFY_INFO));
-        if (!Notify)
-        {
-            Status = AE_NO_MEMORY;
-            goto UnlockAndExit;
-        }
-
-        Notify->DeviceNode = DeviceNode;
-        Notify->Next = GpeEventInfo->Dispatch.NotifyList;
-        GpeEventInfo->Dispatch.NotifyList = Notify;
+        NewNotify->DeviceNode = DeviceNode;
+        NewNotify->Next = GpeEventInfo->Dispatch.NotifyList;
+        GpeEventInfo->Dispatch.NotifyList = NewNotify;
+        NewNotify = NULL;
     }
 
     /* Mark the GPE as a possible wake event */
@@ -403,6 +403,10 @@ AcpiSetupGpeForWake (
 
 UnlockAndExit:
     AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
+    if (NewNotify)
+    {
+        ACPI_FREE (NewNotify);
+    }
     return_ACPI_STATUS (Status);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206271607.q5RG7xlN019519>