arm64: Remove fixmap include fragility
authorMark Rutland <mark.rutland@arm.com>
Fri, 26 Feb 2016 14:31:32 +0000 (14:31 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 26 Feb 2016 15:22:53 +0000 (15:22 +0000)
commit3eca86e75ec7a7d4b9a9c8091b11676f7bd2a39f
tree8e1b4380409a85a922ee0d3f622b5dd4d16bcfad
parent104a0c02e8b1936c049e18a6d4e4ab040fb61213
arm64: Remove fixmap include fragility

The asm-generic fixmap.h depends on each architecture's fixmap.h to pull
in the definition of PAGE_KERNEL_RO, if this exists. In the absence of
this, FIXMAP_PAGE_RO will not be defined. In mm/early_ioremap.c the
definition of early_memremap_ro is predicated on FIXMAP_PAGE_RO being
defined.

Currently, the arm64 fixmap.h doesn't include pgtable.h for the
definition of PAGE_KERNEL_RO, and as a knock-on effect early_memremap_ro
is not always defined, leading to link-time failures when it is used.
This has been observed with defconfig on next-20160226.

Unfortunately, as pgtable.h includes fixmap.h, adding the include
introduces a circular dependency, which is just as fragile.

Instead, this patch factors out PAGE_KERNEL_RO and other prot
definitions into a new pgtable-prot header which can be included by poth
pgtable.h and fixmap.h, avoiding the  circular dependency, and ensuring
that early_memremap_ro is alwyas defined where it is used.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reported-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/fixmap.h
arch/arm64/include/asm/pgtable-prot.h [new file with mode: 0644]
arch/arm64/include/asm/pgtable.h