]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: Unmap old tags
authorSimon Glass <sjg@chromium.org>
Sun, 1 Sep 2024 22:26:25 +0000 (16:26 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 18 Sep 2024 19:01:00 +0000 (13:01 -0600)
So far unmapping has not been implemented. This means that if one test
maps a pointer to an address with map_sysmem(), then a second test can
use that same pointer, by mapping the address back to a pointer with
map_to_sysmem(). This is not really desirable, even if it doesn't
cause any problems at the moment.

Implement unmapping, to clean this up.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/cpu.c

index 8eb055d6837ac1b072691ab42053ef4b3c0f6cb2..3e1c0dd583e978fa50e16623c99e29102024ef01 100644 (file)
@@ -185,12 +185,28 @@ void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
 
 void unmap_physmem(const void *ptr, unsigned long flags)
 {
+       struct sandbox_mapmem_entry *mentry;
+
 #ifdef CONFIG_PCI
        if (map_dev) {
                pci_unmap_physmem(ptr, map_len, map_dev);
                map_dev = NULL;
        }
 #endif
+
+       /* If it is in emulated RAM, we didn't create a tag, so nothing to do */
+       if (is_in_sandbox_mem(ptr))
+               return;
+
+       mentry = find_tag(ptr);
+       if (mentry) {
+               list_del(&mentry->sibling_node);
+               log_debug("Removed map from %p to %lx\n", ptr,
+                         (ulong)mentry->tag);
+               free(mentry);
+       } else {
+               log_warning("Address not mapped: %p\n", ptr);
+       }
 }
 
 phys_addr_t map_to_sysmem(const void *ptr)