When called with a null base address, char *obp_memalloc(va,size,align) shall provide the address itself.
(and remove some trailing whitespaces)
Signed-off-by : Olivier Danet odanet@caramail.com
Index: arch/sparc32/lib.c =================================================================== --- arch/sparc32/lib.c (révision 1257) +++ arch/sparc32/lib.c (copie de travail) @@ -212,13 +212,19 @@ phys_addr_t phys; ucell virt;
- DPRINTF("obp_memalloc: virta 0x%x, sz %d, align %d\n", (unsigned int)va, size, align); - + DPRINTF("obp_memalloc: virta 0x%x, sz %d, align %d\n", (unsigned int)va, size, align); + + /* Round to page size */ + size = (size + 0xfff) & 0xFFFFF000; + /* Claim physical memory */ phys = ofmem_claim_phys(-1, size, align);
/* Claim virtual memory */ - virt = ofmem_claim_virt(pointer2cell(va), size, 0); + if (va) + virt = ofmem_claim_virt(pointer2cell(va), size, 0); + else + virt = ofmem_claim_virt(0, size, 0x1000);
/* Map the memory */ ofmem_map(phys, virt, size, ofmem_arch_default_translation_mode(phys)); @@ -230,7 +236,7 @@ { unsigned long align = size;
- DPRINTF("obp_dumb_memalloc: virta 0x%x, sz %d\n", (unsigned int)va, size); + DPRINTF("obp_dumb_memalloc: virta 0x%x, sz %d\n", (unsigned int)va, size);
/* Solaris seems to assume that the returned value is physically aligned to size. e.g. it is used for setting up page tables. Fortunately this is now handled by ===================================================================