[openib-general] ofed 1.2 - compilation erros on ppc64 and ia64

Yosef Etigin yosefe at voltaire.com
Tue Dec 26 23:27:41 PST 2006


Michael S. Tsirkin wrote:
>>>Subject: Re: ofed 1.2 - compilation erros on ppc64 and ia64
>>>
>>>Michael S. Tsirkin wrote:
>>>
>>>
>>>
>>>>>>Quoting r. Yosef Etigin <yosefe at voltaire.com>:
>>>>>>Subject: ofed 1.2 - compilation erros on ppc64 and ia64
>>>>>>  
>>>>>>
>>>>>
>>>>>Which distro are you testing on?
>>>>>
>>>>>
>>>>>
>>>>
>>>>I am testing on sles10, both ia64 and ppc64.
>>>>
>>>>
>>>>
>>>>>>Hello,
>>>>>>I've been testing ofed 1.2 build from 
>>>>>>http://staging.openfabrics.org/builds/ 
>>>>>><http://staging.openfabrics.org/build/>, (latest.tgz versions both user 
>>>>>>and kernel) and got compilation erros on: ia64, ppc64:
>>>>>>
>>>>>>*ppc64:*
>>>>>>
>>>>>>  make -w -C ip ip
>>>>>>  make[2]: Entering directory
>>>>>>  `/tmp/openib_gen2/userspace/src/userspace/ipoibtools/iproute2/ip'
>>>>>>  [ ... omitted text ... ]
>>>>>>  gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -I../include
>>>>>>  -DRESOLVE_HOSTNAMES -c -o xfrm_monitor.o xfrm_monitor.c
>>>>>>  gcc -g -O2 -m64 -L/usr/lib64 ip.o ipaddress.o iproute.o iprule.o
>>>>>>  rtm_map.o iptunnel.o ipneigh.o ipntable.o iplink.o ipmaddr.o
>>>>>>  ipmonitor.o ipmroute.o ipprefix.o ipxfrm.o xfrm_state.o
>>>>>>  xfrm_policy.o xfrm_monitor.o ../lib/libnetlink.a ../lib/libutil.a
>>>>>>  -lresolv -L../lib -lnetlink -lutil -o ip
>>>>>>  /usr/bin/ld: skipping incompatible ../lib/libnetlink.a when
>>>>>>  searching for -lnetlink
>>>>>>  /usr/bin/ld: skipping incompatible
>>>>>>  /usr/lib/gcc/powerpc64-suse-linux/4.1.0/../../../libnetlink.a when
>>>>>>  searching for -lnetlink
>>>>>>  /usr/bin/ld: skipping incompatible /usr/lib/libnetlink.a when
>>>>>>  searching for -lnetlink
>>>>>>  /usr/bin/ld: cannot find -lnetlink
>>>>>>  collect2: ld returned 1 exit status
>>>>>>  make[2]: *** [ip] Error 1
>>>>>>
>>>>>>possible cause: the src/userspace/ipoibtools/iproute2/Makefile overrides 
>>>>>>CFLAGS (= instead of +=)
>>>>>>  
>>>>>>
>>>>>
>>>>>Isn't this makefile part of iproute2?
>>>>>Can you build iproute on this platform?
>>>>>
>>>>>
>>>>
>>>>This makefile is indeed of iproute,
>>>>but it seems to make 32-bit object files for `iproute' during compilation
>>>>and therefore fails to find 64-bit during linkage of `ip'.
>>>
>>>
>>>Will installing the 32 bit version of the library help?
>>>
>>>
>>
>>I dont think so.. the issue arised during compilation, since `iproute' 
>>was inconsinsten in its use of -m64:
>>The iproute Makefile overrides any `CFLAGS' it might get from top-level, 
>>thus throwing `-m64' away, while LDFLAGS are not overriden.
>>Therefore, the compilation is done in 32bit while the linkage in 64bit
> 
> 
> Probably the easies thing is to fix iproute. Patch?
> 
> 
>>>>>	
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>*ia64:*
>>>>>>
>>>>>>  make -f /usr/src/linux-2.6.16.21-0.8/scripts/Makefile.build
>>>>>>  obj=/tmp/openib_gen2/kernel/drivers/infiniband/core
>>>>>>  gcc [ ... omitted text ... ] -c -o
>>>>>>  /tmp/openib_gen2/kernel/drivers/infiniband/core/.tmp_addr.o
>>>>>>  /tmp/openib_gen2/kernel/drivers/infiniband/core/addr.c
>>>>>>  In file included from /tmp/openib_gen2/kernel/include/rdma/ib_addr.h:37,
>>>>>>  from /tmp/openib_gen2/kernel/drivers/infiniband/core/addr.c:38:
>>>>>>  /tmp/openib_gen2/kernel/include/rdma/ib_verbs.h: In function
>>>>>>  ‘ib_sg_dma_address’:
>>>>>>  /tmp/openib_gen2/kernel/include/rdma/ib_verbs.h:1577: error:
>>>>>>  implicit declaration of function ‘sg_dma_address’
>>>>>>  /tmp/openib_gen2/kernel/include/rdma/ib_verbs.h: In function
>>>>>>  ‘ib_sg_dma_len’:
>>>>>>  /tmp/openib_gen2/kernel/include/rdma/ib_verbs.h:1590: error:
>>>>>>  implicit declaration of function ‘sg_dma_len’
>>>>>>  /tmp/openib_gen2/kernel/drivers/infiniband/core/addr.c: At top level:
>>>>>>  /tmp/openib_gen2/kernel/drivers/infiniband/core/addr.c:61: warning:
>>>>>>  initialization from incompatible pointer type
>>>>>>  [ ... omitted text ... ]
>>>>>>  make: *** [kernel] Error 2
>>>>>>  
>>>>>>
>>>>>
>>>>>Probably a distro-specific backport problem - check how come sg_dma_len is not defined.
>>>>>I see this on upstream 2.6.16
>>>>>	asm-powerpc/scatterlist.h:#define sg_dma_len(sg) ((sg)->dma_length)
>>>>>
>>>>>
>>>>
>>>>Im running this of ia64, `sg_dma_len' is not defined there, nor anywhere 
>>>>else in this file, but in:
>>>>       ./asm-ia64/pci.h:82:#define sg_dma_len(sg)    ((sg)->dma_length)
>>>>
>>>
>>>
>>>Isee, its fixed on 2.6.20.
>>>Need to do something about it in the backport then.
>>>
>>>I wonder whether we can just put
>>>#ifdef __ia64__
>>>#define sg_dma_len(sg)          ((sg)->dma_length)
>>>#endif
>>>
>>>in kernel_addons/backports/2.6.16/include/asm/scatterlist.h
>>>
>>>Also need tofind out in which kernel this was fixed.
>>>
>>
>>Looks like in all kernels up to 2.6.20 it was in `pci.h' so need to 
>>backtort to.. all previous versions
> 
> 
> Right. Try sticking this in kernel_addons/backports/2.6.20 and
> copying it over.
> 

OK, I put:

#ifndef BACKPORT_SCATTERLIST_H
#define BACKPORT_SCATTERLIST_H

#include_next <asm/scatterlist.h>

#ifdef __ia64__
#define sg_dma_address(sg)     ((sg)->dma_address)
#define sg_dma_len(sg)         ((sg)->dma_length)
#endif

#endif

in kernel_addons/backport/X where X<=2.6.19
and it does the job

--
Yossi




More information about the general mailing list