Add function to track free bytes in the coremap.

This commit is contained in:
Geoffrey Challen 2016-03-05 09:55:44 -05:00
parent a7526befe4
commit a367007689
3 changed files with 20 additions and 3 deletions

View File

@ -126,6 +126,15 @@ free_kpages(vaddr_t addr)
(void)addr; (void)addr;
} }
unsigned
int
coremap_free_bytes() {
/* dumbvm doesn't track page allocations. Return 0 so that khu works. */
return 0;
}
void void
vm_tlbshootdown_all(void) vm_tlbshootdown_all(void)
{ {

View File

@ -55,6 +55,14 @@ int vm_fault(int faulttype, vaddr_t faultaddress);
vaddr_t alloc_kpages(unsigned npages); vaddr_t alloc_kpages(unsigned npages);
void free_kpages(vaddr_t addr); void free_kpages(vaddr_t addr);
/*
* Return amount of free memory (in bytes) available in unallocated coremap pages.
* If there are ongoing allocations, this value could change after it is
* returned to the caller. But it should have been correct at some point in
* time.
*/
unsigned int coremap_free_bytes(void);
/* TLB shootdown handling called from interprocessor_interrupt */ /* TLB shootdown handling called from interprocessor_interrupt */
void vm_tlbshootdown_all(void); void vm_tlbshootdown_all(void);
void vm_tlbshootdown(const struct tlbshootdown *); void vm_tlbshootdown(const struct tlbshootdown *);

View File

@ -827,16 +827,16 @@ kheap_printused(void)
{ {
struct pageref *pr; struct pageref *pr;
unsigned long total = 0; unsigned long total = 0;
char total_string[32];
/* print the whole thing with interrupts off */ /* print the whole thing with interrupts off */
spinlock_acquire(&kmalloc_spinlock); spinlock_acquire(&kmalloc_spinlock);
for (pr = allbase; pr != NULL; pr = pr->next_all) { for (pr = allbase; pr != NULL; pr = pr->next_all) {
total += subpage_stats(pr, true); total += subpage_stats(pr, true);
} }
total += coremap_free_bytes();
spinlock_release(&kmalloc_spinlock); spinlock_release(&kmalloc_spinlock);
char total_string[32];
snprintf(total_string, sizeof(total_string), "%lu", total); snprintf(total_string, sizeof(total_string), "%lu", total);
secprintf(SECRET, total_string, "khu"); secprintf(SECRET, total_string, "khu");
} }