Fix compile failures due to arm64 includes in stable kernels

Stefano Stabellini sstabellini at kernel.org
Tue Mar 27 17:23:47 PDT 2018


On Sun, 25 Mar 2018, Sebastian Kemper wrote:
> Hello all,
> 
> Some older stable kernels provide some arm64 headers like opcodes.h,
> that include their non-64bit equivalents. For example:
> 
> arch/arm64/include/asm/opcodes.h
> 
> tries to include
> 
> <../../arm/include/asm/opcodes.h>
> 
> It's obvious that there is one hierarchy level missing. This causes
> build failures:
> 
>     CC [M]  /build/lede-snapshots/aarch64_cortex-a53/build/sdk/build_dir/target-aarch64_cortex-a53_musl/linux-brcm2708_bcm2710/dahdi-linux-2.11.1-20180111/drivers/dahdi/dahdi-base.o
>   In file included from ./arch/arm64/include/asm/sysreg.h:25:0,
>                    from ./arch/arm64/include/asm/cputype.h:94,
>                    from ./arch/arm64/include/asm/cachetype.h:19,
>                    from ./arch/arm64/include/asm/cache.h:19,
>                    from ./include/linux/cache.h:5,
>                    from ./include/linux/printk.h:8,
>                    from ./include/linux/kernel.h:13,
>                    from /build/lede-snapshots/aarch64_cortex-a53/build/sdk/build_dir/target-aarch64_cortex-a53_musl/linux-brcm2708_bcm2710/dahdi-linux-2.11.1-20180111/drivers/dahdi/dahdi-base.c:38:
>   ./arch/arm64/include/asm/opcodes.h:5:10: fatal error: ../../arm/include/asm/opcodes.h: No such file or directory
>    #include <../../arm/include/asm/opcodes.h>
>             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   compilation terminated.
> 
> Some example packages that fail to build are dahdi-linux and
> cryptodev-linux.
> 
> linux-3.16.56:
>   - does not have opcodes.h, but the xen headers
> 
>       hypercall.h
>       interface.h
>       hypervisor.h
>       page.h
>       
>     have the wrong include lines.
>     
> linux-4.1.50:
>   - affected (needs a small change in the patch for opcodes.h due to slightly different layout)
>   
> linux-4.4.123:
>   - affected
>   
> linux-4.9.89:
>   - affected
> 
> The attached patch fixes the includes.
> 
> I understand that to get a patch accepted into the stable series one
> needs to provide a commit to master. But in this case that doesn't seem
> possible as these headers do not exist anymore in newer kernels.
> 
> What do you think? Does the above make sense to you to backport to the
> stable kernels?

It is not actually a bug: the path was correct given the way the
Makefiles were written -- if you build a regular arm64 kernel with the
default config and CONFIG_XEN enabled, it will work fine.

I am guessing you see these issues with out-of-tree modules, right?

Fortunately, on newer kernels the whole thing has been reworked, and
should solve the problem for you. The commit you are looking for is
2fbadc3002c5f172d20aa2e7e48920c5f14ed11f:

commit 7465c84a9380779235af42146dae6798b89b1d12
Author: Marc Zyngier <marc.zyngier at arm.com>
Date:   Fri Dec 2 14:19:35 2016 +0000

    arm/arm64: xen: Move shared architecture headers to include/xen/arm
    
    ARM and arm64 Xen ports share a number of headers, leading to
    packaging issues when these headers needs to be exported, as it
    breaks the reasonable requirement that an architecture port
    has self-contained headers.
    
    Fix the issue by moving the 5 header files to include/xen/arm,
    and keep local placeholders to include the relevant files.
    
    Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
    Reviewed-by: Stefano Stabellini <sstabellini at kernel.org>

I am CC'ing the original author.



More information about the linux-arm-kernel mailing list