[SPARC64]: Initialize MDESC earlier and use lmb_alloc()
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ad072004ca
commit
4a28333984
2 changed files with 19 additions and 15 deletions
|
@ -1,10 +1,10 @@
|
|||
/* mdesc.c: Sun4V machine description handling.
|
||||
*
|
||||
* Copyright (C) 2007 David S. Miller <davem@davemloft.net>
|
||||
* Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/lmb.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -84,24 +84,28 @@ static void mdesc_handle_init(struct mdesc_handle *hp,
|
|||
hp->handle_size = handle_size;
|
||||
}
|
||||
|
||||
static struct mdesc_handle * __init mdesc_bootmem_alloc(unsigned int mdesc_size)
|
||||
static struct mdesc_handle * __init mdesc_lmb_alloc(unsigned int mdesc_size)
|
||||
{
|
||||
struct mdesc_handle *hp;
|
||||
unsigned int handle_size, alloc_size;
|
||||
struct mdesc_handle *hp;
|
||||
unsigned long paddr;
|
||||
|
||||
handle_size = (sizeof(struct mdesc_handle) -
|
||||
sizeof(struct mdesc_hdr) +
|
||||
mdesc_size);
|
||||
alloc_size = PAGE_ALIGN(handle_size);
|
||||
|
||||
hp = __alloc_bootmem(alloc_size, PAGE_SIZE, 0UL);
|
||||
if (hp)
|
||||
mdesc_handle_init(hp, handle_size, hp);
|
||||
paddr = lmb_alloc(alloc_size, PAGE_SIZE);
|
||||
|
||||
hp = NULL;
|
||||
if (paddr) {
|
||||
hp = __va(paddr);
|
||||
mdesc_handle_init(hp, handle_size, hp);
|
||||
}
|
||||
return hp;
|
||||
}
|
||||
|
||||
static void mdesc_bootmem_free(struct mdesc_handle *hp)
|
||||
static void mdesc_lmb_free(struct mdesc_handle *hp)
|
||||
{
|
||||
unsigned int alloc_size, handle_size = hp->handle_size;
|
||||
unsigned long start, end;
|
||||
|
@ -124,9 +128,9 @@ static void mdesc_bootmem_free(struct mdesc_handle *hp)
|
|||
}
|
||||
}
|
||||
|
||||
static struct mdesc_mem_ops bootmem_mdesc_ops = {
|
||||
.alloc = mdesc_bootmem_alloc,
|
||||
.free = mdesc_bootmem_free,
|
||||
static struct mdesc_mem_ops lmb_mdesc_ops = {
|
||||
.alloc = mdesc_lmb_alloc,
|
||||
.free = mdesc_lmb_free,
|
||||
};
|
||||
|
||||
static struct mdesc_handle *mdesc_kmalloc(unsigned int mdesc_size)
|
||||
|
@ -888,7 +892,7 @@ void __init sun4v_mdesc_init(void)
|
|||
|
||||
printk("MDESC: Size is %lu bytes.\n", len);
|
||||
|
||||
hp = mdesc_alloc(len, &bootmem_mdesc_ops);
|
||||
hp = mdesc_alloc(len, &lmb_mdesc_ops);
|
||||
if (hp == NULL) {
|
||||
prom_printf("MDESC: alloc of %lu bytes failed.\n", len);
|
||||
prom_halt();
|
||||
|
|
|
@ -1216,6 +1216,9 @@ void __init paging_init(void)
|
|||
|
||||
prom_build_devicetree();
|
||||
|
||||
if (tlb_type == hypervisor)
|
||||
sun4v_mdesc_init();
|
||||
|
||||
/* Setup bootmem... */
|
||||
pages_avail = 0;
|
||||
last_valid_pfn = end_pfn = bootmem_init(&pages_avail, phys_base);
|
||||
|
@ -1224,9 +1227,6 @@ void __init paging_init(void)
|
|||
|
||||
kernel_physical_mapping_init();
|
||||
|
||||
if (tlb_type == hypervisor)
|
||||
sun4v_mdesc_init();
|
||||
|
||||
{
|
||||
unsigned long zones_size[MAX_NR_ZONES];
|
||||
unsigned long zholes_size[MAX_NR_ZONES];
|
||||
|
|
Loading…
Reference in a new issue