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;      } | 
