summaryrefslogtreecommitdiff
path: root/sys/src/9/port/segment.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-08-26 04:47:34 +0200
committercinap_lenrek <cinap_lenrek@localhost>2011-08-26 04:47:34 +0200
commita6e3c9fd83e72e5c911e83f763e77ab6605a17d2 (patch)
tree7455ff570c40399e02deeac00525de1cae6cfce2 /sys/src/9/port/segment.c
parent00161ca7fcd1422bfede7b50776fbf2f871e67c9 (diff)
calculate the real number of pages used by segments and use it for killbig and proc
Diffstat (limited to 'sys/src/9/port/segment.c')
-rw-r--r--sys/src/9/port/segment.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/src/9/port/segment.c b/sys/src/9/port/segment.c
index 94267ae85..26a62998e 100644
--- a/sys/src/9/port/segment.c
+++ b/sys/src/9/port/segment.c
@@ -513,6 +513,27 @@ ibrk(ulong addr, int seg)
/*
* called with s->lk locked
*/
+int
+mcountseg(Segment *s)
+{
+ int i, j, pages;
+ Page **map;
+
+ pages = 0;
+ for(i = 0; i < s->mapsize; i++){
+ if(s->map[i] == 0)
+ continue;
+ map = s->map[i]->pages;
+ for(j = 0; j < PTEPERTAB; j++)
+ if(map[j])
+ pages++;
+ }
+ return pages;
+}
+
+/*
+ * called with s->lk locked
+ */
void
mfreeseg(Segment *s, ulong start, int pages)
{