Messages in this thread Patch in this message |  | | From | Lorenzo Stoakes <> | | Subject | [PATCH] mm: avoid use of BIT() macro for initialising VMA flags | | Date | Fri, 5 Dec 2025 17:50:37 +0000 |
| |
Commit 2b6a3f061f11 ("mm: declare VMA flags by bit") significantly changed how VMA flags are declared, utilising an enum of VMA bit values and ifdef-fery VM_xxx flag declarations via macro.
As part of this change, it uses INIT_VM_FLAG() to define VM_xxx flags from the newly introduced VMA bit numbers.
However, use of this macro results in apparently unfortunate macro expansion and resulted in a performance degradation.This appears to be due to the (__force int), which is required for the sparse typechecking to work.
Avoid macro expansion issues by simply using 1UL << bitnum.
Reported-by: kernel test robot <oliver.sang@intel.com> Closes: https://lore.kernel.org/oe-lkp/202512041634.150c7e4f-lkp@intel.com Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> ---
Andrew - note I've referenced the linux-next commit number above, could you replace with the upstream commit hash once your PR is taken? Thanks!
include/linux/mm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h index a2f38fb68840..c4438b30c140 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -395,7 +395,8 @@ enum { #undef DECLARE_VMA_BIT #undef DECLARE_VMA_BIT_ALIAS
-#define INIT_VM_FLAG(name) BIT((__force int) VMA_ ## name ## _BIT) +#define INIT_VM_FLAG(name) (1UL << (__force int)(VMA_ ## name ## _BIT)) + #define VM_READ INIT_VM_FLAG(READ) #define VM_WRITE INIT_VM_FLAG(WRITE) #define VM_EXEC INIT_VM_FLAG(EXEC) -- 2.52.0
|  |