diff options
| author | rsc <rsc> | 2007-08-14 19:05:48 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-08-14 19:05:48 +0000 | 
| commit | 4bc5056c19457f2c7128449259b770174d3361c9 (patch) | |
| tree | 57c85e6dd02d12477d83d63dc80978964b739d76 | |
| parent | 8d0a83565a2b8e0ee2b7e6cab93c6ba7b5a58224 (diff) | |
| download | xv6-labs-4bc5056c19457f2c7128449259b770174d3361c9.tar.gz xv6-labs-4bc5056c19457f2c7128449259b770174d3361c9.tar.bz2 xv6-labs-4bc5056c19457f2c7128449259b770174d3361c9.zip  | |
formatting, simplify
| -rw-r--r-- | kalloc.c | 41 | 
1 files changed, 17 insertions, 24 deletions
@@ -47,9 +47,9 @@ kinit(void)  void  kfree(char *v, int len)  { -  struct run **rr, *p, *pend; +  struct run *r, *rend, **rp, *p, *pend; -  if(len % PAGE) +  if(len <= 0 || len % PAGE)      panic("kfree");    // Fill with junk to catch dangling refs. @@ -58,36 +58,29 @@ kfree(char *v, int 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); -    if(p >= *rr && p < rend) +  for(rp=&freelist; (r=*rp) != 0 && r <= pend; rp=&r->next){ +    rend = (struct run*)((char*)r + r->len); +    if(r <= p && p < rend)        panic("freeing free page"); -    if(pend == *rr){ -      p->len = len + (*rr)->len; -      p->next = (*rr)->next; -      *rr = p; -      goto out; -    } -    if(pend < *rr){ -      p->len = len; -      p->next = *rr; -      *rr = p; +    if(pend == r){  // p next to r: replace r with p +      p->len = len + r->len; +      p->next = r->next; +      *rp = p;        goto out;      } -    if(p == rend){ -      (*rr)->len += len; -      if((*rr)->next && (*rr)->next == pend){ -        (*rr)->len += (*rr)->next->len; -        (*rr)->next = (*rr)->next->next; +    if(rend == p){  // r next to p: replace p with r +      r->len += len; +      if(r->next && r->next == pend){  // r now next to r->next? +        r->len += r->next->len; +        r->next = r->next->next;        }        goto out;      } -    rr = &((*rr)->next);    } +  // Insert p before r in list.    p->len = len; -  p->next = 0; -  *rr = p; +  p->next = r; +  *rp = p;   out:    release(&kalloc_lock);  | 
