diff options
author | rsc <rsc> | 2007-08-10 17:02:36 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-10 17:02:36 +0000 |
commit | 3d145283a25ed9dcd8e0544e3db9d6733ab7d8b7 (patch) | |
tree | 801195620cb00cbaf7d8e2489deb83cf91217b24 | |
parent | 9736728d23af42f740fcb217f418e3e8bdd9984d (diff) | |
download | xv6-labs-3d145283a25ed9dcd8e0544e3db9d6733ab7d8b7.tar.gz xv6-labs-3d145283a25ed9dcd8e0544e3db9d6733ab7d8b7.tar.bz2 xv6-labs-3d145283a25ed9dcd8e0544e3db9d6733ab7d8b7.zip |
tweak kalloc
-rw-r--r-- | kalloc.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -47,9 +47,7 @@ kinit(void) void kfree(char *v, int len) { - struct run **rr; - struct run *p = (struct run*)v; - struct run *pend = (struct run*)(v + len); + struct run **rr, *p, *pend; if(len % PAGE) panic("kfree"); @@ -58,7 +56,8 @@ kfree(char *v, int len) memset(v, 1, len); acquire(&kalloc_lock); - + p = (struct run*)v; + pend = (struct run*)(v + len); rr = &freelist; while(*rr){ struct run *rend = (struct run*) ((char*)(*rr) + (*rr)->len); @@ -100,7 +99,8 @@ kfree(char *v, int len) char* kalloc(int n) { - struct run **rr; + char *p; + struct run *r, **rr; if(n % PAGE) panic("kalloc"); @@ -109,15 +109,15 @@ kalloc(int n) rr = &freelist; while(*rr){ - struct run *r = *rr; + r = *rr; if(r->len == n){ *rr = r->next; release(&kalloc_lock); return (char*) r; } if(r->len > n){ - char *p = (char*)r + (r->len - n); r->len -= n; + p = (char*)r + r->len; release(&kalloc_lock); return p; } |