Subject: Re: 3.4-rc3 compile failed on IBM Power6

From: Nishanth Aravamudan <[email-masked]>
Date: Tue, 24 Apr 2012 17:54:32 -0700

Hi Ryan,

Thanks for the report!

On 25.04.2012 [08:22:19 +0800], Ryan Wang wrote:
> # gcc --version
> gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
> Copyright (C) 2010 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> platform    : pSeries
> model        : IBM,9117-MMA
> machine        : CHRP IBM,9117-MMA

<snip>

>   CC      arch/powerpc/platforms/pseries/iommu.o
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c: In function
> ?query_ddw?:
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:823: error:
> implicit declaration of function ?pci_dev_to_eeh_dev?
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:823: warning:
> assignment makes pointer from integer without a cast
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:824: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:825: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:826: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:827: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c: In function
> ?create_ddw?:
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:852: warning:
> assignment makes pointer from integer without a cast
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:853: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:854: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:855: error:
> dereferencing pointer to incomplete type
> /usr/src/kernels/linux/arch/powerpc/platforms/pseries/iommu.c:856: error:
> dereferencing pointer to incomplete type
> make[3]: *** [arch/powerpc/platforms/pseries/iommu.o] Error 1
> make[2]: *** [arch/powerpc/platforms/pseries] Error 2
> make[1]: *** [arch/powerpc/platforms] Error 2
> make: *** [sub-make] Error 2

Do you have CONFIG_EEH set in your .config? I'm guessing not, and that
causes pci.h to not define pci_dev_to_eeh_dev().

Gavin, I think this is broken by your
39baadbf36cee3ede5fdb8a34006d9109e5e2570. Probably need a wrapper for
pci_dev_to_eeh_dev() when !CONFIG_EEH?

Actually, looking at it more, eeh_dev, which is protected by CONFIG_EEH
in arch/powerpc/include/asm/eeh.h won't be defined in such situations
and is the type of the return from pci_dev_to_eeh_dev(). So that's going
to be broken completely if !CONFIG_EEH as above.

So maybe the callers should be EEH-unaware (as they were before) and the
callee becomes of the EEH variety (at compile-time) if CONFIG_EEH is
set?

Thanks,
Nish

-- 
Nishanth Aravamudan <[email-masked]>
IBM Linux Technology Center