v_VOID_t vos_mem_free( v_VOID_t *ptr ) { if (ptr == NULL) return; #ifdef CONFIG_WCNSS_MEM_PRE_ALLOC if(wcnss_prealloc_put(ptr)) return; #endif kfree(ptr); }
/** * cdf_mem_free() - free CDF memory * @ptr: Pointer to the starting address of the memory to be free'd. * * This function will free the memory pointed to by 'ptr'. * * Return: * Nothing * */ void cdf_mem_free(void *ptr) { if (ptr == NULL) return; #if defined(CONFIG_CNSS) && defined(CONFIG_WCNSS_MEM_PRE_ALLOC) if (wcnss_prealloc_put(ptr)) return; #endif kfree(ptr); }
v_VOID_t vos_mem_free( v_VOID_t *ptr ) { unsigned long IrqFlags; if (ptr == NULL) return; if (!memory_dbug_flag) { #ifdef CONFIG_WCNSS_MEM_PRE_ALLOC if (wcnss_prealloc_put(ptr)) return; #endif kfree(ptr); } else { VOS_STATUS vosStatus; struct s_vos_mem_struct* memStruct = ((struct s_vos_mem_struct*)ptr) - 1; spin_lock_irqsave(&vosMemList.lock, IrqFlags); vosStatus = hdd_list_remove_node(&vosMemList, &memStruct->pNode); spin_unlock_irqrestore(&vosMemList.lock, IrqFlags); if(VOS_STATUS_SUCCESS == vosStatus) { if(0 == vos_mem_compare(memStruct->header, &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER)) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Header is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } if(0 == vos_mem_compare( (v_U8_t*)ptr + memStruct->size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL ) ) ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "Memory Trailer is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); } kfree((v_VOID_t*)memStruct); } else { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Unallocated memory (double free?)", __func__); VOS_BUG(0); } } }
/** * cdf_mem_free() - debug version of CDF memory free API * @ptr: Pointer to the starting address of the memory to be free'd. * * This function will free the memory pointed to by 'ptr'. It also checks * is memory is corrupted or getting double freed and panic. * * Return: * Nothing */ void cdf_mem_free(void *ptr) { if (ptr != NULL) { CDF_STATUS cdf_status; struct s_cdf_mem_struct *memStruct = ((struct s_cdf_mem_struct *)ptr) - 1; #if defined(CONFIG_CNSS) && defined(CONFIG_WCNSS_MEM_PRE_ALLOC) if (wcnss_prealloc_put(ptr)) return; #endif cdf_spin_lock_irqsave(&cdf_mem_list_lock); cdf_status = cdf_list_remove_node(&cdf_mem_list, &memStruct->pNode); cdf_spin_unlock_irqrestore(&cdf_mem_list_lock); if (CDF_STATUS_SUCCESS == cdf_status) { if (0 == cdf_mem_compare(memStruct->header, &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER))) { CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL, "Memory Header is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); CDF_BUG(0); } if (0 == cdf_mem_compare((uint8_t *) ptr + memStruct->size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL))) { CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL, "Memory Trailer is corrupted. MemInfo: Filename %s, LineNum %d", memStruct->fileName, (int)memStruct->lineNum); CDF_BUG(0); } kfree((void *)memStruct); } else { CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL, "%s: Unallocated memory (double free?)", __func__); CDF_BUG(0); } } }