All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [android-common:android14-6.1 5688/6870] arch/arm64/kvm/hyp/nvhe/switch.c:337:5: warning: no previous prototype for '__pkvm_register_hyp_panic_notifier'
Date: Thu, 2 Feb 2023 21:38:25 +0800	[thread overview]
Message-ID: <202302022103.iBZs5d8R-lkp@intel.com> (raw)

tree:   https://android.googlesource.com/kernel/common android14-6.1
head:   b2487c5b2bdbac887caa086038f90c88f31f30af
commit: 7d969932eec583efdec695b4ee5d57ba6a88a186 [5688/6870] ANDROID: KVM: arm64: Introduce a hyp panic module notifier
config: arm64-buildonly-randconfig-r005-20230130 (https://download.01.org/0day-ci/archive/20230202/202302022103.iBZs5d8R-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 12.1.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
        git remote add android-common https://android.googlesource.com/kernel/common
        git fetch --no-tags android-common android14-6.1
        git checkout 7d969932eec583efdec695b4ee5d57ba6a88a186
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/kvm/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   arch/arm64/kvm/hyp/nvhe/switch.c:183:43: warning: initialized field overwritten [-Woverride-init]
     183 |         [ESR_ELx_EC_CP15_32]            = kvm_hyp_handle_cp15_32,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:183:43: note: (near initialization for 'hyp_exit_handlers[3]')
   arch/arm64/kvm/hyp/nvhe/switch.c:184:43: warning: initialized field overwritten [-Woverride-init]
     184 |         [ESR_ELx_EC_HVC64]              = kvm_hyp_handle_hvc64,
         |                                           ^~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:184:43: note: (near initialization for 'hyp_exit_handlers[22]')
   arch/arm64/kvm/hyp/nvhe/switch.c:185:43: warning: initialized field overwritten [-Woverride-init]
     185 |         [ESR_ELx_EC_SYS64]              = kvm_hyp_handle_sysreg,
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:185:43: note: (near initialization for 'hyp_exit_handlers[24]')
   arch/arm64/kvm/hyp/nvhe/switch.c:186:43: warning: initialized field overwritten [-Woverride-init]
     186 |         [ESR_ELx_EC_SVE]                = kvm_hyp_handle_fpsimd,
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:186:43: note: (near initialization for 'hyp_exit_handlers[25]')
   arch/arm64/kvm/hyp/nvhe/switch.c:187:43: warning: initialized field overwritten [-Woverride-init]
     187 |         [ESR_ELx_EC_FP_ASIMD]           = kvm_hyp_handle_fpsimd,
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:187:43: note: (near initialization for 'hyp_exit_handlers[7]')
   arch/arm64/kvm/hyp/nvhe/switch.c:188:43: warning: initialized field overwritten [-Woverride-init]
     188 |         [ESR_ELx_EC_IABT_LOW]           = kvm_hyp_handle_iabt_low,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:188:43: note: (near initialization for 'hyp_exit_handlers[32]')
   arch/arm64/kvm/hyp/nvhe/switch.c:189:43: warning: initialized field overwritten [-Woverride-init]
     189 |         [ESR_ELx_EC_DABT_LOW]           = kvm_hyp_handle_dabt_low,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:189:43: note: (near initialization for 'hyp_exit_handlers[36]')
   arch/arm64/kvm/hyp/nvhe/switch.c:190:43: warning: initialized field overwritten [-Woverride-init]
     190 |         [ESR_ELx_EC_PAC]                = kvm_hyp_handle_ptrauth,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:190:43: note: (near initialization for 'hyp_exit_handlers[9]')
   arch/arm64/kvm/hyp/nvhe/switch.c:195:43: warning: initialized field overwritten [-Woverride-init]
     195 |         [ESR_ELx_EC_HVC64]              = kvm_handle_pvm_hvc64,
         |                                           ^~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:195:43: note: (near initialization for 'pvm_exit_handlers[22]')
   arch/arm64/kvm/hyp/nvhe/switch.c:196:43: warning: initialized field overwritten [-Woverride-init]
     196 |         [ESR_ELx_EC_SYS64]              = kvm_handle_pvm_sys64,
         |                                           ^~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:196:43: note: (near initialization for 'pvm_exit_handlers[24]')
   arch/arm64/kvm/hyp/nvhe/switch.c:197:43: warning: initialized field overwritten [-Woverride-init]
     197 |         [ESR_ELx_EC_SVE]                = kvm_handle_pvm_restricted,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:197:43: note: (near initialization for 'pvm_exit_handlers[25]')
   arch/arm64/kvm/hyp/nvhe/switch.c:198:43: warning: initialized field overwritten [-Woverride-init]
     198 |         [ESR_ELx_EC_FP_ASIMD]           = kvm_hyp_handle_fpsimd,
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:198:43: note: (near initialization for 'pvm_exit_handlers[7]')
   arch/arm64/kvm/hyp/nvhe/switch.c:199:43: warning: initialized field overwritten [-Woverride-init]
     199 |         [ESR_ELx_EC_IABT_LOW]           = kvm_hyp_handle_iabt_low,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:199:43: note: (near initialization for 'pvm_exit_handlers[32]')
   arch/arm64/kvm/hyp/nvhe/switch.c:200:43: warning: initialized field overwritten [-Woverride-init]
     200 |         [ESR_ELx_EC_DABT_LOW]           = kvm_hyp_handle_dabt_low,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:200:43: note: (near initialization for 'pvm_exit_handlers[36]')
   arch/arm64/kvm/hyp/nvhe/switch.c:201:43: warning: initialized field overwritten [-Woverride-init]
     201 |         [ESR_ELx_EC_PAC]                = kvm_hyp_handle_ptrauth,
         |                                           ^~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:201:43: note: (near initialization for 'pvm_exit_handlers[9]')
>> arch/arm64/kvm/hyp/nvhe/switch.c:337:5: warning: no previous prototype for '__pkvm_register_hyp_panic_notifier' [-Wmissing-prototypes]
     337 | int __pkvm_register_hyp_panic_notifier(void (*cb)(struct kvm_cpu_context *host_ctxt))
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:342:28: warning: no previous prototype for 'hyp_panic' [-Wmissing-prototypes]
     342 | asmlinkage void __noreturn hyp_panic(void)
         |                            ^~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:371:28: warning: no previous prototype for 'hyp_panic_bad_stack' [-Wmissing-prototypes]
     371 | asmlinkage void __noreturn hyp_panic_bad_stack(void)
         |                            ^~~~~~~~~~~~~~~~~~~
   arch/arm64/kvm/hyp/nvhe/switch.c:376:17: warning: no previous prototype for 'kvm_unexpected_el2_exception' [-Wmissing-prototypes]
     376 | asmlinkage void kvm_unexpected_el2_exception(void)
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +/__pkvm_register_hyp_panic_notifier +337 arch/arm64/kvm/hyp/nvhe/switch.c

   192	
   193	static const exit_handler_fn pvm_exit_handlers[] = {
   194		[0 ... ESR_ELx_EC_MAX]		= NULL,
   195		[ESR_ELx_EC_HVC64]		= kvm_handle_pvm_hvc64,
   196		[ESR_ELx_EC_SYS64]		= kvm_handle_pvm_sys64,
   197		[ESR_ELx_EC_SVE]		= kvm_handle_pvm_restricted,
   198		[ESR_ELx_EC_FP_ASIMD]		= kvm_hyp_handle_fpsimd,
 > 199		[ESR_ELx_EC_IABT_LOW]		= kvm_hyp_handle_iabt_low,
   200		[ESR_ELx_EC_DABT_LOW]		= kvm_hyp_handle_dabt_low,
   201		[ESR_ELx_EC_PAC]		= kvm_hyp_handle_ptrauth,
   202	};
   203	
   204	static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu)
   205	{
   206		if (unlikely(vcpu_is_protected(vcpu)))
   207			return pvm_exit_handlers;
   208	
   209		return hyp_exit_handlers;
   210	}
   211	
   212	/*
   213	 * Some guests (e.g., protected VMs) are not be allowed to run in AArch32.
   214	 * The ARMv8 architecture does not give the hypervisor a mechanism to prevent a
   215	 * guest from dropping to AArch32 EL0 if implemented by the CPU. If the
   216	 * hypervisor spots a guest in such a state ensure it is handled, and don't
   217	 * trust the host to spot or fix it.  The check below is based on the one in
   218	 * kvm_arch_vcpu_ioctl_run().
   219	 *
   220	 * Returns false if the guest ran in AArch32 when it shouldn't have, and
   221	 * thus should exit to the host, or true if a the guest run loop can continue.
   222	 */
   223	static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code)
   224	{
   225		if (unlikely(vcpu_is_protected(vcpu) && vcpu_mode_is_32bit(vcpu))) {
   226			/*
   227			 * As we have caught the guest red-handed, decide that it isn't
   228			 * fit for purpose anymore by making the vcpu invalid. The VMM
   229			 * can try and fix it by re-initializing the vcpu with
   230			 * KVM_ARM_VCPU_INIT, however, this is likely not possible for
   231			 * protected VMs.
   232			 */
   233			vcpu->arch.target = -1;
   234			*exit_code &= BIT(ARM_EXIT_WITH_SERROR_BIT);
   235			*exit_code |= ARM_EXCEPTION_IL;
   236		}
   237	}
   238	
   239	/* Switch to the guest for legacy non-VHE systems */
   240	int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
   241	{
   242		struct kvm_cpu_context *host_ctxt;
   243		struct kvm_cpu_context *guest_ctxt;
   244		struct kvm_s2_mmu *mmu;
   245		bool pmu_switch_needed;
   246		u64 exit_code;
   247	
   248		/*
   249		 * Having IRQs masked via PMR when entering the guest means the GIC
   250		 * will not signal the CPU of interrupts of lower priority, and the
   251		 * only way to get out will be via guest exceptions.
   252		 * Naturally, we want to avoid this.
   253		 */
   254		if (system_uses_irq_prio_masking()) {
   255			gic_write_pmr(GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET);
   256			pmr_sync();
   257		}
   258	
   259		host_ctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt;
   260		host_ctxt->__hyp_running_vcpu = vcpu;
   261		guest_ctxt = &vcpu->arch.ctxt;
   262	
   263		pmu_switch_needed = __pmu_switch_to_guest(vcpu);
   264	
   265		__sysreg_save_state_nvhe(host_ctxt);
   266		/*
   267		 * We must flush and disable the SPE buffer for nVHE, as
   268		 * the translation regime(EL1&0) is going to be loaded with
   269		 * that of the guest. And we must do this before we change the
   270		 * translation regime to EL2 (via MDCR_EL2_E2PB == 0) and
   271		 * before we load guest Stage1.
   272		 */
   273		__debug_save_host_buffers_nvhe(vcpu);
   274	
   275		__kvm_adjust_pc(vcpu);
   276	
   277		/*
   278		 * We must restore the 32-bit state before the sysregs, thanks
   279		 * to erratum #852523 (Cortex-A57) or #853709 (Cortex-A72).
   280		 *
   281		 * Also, and in order to be able to deal with erratum #1319537 (A57)
   282		 * and #1319367 (A72), we must ensure that all VM-related sysreg are
   283		 * restored before we enable S2 translation.
   284		 */
   285		__sysreg32_restore_state(vcpu);
   286		__sysreg_restore_state_nvhe(guest_ctxt);
   287	
   288		mmu = kern_hyp_va(vcpu->arch.hw_mmu);
   289		__load_stage2(mmu, kern_hyp_va(mmu->arch));
   290		__activate_traps(vcpu);
   291	
   292		__hyp_vgic_restore_state(vcpu);
   293		__timer_enable_traps(vcpu);
   294	
   295		__debug_switch_to_guest(vcpu);
   296	
   297		do {
   298			/* Jump in the fire! */
   299			exit_code = __guest_enter(vcpu);
   300	
   301			/* And we're baaack! */
   302		} while (fixup_guest_exit(vcpu, &exit_code));
   303	
   304		__sysreg_save_state_nvhe(guest_ctxt);
   305		__sysreg32_save_state(vcpu);
   306		__timer_disable_traps(vcpu);
   307		__hyp_vgic_save_state(vcpu);
   308	
   309		__deactivate_traps(vcpu);
   310		__load_host_stage2();
   311	
   312		__sysreg_restore_state_nvhe(host_ctxt);
   313	
   314		if (vcpu->arch.fp_state == FP_STATE_GUEST_OWNED)
   315			__fpsimd_save_fpexc32(vcpu);
   316	
   317		__debug_switch_to_host(vcpu);
   318		/*
   319		 * This must come after restoring the host sysregs, since a non-VHE
   320		 * system may enable SPE here and make use of the TTBRs.
   321		 */
   322		__debug_restore_host_buffers_nvhe(vcpu);
   323	
   324		if (pmu_switch_needed)
   325			__pmu_switch_to_host(vcpu);
   326	
   327		/* Returning to host will clear PSR.I, remask PMR if needed */
   328		if (system_uses_irq_prio_masking())
   329			gic_write_pmr(GIC_PRIO_IRQOFF);
   330	
   331		host_ctxt->__hyp_running_vcpu = NULL;
   332	
   333		return exit_code;
   334	}
   335	
   336	static void (*hyp_panic_notifier)(struct kvm_cpu_context *host_ctxt);
 > 337	int __pkvm_register_hyp_panic_notifier(void (*cb)(struct kvm_cpu_context *host_ctxt))
   338	{
   339		return cmpxchg(&hyp_panic_notifier, NULL, cb) ? -EBUSY : 0;
   340	}
   341	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

                 reply	other threads:[~2023-02-02 13:38 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=202302022103.iBZs5d8R-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=cros-kernel-buildreports@googlegroups.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /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.