#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;
}