Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cf24497 authored by Jung-uk Kim's avatar Jung-uk Kim Committed by Rafael J. Wysocki
Browse files

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: default avatarJung-uk Kim <jkim@FreeBSD.org>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 98b5c993
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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;
@@ -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++;
@@ -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--;

+0 −1
Original line number Diff line number Diff line
@@ -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