⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utalloc.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, allocation, size,			  ACPI_MEM_MALLOC, component, module, line);	if (ACPI_FAILURE (status)) {		acpi_os_free (allocation);		return (NULL);	}	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_allocated++;	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size += (u32) size;	return ((void *) &allocation->user_space);}/******************************************************************************* * * FUNCTION:    acpi_ut_callocate_and_track * * PARAMETERS:  Size                - Size of the allocation *              Component           - Component type of caller *              Module              - Source file name of caller *              Line                - Line number of caller * * RETURN:      Address of the allocated memory on success, NULL on failure. * * DESCRIPTION: Subsystem equivalent of calloc. * ******************************************************************************/void *acpi_ut_callocate_and_track (	acpi_size                       size,	u32                             component,	char                            *module,	u32                             line){	struct acpi_debug_mem_block     *allocation;	acpi_status                     status;	allocation = acpi_ut_callocate (size + sizeof (struct acpi_debug_mem_block), component,			  module, line);	if (!allocation) {		/* Report allocation error */		_ACPI_REPORT_ERROR (module, line, component,				("ut_callocate: Could not allocate size %X\n", (u32) size));		return (NULL);	}	status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, allocation, size,			   ACPI_MEM_CALLOC, component, module, line);	if (ACPI_FAILURE (status)) {		acpi_os_free (allocation);		return (NULL);	}	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_allocated++;	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size += (u32) size;	return ((void *) &allocation->user_space);}/******************************************************************************* * * FUNCTION:    acpi_ut_free_and_track * * PARAMETERS:  Allocation          - Address of the memory to deallocate *              Component           - Component type of caller *              Module              - Source file name of caller *              Line                - Line number of caller * * RETURN:      None * * DESCRIPTION: Frees the memory at Allocation * ******************************************************************************/voidacpi_ut_free_and_track (	void                            *allocation,	u32                             component,	char                            *module,	u32                             line){	struct acpi_debug_mem_block     *debug_block;	acpi_status                     status;	ACPI_FUNCTION_TRACE_PTR ("ut_free", allocation);	if (NULL == allocation) {		_ACPI_REPORT_ERROR (module, line, component,			("acpi_ut_free: Attempt to delete a NULL address\n"));		return_VOID;	}	debug_block = ACPI_CAST_PTR (struct acpi_debug_mem_block,			  (((char *) allocation) - sizeof (struct acpi_debug_mem_header)));	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_freed++;	acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size -= debug_block->size;	status = acpi_ut_remove_allocation (ACPI_MEM_LIST_GLOBAL, debug_block,			  component, module, line);	if (ACPI_FAILURE (status)) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not free memory, %s\n",			acpi_format_exception (status)));	}	acpi_os_free (debug_block);	ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p freed\n", allocation));	return_VOID;}/******************************************************************************* * * FUNCTION:    acpi_ut_find_allocation * * PARAMETERS:  Allocation             - Address of allocated memory * * RETURN:      A list element if found; NULL otherwise. * * DESCRIPTION: Searches for an element in the global allocation tracking list. * ******************************************************************************/struct acpi_debug_mem_block *acpi_ut_find_allocation (	u32                             list_id,	void                            *allocation){	struct acpi_debug_mem_block     *element;	ACPI_FUNCTION_ENTRY ();	if (list_id > ACPI_MEM_LIST_MAX) {		return (NULL);	}	element = acpi_gbl_memory_lists[list_id].list_head;	/* Search for the address. */	while (element) {		if (element == allocation) {			return (element);		}		element = element->next;	}	return (NULL);}/******************************************************************************* * * FUNCTION:    acpi_ut_track_allocation * * PARAMETERS:  Allocation          - Address of allocated memory *              Size                - Size of the allocation *              alloc_type          - MEM_MALLOC or MEM_CALLOC *              Component           - Component type of caller *              Module              - Source file name of caller *              Line                - Line number of caller * * RETURN:      None. * * DESCRIPTION: Inserts an element into the global allocation tracking list. * ******************************************************************************/acpi_statusacpi_ut_track_allocation (	u32                             list_id,	struct acpi_debug_mem_block     *allocation,	acpi_size                       size,	u8                              alloc_type,	u32                             component,	char                            *module,	u32                             line){	struct acpi_memory_list         *mem_list;	struct acpi_debug_mem_block     *element;	acpi_status                     status = AE_OK;	ACPI_FUNCTION_TRACE_PTR ("ut_track_allocation", allocation);	if (list_id > ACPI_MEM_LIST_MAX) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	mem_list = &acpi_gbl_memory_lists[list_id];	status = acpi_ut_acquire_mutex (ACPI_MTX_MEMORY);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/*	 * Search list for this address to make sure it is not already on the list.	 * This will catch several kinds of problems.	 */	element = acpi_ut_find_allocation (list_id, allocation);	if (element) {		ACPI_REPORT_ERROR (("ut_track_allocation: Allocation already present in list! (%p)\n",			allocation));		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Element %p Address %p\n", element, allocation));		goto unlock_and_exit;	}	/* Fill in the instance data. */	allocation->size      = (u32) size;	allocation->alloc_type = alloc_type;	allocation->component = component;	allocation->line      = line;	ACPI_STRNCPY (allocation->module, module, ACPI_MAX_MODULE_NAME);	/* Insert at list head */	if (mem_list->list_head) {		((struct acpi_debug_mem_block *)(mem_list->list_head))->previous = allocation;	}	allocation->next = mem_list->list_head;	allocation->previous = NULL;	mem_list->list_head = allocation;unlock_and_exit:	status = acpi_ut_release_mutex (ACPI_MTX_MEMORY);	return_ACPI_STATUS (status);}/******************************************************************************* * * FUNCTION:    acpi_ut_remove_allocation * * PARAMETERS:  Allocation          - Address of allocated memory *              Component           - Component type of caller *              Module              - Source file name of caller *              Line                - Line number of caller * * RETURN: * * DESCRIPTION: Deletes an element from the global allocation tracking list. * ******************************************************************************/acpi_statusacpi_ut_remove_allocation (	u32                             list_id,	struct acpi_debug_mem_block     *allocation,	u32                             component,	char                            *module,	u32                             line){	struct acpi_memory_list         *mem_list;	acpi_status                     status;	ACPI_FUNCTION_TRACE ("ut_remove_allocation");	if (list_id > ACPI_MEM_LIST_MAX) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	mem_list = &acpi_gbl_memory_lists[list_id];	if (NULL == mem_list->list_head) {		/* No allocations! */		_ACPI_REPORT_ERROR (module, line, component,				("ut_remove_allocation: Empty allocation list, nothing to free!\n"));		return_ACPI_STATUS (AE_OK);	}	status = acpi_ut_acquire_mutex (ACPI_MTX_MEMORY);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Unlink */	if (allocation->previous) {		(allocation->previous)->next = allocation->next;	}	else {		mem_list->list_head = allocation->next;	}	if (allocation->next) {		(allocation->next)->previous = allocation->previous;	}	/* Mark the segment as deleted */	ACPI_MEMSET (&allocation->user_space, 0xEA, allocation->size);	ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n", allocation->size));	status = acpi_ut_release_mutex (ACPI_MTX_MEMORY);	return_ACPI_STATUS (status);}/******************************************************************************* * * FUNCTION:    acpi_ut_dump_allocation_info * * PARAMETERS: * * RETURN:      None * * DESCRIPTION: Print some info about the outstanding allocations. * ******************************************************************************/voidacpi_ut_dump_allocation_info (	void){/*	struct acpi_memory_list         *mem_list;*/	ACPI_FUNCTION_TRACE ("ut_dump_allocation_info");/*	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Current allocations",			  mem_list->current_count,			  ROUND_UP_TO_1K (mem_list->current_size)));	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations",			  mem_list->max_concurrent_count,			  ROUND_UP_TO_1K (mem_list->max_concurrent_size)));	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects",			  running_object_count,			  ROUND_UP_TO_1K (running_object_size)));	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Total (all) allocations",			  running_alloc_count,			  ROUND_UP_TO_1K (running_alloc_size)));	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Current Nodes",			  acpi_gbl_current_node_count,			  ROUND_UP_TO_1K (acpi_gbl_current_node_size)));	ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,			  ("%30s: %4d (%3d Kb)\n", "Max Nodes",			  acpi_gbl_max_concurrent_node_count,			  ROUND_UP_TO_1K ((acpi_gbl_max_concurrent_node_count * sizeof (struct acpi_namespace_node)))));*/	return_VOID;}/******************************************************************************* * * FUNCTION:    acpi_ut_dump_allocations * * PARAMETERS:  Component           - Component(s) to dump info for. *              Module              - Module to dump info for.  NULL means all. * * RETURN:      None * * DESCRIPTION: Print a list of all outstanding allocations. * ******************************************************************************/voidacpi_ut_dump_allocations (	u32                             component,	char                            *module){	struct acpi_debug_mem_block     *element;	union acpi_descriptor           *descriptor;	u32                             num_outstanding = 0;	ACPI_FUNCTION_TRACE ("ut_dump_allocations");	/*	 * Walk the allocation list.	 */	if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_MEMORY))) {		return;	}	element = acpi_gbl_memory_lists[0].list_head;	while (element) {		if ((element->component & component) &&			((module == NULL) || (0 == ACPI_STRCMP (module, element->module)))) {			/* Ignore allocated objects that are in a cache */			descriptor = ACPI_CAST_PTR (union acpi_descriptor, &element->user_space);			if (descriptor->descriptor_id != ACPI_DESC_TYPE_CACHED) {				acpi_os_printf ("%p Len %04X %9.9s-%d [%s] ",						 descriptor, element->size, element->module,						 element->line, acpi_ut_get_descriptor_name (descriptor));				/* Most of the elements will be Operand objects. */				switch (ACPI_GET_DESCRIPTOR_TYPE (descriptor)) {				case ACPI_DESC_TYPE_OPERAND:					acpi_os_printf ("%12.12s R%hd",							acpi_ut_get_type_name (descriptor->object.common.type),							descriptor->object.common.reference_count);					break;				case ACPI_DESC_TYPE_PARSER:					acpi_os_printf ("aml_opcode %04hX",							descriptor->op.asl.aml_opcode);					break;				case ACPI_DESC_TYPE_NAMED:					acpi_os_printf ("%4.4s",							acpi_ut_get_node_name (&descriptor->node));					break;				default:					break;				}				acpi_os_printf ( "\n");				num_outstanding++;			}		}		element = element->next;	}	(void) acpi_ut_release_mutex (ACPI_MTX_MEMORY);	/* Print summary */	if (!num_outstanding) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,			"No outstanding allocations.\n"));	}	else {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,			"%d(%X) Outstanding allocations\n",			num_outstanding, num_outstanding));	}	return_VOID;}#endif  /* #ifdef ACPI_DBG_TRACK_ALLOCATIONS */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -