[Skiboot] [PATCH 3/5 v3] core/test: simulate proper locking in run-mem_region test
Jeremy Kerr
jk at ozlabs.org
Tue May 12 20:12:20 AEST 2015
Currently, this test doesn't do locking during region changes or
allocations. This change adds the appropriate locking.
Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
---
core/test/run-mem_region.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/core/test/run-mem_region.c b/core/test/run-mem_region.c
index b98fe71..d1cc3dd 100644
--- a/core/test/run-mem_region.c
+++ b/core/test/run-mem_region.c
@@ -64,17 +64,19 @@ struct dt_node *dt_root;
void lock(struct lock *l)
{
+ assert(!l->lock_val);
l->lock_val++;
}
void unlock(struct lock *l)
{
+ assert(l->lock_val);
l->lock_val--;
}
-bool lock_held_by_me(struct lock *l __attribute__((unused)))
+bool lock_held_by_me(struct lock *l)
{
- return true;
+ return l->lock_val;
}
#define TEST_HEAP_ORDER 12
@@ -98,6 +100,8 @@ int main(void)
skiboot_heap.start = (unsigned long)test_heap;
skiboot_heap.len = TEST_HEAP_SIZE;
+ lock(&skiboot_heap.free_list_lock);
+
/* Allocations of various sizes. */
for (i = 0; i < TEST_HEAP_ORDER; i++) {
p = mem_alloc(&skiboot_heap, 1ULL << i, 1, "here");
@@ -216,6 +220,10 @@ int main(void)
mem_free(&skiboot_heap, p, "freed");
assert(mem_check(&skiboot_heap));
+ unlock(&skiboot_heap.free_list_lock);
+
+ /* lock the regions list */
+ lock(&mem_region_lock);
/* Test splitting of a region. */
r = new_region("base", (unsigned long)test_heap,
TEST_HEAP_SIZE, NULL, REGION_SKIBOOT_HEAP);
@@ -247,8 +255,11 @@ int main(void)
assert(i == 3);
while ((r = list_pop(®ions, struct mem_region, list)) != NULL) {
list_del(&r->list);
+ lock(&skiboot_heap.free_list_lock);
mem_free(&skiboot_heap, r, __location__);
+ unlock(&skiboot_heap.free_list_lock);
}
+ unlock(&mem_region_lock);
assert(skiboot_heap.free_list_lock.lock_val == 0);
__free(test_heap, "");
return 0;
More information about the Skiboot
mailing list