summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-05-01 10:07:39 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-05-01 10:07:39 +0200
commitb452f8857f22089adca137f32b9456a208554800 (patch)
tree5a896f1e189e0864debe1aff3644ad0b3d615e2f
parenta6ee23a739716493e4635cb9c4eb55248f2d43cf (diff)
downloadplan9front-b452f8857f22089adca137f32b9456a208554800.tar.xz
kernel: export freepages() function so it can be used in mmurelease()
-rw-r--r--sys/src/9/port/page.c15
-rw-r--r--sys/src/9/port/portfns.h1
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*);