On Friday 04 August 2017 09:21 AM, Michael Ellerman wrote:
Hari Bathini <hbath...@linux.vnet.ibm.com> writes:

As linux,memory-limit node is set and also later used by the kernel,
avoid endian conversions for this property.

Fixes: 493adffcb43f ("powerpc: Make prom_init.c endian safe")
Cc: sta...@vger.kernel.org # 3.12+
Cc: Anton Blanchard <an...@ozlabs.org>
Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>
Signed-off-by: Hari Bathini <hbath...@linux.vnet.ibm.com>
---
  arch/powerpc/kernel/prom_init.c |    3 +--
  1 file changed, 1 insertion(+), 2 deletions(-)
As Ben said, this is not OK. The flat device tree is a data
structure with a specified format[1], we don't violate the spec just to
avoid an endian swap.

Is there an actual bug you're trying to solve?

Yep. While retrieving this property in prom.c, no endian conversion is being done. It was broken for a while. Let me do the endian swap in prom.c while retrieving..

Thanks
Hari

[1]: https://www.devicetree.org/

diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 613f79f..723df83 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -3180,9 +3180,8 @@ unsigned long __init prom_init(unsigned long r3, unsigned 
long r4,
         * Fill in some infos for use by the kernel later on
         */
        if (prom_memory_limit) {
-               __be64 val = cpu_to_be64(prom_memory_limit);
                prom_setprop(prom.chosen, "/chosen", "linux,memory-limit",
-                            &val, sizeof(val));
+                            &prom_memory_limit, sizeof(prom_memory_limit));
        }
  #ifdef CONFIG_PPC64
        if (prom_iommu_off)

Reply via email to