[kvm-unit-tests PATCH v1 05/18] lib/alloc_phys: Remove locking

Shaoqin Huang
2023-11-30T09:08:00Z

powerpc and s390 do not use the physical allocator.

arm and arm64 initialize the physical allocator in the setup code, only to
drain it immediately afterwards to initialize the page allocator.

x86 calls setup_vm() before any test that allocates memory, which similarly
drains the physical allocator to initialize the page allocator.

The setup code runs on a single core, which means that there is no need to
protect the internal data structures of the physical allocator against
concurrent accesses. Simplify the allocator by removing the locking.

Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
---
lib/alloc_phys.c | 14 --------------
1 file changed, 14 deletions(-)

diff --git a/lib/alloc_phys.c b/lib/alloc_phys.c
index 65c860cb..064077f7 100644
--- a/lib/alloc_phys.c
+++ b/lib/alloc_phys.c
@@ -21,7 +21,6 @@ struct phys_alloc_region {
static struct phys_alloc_region regions[PHYS_ALLOC_NR_REGIONS];
static int nr_regions;

-static struct spinlock lock;
static phys_addr_t base, top;

#define DEFAULT_MINIMUM_ALIGNMENT 32
@@ -37,7 +36,6 @@ void phys_alloc_show(void)
{
int i;

- spin_lock(&lock);
printf("phys_alloc minimum alignment: %#" PRIx64 "\n", (u64)align_min);
for (i = 0; i < nr_regions; ++i)
printf("%016" PRIx64 "-%016" PRIx64 " [%s]\n",
@@ -46,24 +44,19 @@ void phys_alloc_show(void)
"USED");
printf("%016" PRIx64 "-%016" PRIx64 " [%s]\n",
(u64)base, (u64)(top - 1), "FREE");
- spin_unlock(&lock);
}

void phys_alloc_init(phys_addr_t base_addr, phys_addr_t size)
{
- spin_lock(&lock);
base = base_addr;
top = base + size;
nr_regions = 0;
- spin_unlock(&lock);
}

void phys_alloc_set_minimum_alignment(phys_addr_t align)
{
assert(align && !(align & (align - 1)));
- spin_lock(&lock);
align_min = align;
- spin_unlock(&lock);
}

static void *memalign_early(size_t alignment, size_t sz)
@@ -76,8 +69,6 @@ static void *memalign_early(size_t alignment, size_t sz)

assert(align && !(align & (align - 1)));

- spin_lock(&lock);
-
top_safe = top;

if (sizeof(long) == 4)
@@ -97,7 +88,6 @@ static void *memalign_early(size_t alignment, size_t sz)
"top=%#" PRIx64 ", top_safe=%#" PRIx64 "\n",
(u64)size_orig, (u64)align, (u64)size,
(u64)(top_safe - base), (u64)top, (u64)top_safe);
- spin_unlock(&lock);
return NULL;
}

@@ -113,8 +103,6 @@ static void *memalign_early(size_t alignment, size_t sz)
warned = true;
}

- spin_unlock(&lock);
-
return phys_to_virt(addr);
}

@@ -124,10 +112,8 @@ void phys_alloc_get_unused(phys_addr_t *p_base, phys_addr_t *p_top)
*p_top = top;
if (base == top)
return;
- spin_lock(&lock);
regions[nr_regions].base = base;
regions[nr_regions].size = top - base;
++nr_regions;
base = top;
- spin_unlock(&lock);
}
--
2.40.1