diff options
author | wollman <wollman@FreeBSD.org> | 1998-09-01 17:12:19 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1998-09-01 17:12:19 +0000 |
commit | c97cc8ee062aa223a89146aa13a4bf5feefc7f1b (patch) | |
tree | 6ae5b55f7a8335cddd91b94a16b466c38c4cf8c9 /sys/vm | |
parent | be7570dbc1aee00a5fc38755b65f951a1448121f (diff) | |
download | FreeBSD-src-c97cc8ee062aa223a89146aa13a4bf5feefc7f1b.zip FreeBSD-src-c97cc8ee062aa223a89146aa13a4bf5feefc7f1b.tar.gz |
Separate wakeup conditions for page I/O count (pg_busy) and lock (PG_BUSY).
This is not sa completely solution to the deadlock, but the additional wakeups
have helped in my observation.
Suggested by: John Dyson
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_page.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index fc6d61c..bf79064 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_page.h,v 1.43 1998/08/22 15:24:09 mckay Exp $ + * $Id: vm_page.h,v 1.44 1998/08/24 08:39:38 dfr Exp $ */ /* @@ -292,7 +292,7 @@ extern vm_offset_t last_phys_addr; /* physical address for last_page */ #define PAGE_WAKEUP(m) { \ PAGE_CLEAR_FLAG(m, PG_BUSY); \ - if (((m)->flags & PG_WANTED) && ((m)->busy == 0)) { \ + if ((m)->flags & PG_WANTED) { \ PAGE_CLEAR_FLAG(m, PG_WANTED); \ wakeup((m)); \ } \ @@ -302,8 +302,7 @@ extern vm_offset_t last_phys_addr; /* physical address for last_page */ #define PAGE_BWAKEUP(m) { \ atomic_subtract_char(&(m)->busy, 1); \ - if ((((m)->flags & (PG_WANTED | PG_BUSY)) == PG_WANTED) && \ - ((m)->busy == 0)) { \ + if (((m)->flags & PG_WANTED) && (m)->busy == 0) { \ PAGE_CLEAR_FLAG(m, PG_WANTED); \ wakeup((m)); \ } \ |