Skip to content

Commit

Permalink
ACPICA: Fix a long-standing bug in local cache
Browse files Browse the repository at this point in the history
 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: Jung-uk Kim <jkim@FreeBSD.org>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Jung-uk Kim authored and Rafael J. Wysocki committed Mar 11, 2013
1 parent 98b5c99 commit 3cf2449
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 14 deletions.
20 changes: 7 additions & 13 deletions drivers/acpi/acpica/utcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ acpi_os_create_cache(char *cache_name,
/* Populate the cache object and return it */

ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
cache->link_offset = 8;
cache->list_name = cache_name;
cache->object_size = object_size;
cache->max_depth = max_depth;
Expand All @@ -108,7 +107,7 @@ acpi_os_create_cache(char *cache_name,

acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
{
char *next;
void *next;
acpi_status status;

ACPI_FUNCTION_ENTRY();
Expand All @@ -128,10 +127,9 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)

/* Delete and unlink one cached state object */

next = *(ACPI_CAST_INDIRECT_PTR(char,
&(((char *)cache->
list_head)[cache->
link_offset])));
next =
((struct acpi_object_common *)cache->list_head)->
next_object;
ACPI_FREE(cache->list_head);

cache->list_head = next;
Expand Down Expand Up @@ -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 */

*(ACPI_CAST_INDIRECT_PTR(char,
&(((char *)object)[cache->
link_offset]))) =
((struct acpi_object_common *)object)->next_object =
cache->list_head;
cache->list_head = object;
cache->current_depth++;
Expand Down Expand Up @@ -272,10 +268,8 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
/* There is an object available, use it */

object = cache->list_head;
cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char,
&(((char *)
object)[cache->
link_offset])));
cache->list_head =
((struct acpi_object_common *)object)->next_object;

cache->current_depth--;

Expand Down
1 change: 0 additions & 1 deletion include/acpi/actypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -1128,7 +1128,6 @@ struct acpi_memory_list {
u16 object_size;
u16 max_depth;
u16 current_depth;
u16 link_offset;

#ifdef ACPI_DBG_TRACK_ALLOCATIONS

Expand Down

0 comments on commit 3cf2449

Please sign in to comment.