aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/Kconfig4
-rw-r--r--arch/sparc/kernel/mdesc.c22
2 files changed, 15 insertions, 11 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index efb00ec75805..e49502acbab4 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -146,6 +146,10 @@ config GENERIC_ISA_DMA
146config ARCH_SUPPORTS_DEBUG_PAGEALLOC 146config ARCH_SUPPORTS_DEBUG_PAGEALLOC
147 def_bool y if SPARC64 147 def_bool y if SPARC64
148 148
149config PGTABLE_LEVELS
150 default 4 if 64BIT
151 default 3
152
149source "init/Kconfig" 153source "init/Kconfig"
150 154
151source "kernel/Kconfig.freezer" 155source "kernel/Kconfig.freezer"
diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c
index 99632a87e697..26c80e18d7b1 100644
--- a/arch/sparc/kernel/mdesc.c
+++ b/arch/sparc/kernel/mdesc.c
@@ -130,26 +130,26 @@ static struct mdesc_mem_ops memblock_mdesc_ops = {
130static struct mdesc_handle *mdesc_kmalloc(unsigned int mdesc_size) 130static struct mdesc_handle *mdesc_kmalloc(unsigned int mdesc_size)
131{ 131{
132 unsigned int handle_size; 132 unsigned int handle_size;
133 struct mdesc_handle *hp;
134 unsigned long addr;
133 void *base; 135 void *base;
134 136
135 handle_size = (sizeof(struct mdesc_handle) - 137 handle_size = (sizeof(struct mdesc_handle) -
136 sizeof(struct mdesc_hdr) + 138 sizeof(struct mdesc_hdr) +
137 mdesc_size); 139 mdesc_size);
138 140
141 /*
142 * Allocation has to succeed because mdesc update would be missed
143 * and such events are not retransmitted.
144 */
139 base = kmalloc(handle_size + 15, GFP_KERNEL | __GFP_NOFAIL); 145 base = kmalloc(handle_size + 15, GFP_KERNEL | __GFP_NOFAIL);
140 if (base) { 146 addr = (unsigned long)base;
141 struct mdesc_handle *hp; 147 addr = (addr + 15UL) & ~15UL;
142 unsigned long addr; 148 hp = (struct mdesc_handle *) addr;
143
144 addr = (unsigned long)base;
145 addr = (addr + 15UL) & ~15UL;
146 hp = (struct mdesc_handle *) addr;
147 149
148 mdesc_handle_init(hp, handle_size, base); 150 mdesc_handle_init(hp, handle_size, base);
149 return hp;
150 }
151 151
152 return NULL; 152 return hp;
153} 153}
154 154
155static void mdesc_kfree(struct mdesc_handle *hp) 155static void mdesc_kfree(struct mdesc_handle *hp)