summaryrefslogtreecommitdiffstats
path: root/sys
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
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')
-rw-r--r--sys/arm/arm/vm_machdep.c2
-rw-r--r--sys/i386/i386/vm_machdep.c2
-rw-r--r--sys/mips/mips/vm_machdep.c2
-rw-r--r--sys/powerpc/aim/vm_machdep.c2
-rw-r--r--sys/powerpc/booke/vm_machdep.c2
-rw-r--r--sys/sparc64/sparc64/vm_machdep.c2
6 files changed, 6 insertions, 6 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
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index 68e02fe..232e1a1 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -916,7 +916,7 @@ sf_buf_free(struct sf_buf *sf)
LIST_REMOVE(sf, list_entry);
#endif
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_buf_freelist);
+ wakeup(&sf_buf_freelist);
}
mtx_unlock(&sf_buf_lock);
}
diff --git a/sys/mips/mips/vm_machdep.c b/sys/mips/mips/vm_machdep.c
index b4059e6..eb92090 100644
--- a/sys/mips/mips/vm_machdep.c
+++ b/sys/mips/mips/vm_machdep.c
@@ -528,7 +528,7 @@ sf_buf_free(struct sf_buf *sf)
SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
nsfbufsused--;
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_freelist);
+ wakeup(&sf_freelist);
mtx_unlock(&sf_freelist.sf_lock);
}
diff --git a/sys/powerpc/aim/vm_machdep.c b/sys/powerpc/aim/vm_machdep.c
index 0f7d989..8deb821 100644
--- a/sys/powerpc/aim/vm_machdep.c
+++ b/sys/powerpc/aim/vm_machdep.c
@@ -347,7 +347,7 @@ sf_buf_free(struct sf_buf *sf)
nsfbufsused--;
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_buf_freelist);
+ wakeup(&sf_buf_freelist);
}
mtx_unlock(&sf_buf_lock);
}
diff --git a/sys/powerpc/booke/vm_machdep.c b/sys/powerpc/booke/vm_machdep.c
index 8d36793..54a0b01 100644
--- a/sys/powerpc/booke/vm_machdep.c
+++ b/sys/powerpc/booke/vm_machdep.c
@@ -346,7 +346,7 @@ sf_buf_free(struct sf_buf *sf)
nsfbufsused--;
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_buf_freelist);
+ wakeup(&sf_buf_freelist);
}
mtx_unlock(&sf_buf_lock);
}
diff --git a/sys/sparc64/sparc64/vm_machdep.c b/sys/sparc64/sparc64/vm_machdep.c
index 1b9e123..9aa9f84 100644
--- a/sys/sparc64/sparc64/vm_machdep.c
+++ b/sys/sparc64/sparc64/vm_machdep.c
@@ -483,7 +483,7 @@ sf_buf_free(struct sf_buf *sf)
SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
nsfbufsused--;
if (sf_buf_alloc_want > 0)
- wakeup_one(&sf_freelist);
+ wakeup(&sf_freelist);
mtx_unlock(&sf_freelist.sf_lock);
}
OpenPOWER on IntegriCloud