All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ankur Arora <ankur.a.arora@oracle.com>
To: kernel test robot <lkp@intel.com>
Cc: Ankur Arora <ankur.a.arora@oracle.com>,
	oe-kbuild-all@lists.linux.dev,
	Andrew Morton <akpm@linux-foundation.org>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Raghavendra K T <raghavendra.kt@amd.com>
Subject: Re: [linux-next:master 7919/9290] include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_639' declared with attribute error: clamp() low limit pg.start greater than high limit pg.end
Date: Fri, 23 Jan 2026 15:31:08 -0800	[thread overview]
Message-ID: <87y0lnewjn.fsf@oracle.com> (raw)
In-Reply-To: <202601240453.QCjgGdJa-lkp@intel.com>


kernel test robot <lkp@intel.com> writes:

> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   a0c666c25aeefd16f4b088c6549a6fb6b65a8a1d
> commit: 93552c9a3350fff06543da18e4c80d3e804191ca [7919/9290] mm: folio_zero_user: cache neighbouring pages
> config: riscv-randconfig-002-20260124 (https://download.01.org/0day-ci/archive/20260124/202601240453.QCjgGdJa-lkp@intel.com/config)
> compiler: riscv64-linux-gcc (GCC) 8.5.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260124/202601240453.QCjgGdJa-lkp@intel.com/reproduce)

Oddly enough I'm unable to reproduce this with:
   ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- make O=build_dir/ W=1 mm/

> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202601240453.QCjgGdJa-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
>    In file included from include/linux/mm.h:18,
>                     from arch/riscv/include/asm/sections.h:9,
>                     from include/linux/interrupt.h:22,
>                     from include/linux/kernel_stat.h:8,
>                     from mm/memory.c:42:
>    mm/memory.c: In function 'folio_zero_user':
>>> include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_639' declared with attribute error: clamp() low limit pg.start greater than high limit pg.end

I'm a bit puzzled by this assert.

folio_zero_user():
   {
	const unsigned long base_addr = ALIGN_DOWN(addr_hint, folio_size(folio));
	const long fault_idx = (addr_hint - base_addr) / PAGE_SIZE;
	const struct range pg = DEFINE_RANGE(0, folio_nr_pages(folio) - 1);
	const int radius = FOLIO_ZERO_LOCALITY_RADIUS;
	struct range r[3];
	int i;

	/*
	 * Faulting page and its immediate neighbourhood. Will be cleared at the
	 * end to keep its cachelines hot.
	 */
	r[2] = DEFINE_RANGE(clamp_t(s64, fault_idx - radius, pg.start, pg.end),
			    clamp_t(s64, fault_idx + radius, pg.start, pg.end));

the cause of the failure is that the compiler decides that pg.start > pg.end in:
  clamp_t(s64, fault_idx + radius, pg.start, pg.end));

which come from:
	const struct range pg = DEFINE_RANGE(0, folio_nr_pages(folio) - 1);

Now pg.start > pg.end if, folio_nr_pages() == 1.

Which would need folio_test_large() to evaluate to false at compile time:
  static inline unsigned long folio_nr_pages(const struct folio *folio)
  {
	if (!folio_test_large(folio))
		return 1;
	return folio_large_nr_pages(folio);
  }

But folio_test_large() is only defined as a test_bit(), without a
compile time constant defintion.

Also, the configuration has HUGETLBFS (which anyway guards the
definition of folio_zero_user()):

     $ cat config |egrep 'HUGETLBFS|TRANSPARENT'
     CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
     CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
     # CONFIG_TRANSPARENT_HUGEPAGE is not set
     CONFIG_ARCH_SUPPORTS_HUGETLBFS=y
     CONFIG_HUGETLBFS=y

Ankur

>      _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>                                          ^
>    include/linux/range.h:46:11: note: in definition of macro 'DEFINE_RANGE'
>       .end = (_end),   \
>               ^~~~
>    include/linux/compiler_types.h:619:2: note: in expansion of macro '__compiletime_assert'
>      __compiletime_assert(condition, msg, prefix, suffix)
>      ^~~~~~~~~~~~~~~~~~~~
>    include/linux/compiler_types.h:631:2: note: in expansion of macro '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/minmax.h:188:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(statically_true(ulo > uhi),    \
>      ^~~~~~~~~~~~~~~~
>    include/linux/minmax.h:195:2: note: in expansion of macro '__clamp_once'
>      __clamp_once(type, val, lo, hi, __UNIQUE_ID(v_), __UNIQUE_ID(l_), __UNIQUE_ID(h_))
>      ^~~~~~~~~~~~
>    include/linux/minmax.h:218:36: note: in expansion of macro '__careful_clamp'
>     #define clamp_t(type, val, lo, hi) __careful_clamp(type, val, lo, hi)
>                                        ^~~~~~~~~~~~~~~
>    mm/memory.c:7296:8: note: in expansion of macro 'clamp_t'
>            clamp_t(s64, fault_idx + radius, pg.start, pg.end));
>            ^~~~~~~
>
>
> vim +/__compiletime_assert_639 +631 include/linux/compiler_types.h
>
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  617
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  618  #define _compiletime_assert(condition, msg, prefix, suffix) \
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  619  	__compiletime_assert(condition, msg, prefix, suffix)
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  620
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  621  /**
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  622   * compiletime_assert - break build and emit msg if condition is false
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  623   * @condition: a compile-time constant condition to check
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  624   * @msg:       a message to emit if condition is false
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  625   *
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  626   * In tradition of POSIX assert, this macro will break the build if the
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  627   * supplied condition is *false*, emitting the supplied error message if the
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  628   * compiler has support to do so.
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  629   */
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  630  #define compiletime_assert(condition, msg) \
> eb5c2d4b45e3d2 Will Deacon 2020-07-21 @631  	_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> eb5c2d4b45e3d2 Will Deacon 2020-07-21  632
>
> :::::: The code at line 631 was first introduced by commit
> :::::: eb5c2d4b45e3d2d5d052ea6b8f1463976b1020d5 compiler.h: Move compiletime_assert() macros into compiler_types.h
>
> :::::: TO: Will Deacon <will@kernel.org>
> :::::: CC: Will Deacon <will@kernel.org>


  reply	other threads:[~2026-01-24  0:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-23 20:29 [linux-next:master 7919/9290] include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_639' declared with attribute error: clamp() low limit pg.start greater than high limit pg.end kernel test robot
2026-01-23 23:31 ` Ankur Arora [this message]
2026-01-24  1:48   ` Andrew Morton
2026-01-24  8:11     ` Ankur Arora

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y0lnewjn.fsf@oracle.com \
    --to=ankur.a.arora@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-mm@kvack.org \
    --cc=lkp@intel.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=raghavendra.kt@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.