• David Howells's avatar
    IB/mthca: Work around gcc bug on sparc64 · 6bdd61d8
    David Howells authored
    For some reason gcc-3.4.5 on sparc64 does:
    
     WARNING: "____ilog2_NaN" [drivers/infiniband/hw/mthca/ib_mthca.ko] undefined!
    
    Points to note:
    
     (1) The asm volatile flush/flushw are just markers for viewing what comes out
         in the assembly; removing them has no effect on the result.
    
     (2) Changing almost anything else in dwh__mthca_arbel_init_srq_context() or
         dwh__mthca_alloc_srq() causes the problem to go away.
    
    The compiler command line issued by the kernel build is:
    
    /opt/crosstool/gcc-3.4.5-glibc-2.3.6/sparc64-unknown-linux-gnu/bin/sparc64-unknown-linux-gnu-gcc -fno-strict-aliasing -fno-common -Os -m64 -mno-fpu -mcpu=ultrasparc -mcmodel=medlow -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wa,--undeclared-regs -pg -fno-omit-frame-pointer -fno-optimize-sibling-calls -fasynchronous-unwind-tables -g  -c -o drivers/infiniband/hw/mthca/.tmp_mthca_srq.o drivers/infiniband/hw/mthca/mthca_srq.c
    
    This can be reduced to this whilst still retaining the problem:
    
    /opt/crosstool/gcc-3.4.5-glibc-2.3.6/sparc64-unknown-linux-gnu/bin/sparc64-unknown-linux-gnu-gcc -m64 -c -o drivers/infiniband/hw/mthca/mthca_srq.o drivers/infiniband/hw/mthca/mthca_srq.c -Os
    
    Removing -Os or changing it to -O or -O0 thru -O6 gets rid of the problem.
    
    This patch to the kernel code fixes the problem:
    
    Cc: "David S. Miller" <davem@davemloft.net>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    6bdd61d8
mthca_srq.c 18.4 KB