* [android-common:android16-6.12 2/2] drivers/virt/gunyah/vm_mgr.c:173:28: error: implicit declaration of function 'module_refcount'
@ 2026-03-11 13:13 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-03-11 13:13 UTC (permalink / raw)
To: cros-kernel-buildreports; +Cc: oe-kbuild-all
tree: https://android.googlesource.com/kernel/common android16-6.12
head: 0104b0412b0a41935ece11bfd31b3b309c734cd7
commit: 93af311a26d2889a54d01bd27170ba59e0cc7536 [2/2] FROMLIST: gunyah: vm_mgr: Add framework for VM Functions
config: arm64-randconfig-r132-20260311 (https://download.01.org/0day-ci/archive/20260311/202603112157.1TTCB2vY-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.3.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260311/202603112157.1TTCB2vY-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/202603112157.1TTCB2vY-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from arch/arm64/include/asm/bug.h:26,
from include/linux/bug.h:5,
from arch/arm64/include/asm/cpufeature.h:24,
from arch/arm64/include/asm/hwcap.h:9,
from arch/arm64/include/asm/arch_timer.h:12,
from arch/arm64/include/asm/timex.h:8,
from include/linux/timex.h:67,
from include/linux/time32.h:13,
from include/linux/time.h:60,
from include/linux/compat.h:10,
from drivers/virt/gunyah/vm_mgr.c:9:
drivers/virt/gunyah/vm_mgr.c: In function 'gunyah_vm_function_unregister':
>> drivers/virt/gunyah/vm_mgr.c:173:28: error: implicit declaration of function 'module_refcount' [-Wimplicit-function-declaration]
173 | WARN_ON(fn->mod && module_refcount(fn->mod));
| ^~~~~~~~~~~~~~~
include/asm-generic/bug.h:123:32: note: in definition of macro 'WARN_ON'
123 | int __ret_warn_on = !!(condition); \
| ^~~~~~~~~
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for PHYLINK
Depends on [n]: NETDEVICES [=n]
Selected by [y]:
- GKI_HIDDEN_ETHERNET_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for SND_JACK_INPUT_DEV
Depends on [n]: SOUND [=n] && SND [=n] && SND_JACK [=y]
Selected by [y]:
- GKI_HIDDEN_SND_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for NET_DEVLINK
Depends on [n]: NET [=n]
Selected by [y]:
- GKI_HIDDEN_NET_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for WEXT_PROC
Depends on [n]: NET [=n] && WIRELESS [=n] && PROC_FS [=y] && WEXT_CORE [=y]
Selected by [y]:
- GKI_LEGACY_WEXT_ALLCONFIG [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for DIMLIB
Depends on [n]: NET [=n]
Selected by [y]:
- GKI_HIDDEN_VIRTUAL_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for SND_PCM_ELD
Depends on [n]: SOUND [=n] && SND [=n]
Selected by [y]:
- GKI_HIDDEN_SND_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for PAGE_POOL
Depends on [n]: NET [=n]
Selected by [y]:
- GKI_HIDDEN_NET_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for WEXT_PRIV
Depends on [n]: NET [=n] && WIRELESS [=n]
Selected by [y]:
- GKI_LEGACY_WEXT_ALLCONFIG [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for NET_PTP_CLASSIFY
Depends on [n]: NET [=n]
Selected by [y]:
- GKI_HIDDEN_NET_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for DRM_MIPI_DSI
Depends on [n]: HAS_IOMEM [=y] && DRM [=n]
Selected by [y]:
- GKI_HIDDEN_DRM_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for SND_PCM_IEC958
Depends on [n]: SOUND [=n] && SND [=n]
Selected by [y]:
- GKI_HIDDEN_SND_SOC_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for WIRELESS_EXT
Depends on [n]: NET [=n] && WIRELESS [=n]
Selected by [y]:
- GKI_LEGACY_WEXT_ALLCONFIG [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for WEXT_CORE
Depends on [n]: NET [=n] && WIRELESS [=n] && (CFG80211_WEXT [=n] || WIRELESS_EXT [=y])
Selected by [y]:
- GKI_LEGACY_WEXT_ALLCONFIG [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for SND_JACK
Depends on [n]: SOUND [=n] && SND [=n]
Selected by [y]:
- GKI_HIDDEN_SND_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for SND_VMASTER
Depends on [n]: SOUND [=n] && SND [=n]
Selected by [y]:
- GKI_HIDDEN_SND_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for CAN_RX_OFFLOAD
Depends on [n]: NETDEVICES [=n] && CAN_DEV [=n] && CAN_NETLINK [=n]
Selected by [y]:
- GKI_HIDDEN_MCP251XFD_CONFIGS [=y] && 64BIT [=y]
WARNING: unmet direct dependencies detected for WEXT_SPY
Depends on [n]: NET [=n] && WIRELESS [=n]
Selected by [y]:
- GKI_LEGACY_WEXT_ALLCONFIG [=y] && 64BIT [=y]
vim +/module_refcount +173 drivers/virt/gunyah/vm_mgr.c
7
8 #include <linux/anon_inodes.h>
> 9 #include <linux/compat.h>
10 #include <linux/file.h>
11 #include <linux/miscdevice.h>
12 #include <linux/module.h>
13 #include <linux/xarray.h>
14
15 #include <uapi/linux/gunyah.h>
16
17 #include "rsc_mgr.h"
18 #include "vm_mgr.h"
19
20 static DEFINE_XARRAY(gunyah_vm_functions);
21
22 static void gunyah_vm_put_function(struct gunyah_vm_function *fn)
23 {
24 module_put(fn->mod);
25 }
26
27 static struct gunyah_vm_function *gunyah_vm_get_function(u32 type)
28 {
29 struct gunyah_vm_function *fn;
30
31 fn = xa_load(&gunyah_vm_functions, type);
32 if (!fn) {
33 request_module("ghfunc:%d", type);
34
35 fn = xa_load(&gunyah_vm_functions, type);
36 }
37
38 if (!fn || !try_module_get(fn->mod))
39 fn = ERR_PTR(-ENOENT);
40
41 return fn;
42 }
43
44 static void
45 gunyah_vm_remove_function_instance(struct gunyah_vm_function_instance *inst)
46 __must_hold(&inst->ghvm->fn_lock)
47 {
48 inst->fn->unbind(inst);
49 list_del(&inst->vm_list);
50 gunyah_vm_put_function(inst->fn);
51 kfree(inst->argp);
52 kfree(inst);
53 }
54
55 static void gunyah_vm_remove_functions(struct gunyah_vm *ghvm)
56 {
57 struct gunyah_vm_function_instance *inst, *iiter;
58
59 mutex_lock(&ghvm->fn_lock);
60 list_for_each_entry_safe(inst, iiter, &ghvm->functions, vm_list) {
61 gunyah_vm_remove_function_instance(inst);
62 }
63 mutex_unlock(&ghvm->fn_lock);
64 }
65
66 static long gunyah_vm_add_function_instance(struct gunyah_vm *ghvm,
67 struct gunyah_fn_desc *f)
68 {
69 struct gunyah_vm_function_instance *inst;
70 void __user *argp;
71 long r = 0;
72
73 if (f->arg_size > GUNYAH_FN_MAX_ARG_SIZE) {
74 dev_err_ratelimited(ghvm->parent, "%s: arg_size > %d\n",
75 __func__, GUNYAH_FN_MAX_ARG_SIZE);
76 return -EINVAL;
77 }
78
79 inst = kzalloc(sizeof(*inst), GFP_KERNEL);
80 if (!inst)
81 return -ENOMEM;
82
83 inst->arg_size = f->arg_size;
84 if (inst->arg_size) {
85 inst->argp = kzalloc(inst->arg_size, GFP_KERNEL);
86 if (!inst->argp) {
87 r = -ENOMEM;
88 goto free;
89 }
90
91 argp = u64_to_user_ptr(f->arg);
92 if (copy_from_user(inst->argp, argp, f->arg_size)) {
93 r = -EFAULT;
94 goto free_arg;
95 }
96 }
97
98 inst->fn = gunyah_vm_get_function(f->type);
99 if (IS_ERR(inst->fn)) {
100 r = PTR_ERR(inst->fn);
101 goto free_arg;
102 }
103
104 inst->ghvm = ghvm;
105 inst->rm = ghvm->rm;
106
107 mutex_lock(&ghvm->fn_lock);
108 r = inst->fn->bind(inst);
109 if (r < 0) {
110 mutex_unlock(&ghvm->fn_lock);
111 gunyah_vm_put_function(inst->fn);
112 goto free_arg;
113 }
114
115 list_add(&inst->vm_list, &ghvm->functions);
116 mutex_unlock(&ghvm->fn_lock);
117
118 return r;
119 free_arg:
120 kfree(inst->argp);
121 free:
122 kfree(inst);
123 return r;
124 }
125
126 static long gunyah_vm_rm_function_instance(struct gunyah_vm *ghvm,
127 struct gunyah_fn_desc *f)
128 {
129 struct gunyah_vm_function_instance *inst, *iter;
130 void __user *user_argp;
131 void *argp __free(kfree) = NULL;
132 long r = 0;
133
134 if (f->arg_size) {
135 argp = kzalloc(f->arg_size, GFP_KERNEL);
136 if (!argp)
137 return -ENOMEM;
138
139 user_argp = u64_to_user_ptr(f->arg);
140 if (copy_from_user(argp, user_argp, f->arg_size))
141 return -EFAULT;
142 }
143
144 r = mutex_lock_interruptible(&ghvm->fn_lock);
145 if (r)
146 return r;
147
148 r = -ENOENT;
149 list_for_each_entry_safe(inst, iter, &ghvm->functions, vm_list) {
150 if (inst->fn->type == f->type &&
151 inst->fn->compare(inst, argp, f->arg_size)) {
152 gunyah_vm_remove_function_instance(inst);
153 r = 0;
154 }
155 }
156
157 mutex_unlock(&ghvm->fn_lock);
158 return r;
159 }
160
161 int gunyah_vm_function_register(struct gunyah_vm_function *fn)
162 {
163 if (!fn->bind || !fn->unbind)
164 return -EINVAL;
165
166 return xa_err(xa_store(&gunyah_vm_functions, fn->type, fn, GFP_KERNEL));
167 }
168 EXPORT_SYMBOL_GPL(gunyah_vm_function_register);
169
170 void gunyah_vm_function_unregister(struct gunyah_vm_function *fn)
171 {
172 /* Expecting unregister to only come when unloading a module */
> 173 WARN_ON(fn->mod && module_refcount(fn->mod));
174 xa_erase(&gunyah_vm_functions, fn->type);
175 }
176 EXPORT_SYMBOL_GPL(gunyah_vm_function_unregister);
177
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-03-11 13:13 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 13:13 [android-common:android16-6.12 2/2] drivers/virt/gunyah/vm_mgr.c:173:28: error: implicit declaration of function 'module_refcount' kernel test robot
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.