summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2015-05-12 18:12:20 +0800
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-05-21 14:37:09 +1000
commit1861dc5a68ba3d250bdbaf59f062b3adb309288f (patch)
treee73383c8c41d894a4ca37bf3547439ea84e0fa41 /core
parentafde0c6f965344898d448b08e65e434f4962e55f (diff)
downloadtalos-skiboot-1861dc5a68ba3d250bdbaf59f062b3adb309288f.tar.gz
talos-skiboot-1861dc5a68ba3d250bdbaf59f062b3adb309288f.zip
core/test: simulate proper locking in run-mem_region test
Currently, this test doesn't do locking during region changes or allocations. This change adds the appropriate locking. Signed-off-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'core')
-rw-r--r--core/test/run-mem_region.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/core/test/run-mem_region.c b/core/test/run-mem_region.c
index b98fe71b..d1cc3dd1 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(&regions, 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;
OpenPOWER on IntegriCloud