ACPICA: Fix leak in DeleteSemaphore
Subsystems (2)
Alexey Starikovskiy
PATCH 1/4 ACPICA: Fix leak in DeleteSemaphore
Really delete semaphore, so it does not show up as leak in memory debuggers.
Signed-off-by Alexey Starikovskiy <astarikovskiy(a)suse.de>
---
0 files changed, 0 insertions(+), 0 deletions(-)
source/os_specific/service_layers/osunixxf.c +2 -0
@@ -575,6 +575,8 @@ AcpiOsDeleteSemaphore (return (AE_BAD_PARAMETER ); } +AcpiOsFree (Sem); +return (AE_OK ); }
Alexey Starikovskiy
PATCH 2/4 ACPICA: Disable use of caches
Disable cache functionality without touching callers in order to have cache removal controlled.
Signed-off-by Alexey Starikovskiy <astarikovskiy(a)suse.de>
---
0 files changed, 0 insertions(+), 0 deletions(-)
source/components/utilities/utcache.c +14 -85
@@ -287,49 +287,15 @@ AcpiOsReleaseObject ( ACPI_MEMORY_LIST *Cache, void *Object) { -ACPI_STATUS Status; - -ACPI_FUNCTION_ENTRY (); -if (!Cache || !Object) {return (AE_BAD_PARAMETER ); } -/* If cache is full, just free this object */ - -if (Cache->CurrentDepth >= Cache->MaxDepth) - { -ACPI_FREE (Object); -ACPI_MEM_TRACKING (Cache->TotalFreed++); - } - -/* Otherwise put this object back into the cache */ - -else - { - Status =AcpiUtAcquireMutex (ACPI_MTX_CACHES ); -if (ACPI_FAILURE (Status)) - { -return (Status); - } - -/* Mark the object as cached */ - -ACPI_MEMSET (Object,0xCA , Cache->ObjectSize); -ACPI_SET_DESCRIPTOR_TYPE (Object,ACPI_DESC_TYPE_CACHED ); - -/* Put the object at the head of the cache list */ - - * (ACPI_CAST_INDIRECT_PTR (char, - &(((char *) Object)[Cache->LinkOffset]))) = Cache->ListHead; - Cache->ListHead = Object; - Cache->CurrentDepth++; - - (void )AcpiUtReleaseMutex (ACPI_MTX_CACHES ); - } +ACPI_FREE (Object); +ACPI_MEM_TRACKING (Cache->TotalFreed++);return (AE_OK ); }
@@ -353,8 +319,6 @@ AcpiOsAcquireObject ( ACPI_MEMORY_LIST *Cache) {ACPI_STATUS Status; -void *Object; -ACPI_FUNCTION_NAME (OsAcquireObject);
@@ -372,61 +336,26 @@ AcpiOsAcquireObject (ACPI_MEM_TRACKING (Cache->Requests++); -/* Check the cache first */ +/* The cache is empty, create a new object */ -if (Cache->ListHead) - { -/* There is an object available, use it */ - - Object = Cache->ListHead; - Cache->ListHead = *(ACPI_CAST_INDIRECT_PTR (char, - &(((char *) Object)[Cache->LinkOffset]))); - - Cache->CurrentDepth--; - -ACPI_MEM_TRACKING (Cache->Hits++); -ACPI_DEBUG_PRINT ((ACPI_DB_EXEC , -"Object %p from %s cache\n" , Object, Cache->ListName)); - - Status =AcpiUtReleaseMutex (ACPI_MTX_CACHES ); -if (ACPI_FAILURE (Status)) - { -return (NULL ); - } - -/* Clear (zero) the previously used Object */ - -ACPI_MEMSET (Object,0 , Cache->ObjectSize); - } -else - { -/* The cache is empty, create a new object */ - -ACPI_MEM_TRACKING (Cache->TotalAllocated++); +ACPI_MEM_TRACKING (Cache->TotalAllocated++);#ifdef ACPI_DBG_TRACK_ALLOCATIONS -if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache->MaxOccupied) - { - Cache->MaxOccupied = Cache->TotalAllocated - Cache->TotalFreed; - } +if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache->MaxOccupied) + { + Cache->MaxOccupied = Cache->TotalAllocated - Cache->TotalFreed; + }#endif -/* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ +/* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ - Status =AcpiUtReleaseMutex (ACPI_MTX_CACHES ); -if (ACPI_FAILURE (Status)) - { -return (NULL ); - } - - Object =ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); -if (!Object) - { -return (NULL ); - } + Status =AcpiUtReleaseMutex (ACPI_MTX_CACHES ); +if (ACPI_FAILURE (Status)) + { +return (NULL ); } - return (Object); + return ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); }#endif /* ACPI_USE_LOCAL_CACHE */
Alexey Starikovskiy
PATCH 3/4 ACPICA: Remove calls to cache code
In reply to Alexey StarikovskiyRemove the object cache code.
Signed-off-by Alexey Starikovskiy <astarikovskiy(a)suse.de>
---
0 files changed, 0 insertions(+), 0 deletions(-)
source/components/debugger/dbexec.c +0 -73
@@ -138,10 +138,6 @@ static voidAcpiDbExecuteSetup (ACPI_DB_METHOD_INFO *Info); -static UINT32 -AcpiDbGetOutstandingAllocations ( -void ); - static void ACPI_SYSTEM_XFACEAcpiDbMethodThread ( void *Context);
@@ -320,48 +316,6 @@ AcpiDbExecuteSetup ( } -#ifdef ACPI_DBG_TRACK_ALLOCATIONS -UINT32 -AcpiDbGetCacheInfo ( -ACPI_MEMORY_LIST *Cache) -{ - -return (Cache->TotalAllocated - Cache->TotalFreed - Cache->CurrentDepth); -} -#endif - -/******************************************************************************* -* -* FUNCTION: AcpiDbGetOutstandingAllocations -* -* PARAMETERS: None -* -* RETURN: Current global allocation count minus cache entries -* -* DESCRIPTION: Determine the current number of "outstanding" allocations -- -* those allocations that have not been freed and also are not -* in one of the various object caches. -* -******************************************************************************/ - -static UINT32 -AcpiDbGetOutstandingAllocations ( -void ) -{ -UINT32 Outstanding =0 ; - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - - Outstanding +=AcpiDbGetCacheInfo (AcpiGbl_StateCache); - Outstanding +=AcpiDbGetCacheInfo (AcpiGbl_PsNodeCache); - Outstanding +=AcpiDbGetCacheInfo (AcpiGbl_PsNodeExtCache); - Outstanding +=AcpiDbGetCacheInfo (AcpiGbl_OperandCache); -#endif - -return (Outstanding); -} - -/******************************************************************************* * * FUNCTION: AcpiDbExecutionWalk
@@ -439,17 +393,6 @@ AcpiDbExecute (ACPI_BUFFER ReturnObj;char *NameString; - -#ifdef ACPI_DEBUG_OUTPUT -UINT32 PreviousAllocations; -UINT32 Allocations; - - -/* Memory allocation tracking */ - - PreviousAllocations =AcpiDbGetOutstandingAllocations (); -#endif -if (*Name =='*' ) { (void) AcpiWalkNamespace (ACPI_TYPE_METHOD, ACPI_ROOT_OBJECT,
@@ -486,22 +429,6 @@ AcpiDbExecute (*/ AcpiOsSleep ((UINT64 )10 ); - -#ifdef ACPI_DEBUG_OUTPUT - -/* Memory allocation tracking */ - - Allocations =AcpiDbGetOutstandingAllocations () - PreviousAllocations; - -AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT ); - -if (Allocations >0 ) - { -AcpiOsPrintf ("Outstanding: 0x%X allocations after execution\n" , - Allocations); - } -#endif -if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Execution of %s failed with status %s\n",
source/components/debugger/dbstats.c +0 -38
@@ -189,9 +189,6 @@ static voidAcpiDbListInfo ( ACPI_MEMORY_LIST *List) { -#ifdef ACPI_DBG_TRACK_ALLOCATIONS -UINT32 Outstanding; -#endif AcpiOsPrintf ("\n%s\n" , List->ListName);
@@ -207,41 +204,6 @@ AcpiDbListInfo ( (List->CurrentDepth * List->ObjectSize)); } -#ifdef ACPI_DBG_TRACK_ALLOCATIONS -if (List->MaxDepth >0 ) - { -AcpiOsPrintf ( -" Cache: [Requests Hits Misses ObjSize] %8.2X %8.2X %8.2X %8.2X\n" , - List->Requests, - List->Hits, - List->Requests - List->Hits, - List->ObjectSize); - } - - Outstanding =AcpiDbGetCacheInfo (List); - -if (List->ObjectSize) - { -AcpiOsPrintf ( -" Mem: [Alloc Free Max CurSize Outstanding] %8.2X %8.2X %8.2X %8.2X %8.2X\n" , - List->TotalAllocated, - List->TotalFreed, - List->MaxOccupied, - Outstanding * List->ObjectSize, - Outstanding); - } -else - { -AcpiOsPrintf ( -" Mem: [Alloc Free Max CurSize Outstanding Total] %8.2X %8.2X %8.2X %8.2X %8.2X %8.2X\n" , - List->TotalAllocated, - List->TotalFreed, - List->MaxOccupied, - List->CurrentTotalSize, - Outstanding, - List->TotalSize); - } -#endif }#endif
source/components/namespace/nsalloc.c +4 -3
@@ -150,7 +150,7 @@ AcpiNsCreateNode (ACPI_FUNCTION_TRACE (NsCreateNode); - Node =AcpiOsAcquireObject (AcpiGbl_NamespaceCache); + Node =ACPI_ALLOCATE_ZEROED (sizeof (ACPI_NAMESPACE_NODE ));if (!Node) {return_PTR (NULL );
@@ -223,7 +223,7 @@ AcpiNsDeleteNode (/* Now we can delete the node */ - (void )AcpiOsReleaseObject (AcpiGbl_NamespaceCache, Node); +ACPI_FREE (Node);ACPI_MEM_TRACKING (AcpiGbl_NsNodeList->TotalFreed++); ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Node %p, Remaining %X\n",
@@ -285,7 +285,8 @@ AcpiNsRemoveNode (/* Delete the node and any attached objects */ -AcpiNsDeleteNode (Node); +AcpiNsDetachObject (Node); +ACPI_FREE (Node); return_VOID; }
source/components/parser/psutils.c +4 -4
@@ -232,13 +232,13 @@ AcpiPsAllocOp ( {/* The generic op (default) is by far the most common (16 to 1) */ - Op =AcpiOsAcquireObject (AcpiGbl_PsNodeCache); + Op =ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PARSE_OBJ_COMMON )); } else {/* Extended parseop */ - Op =AcpiOsAcquireObject (AcpiGbl_PsNodeExtCache); + Op =ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PARSE_OBJ_NAMED )); }/* Initialize the Op */
@@ -280,11 +280,11 @@ AcpiPsFreeOp (if (Op->Common.Flags &ACPI_PARSEOP_GENERIC ) { - (void )AcpiOsReleaseObject (AcpiGbl_PsNodeCache, Op); +ACPI_FREE (Op); }else { - (void )AcpiOsReleaseObject (AcpiGbl_PsNodeExtCache, Op); +ACPI_FREE (Op); } }
source/components/utilities/utalloc.c +1 -60
74 lines not on this page · raw message
source/components/utilities/utcache.c deleted +0 -362
362 lines not on this page · raw message
source/components/utilities/utobject.c +2 -2
@@ -506,7 +506,7 @@ AcpiUtAllocateObjectDescDbg (ACPI_FUNCTION_TRACE (UtAllocateObjectDescDbg); - Object =AcpiOsAcquireObject (AcpiGbl_OperandCache); + Object =ACPI_ALLOCATE_ZEROED (sizeof (ACPI_OPERAND_OBJECT ));if (!Object) { ACPI_ERROR ((ModuleName, LineNumber,
@@ -555,7 +555,7 @@ AcpiUtDeleteObjectDesc ( return_VOID; } - (void )AcpiOsReleaseObject (AcpiGbl_OperandCache, Object); +ACPI_FREE (Object); return_VOID; }
source/components/utilities/utstate.c +2 -2
@@ -250,7 +250,7 @@ AcpiUtCreateGenericState (ACPI_FUNCTION_ENTRY (); - State =AcpiOsAcquireObject (AcpiGbl_StateCache); + State =ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GENERIC_STATE ));if (State) {/* Initialize */
@@ -462,7 +462,7 @@ AcpiUtDeleteGenericState (if (State) { - (void )AcpiOsReleaseObject (AcpiGbl_StateCache, State); +ACPI_FREE (State); } return_VOID; }
source/components/utilities/utxface.c +0 -35
@@ -423,13 +423,6 @@ AcpiInitializeObjects ( } } -/* -* Empty the caches (delete the cached objects) on the assumption that -* the table load filled them up more than they will be at runtime -- -* thus wasting non-paged memory. -*/ - Status =AcpiPurgeCachedObjects (); - AcpiGbl_StartupFlags |=ACPI_INITIALIZED_OK ;return_ACPI_STATUS (Status); }
@@ -702,33 +695,5 @@ AcpiInstallInitializationHandler ( ACPI_EXPORT_SYMBOL (AcpiInstallInitializationHandler) - -/***************************************************************************** -* -* FUNCTION: AcpiPurgeCachedObjects -* -* PARAMETERS: None -* -* RETURN: Status -* -* DESCRIPTION: Empty all caches (delete the cached objects) -* -****************************************************************************/ - -ACPI_STATUS -AcpiPurgeCachedObjects ( - void) -{ -ACPI_FUNCTION_TRACE (AcpiPurgeCachedObjects); - - (void )AcpiOsPurgeCache (AcpiGbl_StateCache); - (void )AcpiOsPurgeCache (AcpiGbl_OperandCache); - (void )AcpiOsPurgeCache (AcpiGbl_PsNodeCache); - (void )AcpiOsPurgeCache (AcpiGbl_PsNodeExtCache); -return_ACPI_STATUS (AE_OK ); -} - -ACPI_EXPORT_SYMBOL (AcpiPurgeCachedObjects) -#endif /* ACPI_ASL_COMPILER */
source/include/acconfig.h +0 -8
@@ -144,14 +144,6 @@*/ #define ACPI_OS_NAME "Microsoft Windows NT" -/* Maximum objects in the various object caches */ - -#define ACPI_MAX_STATE_CACHE_DEPTH 96/* State objects */ -#define ACPI_MAX_PARSE_CACHE_DEPTH 96/* Parse tree objects */ -#define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96/* Parse tree objects */ -#define ACPI_MAX_OBJECT_CACHE_DEPTH 96/* Interpreter operand objects */ -#define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96/* Namespace objects */ -/* * Should the subsystem abort the loading of an ACPI table if the * table checksum is incorrect?
source/include/acglobal.h +0 -8
@@ -294,14 +294,6 @@ ACPI_EXTERN ACPI_RW_LOCK AcpiGbl_NamespaceRwLock;* ****************************************************************************/ -/* Object caches */ - -ACPI_EXTERN ACPI_CACHE_T *AcpiGbl_NamespaceCache; -ACPI_EXTERN ACPI_CACHE_T *AcpiGbl_StateCache; -ACPI_EXTERN ACPI_CACHE_T *AcpiGbl_PsNodeCache; -ACPI_EXTERN ACPI_CACHE_T *AcpiGbl_PsNodeExtCache; -ACPI_EXTERN ACPI_CACHE_T *AcpiGbl_OperandCache; -/* Global handlers */ ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER AcpiGbl_DeviceNotify;
source/include/acobject.h +0 -12
@@ -546,17 +546,6 @@ typedef struct acpi_object_data }ACPI_OBJECT_DATA ; - -/* Structure used when objects are cached for reuse */ - -typedef struct acpi_object_cache_list -{ -ACPI_OBJECT_COMMON_HEADER - union acpi_operand_object *Next; /* Link for object cache and internal lists*/ - -}ACPI_OBJECT_CACHE_LIST ; - -/****************************************************************************** * * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
@@ -589,7 +578,6 @@ typedef union acpi_operand_objectACPI_OBJECT_REFERENCE Reference;ACPI_OBJECT_EXTRA Extra;ACPI_OBJECT_DATA Data; -ACPI_OBJECT_CACHE_LIST Cache;/* * Add namespace node to union in order to simplify code that accepts both
source/include/acpiosxf.h +0 -29
@@ -283,35 +283,6 @@ AcpiOsGetPhysicalAddress (void *LogicalAddress, ACPI_PHYSICAL_ADDRESS *PhysicalAddress); - -/* -* Memory/Object Cache -*/ -ACPI_STATUS -AcpiOsCreateCache ( -char *CacheName, -UINT16 ObjectSize, -UINT16 MaxDepth, -ACPI_CACHE_T **ReturnCache); - -ACPI_STATUS -AcpiOsDeleteCache ( -ACPI_CACHE_T *Cache); - -ACPI_STATUS -AcpiOsPurgeCache ( -ACPI_CACHE_T *Cache); - -void * -AcpiOsAcquireObject ( -ACPI_CACHE_T *Cache); - -ACPI_STATUS -AcpiOsReleaseObject ( -ACPI_CACHE_T *Cache, -void *Object); - -/* * Interrupt handlers */
source/include/actypes.h +0 -10
@@ -298,16 +298,6 @@ typedef UINT32 ACPI_PHYSICAL_ADDRESS;#define ACPI_CPU_FLAGS ACPI_SIZE#endif -/* Object returned from AcpiOsCreateCache */ - -#ifndef ACPI_CACHE_T -#ifdef ACPI_USE_LOCAL_CACHE -#define ACPI_CACHE_T ACPI_MEMORY_LIST -#else -#define ACPI_CACHE_T void * -#endif -#endif -/* * Synchronization objects - Mutexes, Semaphores, and SpinLocks */
source/include/platform/acenv.h +0 -7
@@ -159,17 +159,10 @@#define ACPI_DBG_TRACK_ALLOCATIONS #endif -/* Linkable ACPICA library */ - -#ifdef ACPI_LIBRARY -#define ACPI_USE_LOCAL_CACHE -#endif -/* Common for all ACPICA applications */ #ifdef ACPI_APPLICATION #define ACPI_USE_SYSTEM_CLIBRARY -#define ACPI_USE_LOCAL_CACHE #endif /* Common debug support */
source/include/platform/aclinux.h +0 -1
@@ -144,7 +144,6 @@#define ACPI_EXPORT_SYMBOL (symbol) EXPORT_SYMBOL(symbol);#define strtoul simple_strtoul -#define ACPI_CACHE_T struct kmem_cache#define ACPI_SPINLOCK spinlock_t *#define ACPI_CPU_FLAGS unsigned long#define ACPI_THREAD_ID struct task_struct *
source/include/platform/acos2.h +0 -1
@@ -165,7 +165,6 @@ unsigned short OSPMReleaseGlobalLock (void *);#endif #ifndef ACPI_ASL_COMPILER -#define ACPI_USE_LOCAL_CACHE #undef ACPI_DEBUGGER#endif
source/tools/acpisrc/astable.c +0 -2
@@ -253,7 +253,6 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_BIT_REGISTER_INFO", SRC_TYPE_STRUCT}, {"ACPI_BUFFER", SRC_TYPE_STRUCT}, {"ACPI_BUS_ATTRIBUTE", SRC_TYPE_STRUCT}, - {"ACPI_CACHE_T", SRC_TYPE_SIMPLE}, {"ACPI_COMMON_FACS", SRC_TYPE_STRUCT}, {"ACPI_COMMON_STATE", SRC_TYPE_STRUCT}, {"ACPI_COMMON_DESCRIPTOR", SRC_TYPE_STRUCT},
@@ -335,7 +334,6 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_OBJECT_BANK_FIELD", SRC_TYPE_STRUCT}, {"ACPI_OBJECT_BUFFER", SRC_TYPE_STRUCT}, {"ACPI_OBJECT_BUFFER_FIELD", SRC_TYPE_STRUCT}, - {"ACPI_OBJECT_CACHE_LIST", SRC_TYPE_STRUCT}, {"ACPI_OBJECT_COMMON", SRC_TYPE_STRUCT}, {"ACPI_OBJECT_DATA", SRC_TYPE_STRUCT}, {"ACPI_OBJECT_DEVICE", SRC_TYPE_STRUCT},
Alexey Starikovskiy
PATCH 4/4 ACPICA: Remove Extra object
In reply to Alexey StarikovskiyWith the removal of object cache, there is no sense to have all the object of the same size. Move Extra data into corresponding primary objects.
Signed-off-by Alexey Starikovskiy <astarikovskiy(a)suse.de>
---
0 files changed, 0 insertions(+), 0 deletions(-)
source/components/debugger/dbexec.c +0 -1
@@ -315,7 +315,6 @@ AcpiDbExecuteSetup ( } } -/******************************************************************************* * * FUNCTION: AcpiDbExecutionWalk
source/components/debugger/dbstats.c +1 -6
@@ -268,10 +268,7 @@ AcpiDbEnumerateObject (case ACPI_TYPE_BUFFER_FIELD : -if (AcpiNsGetSecondaryObject (ObjDesc)) - { - AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD ]++; - } + AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD ]++;break ;case ACPI_TYPE_REGION :
@@ -493,7 +490,6 @@ AcpiDbDisplayStatistics (#ifdef ACPI_USE_LOCAL_CACHE AcpiOsPrintf ("\n----Cache Statistics (all in hex)---------\n" ); -AcpiDbListInfo (AcpiGbl_OperandCache);AcpiDbListInfo (AcpiGbl_PsNodeCache);AcpiDbListInfo (AcpiGbl_PsNodeExtCache);AcpiDbListInfo (AcpiGbl_StateCache);
@@ -544,7 +540,6 @@ AcpiDbDisplayStatistics (AcpiOsPrintf ("Reference %3d\n" ,sizeof (ACPI_OBJECT_REFERENCE ));AcpiOsPrintf ("Notify %3d\n" ,sizeof (ACPI_OBJECT_NOTIFY_HANDLER ));AcpiOsPrintf ("AddressSpace %3d\n" ,sizeof (ACPI_OBJECT_ADDR_HANDLER )); -AcpiOsPrintf ("Extra %3d\n" ,sizeof (ACPI_OBJECT_EXTRA ));AcpiOsPrintf ("Data %3d\n" ,sizeof (ACPI_OBJECT_DATA ));AcpiOsPrintf ("\n" );
source/components/dispatcher/dsfield.c +2 -4
@@ -164,7 +164,6 @@ AcpiDsCreateBufferField (ACPI_NAMESPACE_NODE *Node;ACPI_STATUS Status;ACPI_OPERAND_OBJECT *ObjDesc; -ACPI_OPERAND_OBJECT *SecondDesc =NULL ;UINT32 Flags;
@@ -269,9 +268,8 @@ AcpiDsCreateBufferField (* Remember location in AML stream of the field unit opcode and operands -- * since the buffer and index operands must be evaluated. */ - SecondDesc = ObjDesc->Common.NextObject; - SecondDesc->Extra.AmlStart = Op->Named.Data; - SecondDesc->Extra.AmlLength = Op->Named.Length; + ObjDesc->BufferField.AmlStart = Op->Named.Data; + ObjDesc->BufferField.AmlLength = Op->Named.Length; ObjDesc->BufferField.Node = Node;/* Attach constructed field descriptors to parent node */
source/components/dispatcher/dsopcode.c +6 -16
@@ -283,7 +283,6 @@ ACPI_STATUSAcpiDsGetBufferFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { -ACPI_OPERAND_OBJECT *ExtraDesc;ACPI_NAMESPACE_NODE *Node;ACPI_STATUS Status;
@@ -298,7 +297,6 @@ AcpiDsGetBufferFieldArguments (/* Get the AML pointer (method object) and BufferField node */ - ExtraDesc =AcpiNsGetSecondaryObject (ObjDesc); Node = ObjDesc->BufferField.Node;ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname (ACPI_TYPE_BUFFER_FIELD , Node,NULL ));
@@ -308,7 +306,7 @@ AcpiDsGetBufferFieldArguments (/* Execute the AML code for the TermArg arguments */ Status =AcpiDsExecuteArguments (Node, Node->Parent, - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); + ObjDesc->BufferField.AmlLength, ObjDesc->BufferField.AmlStart);return_ACPI_STATUS (Status); }
@@ -330,7 +328,6 @@ ACPI_STATUSAcpiDsGetBankFieldArguments ( ACPI_OPERAND_OBJECT *ObjDesc) { -ACPI_OPERAND_OBJECT *ExtraDesc;ACPI_NAMESPACE_NODE *Node;ACPI_STATUS Status;
@@ -345,7 +342,6 @@ AcpiDsGetBankFieldArguments (/* Get the AML pointer (method object) and BankField node */ - ExtraDesc =AcpiNsGetSecondaryObject (ObjDesc); Node = ObjDesc->BankField.Node;ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname (ACPI_TYPE_LOCAL_BANK_FIELD , Node,NULL ));
@@ -355,7 +351,8 @@ AcpiDsGetBankFieldArguments (/* Execute the AML code for the TermArg arguments */ Status =AcpiDsExecuteArguments (Node, Node->Parent, - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); + ObjDesc->BankField.AmlLength, ObjDesc->BankField.AmlStart); +return_ACPI_STATUS (Status); }
@@ -477,8 +474,6 @@ AcpiDsGetRegionArguments ( {ACPI_NAMESPACE_NODE *Node;ACPI_STATUS Status; -ACPI_OPERAND_OBJECT *ExtraDesc; -ACPI_FUNCTION_TRACE_PTR (DsGetRegionArguments, ObjDesc);
@@ -488,12 +483,6 @@ AcpiDsGetRegionArguments (return_ACPI_STATUS (AE_OK ); } - ExtraDesc =AcpiNsGetSecondaryObject (ObjDesc); -if (!ExtraDesc) - { -return_ACPI_STATUS (AE_NOT_EXIST ); - } -/* Get the Region node */ Node = ObjDesc->Region.Node;
@@ -501,12 +490,13 @@ AcpiDsGetRegionArguments (ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname (ACPI_TYPE_REGION , Node,NULL ));ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"[%4.4s] OpRegion Arg Init at AML %p\n" , -AcpiUtGetNodeName (Node), ExtraDesc->Extra.AmlStart)); +AcpiUtGetNodeName (Node), ObjDesc->Region.AmlStart));/* Execute the argument AML */ Status =AcpiDsExecuteArguments (Node, Node->Parent, - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); + ObjDesc->Region.AmlLength, ObjDesc->Region.AmlStart); +return_ACPI_STATUS (Status); }
source/components/events/evregion.c +8 -34
106 lines not on this page · raw message
source/components/events/evrgnini.c +3 -10
@@ -639,8 +639,6 @@ AcpiEvInitializeRegion (ACPI_STATUS Status;ACPI_NAMESPACE_NODE *MethodNode;ACPI_NAME *RegNamePtr = (ACPI_NAME *)METHOD_NAME__REG ; -ACPI_OPERAND_OBJECT *RegionObj2; -ACPI_FUNCTION_TRACE_U32 (EvInitializeRegion, AcpiNsLocked);
@@ -655,19 +653,14 @@ AcpiEvInitializeRegion (return_ACPI_STATUS (AE_OK ); } - RegionObj2 =AcpiNsGetSecondaryObject (RegionObj); -if (!RegionObj2) - { -return_ACPI_STATUS (AE_NOT_EXIST ); - } - Node = RegionObj->Region.Node->Parent; + SpaceId = RegionObj->Region.SpaceId;/* Setup defaults */ RegionObj->Region.Handler =NULL ; - RegionObj2->Extra.Method_REG =NULL ; + RegionObj->Region.Method_REG =NULL ; RegionObj->Common.Flags &= ~(AOPOBJ_SETUP_COMPLETE ); RegionObj->Common.Flags |=AOPOBJ_OBJECT_INITIALIZED ;
@@ -682,7 +675,7 @@ AcpiEvInitializeRegion (* definition. This will be executed when the handler is attached * or removed */ - RegionObj2->Extra.Method_REG = MethodNode; + RegionObj->Region.Method_REG = MethodNode; }/*
source/components/executer/excreate.c +2 -5
@@ -376,8 +376,6 @@ AcpiExCreateRegion (ACPI_STATUS Status;ACPI_OPERAND_OBJECT *ObjDesc;ACPI_NAMESPACE_NODE *Node; -ACPI_OPERAND_OBJECT *RegionObj2; -ACPI_FUNCTION_TRACE (ExCreateRegion);
@@ -422,9 +420,8 @@ AcpiExCreateRegion (* Remember location in AML stream of address & length * operands since they need to be evaluated at run time. */ - RegionObj2 = ObjDesc->Common.NextObject; - RegionObj2->Extra.AmlStart = AmlStart; - RegionObj2->Extra.AmlLength = AmlLength; + ObjDesc->Region.AmlStart = AmlStart; + ObjDesc->Region.AmlLength = AmlLength;/* Init the region from the operands */
source/components/executer/exprep.c +2 -6
@@ -499,7 +499,6 @@ AcpiExPrepFieldValue ( ACPI_CREATE_FIELD_INFO *Info) {ACPI_OPERAND_OBJECT *ObjDesc; -ACPI_OPERAND_OBJECT *SecondDesc =NULL ;ACPI_STATUS Status;UINT32 AccessByteWidth;UINT32 Type;
@@ -609,11 +608,8 @@ AcpiExPrepFieldValue (* opcode and operands -- since the BankValue * operands must be evaluated. */ - SecondDesc = ObjDesc->Common.NextObject; - SecondDesc->Extra.AmlStart =ACPI_CAST_PTR (ACPI_PARSE_OBJECT , - Info->DataRegisterNode)->Named.Data; - SecondDesc->Extra.AmlLength =ACPI_CAST_PTR (ACPI_PARSE_OBJECT , - Info->DataRegisterNode)->Named.Length; + ObjDesc->BankField.AmlStart =ACPI_CAST_PTR (ACPI_PARSE_OBJECT , Info->DataRegisterNode)->Named.Data; + ObjDesc->BankField.AmlLength =ACPI_CAST_PTR (ACPI_PARSE_OBJECT , Info->DataRegisterNode)->Named.Length;break ;
source/components/namespace/nsobject.c +4 -33
@@ -125,6 +125,7 @@#define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nsobject") +#include <stdio.h> /******************************************************************************* *
@@ -383,39 +384,6 @@ AcpiNsGetAttachedObject (return_PTR (Node->Object); } - -/******************************************************************************* -* -* FUNCTION: AcpiNsGetSecondaryObject -* -* PARAMETERS: Node - Namespace node -* -* RETURN: Current value of the object field from the Node whose -* handle is passed. -* -* DESCRIPTION: Obtain a secondary object associated with a namespace node. -* -******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiNsGetSecondaryObject ( -ACPI_OPERAND_OBJECT *ObjDesc) -{ -ACPI_FUNCTION_TRACE_PTR (NsGetSecondaryObject, ObjDesc); - - -if ((!ObjDesc) || - (ObjDesc->Common.Type==ACPI_TYPE_LOCAL_DATA ) || - (!ObjDesc->Common.NextObject) || - ((ObjDesc->Common.NextObject)->Common.Type ==ACPI_TYPE_LOCAL_DATA )) - { -return_PTR (NULL ); - } - -return_PTR (ObjDesc->Common.NextObject); -} - -/******************************************************************************* * * FUNCTION: AcpiNsAttachData
@@ -447,6 +415,7 @@ AcpiNsAttachData ( ObjDesc = Node->Object;while (ObjDesc) { +fprintf (stderr,"attach_data: Type=%x\n" , ObjDesc->Common.Type);if ((ObjDesc->Common.Type ==ACPI_TYPE_LOCAL_DATA ) && (ObjDesc->Data.Handler == Handler)) {
@@ -510,6 +479,7 @@ AcpiNsDetachData ( ObjDesc = Node->Object;while (ObjDesc) { +fprintf (stderr,"detach_data: Type=%x\n" , ObjDesc->Common.Type);if ((ObjDesc->Common.Type ==ACPI_TYPE_LOCAL_DATA ) && (ObjDesc->Data.Handler == Handler)) {
@@ -561,6 +531,7 @@ AcpiNsGetAttachedData ( ObjDesc = Node->Object;while (ObjDesc) { +fprintf (stderr,"get_attached_data: Type=%x\n" , ObjDesc->Common.Type);if ((ObjDesc->Common.Type ==ACPI_TYPE_LOCAL_DATA ) && (ObjDesc->Data.Handler == Handler)) {
source/components/utilities/utcopy.c +1 -1
@@ -809,7 +809,7 @@ AcpiUtCopySimpleObject (* Copy the entire source object over the destination object. * Note: Source can be either an operand object or namespace node. */ - CopySize =sizeof (ACPI_OPERAND_OBJECT ); + CopySize =AcpiUtOperandSize (DestDesc->Common.Type);if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) ==ACPI_DESC_TYPE_NAMED ) { CopySize =sizeof (ACPI_NAMESPACE_NODE );
source/components/utilities/utdelete.c +1 -37
@@ -156,7 +156,6 @@ AcpiUtDeleteInternalObj ( {void *ObjPointer =NULL ;ACPI_OPERAND_OBJECT *HandlerDesc; -ACPI_OPERAND_OBJECT *SecondDesc;ACPI_OPERAND_OBJECT *NextDesc;ACPI_OPERAND_OBJECT **LastObjPtr;
@@ -307,9 +306,6 @@ AcpiUtDeleteInternalObj (ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS ,"***** Region %p\n" , Object)); - SecondDesc =AcpiNsGetSecondaryObject (Object); -if (SecondDesc) - {/* * Free the RegionContext if and only if the handler is one of the * default handlers -- and therefore, we created the context object
@@ -347,46 +343,14 @@ AcpiUtDeleteInternalObj ( (void ) HandlerDesc->AddressSpace.Setup (Object,ACPI_REGION_DEACTIVATE , HandlerDesc->AddressSpace.Context, - &SecondDesc->Extra.RegionContext); + &Object->Region.RegionContext); } }AcpiUtRemoveReference (HandlerDesc); } - -/* Now we can free the Extra object */ - -AcpiUtDeleteObjectDesc (SecondDesc); - }break ; - -case ACPI_TYPE_BUFFER_FIELD : - -ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , -"***** Buffer Field %p\n" , Object)); - - SecondDesc =AcpiNsGetSecondaryObject (Object); -if (SecondDesc) - { -AcpiUtDeleteObjectDesc (SecondDesc); - } -break ; - - -case ACPI_TYPE_LOCAL_BANK_FIELD : - -ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , -"***** Bank Field %p\n" , Object)); - - SecondDesc =AcpiNsGetSecondaryObject (Object); -if (SecondDesc) - { -AcpiUtDeleteObjectDesc (SecondDesc); - } -break ; - -default :break ; }
source/components/utilities/utobject.c +76 -88
206 lines not on this page · raw message
source/include/acnamesp.h +0 -4
@@ -406,10 +406,6 @@ ACPI_OPERAND_OBJECT *AcpiNsGetAttachedObject (ACPI_NAMESPACE_NODE *Node); -ACPI_OPERAND_OBJECT * -AcpiNsGetSecondaryObject ( -ACPI_OPERAND_OBJECT *ObjDesc); - ACPI_STATUS AcpiNsAttachData ( ACPI_NAMESPACE_NODE *Node,
source/include/acobject.h +8 -21
@@ -277,6 +277,10 @@ typedef struct acpi_object_regionunion acpi_operand_object *Next;ACPI_PHYSICAL_ADDRESS Address;UINT32 Length; +ACPI_NAMESPACE_NODE *Method_REG;/* _REG method for this region (if any) */ +void *RegionContext;/* Region-specific data */ +UINT8 *AmlStart; +UINT32 AmlLength; }ACPI_OBJECT_REGION ;
@@ -412,6 +416,8 @@ typedef struct acpi_object_bank_fieldACPI_COMMON_FIELD_INFO union acpi_operand_object *RegionObj; /* Containing OpRegion object */union acpi_operand_object *BankObj;/* BankSelect Register object */ +UINT8 *AmlStart; +UINT32 AmlLength; }ACPI_OBJECT_BANK_FIELD ;
@@ -438,6 +444,8 @@ typedef struct acpi_object_buffer_fieldACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFOunion acpi_operand_object *BufferObj;/* Containing Buffer object */ +UINT8 *AmlStart; +UINT32 AmlLength; }ACPI_OBJECT_BUFFER_FIELD ;
@@ -517,25 +525,6 @@ typedef enum }ACPI_REFERENCE_CLASSES ; - -/* -* Extra object is used as additional storage for types that -* have AML code in their declarations (TermArgs) that must be -* evaluated at run time. -* -* Currently: Region and FieldUnit types -*/ -typedef struct acpi_object_extra -{ -ACPI_OBJECT_COMMON_HEADER - ACPI_NAMESPACE_NODE *Method_REG; /* _REG method for this region (if any) */ -void *RegionContext;/* Region-specific data */ -UINT8 *AmlStart; -UINT32 AmlLength; - -}ACPI_OBJECT_EXTRA ; - -/* Additional data that can be attached to namespace nodes */ typedef struct acpi_object_data
@@ -576,7 +565,6 @@ typedef union acpi_operand_objectACPI_OBJECT_NOTIFY_HANDLER Notify;ACPI_OBJECT_ADDR_HANDLER AddressSpace;ACPI_OBJECT_REFERENCE Reference; -ACPI_OBJECT_EXTRA Extra;ACPI_OBJECT_DATA Data;/*
@@ -588,7 +576,6 @@ typedef union acpi_operand_object }ACPI_OPERAND_OBJECT ; -/****************************************************************************** * * ACPI_DESCRIPTOR - objects that share a common descriptor identifier
source/include/actypes.h +0 -1
@@ -667,7 +667,6 @@ typedef UINT32 ACPI_OBJECT_TYPE;* These are special object types that never appear in * a Namespace node, only in an ACPI_OPERAND_OBJECT */ -#define ACPI_TYPE_LOCAL_EXTRA 0x1C#define ACPI_TYPE_LOCAL_DATA 0x1D#define ACPI_TYPE_LOCAL_MAX 0x1D
source/include/acutils.h +1 -1
@@ -397,7 +397,7 @@ AcpiUtCopyIobjectToIobject (ACPI_OPERAND_OBJECT **DestDesc, ACPI_WALK_STATE *WalkState); - +ACPI_SIZE AcpiUtOperandSize (int Type);/* * utcreate - Object creation */