diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-11-06 17:28:29 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-11-06 17:28:29 +0100 |
commit | b21482828b1597b5db66878611d50c0f70254af6 (patch) | |
tree | ddd6691a0cd36bdeae5c31bc08ce48d29d4a4f54 | |
parent | 3133a2a4e70740906fd69abe6a2304f8bdedd448 (diff) | |
parent | 00572496ce8e2e3919586a0ce3df1fc457220ae5 (diff) | |
download | plan9front-b21482828b1597b5db66878611d50c0f70254af6.tar.xz |
merge
-rw-r--r-- | sys/src/9/port/fault.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c index 64832d23f..0d5e1ac5a 100644 --- a/sys/src/9/port/fault.c +++ b/sys/src/9/port/fault.c @@ -237,10 +237,8 @@ fixfault(Segment *s, uintptr addr, int read) return -1; *pg = new; } - goto common; - - case SG_DATA: - common: /* Demand load/pagein/copy on write */ + /* wet floor */ + case SG_DATA: /* Demand load/pagein/copy on write */ if(pagedout(*pg)) pio(s, addr, soff, pg); @@ -279,6 +277,7 @@ fixfault(Segment *s, uintptr addr, int read) new->ref = 1; *pg = new; } + /* wet floor */ case SG_FIXED: /* Never paged out */ if (checkaddr && addr == addr2check) (*checkaddr)(addr, s, *pg); @@ -301,7 +300,7 @@ okaddr(uintptr addr, ulong len, int write) { Segment *s; - if((long)len >= 0 && addr+len >= addr) { + if((long)len >= 0 && len <= -addr) { for(;;) { s = seg(up, addr, 0); if(s == nil || (write && (s->type&SG_RONLY))) |