34 lines
496 B
C
34 lines
496 B
C
#include "types.h"
|
|
#include "param.h"
|
|
#include "memlayout.h"
|
|
#include "spinlock.h"
|
|
#include "riscv.h"
|
|
#include "defs.h"
|
|
|
|
struct run {
|
|
struct run *next;
|
|
};
|
|
|
|
extern struct {
|
|
struct spinlock lock;
|
|
struct run *freelist;
|
|
} kmem;
|
|
|
|
uint64
|
|
sys_freeram(void)
|
|
{
|
|
struct run *r;
|
|
uint64 free_pages = 0;
|
|
|
|
acquire(&kmem.lock);
|
|
|
|
// loop over free pages' list
|
|
r = kmem.freelist;
|
|
while (r != 0) {
|
|
free_pages++;
|
|
r = r->next;
|
|
}
|
|
release(&kmem.lock);
|
|
|
|
return free_pages * PGSIZE;
|
|
}
|