alloc: fix freeing of uncached pointers

Fixes freeing of uncached pointers.

Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
This commit is contained in:
Tomasz Lauda 2018-11-22 13:55:23 +01:00
parent 8c20df92fa
commit 754757ab17
7 changed files with 18 additions and 4 deletions

View File

@ -547,6 +547,10 @@ void rfree(void *ptr)
if (!ptr) if (!ptr)
return; return;
/* operate only on cached addresses */
if (is_uncached(ptr))
ptr = uncache_to_cache(ptr);
/* use the heap dedicated for the selected core */ /* use the heap dedicated for the selected core */
cpu_heap = cache_to_uncache(memmap.system + cpu_get_id()); cpu_heap = cache_to_uncache(memmap.system + cpu_get_id());

View File

@ -193,6 +193,7 @@
#define SRAM_ALIAS_OFFSET 0x20000000 #define SRAM_ALIAS_OFFSET 0x20000000
#define HP_SRAM_BASE 0xBE000000 #define HP_SRAM_BASE 0xBE000000
#define HP_SRAM_SIZE 0x00080000 #define HP_SRAM_SIZE 0x00080000
#define HP_SRAM_MASK 0xFF000000
/* HP SRAM Heap */ /* HP SRAM Heap */
#define HEAP_HP_BUFFER_BASE HP_SRAM_BASE #define HEAP_HP_BUFFER_BASE HP_SRAM_BASE
@ -373,10 +374,11 @@
/** \brief Manifest size (seems unused). */ /** \brief Manifest size (seems unused). */
#define IMR_BOOT_LDR_MANIFEST_SIZE 0x6000 #define IMR_BOOT_LDR_MANIFEST_SIZE 0x6000
#define SRAM_ALIAS_OFFSET 0x20000000
#define uncache_to_cache(address) \ #define uncache_to_cache(address) \
((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET))
#define cache_to_uncache(address) \ #define cache_to_uncache(address) \
((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET))
#define is_uncached(address) \
(((uint32_t)(address) & HP_SRAM_MASK) != HP_SRAM_BASE)
#endif #endif

View File

@ -158,5 +158,6 @@
#define uncache_to_cache(address) address #define uncache_to_cache(address) address
#define cache_to_uncache(address) address #define cache_to_uncache(address) address
#define is_uncached(address) 0
#endif #endif

View File

@ -173,6 +173,7 @@
#define SRAM_ALIAS_OFFSET 0x20000000 #define SRAM_ALIAS_OFFSET 0x20000000
#define HP_SRAM_BASE 0xBE000000 #define HP_SRAM_BASE 0xBE000000
#define HP_SRAM_SIZE 0x002F0000 #define HP_SRAM_SIZE 0x002F0000
#define HP_SRAM_MASK 0xFF000000
/* HP SRAM Base */ /* HP SRAM Base */
#define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000) #define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000)
@ -383,10 +384,11 @@
#define IMR_BOOT_LDR_BSS_BASE 0xB0100000 #define IMR_BOOT_LDR_BSS_BASE 0xB0100000
#define IMR_BOOT_LDR_BSS_SIZE 0x10000 #define IMR_BOOT_LDR_BSS_SIZE 0x10000
#define SRAM_ALIAS_OFFSET 0x20000000
#define uncache_to_cache(address) \ #define uncache_to_cache(address) \
((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET))
#define cache_to_uncache(address) \ #define cache_to_uncache(address) \
((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET))
#define is_uncached(address) \
(((uint32_t)(address) & HP_SRAM_MASK) != HP_SRAM_BASE)
#endif #endif

View File

@ -155,5 +155,6 @@
#define uncache_to_cache(address) address #define uncache_to_cache(address) address
#define cache_to_uncache(address) address #define cache_to_uncache(address) address
#define is_uncached(address) 0
#endif #endif

View File

@ -173,6 +173,7 @@
#define SRAM_ALIAS_OFFSET 0x20000000 #define SRAM_ALIAS_OFFSET 0x20000000
#define HP_SRAM_BASE 0xBE000000 #define HP_SRAM_BASE 0xBE000000
#define HP_SRAM_SIZE 0x002F0000 #define HP_SRAM_SIZE 0x002F0000
#define HP_SRAM_MASK 0xFF000000
/* HP SRAM Base */ /* HP SRAM Base */
#define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000) #define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000)
@ -383,10 +384,11 @@
#define IMR_BOOT_LDR_BSS_BASE 0xB0100000 #define IMR_BOOT_LDR_BSS_BASE 0xB0100000
#define IMR_BOOT_LDR_BSS_SIZE 0x10000 #define IMR_BOOT_LDR_BSS_SIZE 0x10000
#define SRAM_ALIAS_OFFSET 0x20000000
#define uncache_to_cache(address) \ #define uncache_to_cache(address) \
((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET))
#define cache_to_uncache(address) \ #define cache_to_uncache(address) \
((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET))
#define is_uncached(address) \
(((uint32_t)(address) & HP_SRAM_MASK) != HP_SRAM_BASE)
#endif #endif

View File

@ -161,6 +161,7 @@
#define SRAM_ALIAS_OFFSET 0x20000000 #define SRAM_ALIAS_OFFSET 0x20000000
#define HP_SRAM_BASE 0xBE000000 #define HP_SRAM_BASE 0xBE000000
#define HP_SRAM_SIZE 0x002F0000 /* Should be 48 * 64 - 0x300000 ?? */ #define HP_SRAM_SIZE 0x002F0000 /* Should be 48 * 64 - 0x300000 ?? */
#define HP_SRAM_MASK 0xFF000000
/* HP SRAM Base */ /* HP SRAM Base */
#define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000) #define HP_SRAM_VECBASE_RESET (HP_SRAM_BASE + 0x40000)
@ -349,10 +350,11 @@
#define SRAM_VECBASE_RESET (BOOT_LDR_BSS_BASE + BOOT_LDR_BSS_SIZE) #define SRAM_VECBASE_RESET (BOOT_LDR_BSS_BASE + BOOT_LDR_BSS_SIZE)
//TODO: confirm mapping //TODO: confirm mapping
#define SRAM_ALIAS_OFFSET 0x20000000
#define uncache_to_cache(address) \ #define uncache_to_cache(address) \
((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) + SRAM_ALIAS_OFFSET))
#define cache_to_uncache(address) \ #define cache_to_uncache(address) \
((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET)) ((__typeof__((address)))((uint32_t)((address)) - SRAM_ALIAS_OFFSET))
#define is_uncached(address) \
(((uint32_t)(address) & HP_SRAM_MASK) != HP_SRAM_BASE)
#endif #endif