Exemple #1
0
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);
}
Exemple #2
0
/**
 * 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);
}
Exemple #3
0
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);
        }
    }
}
Exemple #4
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);
		}
	}
}