Hi Yafang, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Yafang-Shao/mm-thp-add-support-for-BPF-based-THP-order-selection/20250826-152415 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250826071948.2618-2-laoar.shao%40gmail.com patch subject: [PATCH v6 mm-new 01/10] mm: thp: add support for BPF based THP order selection config: loongarch-randconfig-r113-20250827 (https://download.01.org/0day-ci/archive/20250827/202508271009.5neOZ0OG-lkp@xxxxxxxxx/config) compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff) reproduce: (https://download.01.org/0day-ci/archive/20250827/202508271009.5neOZ0OG-lkp@xxxxxxxxx/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@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202508271009.5neOZ0OG-lkp@xxxxxxxxx/ sparse warnings: (new ones prefixed by >>) >> mm/bpf_thp.c:47:31: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:47:31: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:47:31: sparse: int ( * )( ... ) mm/bpf_thp.c:101:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:101:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:101:9: sparse: int ( * )( ... ) mm/bpf_thp.c:102:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:102:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:102:9: sparse: int ( * )( ... ) mm/bpf_thp.c:111:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:111:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:111:9: sparse: int ( * )( ... ) mm/bpf_thp.c:112:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:112:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:112:9: sparse: int ( * )( ... ) mm/bpf_thp.c:112:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:112:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:112:9: sparse: int ( * )( ... ) mm/bpf_thp.c:133:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:133:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:133:9: sparse: int ( * )( ... ) mm/bpf_thp.c:134:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:134:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:134:9: sparse: int ( * )( ... ) mm/bpf_thp.c:134:9: sparse: sparse: incompatible types in comparison expression (different address spaces): mm/bpf_thp.c:134:9: sparse: int ( [noderef] __rcu * )( ... ) mm/bpf_thp.c:134:9: sparse: int ( * )( ... ) >> mm/bpf_thp.c:102:9: sparse: sparse: dereference of noderef expression >> mm/bpf_thp.c:102:9: sparse: sparse: dereference of noderef expression mm/bpf_thp.c:112:9: sparse: sparse: dereference of noderef expression mm/bpf_thp.c:134:9: sparse: sparse: dereference of noderef expression mm/bpf_thp.c:134:9: sparse: sparse: dereference of noderef expression mm/bpf_thp.c:134:9: sparse: sparse: dereference of noderef expression mm/bpf_thp.c:148:14: sparse: sparse: dereference of noderef expression vim +47 mm/bpf_thp.c 33 34 int get_suggested_order(struct mm_struct *mm, struct vm_area_struct *vma__nullable, 35 u64 vma_flags, enum tva_type tva_flags, int orders) 36 { 37 int (*bpf_suggested_order)(struct mm_struct *mm, struct vm_area_struct *vma__nullable, 38 u64 vma_flags, enum tva_type tva_flags, int orders); 39 int suggested_orders = orders; 40 41 /* No BPF program is attached */ 42 if (!test_bit(TRANSPARENT_HUGEPAGE_BPF_ATTACHED, 43 &transparent_hugepage_flags)) 44 return suggested_orders; 45 46 rcu_read_lock(); > 47 bpf_suggested_order = rcu_dereference(bpf_thp.get_suggested_order); 48 if (!bpf_suggested_order) 49 goto out; 50 51 suggested_orders = bpf_suggested_order(mm, vma__nullable, vma_flags, tva_flags, orders); 52 if (highest_order(suggested_orders) > highest_order(orders)) 53 suggested_orders = orders; 54 55 out: 56 rcu_read_unlock(); 57 return suggested_orders; 58 } 59 60 static bool bpf_thp_ops_is_valid_access(int off, int size, 61 enum bpf_access_type type, 62 const struct bpf_prog *prog, 63 struct bpf_insn_access_aux *info) 64 { 65 return bpf_tracing_btf_ctx_access(off, size, type, prog, info); 66 } 67 68 static const struct bpf_func_proto * 69 bpf_thp_get_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) 70 { 71 return bpf_base_func_proto(func_id, prog); 72 } 73 74 static const struct bpf_verifier_ops thp_bpf_verifier_ops = { 75 .get_func_proto = bpf_thp_get_func_proto, 76 .is_valid_access = bpf_thp_ops_is_valid_access, 77 }; 78 79 static int bpf_thp_init(struct btf *btf) 80 { 81 return 0; 82 } 83 84 static int bpf_thp_init_member(const struct btf_type *t, 85 const struct btf_member *member, 86 void *kdata, const void *udata) 87 { 88 return 0; 89 } 90 91 static int bpf_thp_reg(void *kdata, struct bpf_link *link) 92 { 93 struct bpf_thp_ops *ops = kdata; 94 95 spin_lock(&thp_ops_lock); 96 if (test_and_set_bit(TRANSPARENT_HUGEPAGE_BPF_ATTACHED, 97 &transparent_hugepage_flags)) { 98 spin_unlock(&thp_ops_lock); 99 return -EBUSY; 100 } 101 WARN_ON_ONCE(rcu_access_pointer(bpf_thp.get_suggested_order)); > 102 rcu_assign_pointer(bpf_thp.get_suggested_order, ops->get_suggested_order); 103 spin_unlock(&thp_ops_lock); 104 return 0; 105 } 106 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki