|
Michal Suchanek |
ac7cae |
From e978a3ccaa714b5ff125857d2cbecbb6fdf6c094 Mon Sep 17 00:00:00 2001
|
|
Michal Suchanek |
ac7cae |
From: Nathan Lynch <nathanl@linux.ibm.com>
|
|
Michal Suchanek |
ac7cae |
Date: Fri, 12 Jun 2020 00:12:38 -0500
|
|
Michal Suchanek |
ac7cae |
Subject: [PATCH] powerpc/pseries: remove obsolete memory hotplug DT notifier
|
|
Michal Suchanek |
ac7cae |
code
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
References: bsc#1181674 ltc#189159
|
|
Michal Suchanek |
ac7cae |
Patch-mainline: v5.9-rc1
|
|
Michal Suchanek |
ac7cae |
Git-commit: e978a3ccaa714b5ff125857d2cbecbb6fdf6c094
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
pseries_update_drconf_memory() runs from a DT notifier in response to
|
|
Michal Suchanek |
ac7cae |
an update to the ibm,dynamic-memory property of the
|
|
Michal Suchanek |
ac7cae |
/ibm,dynamic-reconfiguration-memory node. This property is an older
|
|
Michal Suchanek |
ac7cae |
less compact format than the ibm,dynamic-memory-v2 property used in
|
|
Michal Suchanek |
ac7cae |
most currently supported firmwares. There has never been an equivalent
|
|
Michal Suchanek |
ac7cae |
function for the v2 property.
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
pseries_update_drconf_memory() compares the 'assigned' flag for each
|
|
Michal Suchanek |
ac7cae |
LMB in the old vs new properties and adds or removes the block
|
|
Michal Suchanek |
ac7cae |
accordingly. However it appears to be of no actual utility:
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
* Partition suspension and PRRNs are specified only to change LMBs'
|
|
Michal Suchanek |
ac7cae |
NUMA affinity information. This notifier should be a no-op for those
|
|
Michal Suchanek |
ac7cae |
scenarios since the assigned flags should not change.
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
* The memory hotplug/DLPAR path has a hack which short-circuits
|
|
Michal Suchanek |
ac7cae |
execution of the notifier:
|
|
Michal Suchanek |
ac7cae |
dlpar_memory()
|
|
Michal Suchanek |
ac7cae |
...
|
|
Michal Suchanek |
ac7cae |
rtas_hp_event = true;
|
|
Michal Suchanek |
ac7cae |
drmem_update_dt()
|
|
Michal Suchanek |
ac7cae |
of_update_property()
|
|
Michal Suchanek |
ac7cae |
pseries_memory_notifier()
|
|
Michal Suchanek |
ac7cae |
pseries_update_drconf_memory()
|
|
Michal Suchanek |
ac7cae |
if (rtas_hp_event) return;
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
So this code only makes sense as a relic of the time when more of the
|
|
Michal Suchanek |
ac7cae |
DLPAR workflow took place in user space. I don't see a purpose for it
|
|
Michal Suchanek |
ac7cae |
now.
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
|
|
Michal Suchanek |
ac7cae |
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
|
Michal Suchanek |
ac7cae |
Link: https://lore.kernel.org/r/20200612051238.1007764-19-nathanl@linux.ibm.com
|
|
Michal Suchanek |
ac7cae |
Acked-by: Michal Suchanek <msuchanek@suse.de>
|
|
Michal Suchanek |
ac7cae |
---
|
|
Michal Suchanek |
ac7cae |
.../platforms/pseries/hotplug-memory.c | 65 +------------------
|
|
Michal Suchanek |
ac7cae |
1 file changed, 1 insertion(+), 64 deletions(-)
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
|
|
Michal Suchanek |
ac7cae |
index 67ece3ac9ac2..73a5dcd977e1 100644
|
|
Michal Suchanek |
ac7cae |
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
|
|
Michal Suchanek |
ac7cae |
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
|
|
Michal Suchanek |
ac7cae |
@@ -22,8 +22,6 @@
|
|
Michal Suchanek |
ac7cae |
#include <asm/drmem.h>
|
|
Michal Suchanek |
ac7cae |
#include "pseries.h"
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
-static bool rtas_hp_event;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
unsigned long pseries_memory_block_size(void)
|
|
Michal Suchanek |
ac7cae |
{
|
|
Michal Suchanek |
ac7cae |
struct device_node *np;
|
|
Michal Suchanek |
ac7cae |
@@ -871,11 +869,8 @@ int dlpar_memory(struct pseries_hp_errorlog *hp_elog)
|
|
Michal Suchanek |
ac7cae |
break;
|
|
Michal Suchanek |
ac7cae |
}
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
- if (!rc) {
|
|
Michal Suchanek |
ac7cae |
- rtas_hp_event = true;
|
|
Michal Suchanek |
ac7cae |
+ if (!rc)
|
|
Michal Suchanek |
ac7cae |
rc = drmem_update_dt();
|
|
Michal Suchanek |
ac7cae |
- rtas_hp_event = false;
|
|
Michal Suchanek |
ac7cae |
- }
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
unlock_device_hotplug();
|
|
Michal Suchanek |
ac7cae |
return rc;
|
|
Michal Suchanek |
ac7cae |
@@ -911,60 +906,6 @@ static int pseries_add_mem_node(struct device_node *np)
|
|
Michal Suchanek |
ac7cae |
return (ret < 0) ? -EINVAL : 0;
|
|
Michal Suchanek |
ac7cae |
}
|
|
Michal Suchanek |
ac7cae |
|
|
Michal Suchanek |
ac7cae |
-static int pseries_update_drconf_memory(struct of_reconfig_data *pr)
|
|
Michal Suchanek |
ac7cae |
-{
|
|
Michal Suchanek |
ac7cae |
- struct of_drconf_cell_v1 *new_drmem, *old_drmem;
|
|
Michal Suchanek |
ac7cae |
- unsigned long memblock_size;
|
|
Michal Suchanek |
ac7cae |
- u32 entries;
|
|
Michal Suchanek |
ac7cae |
- __be32 *p;
|
|
Michal Suchanek |
ac7cae |
- int i, rc = -EINVAL;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- if (rtas_hp_event)
|
|
Michal Suchanek |
ac7cae |
- return 0;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- memblock_size = pseries_memory_block_size();
|
|
Michal Suchanek |
ac7cae |
- if (!memblock_size)
|
|
Michal Suchanek |
ac7cae |
- return -EINVAL;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- if (!pr->old_prop)
|
|
Michal Suchanek |
ac7cae |
- return 0;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- p = (__be32 *) pr->old_prop->value;
|
|
Michal Suchanek |
ac7cae |
- if (!p)
|
|
Michal Suchanek |
ac7cae |
- return -EINVAL;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- /* The first int of the property is the number of lmb's described
|
|
Michal Suchanek |
ac7cae |
- * by the property. This is followed by an array of of_drconf_cell
|
|
Michal Suchanek |
ac7cae |
- * entries. Get the number of entries and skip to the array of
|
|
Michal Suchanek |
ac7cae |
- * of_drconf_cell's.
|
|
Michal Suchanek |
ac7cae |
- */
|
|
Michal Suchanek |
ac7cae |
- entries = be32_to_cpu(*p++);
|
|
Michal Suchanek |
ac7cae |
- old_drmem = (struct of_drconf_cell_v1 *)p;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- p = (__be32 *)pr->prop->value;
|
|
Michal Suchanek |
ac7cae |
- p++;
|
|
Michal Suchanek |
ac7cae |
- new_drmem = (struct of_drconf_cell_v1 *)p;
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
- for (i = 0; i < entries; i++) {
|
|
Michal Suchanek |
ac7cae |
- if ((be32_to_cpu(old_drmem[i].flags) & DRCONF_MEM_ASSIGNED) &&
|
|
Michal Suchanek |
ac7cae |
- (!(be32_to_cpu(new_drmem[i].flags) & DRCONF_MEM_ASSIGNED))) {
|
|
Michal Suchanek |
ac7cae |
- rc = pseries_remove_memblock(
|
|
Michal Suchanek |
ac7cae |
- be64_to_cpu(old_drmem[i].base_addr),
|
|
Michal Suchanek |
ac7cae |
- memblock_size);
|
|
Michal Suchanek |
ac7cae |
- break;
|
|
Michal Suchanek |
ac7cae |
- } else if ((!(be32_to_cpu(old_drmem[i].flags) &
|
|
Michal Suchanek |
ac7cae |
- DRCONF_MEM_ASSIGNED)) &&
|
|
Michal Suchanek |
ac7cae |
- (be32_to_cpu(new_drmem[i].flags) &
|
|
Michal Suchanek |
ac7cae |
- DRCONF_MEM_ASSIGNED)) {
|
|
Michal Suchanek |
ac7cae |
- rc = memblock_add(be64_to_cpu(old_drmem[i].base_addr),
|
|
Michal Suchanek |
ac7cae |
- memblock_size);
|
|
Michal Suchanek |
ac7cae |
- rc = (rc < 0) ? -EINVAL : 0;
|
|
Michal Suchanek |
ac7cae |
- break;
|
|
Michal Suchanek |
ac7cae |
- }
|
|
Michal Suchanek |
ac7cae |
- }
|
|
Michal Suchanek |
ac7cae |
- return rc;
|
|
Michal Suchanek |
ac7cae |
-}
|
|
Michal Suchanek |
ac7cae |
-
|
|
Michal Suchanek |
ac7cae |
static int pseries_memory_notifier(struct notifier_block *nb,
|
|
Michal Suchanek |
ac7cae |
unsigned long action, void *data)
|
|
Michal Suchanek |
ac7cae |
{
|
|
Michal Suchanek |
ac7cae |
@@ -978,10 +919,6 @@ static int pseries_memory_notifier(struct notifier_block *nb,
|
|
Michal Suchanek |
ac7cae |
case OF_RECONFIG_DETACH_NODE:
|
|
Michal Suchanek |
ac7cae |
err = pseries_remove_mem_node(rd->dn);
|
|
Michal Suchanek |
ac7cae |
break;
|
|
Michal Suchanek |
ac7cae |
- case OF_RECONFIG_UPDATE_PROPERTY:
|
|
Michal Suchanek |
ac7cae |
- if (!strcmp(rd->prop->name, "ibm,dynamic-memory"))
|
|
Michal Suchanek |
ac7cae |
- err = pseries_update_drconf_memory(rd);
|
|
Michal Suchanek |
ac7cae |
- break;
|
|
Michal Suchanek |
ac7cae |
}
|
|
Michal Suchanek |
ac7cae |
return notifier_from_errno(err);
|
|
Michal Suchanek |
ac7cae |
}
|
|
Michal Suchanek |
ac7cae |
--
|
|
Michal Suchanek |
ac7cae |
2.26.2
|
|
Michal Suchanek |
ac7cae |
|