powerpc: Allow ppc_md platform hook to override memory_block_size_bytes
The pseries platform code unconditionally overrides memory_block_size_bytes regardless of the running platform. Create a ppc_md hook that so each platform can choose to do what it wants. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
223ca9d855
commit
a5d862576a
@@ -21,7 +21,7 @@
|
||||
#include <asm/prom.h>
|
||||
#include <asm/sparsemem.h>
|
||||
|
||||
static unsigned long get_memblock_size(void)
|
||||
unsigned long pseries_memory_block_size(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE;
|
||||
@@ -64,17 +64,6 @@ static unsigned long get_memblock_size(void)
|
||||
return memblock_size;
|
||||
}
|
||||
|
||||
/* WARNING: This is going to override the generic definition whenever
|
||||
* pseries is built-in regardless of what platform is active at boot
|
||||
* time. This is fine for now as this is the only "option" and it
|
||||
* should work everywhere. If not, we'll have to turn this into a
|
||||
* ppc_md. callback
|
||||
*/
|
||||
unsigned long memory_block_size_bytes(void)
|
||||
{
|
||||
return get_memblock_size();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
static int pseries_remove_memory(u64 start, u64 size)
|
||||
{
|
||||
@@ -105,7 +94,7 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz
|
||||
if (!pfn_valid(start_pfn))
|
||||
goto out;
|
||||
|
||||
block_sz = memory_block_size_bytes();
|
||||
block_sz = pseries_memory_block_size();
|
||||
sections_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE;
|
||||
nid = memory_add_physaddr_to_nid(base);
|
||||
|
||||
@@ -201,7 +190,7 @@ static int pseries_update_drconf_memory(struct of_prop_reconfig *pr)
|
||||
u32 *p;
|
||||
int i, rc = -EINVAL;
|
||||
|
||||
memblock_size = get_memblock_size();
|
||||
memblock_size = pseries_memory_block_size();
|
||||
if (!memblock_size)
|
||||
return -EINVAL;
|
||||
|
||||
|
@@ -64,4 +64,6 @@ extern int dlpar_detach_node(struct device_node *);
|
||||
struct pci_host_bridge;
|
||||
int pseries_root_bridge_prepare(struct pci_host_bridge *bridge);
|
||||
|
||||
unsigned long pseries_memory_block_size(void);
|
||||
|
||||
#endif /* _PSERIES_PSERIES_H */
|
||||
|
@@ -810,4 +810,7 @@ define_machine(pseries) {
|
||||
#ifdef CONFIG_KEXEC
|
||||
.machine_kexec = pSeries_machine_kexec,
|
||||
#endif
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
|
||||
.memory_block_size = pseries_memory_block_size,
|
||||
#endif
|
||||
};
|
||||
|
Reference in New Issue
Block a user