diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-05-01 10:07:39 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-05-01 10:07:39 +0200 |
| commit | b452f8857f22089adca137f32b9456a208554800 (patch) | |
| tree | 5a896f1e189e0864debe1aff3644ad0b3d615e2f | |
| parent | a6ee23a739716493e4635cb9c4eb55248f2d43cf (diff) | |
| download | plan9front-b452f8857f22089adca137f32b9456a208554800.tar.xz | |
kernel: export freepages() function so it can be used in mmurelease()
| -rw-r--r-- | sys/src/9/port/page.c | 15 | ||||
| -rw-r--r-- | sys/src/9/port/portfns.h | 1 |
2 files changed, 11 insertions, 5 deletions
diff --git a/sys/src/9/port/page.c b/sys/src/9/port/page.c index 987f4c312..6e74cbe4e 100644 --- a/sys/src/9/port/page.c +++ b/sys/src/9/port/page.c @@ -82,15 +82,14 @@ pagechaindone(void) wakeup(&palloc.pwait[1]); } -static void +void freepages(Page *head, Page *tail, ulong np) { - lock(&palloc); + assert(palloc.Lock.p == up); tail->next = palloc.head; palloc.head = head; palloc.freecount += np; pagechaindone(); - unlock(&palloc); } ulong @@ -142,8 +141,11 @@ pagereclaim(Image *i, ulong pages) unlock(i); putimage(i); - if(np > 0) + if(np > 0){ + lock(&palloc); freepages(fh, ft, np); + unlock(&palloc); + } return np; } @@ -238,8 +240,11 @@ putpage(Page *p) decref(p); return; } - if(decref(p) == 0) + if(decref(p) == 0){ + lock(&palloc); freepages(p, p, 1); + unlock(&palloc); + } } void diff --git a/sys/src/9/port/portfns.h b/sys/src/9/port/portfns.h index 7360e93e9..6d41cd03a 100644 --- a/sys/src/9/port/portfns.h +++ b/sys/src/9/port/portfns.h @@ -117,6 +117,7 @@ void free(void*); void freeb(Block*); void freeblist(Block*); int freebroken(void); +void freepages(Page*, Page*, ulong); void freepte(Segment*, Pte*); void getcolor(ulong, ulong*, ulong*, ulong*); uintptr getmalloctag(void*); |
