On 10.01.2018 22:53, David Hildenbrand wrote: > We now have the range of free memory, let's initialize the physical > allocator. It is now possible to use alloc_page()/alloc_pages(). > > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > --- > lib/s390x/sclp.c | 13 +++++++++++++ > s390x/Makefile | 3 +++ > 2 files changed, 16 insertions(+) > > diff --git a/lib/s390x/sclp.c b/lib/s390x/sclp.c > index ee56820..c0492b8 100644 > --- a/lib/s390x/sclp.c > +++ b/lib/s390x/sclp.c > @@ -14,14 +14,23 @@ > #include <asm/page.h> > #include <asm/arch_def.h> > #include "sclp.h" > +#include <alloc_phys.h> > + > +extern unsigned long stacktop; > > static char _sccb[PAGE_SIZE] __attribute__((__aligned__(4096))); > static uint64_t storage_increment_size; > static uint64_t max_ram_size; > static uint64_t ram_size; > > +static void mem_init(phys_addr_t freemem_start, phys_addr_t mem_end) > +{ > + phys_alloc_init(freemem_start, ram_size - freemem_start); > +} > + > void sclp_memory_setup(void) > { > + phys_addr_t freemem_start; > ReadInfo *ri = (void *)_sccb; > uint64_t rnmax, rnsize; > > @@ -49,4 +58,8 @@ void sclp_memory_setup(void) > while (ram_size < max_ram_size && > tprot(ram_size + storage_increment_size - 1)) > ram_size += storage_increment_size; > + > + /* leave another extra page free */ > + freemem_start = ((phys_addr_t)&stacktop + PAGE_SIZE) & PAGE_MASK; <bikeshedpainting> I think I'd rather move that above line into mem_init() instead... </bikeshedpainting> Thomas