On 09/16/2014 03:15 PM, Thomas Falcon wrote: > From: Bharata B Rao <bhar...@linux.vnet.ibm.com> > > - ibm,rtas-configure-connector should treat the RTAS data as big endian. > - Treat ibm,ppc-interrupt-server#s as big-endian when setting > smp_processor_id during hotplug. > > Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> > Signed-off-by: Thomas Falcon <tlfal...@linux.vnet.ibm.com>
Acked-by: Nathan Fontenot <nf...@linux.vnet.ibm.com> > --- > > Changes in v2: > - Don't convert drc_index to BE in dlpar_configure_connector() but instead > convert in the caller dlpar_cpu_probe() so that migration path isn't > affected. > - Mark members of cc_workarea struct as __be32 instead of u32 (Thomas) > - Based on top of Thomas Falcon's two patches. > (http://patchwork.ozlabs.org/patch/388767/) > > v1: http://patchwork.ozlabs.org/patch/386216/ > > arch/powerpc/platforms/pseries/dlpar.c | 22 +++++++++++----------- > arch/powerpc/platforms/pseries/hotplug-cpu.c | 4 ++-- > arch/powerpc/platforms/pseries/pseries.h | 3 ++- > 3 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/arch/powerpc/platforms/pseries/dlpar.c > b/arch/powerpc/platforms/pseries/dlpar.c > index a2450b8..5acbe59 100644 > --- a/arch/powerpc/platforms/pseries/dlpar.c > +++ b/arch/powerpc/platforms/pseries/dlpar.c > @@ -24,11 +24,11 @@ > #include <asm/rtas.h> > > struct cc_workarea { > - u32 drc_index; > - u32 zero; > - u32 name_offset; > - u32 prop_length; > - u32 prop_offset; > + __be32 drc_index; > + __be32 zero; > + __be32 name_offset; > + __be32 prop_length; > + __be32 prop_offset; > }; > > void dlpar_free_cc_property(struct property *prop) > @@ -48,11 +48,11 @@ static struct property *dlpar_parse_cc_property(struct > cc_workarea *ccwa) > if (!prop) > return NULL; > > - name = (char *)ccwa + ccwa->name_offset; > + name = (char *)ccwa + be32_to_cpu(ccwa->name_offset); > prop->name = kstrdup(name, GFP_KERNEL); > > - prop->length = ccwa->prop_length; > - value = (char *)ccwa + ccwa->prop_offset; > + prop->length = be32_to_cpu(ccwa->prop_length); > + value = (char *)ccwa + be32_to_cpu(ccwa->prop_offset); > prop->value = kmemdup(value, prop->length, GFP_KERNEL); > if (!prop->value) { > dlpar_free_cc_property(prop); > @@ -78,7 +78,7 @@ static struct device_node *dlpar_parse_cc_node(struct > cc_workarea *ccwa, > if (!dn) > return NULL; > > - name = (char *)ccwa + ccwa->name_offset; > + name = (char *)ccwa + be32_to_cpu(ccwa->name_offset); > dn->full_name = kasprintf(GFP_KERNEL, "%s/%s", path, name); > if (!dn->full_name) { > kfree(dn); > @@ -125,7 +125,7 @@ void dlpar_free_cc_nodes(struct device_node *dn) > #define CALL_AGAIN -2 > #define ERR_CFG_USE -9003 > > -struct device_node *dlpar_configure_connector(u32 drc_index, > +struct device_node *dlpar_configure_connector(__be32 drc_index, > struct device_node *parent) > { > struct device_node *dn; > @@ -411,7 +411,7 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t > count) > if (!parent) > return -ENODEV; > > - dn = dlpar_configure_connector(drc_index, parent); > + dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent); > if (!dn) > return -EINVAL; > > diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c > b/arch/powerpc/platforms/pseries/hotplug-cpu.c > index 20d6297..447f8c6 100644 > --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c > +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c > @@ -247,7 +247,7 @@ static int pseries_add_processor(struct device_node *np) > unsigned int cpu; > cpumask_var_t candidate_mask, tmp; > int err = -ENOSPC, len, nthreads, i; > - const u32 *intserv; > + const __be32 *intserv; > > intserv = of_get_property(np, "ibm,ppc-interrupt-server#s", &len); > if (!intserv) > @@ -293,7 +293,7 @@ static int pseries_add_processor(struct device_node *np) > for_each_cpu(cpu, tmp) { > BUG_ON(cpu_present(cpu)); > set_cpu_present(cpu, true); > - set_hard_smp_processor_id(cpu, *intserv++); > + set_hard_smp_processor_id(cpu, be32_to_cpu(*intserv++)); > } > err = 0; > out_unlock: > diff --git a/arch/powerpc/platforms/pseries/pseries.h > b/arch/powerpc/platforms/pseries/pseries.h > index 361add6..1796c54 100644 > --- a/arch/powerpc/platforms/pseries/pseries.h > +++ b/arch/powerpc/platforms/pseries/pseries.h > @@ -56,7 +56,8 @@ extern void hvc_vio_init_early(void); > /* Dynamic logical Partitioning/Mobility */ > extern void dlpar_free_cc_nodes(struct device_node *); > extern void dlpar_free_cc_property(struct property *); > -extern struct device_node *dlpar_configure_connector(u32, struct device_node > *); > +extern struct device_node *dlpar_configure_connector(__be32, > + struct device_node *); > extern int dlpar_attach_node(struct device_node *); > extern int dlpar_detach_node(struct device_node *); > > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev