Remove page refcnts
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 17 Aug 2016 21:22:10 +0000 (17:22 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit7e84acbc69f7cd2da77cd6554c8141095256c758
tree4fde50838ade08f8878afe3175cd3580ceaa2ce2
parentb75520f6e0ec68e0325a3764cfcb4d9b836c65da
Remove page refcnts

page_decref() is just page_free(), now.  I'll do a rename in a later
commit.  We still needed to track if it was free or not for the currently
lousy memory allocator.

There might be issues with this, but if you aren't willing to potentially
break compatibility with Linux, then you'll never get anywhere.

There are a few reasons to do reference counts.  Only one we still have is
for devices that want to pin user memory for operations.  Specifically, the
mlx4 OS-bypass stuff does this.  The problem is that the user allocs memory
and gives arbitrary addresses to the device.  Instead, we should have the
device own the memory and let the user mmap the memory.  That gets rid of
any issues with locking the page, since the memory is always 'safe.'

That model doesn't work with traditional scatter-gather.  Worst case, we
can come up with something where we lock the VMR, instead of the page.
Though I'd rather come up with more explicit block data transfer
interfaces.

Note that the mlx4 OS-bypass is extremely dangerous now.  I think it was
always leaking memory before, btw.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/riscv/page_alloc.c
kern/arch/x86/page_alloc.c
kern/drivers/net/bnx2x/bnx2x_cmn.c
kern/drivers/net/udrvr/compat.c
kern/include/page_alloc.h
kern/src/page_alloc.c
scripts/spatch/linux/memory.cocci