arch/arm64/kvm/handle_exit.c:295:24: warning: no previous prototype for 'nvhe_hyp_panic_handler'

From: kernel test robot
Date: Thu Jul 01 2021 - 10:02:52 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: dbe69e43372212527abf48609aba7fc39a6daa27
commit: aec0fae62e47050019474936248a311a0ab08705 KVM: arm64: Log source when panicking from nVHE hyp
date: 3 months ago
config: arm64-buildonly-randconfig-r002-20210701 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aec0fae62e47050019474936248a311a0ab08705
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout aec0fae62e47050019474936248a311a0ab08705
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

arch/arm64/kvm/handle_exit.c:177:21: warning: initialized field overwritten [-Woverride-init]
177 | [ESR_ELx_EC_WFx] = kvm_handle_wfx,
| ^~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:177:21: note: (near initialization for 'arm_exit_handlers[1]')
arch/arm64/kvm/handle_exit.c:178:25: warning: initialized field overwritten [-Woverride-init]
178 | [ESR_ELx_EC_CP15_32] = kvm_handle_cp15_32,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:178:25: note: (near initialization for 'arm_exit_handlers[3]')
arch/arm64/kvm/handle_exit.c:179:25: warning: initialized field overwritten [-Woverride-init]
179 | [ESR_ELx_EC_CP15_64] = kvm_handle_cp15_64,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:179:25: note: (near initialization for 'arm_exit_handlers[4]')
arch/arm64/kvm/handle_exit.c:180:25: warning: initialized field overwritten [-Woverride-init]
180 | [ESR_ELx_EC_CP14_MR] = kvm_handle_cp14_32,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:180:25: note: (near initialization for 'arm_exit_handlers[5]')
arch/arm64/kvm/handle_exit.c:181:25: warning: initialized field overwritten [-Woverride-init]
181 | [ESR_ELx_EC_CP14_LS] = kvm_handle_cp14_load_store,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:181:25: note: (near initialization for 'arm_exit_handlers[6]')
arch/arm64/kvm/handle_exit.c:182:25: warning: initialized field overwritten [-Woverride-init]
182 | [ESR_ELx_EC_CP14_64] = kvm_handle_cp14_64,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:182:25: note: (near initialization for 'arm_exit_handlers[12]')
arch/arm64/kvm/handle_exit.c:183:23: warning: initialized field overwritten [-Woverride-init]
183 | [ESR_ELx_EC_HVC32] = handle_hvc,
| ^~~~~~~~~~
arch/arm64/kvm/handle_exit.c:183:23: note: (near initialization for 'arm_exit_handlers[18]')
arch/arm64/kvm/handle_exit.c:184:23: warning: initialized field overwritten [-Woverride-init]
184 | [ESR_ELx_EC_SMC32] = handle_smc,
| ^~~~~~~~~~
arch/arm64/kvm/handle_exit.c:184:23: note: (near initialization for 'arm_exit_handlers[19]')
arch/arm64/kvm/handle_exit.c:185:23: warning: initialized field overwritten [-Woverride-init]
185 | [ESR_ELx_EC_HVC64] = handle_hvc,
| ^~~~~~~~~~
arch/arm64/kvm/handle_exit.c:185:23: note: (near initialization for 'arm_exit_handlers[22]')
arch/arm64/kvm/handle_exit.c:186:23: warning: initialized field overwritten [-Woverride-init]
186 | [ESR_ELx_EC_SMC64] = handle_smc,
| ^~~~~~~~~~
arch/arm64/kvm/handle_exit.c:186:23: note: (near initialization for 'arm_exit_handlers[23]')
arch/arm64/kvm/handle_exit.c:187:23: warning: initialized field overwritten [-Woverride-init]
187 | [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:187:23: note: (near initialization for 'arm_exit_handlers[24]')
arch/arm64/kvm/handle_exit.c:188:21: warning: initialized field overwritten [-Woverride-init]
188 | [ESR_ELx_EC_SVE] = handle_sve,
| ^~~~~~~~~~
arch/arm64/kvm/handle_exit.c:188:21: note: (near initialization for 'arm_exit_handlers[25]')
arch/arm64/kvm/handle_exit.c:189:26: warning: initialized field overwritten [-Woverride-init]
189 | [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:189:26: note: (near initialization for 'arm_exit_handlers[32]')
arch/arm64/kvm/handle_exit.c:190:26: warning: initialized field overwritten [-Woverride-init]
190 | [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:190:26: note: (near initialization for 'arm_exit_handlers[36]')
arch/arm64/kvm/handle_exit.c:191:28: warning: initialized field overwritten [-Woverride-init]
191 | [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:191:28: note: (near initialization for 'arm_exit_handlers[50]')
arch/arm64/kvm/handle_exit.c:192:28: warning: initialized field overwritten [-Woverride-init]
192 | [ESR_ELx_EC_WATCHPT_LOW]= kvm_handle_guest_debug,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:192:28: note: (near initialization for 'arm_exit_handlers[52]')
arch/arm64/kvm/handle_exit.c:193:28: warning: initialized field overwritten [-Woverride-init]
193 | [ESR_ELx_EC_BREAKPT_LOW]= kvm_handle_guest_debug,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:193:28: note: (near initialization for 'arm_exit_handlers[48]')
arch/arm64/kvm/handle_exit.c:194:24: warning: initialized field overwritten [-Woverride-init]
194 | [ESR_ELx_EC_BKPT32] = kvm_handle_guest_debug,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:194:24: note: (near initialization for 'arm_exit_handlers[56]')
arch/arm64/kvm/handle_exit.c:195:23: warning: initialized field overwritten [-Woverride-init]
195 | [ESR_ELx_EC_BRK64] = kvm_handle_guest_debug,
| ^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:195:23: note: (near initialization for 'arm_exit_handlers[60]')
arch/arm64/kvm/handle_exit.c:196:26: warning: initialized field overwritten [-Woverride-init]
196 | [ESR_ELx_EC_FP_ASIMD] = handle_no_fpsimd,
| ^~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:196:26: note: (near initialization for 'arm_exit_handlers[7]')
arch/arm64/kvm/handle_exit.c:197:21: warning: initialized field overwritten [-Woverride-init]
197 | [ESR_ELx_EC_PAC] = kvm_handle_ptrauth,
| ^~~~~~~~~~~~~~~~~~
arch/arm64/kvm/handle_exit.c:197:21: note: (near initialization for 'arm_exit_handlers[9]')
>> arch/arm64/kvm/handle_exit.c:295:24: warning: no previous prototype for 'nvhe_hyp_panic_handler' [-Wmissing-prototypes]
295 | void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, u64 elr,
| ^~~~~~~~~~~~~~~~~~~~~~


vim +/nvhe_hyp_panic_handler +295 arch/arm64/kvm/handle_exit.c

174
175 static exit_handle_fn arm_exit_handlers[] = {
176 [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec,
177 [ESR_ELx_EC_WFx] = kvm_handle_wfx,
178 [ESR_ELx_EC_CP15_32] = kvm_handle_cp15_32,
179 [ESR_ELx_EC_CP15_64] = kvm_handle_cp15_64,
180 [ESR_ELx_EC_CP14_MR] = kvm_handle_cp14_32,
181 [ESR_ELx_EC_CP14_LS] = kvm_handle_cp14_load_store,
182 [ESR_ELx_EC_CP14_64] = kvm_handle_cp14_64,
183 [ESR_ELx_EC_HVC32] = handle_hvc,
184 [ESR_ELx_EC_SMC32] = handle_smc,
185 [ESR_ELx_EC_HVC64] = handle_hvc,
186 [ESR_ELx_EC_SMC64] = handle_smc,
187 [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg,
188 [ESR_ELx_EC_SVE] = handle_sve,
189 [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort,
190 [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort,
191 [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug,
192 [ESR_ELx_EC_WATCHPT_LOW]= kvm_handle_guest_debug,
193 [ESR_ELx_EC_BREAKPT_LOW]= kvm_handle_guest_debug,
194 [ESR_ELx_EC_BKPT32] = kvm_handle_guest_debug,
> 195 [ESR_ELx_EC_BRK64] = kvm_handle_guest_debug,
196 [ESR_ELx_EC_FP_ASIMD] = handle_no_fpsimd,
197 [ESR_ELx_EC_PAC] = kvm_handle_ptrauth,
198 };
199
200 static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu)
201 {
202 u32 esr = kvm_vcpu_get_esr(vcpu);
203 u8 esr_ec = ESR_ELx_EC(esr);
204
205 return arm_exit_handlers[esr_ec];
206 }
207
208 /*
209 * We may be single-stepping an emulated instruction. If the emulation
210 * has been completed in the kernel, we can return to userspace with a
211 * KVM_EXIT_DEBUG, otherwise userspace needs to complete its
212 * emulation first.
213 */
214 static int handle_trap_exceptions(struct kvm_vcpu *vcpu)
215 {
216 int handled;
217
218 /*
219 * See ARM ARM B1.14.1: "Hyp traps on instructions
220 * that fail their condition code check"
221 */
222 if (!kvm_condition_valid(vcpu)) {
223 kvm_incr_pc(vcpu);
224 handled = 1;
225 } else {
226 exit_handle_fn exit_handler;
227
228 exit_handler = kvm_get_exit_handler(vcpu);
229 handled = exit_handler(vcpu);
230 }
231
232 return handled;
233 }
234
235 /*
236 * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on
237 * proper exit to userspace.
238 */
239 int handle_exit(struct kvm_vcpu *vcpu, int exception_index)
240 {
241 struct kvm_run *run = vcpu->run;
242
243 exception_index = ARM_EXCEPTION_CODE(exception_index);
244
245 switch (exception_index) {
246 case ARM_EXCEPTION_IRQ:
247 return 1;
248 case ARM_EXCEPTION_EL1_SERROR:
249 return 1;
250 case ARM_EXCEPTION_TRAP:
251 return handle_trap_exceptions(vcpu);
252 case ARM_EXCEPTION_HYP_GONE:
253 /*
254 * EL2 has been reset to the hyp-stub. This happens when a guest
255 * is pre-empted by kvm_reboot()'s shutdown call.
256 */
257 run->exit_reason = KVM_EXIT_FAIL_ENTRY;
258 return 0;
259 case ARM_EXCEPTION_IL:
260 /*
261 * We attempted an illegal exception return. Guest state must
262 * have been corrupted somehow. Give up.
263 */
264 run->exit_reason = KVM_EXIT_FAIL_ENTRY;
265 return -EINVAL;
266 default:
267 kvm_pr_unimpl("Unsupported exception type: %d",
268 exception_index);
269 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
270 return 0;
271 }
272 }
273
274 /* For exit types that need handling before we can be preempted */
275 void handle_exit_early(struct kvm_vcpu *vcpu, int exception_index)
276 {
277 if (ARM_SERROR_PENDING(exception_index)) {
278 if (this_cpu_has_cap(ARM64_HAS_RAS_EXTN)) {
279 u64 disr = kvm_vcpu_get_disr(vcpu);
280
281 kvm_handle_guest_serror(vcpu, disr_to_esr(disr));
282 } else {
283 kvm_inject_vabt(vcpu);
284 }
285
286 return;
287 }
288
289 exception_index = ARM_EXCEPTION_CODE(exception_index);
290
291 if (exception_index == ARM_EXCEPTION_EL1_SERROR)
292 kvm_handle_guest_serror(vcpu, kvm_vcpu_get_esr(vcpu));
293 }
294
> 295 void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, u64 elr,

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip