summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2011-01-18 21:57:02 +0000
committerkib <kib@FreeBSD.org>2011-01-18 21:57:02 +0000
commitef4e87bddcc27bda52c43072b85057f15a55b294 (patch)
tree07343029e503726ca752719a3c514cfa7fe23db6 /sys/arm
parentfd06f750d54c2227cbe9f81185e43b1c51646032 (diff)
downloadFreeBSD-src-ef4e87bddcc27bda52c43072b85057f15a55b294.zip
FreeBSD-src-ef4e87bddcc27bda52c43072b85057f15a55b294.tar.gz
For architectures not using direct map , and requiring real KVA page for
sf buf allocation, use wakeup() instead of wakeup_one() to notify sf buffer waiters about free buffer. sf_buf_alloc() calls msleep(PCATCH) when SFB_CATCH flag was given, and for simultaneous wakeup and signal delivery, msleep() returns EINTR/ERESTART despite the thread was selected for wakeup_one(). As result, we loose a wakeup, and some other waiter will not be woken up. Reported and tested by: az Reviewed by: alc, jhb MFC after: 1 week
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/vm_machdep.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c
index 9b530ab..05015e9 100644
--- a/sys/arm/arm/vm_machdep.c
+++ b/sys/arm/arm/vm_machdep.c
@@ -175,7 +175,7 @@ sf_buf_free(struct sf_buf *sf)
sf->m = NULL;
LIST_REMOVE(sf, list_entry);
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_buf_freelist);
+ wakeup(&sf_buf_freelist);
}
mtx_unlock(&sf_buf_lock);
#endif
OpenPOWER on IntegriCloud