From: kernel test robot <lkp@intel.com>
To: "Jim Cromie" <jim.cromie@gmail.com>,
" Łukasz Bartosik" <ukaszb@chromium.org>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [jimc:dyndbg-bonsai-clean 60/67] lib/test_bonsai_tree.c:1096:26: error: 'struct module' has no member named 'num_jump_entries'; did you mean 'num_exentries'?
Date: Wed, 23 Sep 2026 14:23:20 +0200 [thread overview]
Message-ID: <202609231457.9w3NKBuk-lkp@intel.com> (raw)
tree: https://github.com/jimc/linux.git dyndbg-bonsai-clean
head: 1b386f2c853c6e84025fa93d485e69ba8c1d76f4
commit: ea1ef3eda16a25ba9bacade28d00c9e4b2812a5b [60/67] kernel/jump_label: Ingest modular jump tables into per-module Bonsai trees
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20260923/202609231457.9w3NKBuk-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260923/202609231457.9w3NKBuk-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/202609231457.9w3NKBuk-lkp@intel.com/
All errors (new ones prefixed by >>):
lib/test_bonsai_tree.c: In function 'test_bonsai_live_jump_label':
lib/test_bonsai_tree.c:1022:15: error: implicit declaration of function 'jump_label_export_bonsai_tree'; did you mean 'extable_export_bonsai_tree'? [-Wimplicit-function-declaration]
1022 | ret = jump_label_export_bonsai_tree(&bt, &start, &count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| extable_export_bonsai_tree
lib/test_bonsai_tree.c:1029:46: error: invalid use of undefined type 'struct jump_entry'
1029 | struct jump_entry *e = &start[i];
| ^
lib/test_bonsai_tree.c:1030:38: error: implicit declaration of function 'jump_entry_code' [-Wimplicit-function-declaration]
1030 | unsigned long code = jump_entry_code(e);
| ^~~~~~~~~~~~~~~
lib/test_bonsai_tree.c:1044:46: error: invalid use of undefined type 'struct jump_entry'
1044 | struct jump_entry *e = &start[i];
| ^
lib/test_bonsai_tree.c:1048:22: error: implicit declaration of function 'jump_entry_is_init' [-Wimplicit-function-declaration]
1048 | if (!jump_entry_is_init(e)) {
| ^~~~~~~~~~~~~~~~~~
lib/test_bonsai_tree.c:1049:34: error: implicit declaration of function 'jump_entry_size' [-Wimplicit-function-declaration]
1049 | int sz = jump_entry_size(e);
| ^~~~~~~~~~~~~~~
lib/test_bonsai_tree.c:1069:46: error: invalid use of undefined type 'struct jump_entry'
1069 | if (jump_entry_is_init(&start[i]))
| ^
lib/test_bonsai_tree.c:1072:47: error: invalid use of undefined type 'struct jump_entry'
1072 | bogus = jump_entry_code(&start[i]) - 1;
| ^
lib/test_bonsai_tree.c:1076:55: error: invalid use of undefined type 'struct jump_entry'
1076 | if (!jump_entry_is_init(&start[j])) {
| ^
lib/test_bonsai_tree.c:1077:73: error: invalid use of undefined type 'struct jump_entry'
1077 | unsigned long s = jump_entry_code(&start[j]);
| ^
lib/test_bonsai_tree.c:1078:64: error: invalid use of undefined type 'struct jump_entry'
1078 | int sz = jump_entry_size(&start[j]);
| ^
>> lib/test_bonsai_tree.c:1096:26: error: 'struct module' has no member named 'num_jump_entries'; did you mean 'num_exentries'?
1096 | if (THIS_MODULE->num_jump_entries) {
| ^~~~~~~~~~~~~~~~
| num_exentries
>> lib/test_bonsai_tree.c:1097:54: error: 'struct module' has no member named 'jump_entries'; did you mean 'num_exentries'?
1097 | struct jump_entry *me = THIS_MODULE->jump_entries;
| ^~~~~~~~~~~~
| num_exentries
lib/test_bonsai_tree.c:1098:46: error: 'struct module' has no member named 'num_jump_entries'; did you mean 'num_exentries'?
1098 | size_t mcount = THIS_MODULE->num_jump_entries;
| ^~~~~~~~~~~~~~~~
| num_exentries
>> lib/test_bonsai_tree.c:1099:55: error: 'struct module' has no member named 'jump_tree'
1099 | struct bonsai_tree *mbt = &THIS_MODULE->jump_tree;
| ^~
lib/test_bonsai_tree.c:1106:73: error: invalid use of undefined type 'struct jump_entry'
1106 | unsigned long code = jump_entry_code(&me[i]);
| ^
lib/test_bonsai_tree.c:1110:49: error: invalid use of undefined type 'struct jump_entry'
1110 | if (found != &me[i]) {
| ^
lib/test_bonsai_tree.c: In function 'bench_live_jump_label':
lib/test_bonsai_tree.c:1164:54: error: invalid use of undefined type 'struct jump_entry'
1164 | rnd_codes[i] = jump_entry_code(&start[idx]);
| ^
lib/test_bonsai_tree.c:1172:57: error: invalid use of undefined type 'struct jump_entry'
1172 | unsigned long s = jump_entry_code(&start[i]);
| ^
lib/test_bonsai_tree.c:1173:51: error: invalid use of undefined type 'struct jump_entry'
1173 | int sz = jump_entry_is_init(&start[i]) ? 5 : jump_entry_size(&start[i]);
| ^
lib/test_bonsai_tree.c:1173:84: error: invalid use of undefined type 'struct jump_entry'
1173 | int sz = jump_entry_is_init(&start[i]) ? 5 : jump_entry_size(&start[i]);
| ^
lib/test_bonsai_tree.c:1175:67: error: invalid use of undefined type 'struct jump_entry'
1175 | bonsai_store_range(&bt_bench, s, e, (void *)&start[i], GFP_KERNEL);
| ^
lib/test_bonsai_tree.c:1184:57: error: invalid use of undefined type 'struct jump_entry'
1184 | unsigned long s = jump_entry_code(&start[i]);
| ^
lib/test_bonsai_tree.c:1185:51: error: invalid use of undefined type 'struct jump_entry'
1185 | int sz = jump_entry_is_init(&start[i]) ? 5 : jump_entry_size(&start[i]);
| ^
lib/test_bonsai_tree.c:1185:84: error: invalid use of undefined type 'struct jump_entry'
1185 | int sz = jump_entry_is_init(&start[i]) ? 5 : jump_entry_size(&start[i]);
| ^
lib/test_bonsai_tree.c:1187:66: error: invalid use of undefined type 'struct jump_entry'
1187 | mtree_store_range(&mt_bench, s, e, (void *)&start[i], GFP_KERNEL);
| ^
lib/test_bonsai_tree.c:1195:60: error: invalid use of undefined type 'struct jump_entry'
1195 | unsigned long code = jump_entry_code(&start[i % count]);
| ^
lib/test_bonsai_tree.c:1198:65: error: invalid use of undefined type 'struct jump_entry'
1198 | unsigned long s = jump_entry_code(&start[j]);
| ^
lib/test_bonsai_tree.c:1199:59: error: invalid use of undefined type 'struct jump_entry'
1199 | int sz = jump_entry_is_init(&start[j]) ? 5 : jump_entry_size(&start[j]);
| ^
lib/test_bonsai_tree.c:1199:92: error: invalid use of undefined type 'struct jump_entry'
1199 | int sz = jump_entry_is_init(&start[j]) ? 5 : jump_entry_size(&start[j]);
| ^
lib/test_bonsai_tree.c:1202:46: error: invalid use of undefined type 'struct jump_entry'
1202 | sink = &start[j];
| ^
lib/test_bonsai_tree.c:1213:60: error: invalid use of undefined type 'struct jump_entry'
1213 | unsigned long code = jump_entry_code(&start[i % count]);
| ^
lib/test_bonsai_tree.c:1222:60: error: invalid use of undefined type 'struct jump_entry'
1222 | unsigned long code = jump_entry_code(&start[i % count]);
| ^
lib/test_bonsai_tree.c:1235:65: error: invalid use of undefined type 'struct jump_entry'
1235 | unsigned long s = jump_entry_code(&start[j]);
| ^
lib/test_bonsai_tree.c:1236:59: error: invalid use of undefined type 'struct jump_entry'
1236 | int sz = jump_entry_is_init(&start[j]) ? 5 : jump_entry_size(&start[j]);
| ^
lib/test_bonsai_tree.c:1236:92: error: invalid use of undefined type 'struct jump_entry'
1236 | int sz = jump_entry_is_init(&start[j]) ? 5 : jump_entry_size(&start[j]);
| ^
lib/test_bonsai_tree.c:1239:46: error: invalid use of undefined type 'struct jump_entry'
1239 | sink = &start[j];
| ^
In file included from include/asm-generic/bug.h:31,
from arch/sh/include/asm/bug.h:112,
from include/linux/bug.h:5,
from include/linux/instrumented.h:10,
from include/linux/atomic/atomic-instrumented.h:17,
from include/linux/atomic.h:82,
from include/asm-generic/bitops/atomic.h:5,
from arch/sh/include/asm/bitops.h:23,
from include/linux/bitops.h:67,
from include/linux/log2.h:12,
from include/asm-generic/div64.h:55,
from ./arch/sh/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/stat.h:19,
from include/linux/module.h:13,
from lib/test_bonsai_tree.c:13:
lib/test_bonsai_tree.c:1282:32: error: invalid application of 'sizeof' to incomplete type 'struct jump_entry'
1282 | count * sizeof(struct jump_entry),
| ^~~~~~
include/linux/printk.h:483:33: note: in definition of macro 'printk_index_wrap'
483 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~~~~~~~~
include/linux/printk.h:584:9: note: in expansion of macro 'printk'
584 | printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~
lib/test_bonsai_tree.c:1281:9: note: in expansion of macro 'pr_info'
1281 | pr_info(" Memory : Flat=%zu B | Maple=~%zu B | Bonsai=%zu B (nodes=%u, h=%u)\n",
| ^~~~~~~
vim +1096 lib/test_bonsai_tree.c
1012
1013 static int test_bonsai_live_jump_label(void)
1014 {
1015 struct bonsai_tree *bt = NULL;
1016 struct jump_entry *start = NULL;
1017 size_t count = 0, i, errs = 0;
1018 int ret;
1019
1020 test_bonsai_dummy_branch();
1021
1022 ret = jump_label_export_bonsai_tree(&bt, &start, &count);
1023 if (ret || !bt || !bt->root_idx || !start || !count) {
1024 pr_err("live jump_label test: tree not exported or empty (ret=%d)\n", ret);
1025 return ret ? ret : -ENODATA;
1026 }
1027
1028 for (i = 0; i < count; i++) {
1029 struct jump_entry *e = &start[i];
1030 unsigned long code = jump_entry_code(e);
1031 struct jump_entry *found_bt;
1032
1033 found_bt = bonsai_lookup(bt, code);
1034 if (found_bt != e) {
1035 if (errs < 5)
1036 pr_err("jump_label match error slot %zu code=0x%lx: exp=%p bt=%p\n",
1037 i, code, e, found_bt);
1038 errs++;
1039 }
1040 }
1041
1042 /* Mid-range lookup (skip init entries whose memory was freed after boot) */
1043 for (i = 0; i < count; i++) {
1044 struct jump_entry *e = &start[i];
1045 unsigned long code = jump_entry_code(e);
1046 struct jump_entry *found_bt;
1047
1048 if (!jump_entry_is_init(e)) {
1049 int sz = jump_entry_size(e);
1050
1051 if (sz > 1) {
1052 found_bt = bonsai_lookup(bt, code + 1);
1053 if (found_bt != e) {
1054 if (errs < 5)
1055 pr_err("jump_label mid-range match error slot %zu code=0x%lx+1: exp=%p bt=%p\n",
1056 i, code, e, found_bt);
1057 errs++;
1058 }
1059 }
1060 }
1061 }
1062
1063 /* Negative probe: compare bonsai-accelerated text_reserved against linear scan */
1064 for (i = 0; i < min_t(size_t, count, 200); i++) {
1065 unsigned long bogus;
1066 int res_bt, res_lin = 0;
1067 size_t j;
1068
1069 if (jump_entry_is_init(&start[i]))
1070 continue;
1071
1072 bogus = jump_entry_code(&start[i]) - 1;
1073 res_bt = jump_label_text_reserved((void *)bogus, (void *)bogus);
1074
1075 for (j = 0; j < count; j++) {
1076 if (!jump_entry_is_init(&start[j])) {
1077 unsigned long s = jump_entry_code(&start[j]);
1078 int sz = jump_entry_size(&start[j]);
1079
1080 if (bogus >= s && bogus < s + sz) {
1081 res_lin = 1;
1082 break;
1083 }
1084 }
1085 }
1086
1087 if (res_bt != res_lin) {
1088 if (errs < 5)
1089 pr_err("jump_label negative probe mismatch addr=0x%lx: bt=%d lin=%d\n",
1090 bogus, res_bt, res_lin);
1091 errs++;
1092 }
1093 }
1094
1095 #if defined(CONFIG_MODULES) && defined(MODULE)
> 1096 if (THIS_MODULE->num_jump_entries) {
> 1097 struct jump_entry *me = THIS_MODULE->jump_entries;
1098 size_t mcount = THIS_MODULE->num_jump_entries;
> 1099 struct bonsai_tree *mbt = &THIS_MODULE->jump_tree;
1100
1101 if (!mbt->root_idx) {
1102 pr_err("live jump_label module test: THIS_MODULE tree empty\n");
1103 errs++;
1104 } else {
1105 for (i = 0; i < mcount; i++) {
1106 unsigned long code = jump_entry_code(&me[i]);
1107 struct jump_entry *found = bonsai_lookup(mbt, code);
1108 int res;
1109
1110 if (found != &me[i]) {
1111 pr_err("module jump_label match error slot %zu code=0x%lx\n", i, code);
1112 errs++;
1113 }
1114
1115 res = jump_label_text_reserved((void *)code, (void *)code);
1116 if (res != 1) {
1117 pr_err("module jump_label text_reserved failed (res=%d) at 0x%lx\n",
1118 res, code);
1119 errs++;
1120 }
1121 }
1122 pr_info("live module jump_label test (%zu entries): PASS\n", mcount);
1123 }
1124 }
1125 #endif
1126
1127 if (errs) {
1128 pr_err("live jump_label test: FAIL (%zu errors over %zu entries)\n", errs, count);
1129 return -EINVAL;
1130 }
1131
1132 pr_info("live jump_label test (%zu entries, height %u, %u nodes): PASS\n",
1133 count, bt->height, bt->node_count);
1134 return 0;
1135 }
1136
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-09-23 12:24 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202609231457.9w3NKBuk-lkp@intel.com \
--to=lkp@intel.com \
--cc=jim.cromie@gmail.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=ukaszb@chromium.org \
/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.