Message ID | 20240124115938.80132-6-byungchul@sk.com |
---|---|
State | New |
Headers | show |
Series | DEPT(Dependency Tracker) | expand |
Hi Byungchul, kernel test robot noticed the following build warnings: [auto build test WARNING on 0dd3ee31125508cd67f7e7172247f05b7fd1753a] url: https://github.com/intel-lab-lkp/linux/commits/Byungchul-Park/llist-Move-llist_-head-node-definition-to-types-h/20240124-200243 base: 0dd3ee31125508cd67f7e7172247f05b7fd1753a patch link: https://lore.kernel.org/r/20240124115938.80132-6-byungchul%40sk.com patch subject: [PATCH v11 05/26] dept: Tie to Lockdep and IRQ tracing config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20240128/202401282019.lvlmRwlL-lkp@intel.com/config) compiler: clang version 18.0.0git (https://github.com/llvm/llvm-project a31a60074717fc40887cfe132b77eec93bedd307) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240128/202401282019.lvlmRwlL-lkp@intel.com/reproduce) 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/202401282019.lvlmRwlL-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:16: In file included from include/linux/jbd2.h:23: In file included from include/linux/buffer_head.h:12: In file included from include/linux/blk_types.h:10: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:16: In file included from include/linux/jbd2.h:23: In file included from include/linux/buffer_head.h:12: In file included from include/linux/blk_types.h:10: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from fs/ext4/mballoc.c:12: In file included from fs/ext4/ext4_jbd2.h:16: In file included from include/linux/jbd2.h:23: In file included from include/linux/buffer_head.h:12: In file included from include/linux/blk_types.h:10: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ In file included from fs/ext4/mballoc.c:7000: >> fs/ext4/mballoc-test.c:246:13: warning: stack frame size (1288) exceeds limit (1024) in 'test_new_blocks_simple' [-Wframe-larger-than] 246 | static void test_new_blocks_simple(struct kunit *test) | ^ 7 warnings generated. -- >> drivers/gpu/drm/tests/drm_exec_test.c:150:13: warning: stack frame size (1064) exceeds limit (1024) in 'test_prepare_array' [-Wframe-larger-than] 150 | static void test_prepare_array(struct kunit *test) | ^ 1 warning generated. -- In file included from drivers/net/ethernet/microchip/vcap/vcap_api.c:9: In file included from drivers/net/ethernet/microchip/vcap/vcap_api_private.h:11: In file included from drivers/net/ethernet/microchip/vcap/vcap_api.h:11: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from drivers/net/ethernet/microchip/vcap/vcap_api.c:9: In file included from drivers/net/ethernet/microchip/vcap/vcap_api_private.h:11: In file included from drivers/net/ethernet/microchip/vcap/vcap_api.h:11: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from drivers/net/ethernet/microchip/vcap/vcap_api.c:9: In file included from drivers/net/ethernet/microchip/vcap/vcap_api_private.h:11: In file included from drivers/net/ethernet/microchip/vcap/vcap_api.h:11: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:12: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ In file included from drivers/net/ethernet/microchip/vcap/vcap_api.c:3598: >> drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c:1926:13: warning: stack frame size (1296) exceeds limit (1024) in 'vcap_api_next_lookup_advanced_test' [-Wframe-larger-than] 1926 | static void vcap_api_next_lookup_advanced_test(struct kunit *test) | ^ 7 warnings generated. Kconfig warnings: (for reference only) WARNING: unmet direct dependencies detected for FRAME_POINTER Depends on [n]: DEBUG_KERNEL [=y] && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS [=n] Selected by [y]: - DEPT [=y] && DEBUG_KERNEL [=y] && LOCK_DEBUGGING_SUPPORT [=y] && !MIPS && !PPC && !ARM && !S390 && !MICROBLAZE && !ARC && !X86 vim +/test_new_blocks_simple +246 fs/ext4/mballoc-test.c 7c9fa399a36954 Kemeng Shi 2023-09-29 245 7c9fa399a36954 Kemeng Shi 2023-09-29 @246 static void test_new_blocks_simple(struct kunit *test) 7c9fa399a36954 Kemeng Shi 2023-09-29 247 { 7c9fa399a36954 Kemeng Shi 2023-09-29 248 struct super_block *sb = (struct super_block *)test->priv; 7c9fa399a36954 Kemeng Shi 2023-09-29 249 struct inode inode = { .i_sb = sb, }; 7c9fa399a36954 Kemeng Shi 2023-09-29 250 struct ext4_allocation_request ar; 7c9fa399a36954 Kemeng Shi 2023-09-29 251 ext4_group_t i, goal_group = TEST_GOAL_GROUP; 7c9fa399a36954 Kemeng Shi 2023-09-29 252 int err = 0; 7c9fa399a36954 Kemeng Shi 2023-09-29 253 ext4_fsblk_t found; 7c9fa399a36954 Kemeng Shi 2023-09-29 254 struct ext4_sb_info *sbi = EXT4_SB(sb); 7c9fa399a36954 Kemeng Shi 2023-09-29 255 7c9fa399a36954 Kemeng Shi 2023-09-29 256 ar.inode = &inode; 7c9fa399a36954 Kemeng Shi 2023-09-29 257 7c9fa399a36954 Kemeng Shi 2023-09-29 258 /* get block at goal */ 7c9fa399a36954 Kemeng Shi 2023-09-29 259 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 260 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 261 KUNIT_ASSERT_EQ_MSG(test, ar.goal, found, 7c9fa399a36954 Kemeng Shi 2023-09-29 262 "failed to alloc block at goal, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 263 ar.goal, found); 7c9fa399a36954 Kemeng Shi 2023-09-29 264 7c9fa399a36954 Kemeng Shi 2023-09-29 265 /* get block after goal in goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 266 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 267 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 268 KUNIT_ASSERT_EQ_MSG(test, ar.goal + EXT4_C2B(sbi, 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 269 "failed to alloc block after goal in goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 270 ar.goal + 1, found); 7c9fa399a36954 Kemeng Shi 2023-09-29 271 7c9fa399a36954 Kemeng Shi 2023-09-29 272 /* get block after goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 273 mbt_ctx_mark_used(sb, goal_group, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 274 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 275 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 276 KUNIT_ASSERT_EQ_MSG(test, 7c9fa399a36954 Kemeng Shi 2023-09-29 277 ext4_group_first_block_no(sb, goal_group + 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 278 "failed to alloc block after goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 279 ext4_group_first_block_no(sb, goal_group + 1), found); 7c9fa399a36954 Kemeng Shi 2023-09-29 280 7c9fa399a36954 Kemeng Shi 2023-09-29 281 /* get block before goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 282 for (i = goal_group; i < ext4_get_groups_count(sb); i++) 7c9fa399a36954 Kemeng Shi 2023-09-29 283 mbt_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 284 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 285 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 286 KUNIT_ASSERT_EQ_MSG(test, 7c9fa399a36954 Kemeng Shi 2023-09-29 287 ext4_group_first_block_no(sb, 0) + EXT4_C2B(sbi, 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 288 "failed to alloc block before goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 289 ext4_group_first_block_no(sb, 0 + EXT4_C2B(sbi, 1)), found); 7c9fa399a36954 Kemeng Shi 2023-09-29 290 7c9fa399a36954 Kemeng Shi 2023-09-29 291 /* no block available, fail to allocate block */ 7c9fa399a36954 Kemeng Shi 2023-09-29 292 for (i = 0; i < ext4_get_groups_count(sb); i++) 7c9fa399a36954 Kemeng Shi 2023-09-29 293 mbt_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 294 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 295 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 296 KUNIT_ASSERT_NE_MSG(test, err, 0, 7c9fa399a36954 Kemeng Shi 2023-09-29 297 "unexpectedly get block when no block is available"); 7c9fa399a36954 Kemeng Shi 2023-09-29 298 } 7c9fa399a36954 Kemeng Shi 2023-09-29 299
Hi Byungchul, kernel test robot noticed the following build warnings: [auto build test WARNING on 0dd3ee31125508cd67f7e7172247f05b7fd1753a] url: https://github.com/intel-lab-lkp/linux/commits/Byungchul-Park/llist-Move-llist_-head-node-definition-to-types-h/20240124-200243 base: 0dd3ee31125508cd67f7e7172247f05b7fd1753a patch link: https://lore.kernel.org/r/20240124115938.80132-6-byungchul%40sk.com patch subject: [PATCH v11 05/26] dept: Tie to Lockdep and IRQ tracing config: microblaze-allyesconfig (https://download.01.org/0day-ci/archive/20240128/202401282340.oDsdGzj2-lkp@intel.com/config) compiler: microblaze-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240128/202401282340.oDsdGzj2-lkp@intel.com/reproduce) 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/202401282340.oDsdGzj2-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from fs/ext4/mballoc.c:7000: fs/ext4/mballoc-test.c: In function 'test_new_blocks_simple': >> fs/ext4/mballoc-test.c:298:1: warning: the frame size of 1120 bytes is larger than 1024 bytes [-Wframe-larger-than=] 298 | } | ^ -- In file included from drivers/net/ethernet/microchip/vcap/vcap_api.c:3598: drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c: In function 'vcap_api_next_lookup_advanced_test': >> drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c:2001:1: warning: the frame size of 1260 bytes is larger than 1024 bytes [-Wframe-larger-than=] 2001 | } | ^ vim +298 fs/ext4/mballoc-test.c 7c9fa399a36954 Kemeng Shi 2023-09-29 245 7c9fa399a36954 Kemeng Shi 2023-09-29 246 static void test_new_blocks_simple(struct kunit *test) 7c9fa399a36954 Kemeng Shi 2023-09-29 247 { 7c9fa399a36954 Kemeng Shi 2023-09-29 248 struct super_block *sb = (struct super_block *)test->priv; 7c9fa399a36954 Kemeng Shi 2023-09-29 249 struct inode inode = { .i_sb = sb, }; 7c9fa399a36954 Kemeng Shi 2023-09-29 250 struct ext4_allocation_request ar; 7c9fa399a36954 Kemeng Shi 2023-09-29 251 ext4_group_t i, goal_group = TEST_GOAL_GROUP; 7c9fa399a36954 Kemeng Shi 2023-09-29 252 int err = 0; 7c9fa399a36954 Kemeng Shi 2023-09-29 253 ext4_fsblk_t found; 7c9fa399a36954 Kemeng Shi 2023-09-29 254 struct ext4_sb_info *sbi = EXT4_SB(sb); 7c9fa399a36954 Kemeng Shi 2023-09-29 255 7c9fa399a36954 Kemeng Shi 2023-09-29 256 ar.inode = &inode; 7c9fa399a36954 Kemeng Shi 2023-09-29 257 7c9fa399a36954 Kemeng Shi 2023-09-29 258 /* get block at goal */ 7c9fa399a36954 Kemeng Shi 2023-09-29 259 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 260 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 261 KUNIT_ASSERT_EQ_MSG(test, ar.goal, found, 7c9fa399a36954 Kemeng Shi 2023-09-29 262 "failed to alloc block at goal, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 263 ar.goal, found); 7c9fa399a36954 Kemeng Shi 2023-09-29 264 7c9fa399a36954 Kemeng Shi 2023-09-29 265 /* get block after goal in goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 266 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 267 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 268 KUNIT_ASSERT_EQ_MSG(test, ar.goal + EXT4_C2B(sbi, 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 269 "failed to alloc block after goal in goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 270 ar.goal + 1, found); 7c9fa399a36954 Kemeng Shi 2023-09-29 271 7c9fa399a36954 Kemeng Shi 2023-09-29 272 /* get block after goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 273 mbt_ctx_mark_used(sb, goal_group, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 274 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 275 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 276 KUNIT_ASSERT_EQ_MSG(test, 7c9fa399a36954 Kemeng Shi 2023-09-29 277 ext4_group_first_block_no(sb, goal_group + 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 278 "failed to alloc block after goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 279 ext4_group_first_block_no(sb, goal_group + 1), found); 7c9fa399a36954 Kemeng Shi 2023-09-29 280 7c9fa399a36954 Kemeng Shi 2023-09-29 281 /* get block before goal group */ 7c9fa399a36954 Kemeng Shi 2023-09-29 282 for (i = goal_group; i < ext4_get_groups_count(sb); i++) 7c9fa399a36954 Kemeng Shi 2023-09-29 283 mbt_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 284 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 285 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 286 KUNIT_ASSERT_EQ_MSG(test, 7c9fa399a36954 Kemeng Shi 2023-09-29 287 ext4_group_first_block_no(sb, 0) + EXT4_C2B(sbi, 1), found, 7c9fa399a36954 Kemeng Shi 2023-09-29 288 "failed to alloc block before goal group, expected %llu found %llu", 7c9fa399a36954 Kemeng Shi 2023-09-29 289 ext4_group_first_block_no(sb, 0 + EXT4_C2B(sbi, 1)), found); 7c9fa399a36954 Kemeng Shi 2023-09-29 290 7c9fa399a36954 Kemeng Shi 2023-09-29 291 /* no block available, fail to allocate block */ 7c9fa399a36954 Kemeng Shi 2023-09-29 292 for (i = 0; i < ext4_get_groups_count(sb); i++) 7c9fa399a36954 Kemeng Shi 2023-09-29 293 mbt_ctx_mark_used(sb, i, 0, EXT4_CLUSTERS_PER_GROUP(sb)); 7c9fa399a36954 Kemeng Shi 2023-09-29 294 ar.goal = ext4_group_first_block_no(sb, goal_group); 7c9fa399a36954 Kemeng Shi 2023-09-29 295 found = ext4_mb_new_blocks_simple(&ar, &err); 7c9fa399a36954 Kemeng Shi 2023-09-29 296 KUNIT_ASSERT_NE_MSG(test, err, 0, 7c9fa399a36954 Kemeng Shi 2023-09-29 297 "unexpectedly get block when no block is available"); 7c9fa399a36954 Kemeng Shi 2023-09-29 @298 } 7c9fa399a36954 Kemeng Shi 2023-09-29 299
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index 2b665c32f5fe..672dac1c3059 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h @@ -14,6 +14,7 @@ #include <linux/typecheck.h> #include <linux/cleanup.h> +#include <linux/dept.h> #include <asm/irqflags.h> #include <asm/percpu.h> @@ -61,8 +62,10 @@ extern void trace_hardirqs_off(void); # define lockdep_softirqs_enabled(p) ((p)->softirqs_enabled) # define lockdep_hardirq_enter() \ do { \ - if (__this_cpu_inc_return(hardirq_context) == 1)\ + if (__this_cpu_inc_return(hardirq_context) == 1) { \ current->hardirq_threaded = 0; \ + dept_hardirq_enter(); \ + } \ } while (0) # define lockdep_hardirq_threaded() \ do { \ @@ -137,6 +140,8 @@ do { \ # define lockdep_softirq_enter() \ do { \ current->softirq_context++; \ + if (current->softirq_context == 1) \ + dept_softirq_enter(); \ } while (0) # define lockdep_softirq_exit() \ do { \ diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h index 975e33b793a7..39f67788fd95 100644 --- a/include/linux/local_lock_internal.h +++ b/include/linux/local_lock_internal.h @@ -21,6 +21,7 @@ typedef struct { .name = #lockname, \ .wait_type_inner = LD_WAIT_CONFIG, \ .lock_type = LD_LOCK_PERCPU, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ }, \ .owner = NULL, diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index dc2844b071c2..8825f535d36d 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h @@ -12,6 +12,7 @@ #include <linux/lockdep_types.h> #include <linux/smp.h> +#include <linux/dept_ldt.h> #include <asm/percpu.h> struct task_struct; @@ -39,6 +40,8 @@ static inline void lockdep_copy_map(struct lockdep_map *to, */ for (i = 0; i < NR_LOCKDEP_CACHING_CLASSES; i++) to->class_cache[i] = NULL; + + dept_map_copy(&to->dmap, &from->dmap); } /* @@ -466,7 +469,8 @@ enum xhlock_context_t { * Note that _name must not be NULL. */ #define STATIC_LOCKDEP_MAP_INIT(_name, _key) \ - { .name = (_name), .key = (void *)(_key), } + { .name = (_name), .key = (void *)(_key), \ + .dmap = DEPT_MAP_INITIALIZER(_name, _key) } static inline void lockdep_invariant_state(bool force) {} static inline void lockdep_free_task(struct task_struct *task) {} @@ -548,33 +552,89 @@ extern bool read_lock_is_recursive(void); #define lock_acquire_shared(l, s, t, n, i) lock_acquire(l, s, t, 1, 1, n, i) #define lock_acquire_shared_recursive(l, s, t, n, i) lock_acquire(l, s, t, 2, 1, n, i) -#define spin_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define spin_acquire_nest(l, s, t, n, i) lock_acquire_exclusive(l, s, t, n, i) -#define spin_release(l, i) lock_release(l, i) - -#define rwlock_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) +#define spin_acquire(l, s, t, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_exclusive(l, s, t, NULL, i); \ +} while (0) +#define spin_acquire_nest(l, s, t, n, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, n, i); \ + lock_acquire_exclusive(l, s, t, n, i); \ +} while (0) +#define spin_release(l, i) \ +do { \ + ldt_unlock(&(l)->dmap, i); \ + lock_release(l, i); \ +} while (0) +#define rwlock_acquire(l, s, t, i) \ +do { \ + ldt_wlock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_exclusive(l, s, t, NULL, i); \ +} while (0) #define rwlock_acquire_read(l, s, t, i) \ do { \ + ldt_rlock(&(l)->dmap, s, t, NULL, i, !read_lock_is_recursive());\ if (read_lock_is_recursive()) \ lock_acquire_shared_recursive(l, s, t, NULL, i); \ else \ lock_acquire_shared(l, s, t, NULL, i); \ } while (0) - -#define rwlock_release(l, i) lock_release(l, i) - -#define seqcount_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define seqcount_acquire_read(l, s, t, i) lock_acquire_shared_recursive(l, s, t, NULL, i) -#define seqcount_release(l, i) lock_release(l, i) - -#define mutex_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define mutex_acquire_nest(l, s, t, n, i) lock_acquire_exclusive(l, s, t, n, i) -#define mutex_release(l, i) lock_release(l, i) - -#define rwsem_acquire(l, s, t, i) lock_acquire_exclusive(l, s, t, NULL, i) -#define rwsem_acquire_nest(l, s, t, n, i) lock_acquire_exclusive(l, s, t, n, i) -#define rwsem_acquire_read(l, s, t, i) lock_acquire_shared(l, s, t, NULL, i) -#define rwsem_release(l, i) lock_release(l, i) +#define rwlock_release(l, i) \ +do { \ + ldt_unlock(&(l)->dmap, i); \ + lock_release(l, i); \ +} while (0) +#define seqcount_acquire(l, s, t, i) \ +do { \ + ldt_wlock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_exclusive(l, s, t, NULL, i); \ +} while (0) +#define seqcount_acquire_read(l, s, t, i) \ +do { \ + ldt_rlock(&(l)->dmap, s, t, NULL, i, false); \ + lock_acquire_shared_recursive(l, s, t, NULL, i); \ +} while (0) +#define seqcount_release(l, i) \ +do { \ + ldt_unlock(&(l)->dmap, i); \ + lock_release(l, i); \ +} while (0) +#define mutex_acquire(l, s, t, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_exclusive(l, s, t, NULL, i); \ +} while (0) +#define mutex_acquire_nest(l, s, t, n, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, n, i); \ + lock_acquire_exclusive(l, s, t, n, i); \ +} while (0) +#define mutex_release(l, i) \ +do { \ + ldt_unlock(&(l)->dmap, i); \ + lock_release(l, i); \ +} while (0) +#define rwsem_acquire(l, s, t, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_exclusive(l, s, t, NULL, i); \ +} while (0) +#define rwsem_acquire_nest(l, s, t, n, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, n, i); \ + lock_acquire_exclusive(l, s, t, n, i); \ +} while (0) +#define rwsem_acquire_read(l, s, t, i) \ +do { \ + ldt_lock(&(l)->dmap, s, t, NULL, i); \ + lock_acquire_shared(l, s, t, NULL, i); \ +} while (0) +#define rwsem_release(l, i) \ +do { \ + ldt_unlock(&(l)->dmap, i); \ + lock_release(l, i); \ +} while (0) #define lock_map_acquire(l) lock_acquire_exclusive(l, 0, 0, NULL, _THIS_IP_) #define lock_map_acquire_try(l) lock_acquire_exclusive(l, 0, 1, NULL, _THIS_IP_) diff --git a/include/linux/lockdep_types.h b/include/linux/lockdep_types.h index 2ebc323d345a..aecd65836b2c 100644 --- a/include/linux/lockdep_types.h +++ b/include/linux/lockdep_types.h @@ -11,6 +11,7 @@ #define __LINUX_LOCKDEP_TYPES_H #include <linux/types.h> +#include <linux/dept.h> #define MAX_LOCKDEP_SUBCLASSES 8UL @@ -77,6 +78,7 @@ struct lock_class_key { struct hlist_node hash_entry; struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; }; + struct dept_key dkey; }; extern struct lock_class_key __lockdep_no_validate__; @@ -194,6 +196,7 @@ struct lockdep_map { int cpu; unsigned long ip; #endif + struct dept_map dmap; }; struct pin_cookie { unsigned int val; }; diff --git a/include/linux/mutex.h b/include/linux/mutex.h index a33aa9eb9fc3..04c41faace85 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h @@ -26,6 +26,7 @@ , .dep_map = { \ .name = #lockname, \ .wait_type_inner = LD_WAIT_SLEEP, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ } #else # define __DEP_MAP_MUTEX_INITIALIZER(lockname) diff --git a/include/linux/percpu-rwsem.h b/include/linux/percpu-rwsem.h index 36b942b67b7d..e871aca04645 100644 --- a/include/linux/percpu-rwsem.h +++ b/include/linux/percpu-rwsem.h @@ -21,7 +21,7 @@ struct percpu_rw_semaphore { }; #ifdef CONFIG_DEBUG_LOCK_ALLOC -#define __PERCPU_RWSEM_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }, +#define __PERCPU_RWSEM_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname, .dmap = DEPT_MAP_INITIALIZER(lockname, NULL) }, #else #define __PERCPU_RWSEM_DEP_MAP_INIT(lockname) #endif diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index 7d049883a08a..35889ac5eeae 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h @@ -81,6 +81,7 @@ do { \ .dep_map = { \ .name = #mutexname, \ .wait_type_inner = LD_WAIT_SLEEP, \ + .dmap = DEPT_MAP_INITIALIZER(mutexname, NULL),\ } #else #define __DEP_MAP_RT_MUTEX_INITIALIZER(mutexname) diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h index 1948442e7750..6e58dfc84997 100644 --- a/include/linux/rwlock_types.h +++ b/include/linux/rwlock_types.h @@ -10,6 +10,7 @@ .dep_map = { \ .name = #lockname, \ .wait_type_inner = LD_WAIT_CONFIG, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL), \ } #else # define RW_DEP_MAP_INIT(lockname) diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 1dd530ce8b45..1fa391e7770a 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -22,6 +22,7 @@ .dep_map = { \ .name = #lockname, \ .wait_type_inner = LD_WAIT_SLEEP, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ }, #else # define __RWSEM_DEP_MAP_INIT(lockname) diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h index e92f9d5577ba..dee83ab183e4 100644 --- a/include/linux/seqlock.h +++ b/include/linux/seqlock.h @@ -81,7 +81,7 @@ static inline void __seqcount_init(seqcount_t *s, const char *name, #ifdef CONFIG_DEBUG_LOCK_ALLOC # define SEQCOUNT_DEP_MAP_INIT(lockname) \ - .dep_map = { .name = #lockname } + .dep_map = { .name = #lockname, .dmap = DEPT_MAP_INITIALIZER(lockname, NULL) } /** * seqcount_init() - runtime initializer for seqcount_t diff --git a/include/linux/spinlock_types_raw.h b/include/linux/spinlock_types_raw.h index 91cb36b65a17..3dcc551ded25 100644 --- a/include/linux/spinlock_types_raw.h +++ b/include/linux/spinlock_types_raw.h @@ -31,11 +31,13 @@ typedef struct raw_spinlock { .dep_map = { \ .name = #lockname, \ .wait_type_inner = LD_WAIT_SPIN, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ } # define SPIN_DEP_MAP_INIT(lockname) \ .dep_map = { \ .name = #lockname, \ .wait_type_inner = LD_WAIT_CONFIG, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ } # define LOCAL_SPIN_DEP_MAP_INIT(lockname) \ @@ -43,6 +45,7 @@ typedef struct raw_spinlock { .name = #lockname, \ .wait_type_inner = LD_WAIT_CONFIG, \ .lock_type = LD_LOCK_PERCPU, \ + .dmap = DEPT_MAP_INITIALIZER(lockname, NULL),\ } #else # define RAW_SPIN_DEP_MAP_INIT(lockname) diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 127ef3b2e607..f6b8266a4bfd 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h @@ -35,7 +35,7 @@ int __init_srcu_struct(struct srcu_struct *ssp, const char *name, __init_srcu_struct((ssp), #ssp, &__srcu_key); \ }) -#define __SRCU_DEP_MAP_INIT(srcu_name) .dep_map = { .name = #srcu_name }, +#define __SRCU_DEP_MAP_INIT(srcu_name) .dep_map = { .name = #srcu_name, .dmap = DEPT_MAP_INITIALIZER(srcu_name, NULL) }, #else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ int init_srcu_struct(struct srcu_struct *ssp); diff --git a/kernel/dependency/dept.c b/kernel/dependency/dept.c index a3e774479f94..7e12e46dc4b7 100644 --- a/kernel/dependency/dept.c +++ b/kernel/dependency/dept.c @@ -244,10 +244,10 @@ static bool dept_working(void) * Even k == NULL is considered as a valid key because it would use * &->map_key as the key in that case. */ -struct dept_key __dept_no_validate__; +extern struct lock_class_key __lockdep_no_validate__; static bool valid_key(struct dept_key *k) { - return &__dept_no_validate__ != k; + return &__lockdep_no_validate__.dkey != k; } /* @@ -1936,7 +1936,7 @@ void dept_softirqs_off(void) dept_task()->softirqs_enabled = false; } -void dept_hardirqs_off(void) +void noinstr dept_hardirqs_off(void) { /* * Assumes that it's called with IRQ disabled so that accessing @@ -1958,7 +1958,7 @@ void dept_softirq_enter(void) /* * Ensure it's the outmost hardirq context. */ -void dept_hardirq_enter(void) +void noinstr dept_hardirq_enter(void) { struct dept_task *dt = dept_task(); diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 151bd3de5936..e27cf9d17163 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -1215,6 +1215,8 @@ void lockdep_register_key(struct lock_class_key *key) struct lock_class_key *k; unsigned long flags; + dept_key_init(&key->dkey); + if (WARN_ON_ONCE(static_obj(key))) return; hash_head = keyhashentry(key); @@ -4310,6 +4312,8 @@ static void __trace_hardirqs_on_caller(void) */ void lockdep_hardirqs_on_prepare(void) { + dept_hardirqs_on(); + if (unlikely(!debug_locks)) return; @@ -4430,6 +4434,8 @@ EXPORT_SYMBOL_GPL(lockdep_hardirqs_on); */ void noinstr lockdep_hardirqs_off(unsigned long ip) { + dept_hardirqs_off(); + if (unlikely(!debug_locks)) return; @@ -4474,6 +4480,8 @@ void lockdep_softirqs_on(unsigned long ip) { struct irqtrace_events *trace = ¤t->irqtrace; + dept_softirqs_on_ip(ip); + if (unlikely(!lockdep_enabled())) return; @@ -4512,6 +4520,8 @@ void lockdep_softirqs_on(unsigned long ip) */ void lockdep_softirqs_off(unsigned long ip) { + dept_softirqs_off(); + if (unlikely(!lockdep_enabled())) return; @@ -4859,6 +4869,8 @@ void lockdep_init_map_type(struct lockdep_map *lock, const char *name, { int i; + ldt_init(&lock->dmap, &key->dkey, subclass, name); + for (i = 0; i < NR_LOCKDEP_CACHING_CLASSES; i++) lock->class_cache[i] = NULL; @@ -5630,6 +5642,12 @@ void lock_set_class(struct lockdep_map *lock, const char *name, { unsigned long flags; + /* + * dept_map_(re)init() might be called twice redundantly. But + * there's no choice as long as Dept relies on Lockdep. + */ + ldt_set_class(&lock->dmap, name, &key->dkey, subclass, ip); + if (unlikely(!lockdep_enabled())) return; @@ -5647,6 +5665,8 @@ void lock_downgrade(struct lockdep_map *lock, unsigned long ip) { unsigned long flags; + ldt_downgrade(&lock->dmap, ip); + if (unlikely(!lockdep_enabled())) return; @@ -6447,6 +6467,8 @@ void lockdep_unregister_key(struct lock_class_key *key) unsigned long flags; bool found = false; + dept_key_destroy(&key->dkey); + might_sleep(); if (WARN_ON_ONCE(static_obj(key)))
How to place Dept this way looks so ugly. But it's inevitable for now. The way should be enhanced gradually. Signed-off-by: Byungchul Park <byungchul@sk.com> --- include/linux/irqflags.h | 7 +- include/linux/local_lock_internal.h | 1 + include/linux/lockdep.h | 102 ++++++++++++++++++++++------ include/linux/lockdep_types.h | 3 + include/linux/mutex.h | 1 + include/linux/percpu-rwsem.h | 2 +- include/linux/rtmutex.h | 1 + include/linux/rwlock_types.h | 1 + include/linux/rwsem.h | 1 + include/linux/seqlock.h | 2 +- include/linux/spinlock_types_raw.h | 3 + include/linux/srcu.h | 2 +- kernel/dependency/dept.c | 8 +-- kernel/locking/lockdep.c | 22 ++++++ 14 files changed, 127 insertions(+), 29 deletions(-)