diff mbox

ARM: small correction to early_ioremap support

Message ID 20170627005731.7869-1-opendmb@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Doug Berger June 27, 2017, 12:57 a.m. UTC
The fixmap pages need to be on the same pmd page for the current
implementation of arm early_fixmap.  A build time bug check is
used to ensure that.  However, the worst case fixmap range is
better represented by __end_of_fixed_addresses than by the value
__end_of_early_ioremap_region.

Fixes: 2937367b8a4b ("ARM: add support for generic early_ioremap/early_memremap")
Signed-off-by: Doug Berger <opendmb@gmail.com>
---
 arch/arm/mm/mmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ard Biesheuvel June 27, 2017, 10:46 a.m. UTC | #1
On 27 June 2017 at 00:57, Doug Berger <opendmb@gmail.com> wrote:
> The fixmap pages need to be on the same pmd page for the current
> implementation of arm early_fixmap.  A build time bug check is
> used to ensure that.  However, the worst case fixmap range is
> better represented by __end_of_fixed_addresses than by the value
> __end_of_early_ioremap_region.
>
> Fixes: 2937367b8a4b ("ARM: add support for generic early_ioremap/early_memremap")
> Signed-off-by: Doug Berger <opendmb@gmail.com>
> ---
>  arch/arm/mm/mmu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index 31af3cb59a60..74c0ed5c3b08 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -392,7 +392,7 @@ void __init early_fixmap_init(void)
>          * The early fixmap range spans multiple pmds, for which
>          * we are not prepared:
>          */
> -       BUILD_BUG_ON((__fix_to_virt(__end_of_early_ioremap_region) >> PMD_SHIFT)
> +       BUILD_BUG_ON((__fix_to_virt(__end_of_fixed_addresses) >> PMD_SHIFT)
>                      != FIXADDR_TOP >> PMD_SHIFT);
>
>         pmd = fixmap_pmd(FIXADDR_TOP);

Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
kernel test robot June 27, 2017, 9:42 p.m. UTC | #2
Hi Doug,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.12-rc7 next-20170627]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Doug-Berger/ARM-small-correction-to-early_ioremap-support/20170627-233123
config: arm-multi_v7_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=arm 

All error/warnings (new ones prefixed by >>):

   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/linux/list.h:4,
                    from include/linux/module.h:9,
                    from arch/arm/mm/mmu.c:10:
   arch/arm/mm/mmu.c: In function 'early_fixmap_init':
>> include/linux/compiler.h:529:38: error: call to '__compiletime_assert_396' declared with attribute error: BUILD_BUG_ON failed: (__fix_to_virt(__end_of_fixed_addresses) >> PMD_SHIFT) != FIXADDR_TOP >> PMD_SHIFT
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:512:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:529:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:54:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:78:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> arch/arm/mm/mmu.c:395:2: note: in expansion of macro 'BUILD_BUG_ON'
     BUILD_BUG_ON((__fix_to_virt(__end_of_fixed_addresses) >> PMD_SHIFT)
     ^~~~~~~~~~~~

vim +/__compiletime_assert_396 +529 include/linux/compiler.h

9a8ab1c3 Daniel Santos  2013-02-21  523   *
9a8ab1c3 Daniel Santos  2013-02-21  524   * In tradition of POSIX assert, this macro will break the build if the
9a8ab1c3 Daniel Santos  2013-02-21  525   * supplied condition is *false*, emitting the supplied error message if the
9a8ab1c3 Daniel Santos  2013-02-21  526   * compiler has support to do so.
9a8ab1c3 Daniel Santos  2013-02-21  527   */
9a8ab1c3 Daniel Santos  2013-02-21  528  #define compiletime_assert(condition, msg) \
9a8ab1c3 Daniel Santos  2013-02-21 @529  	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
9a8ab1c3 Daniel Santos  2013-02-21  530  
47933ad4 Peter Zijlstra 2013-11-06  531  #define compiletime_assert_atomic_type(t)				\
47933ad4 Peter Zijlstra 2013-11-06  532  	compiletime_assert(__native_word(t),				\

:::::: The code at line 529 was first introduced by commit
:::::: 9a8ab1c39970a4938a72d94e6fd13be88a797590 bug.h, compiler.h: introduce compiletime_assert & BUILD_BUG_ON_MSG

:::::: TO: Daniel Santos <daniel.santos@pobox.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Doug Berger June 28, 2017, 2:44 a.m. UTC | #3
On 06/26/2017 05:57 PM, Doug Berger wrote:
> The fixmap pages need to be on the same pmd page for the current
> implementation of arm early_fixmap.  A build time bug check is
> used to ensure that.  However, the worst case fixmap range is
> better represented by __end_of_fixed_addresses than by the value
> __end_of_early_ioremap_region.
I see now that only the early_ioremap portion of the fixmap needs to be
on the same pmd page and not the entire collection of fixmap pages.

Therefore the check against __end_of_early_ioremap_region is the correct
choice for this build time check.

Please disregard this patch.

Sorry for the confusion,
    Doug

> 
> Fixes: 2937367b8a4b ("ARM: add support for generic early_ioremap/early_memremap")
> Signed-off-by: Doug Berger <opendmb@gmail.com>
> ---
>  arch/arm/mm/mmu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index 31af3cb59a60..74c0ed5c3b08 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -392,7 +392,7 @@ void __init early_fixmap_init(void)
>  	 * The early fixmap range spans multiple pmds, for which
>  	 * we are not prepared:
>  	 */
> -	BUILD_BUG_ON((__fix_to_virt(__end_of_early_ioremap_region) >> PMD_SHIFT)
> +	BUILD_BUG_ON((__fix_to_virt(__end_of_fixed_addresses) >> PMD_SHIFT)
>  		     != FIXADDR_TOP >> PMD_SHIFT);
>  
>  	pmd = fixmap_pmd(FIXADDR_TOP);
>
diff mbox

Patch

diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 31af3cb59a60..74c0ed5c3b08 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -392,7 +392,7 @@  void __init early_fixmap_init(void)
 	 * The early fixmap range spans multiple pmds, for which
 	 * we are not prepared:
 	 */
-	BUILD_BUG_ON((__fix_to_virt(__end_of_early_ioremap_region) >> PMD_SHIFT)
+	BUILD_BUG_ON((__fix_to_virt(__end_of_fixed_addresses) >> PMD_SHIFT)
 		     != FIXADDR_TOP >> PMD_SHIFT);
 
 	pmd = fixmap_pmd(FIXADDR_TOP);