On 02/11/2016 21:52, Andrew Jones wrote: > This will allow other arches to use {alloc,free}_page. > > Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> > --- > lib/alloc.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ > lib/alloc.h | 10 ++++++++++ > lib/x86/vm.c | 48 ++---------------------------------------------- > x86/Makefile.common | 1 + > 4 files changed, 62 insertions(+), 46 deletions(-) > > diff --git a/lib/alloc.c b/lib/alloc.c > index 1d990a803825..ce1198e2977f 100644 > --- a/lib/alloc.c > +++ b/lib/alloc.c > @@ -5,6 +5,7 @@ > */ > #include "alloc.h" > #include "asm/spinlock.h" > +#include "asm/page.h" > #include "asm/io.h" > > #define MIN(a, b) ((a) < (b) ? (a) : (b)) > @@ -150,6 +151,54 @@ phys_addr_t phys_zalloc(phys_addr_t size) > return phys_zalloc_aligned(size, phys_alloc_align_min); > } > > +static struct spinlock heap_lock; > +static void *heap_free_head; > + > +void heap_init(void *start, size_t size) > +{ > + void *p = start; why do you introduce "p"? It's not obvious for me... > + > + assert(!((unsigned long)start & ~PAGE_MASK)); > + > + spin_lock(&heap_lock); > + > + heap_free_head = NULL; > + > + while (size >= PAGE_SIZE) { > + *(void **)p = heap_free_head; > + heap_free_head = p; > + p += PAGE_SIZE; > + size -= PAGE_SIZE; > + } > + > + spin_unlock(&heap_lock); > +} > + > +void *alloc_page(void) > +{ > + void *p; > + > + spin_lock(&heap_lock); > + > + if (!heap_free_head) > + return NULL; missing unlock propagated from PATCH 1 Laurent -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html