[PATCH 01/15] ppc: fix return type of BUID_{HI,LO} macros

Linas Vepstas linasvepstas at gmail.com
Fri Sep 17 08:54:46 EST 2010


Acked-by: Linas Vepstas <linasvepstas at 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 <nacc at 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 <miltonm at bga.com>
> Signed-off-by: Nishanth Aravamudan <nacc at 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
>
>


More information about the Linuxppc-dev mailing list