提交 3cf24497 编写于 作者: J Jung-uk Kim 提交者: Rafael J. Wysocki

ACPICA: Fix a long-standing bug in local cache

 Since 20060317, the pointer to next object is the first element in
 its common header.  Remove bogus LinkOffset from ACPI_MEMORY_LIST
 and directly use NextObject.
Signed-off-by: NJung-uk Kim <jkim@FreeBSD.org>
Signed-off-by: NBob Moore <robert.moore@intel.com>
Signed-off-by: NLv Zheng <lv.zheng@intel.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 98b5c993
...@@ -85,7 +85,6 @@ acpi_os_create_cache(char *cache_name, ...@@ -85,7 +85,6 @@ acpi_os_create_cache(char *cache_name,
/* Populate the cache object and return it */ /* Populate the cache object and return it */
ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list)); ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
cache->link_offset = 8;
cache->list_name = cache_name; cache->list_name = cache_name;
cache->object_size = object_size; cache->object_size = object_size;
cache->max_depth = max_depth; cache->max_depth = max_depth;
...@@ -108,7 +107,7 @@ acpi_os_create_cache(char *cache_name, ...@@ -108,7 +107,7 @@ acpi_os_create_cache(char *cache_name,
acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
{ {
char *next; void *next;
acpi_status status; acpi_status status;
ACPI_FUNCTION_ENTRY(); ACPI_FUNCTION_ENTRY();
...@@ -128,10 +127,9 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) ...@@ -128,10 +127,9 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
/* Delete and unlink one cached state object */ /* Delete and unlink one cached state object */
next = *(ACPI_CAST_INDIRECT_PTR(char, next =
&(((char *)cache-> ((struct acpi_object_common *)cache->list_head)->
list_head)[cache-> next_object;
link_offset])));
ACPI_FREE(cache->list_head); ACPI_FREE(cache->list_head);
cache->list_head = next; cache->list_head = next;
...@@ -221,9 +219,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object) ...@@ -221,9 +219,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object)
/* Put the object at the head of the cache list */ /* Put the object at the head of the cache list */
*(ACPI_CAST_INDIRECT_PTR(char, ((struct acpi_object_common *)object)->next_object =
&(((char *)object)[cache->
link_offset]))) =
cache->list_head; cache->list_head;
cache->list_head = object; cache->list_head = object;
cache->current_depth++; cache->current_depth++;
...@@ -272,10 +268,8 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) ...@@ -272,10 +268,8 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
/* There is an object available, use it */ /* There is an object available, use it */
object = cache->list_head; object = cache->list_head;
cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char, cache->list_head =
&(((char *) ((struct acpi_object_common *)object)->next_object;
object)[cache->
link_offset])));
cache->current_depth--; cache->current_depth--;
......
...@@ -1128,7 +1128,6 @@ struct acpi_memory_list { ...@@ -1128,7 +1128,6 @@ struct acpi_memory_list {
u16 object_size; u16 object_size;
u16 max_depth; u16 max_depth;
u16 current_depth; u16 current_depth;
u16 link_offset;
#ifdef ACPI_DBG_TRACK_ALLOCATIONS #ifdef ACPI_DBG_TRACK_ALLOCATIONS
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册