Acked-by: Linas Vepstas <linasveps...@gmail.com> I'm guessing this worked up til now because the rtas_call function prototype was telling compiler to cast these to 32-bit before passing them as args. (and since these would still get passed as one arg per 64-bit reg, it still wouldn't go wrong.)
What I'm wondering about is why there was no compiler warning about an implicit cast of a 64-bit int to a 32-bit int? Surely, this is something that should be warned about! -- Linas On 15 September 2010 13:13, Nishanth Aravamudan <n...@us.ibm.com> wrote: > BUID_HI and BUID_LO are used to pass data to call_rtas, which expects > ints or u32s. But the macro doesn't cast the return, so the result is > still u64. Use the upper_32_bits and lower_32_bits macros that have been > added to kernel.h. > > Found by getting printf format errors trying to debug print the args, no > actual code change for 64 bit kernels where the macros are actually > used. > > Signed-off-by: Milton Miller <milt...@bga.com> > Signed-off-by: Nishanth Aravamudan <n...@us.ibm.com> > --- > arch/powerpc/include/asm/ppc-pci.h | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/include/asm/ppc-pci.h > b/arch/powerpc/include/asm/ppc-pci.h > index 42fdff0..43268f1 100644 > --- a/arch/powerpc/include/asm/ppc-pci.h > +++ b/arch/powerpc/include/asm/ppc-pci.h > @@ -28,8 +28,8 @@ extern void find_and_init_phbs(void); > extern struct pci_dev *isa_bridge_pcidev; /* may be NULL if no ISA bus > */ > > /** Bus Unit ID macros; get low and hi 32-bits of the 64-bit BUID */ > -#define BUID_HI(buid) ((buid) >> 32) > -#define BUID_LO(buid) ((buid) & 0xffffffff) > +#define BUID_HI(buid) upper_32_bits(buid) > +#define BUID_LO(buid) lower_32_bits(buid) > > /* PCI device_node operations */ > struct device_node; > -- > 1.7.0.4 > > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev