* [linux-review:UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103 2/2] arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types)
@ 2020-04-04 4:16 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2020-04-04 4:16 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 17254 bytes --]
tree: https://github.com/0day-ci/linux/commits/UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103
head: 3c7c50be178261ff63d8df5ac533fb67f35d0af5
commit: 3c7c50be178261ff63d8df5ac533fb67f35d0af5 [2/2] KVM: VMX: Extend VMX's #AC interceptor to handle split lock #AC in guest
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-188-g79f7ac98-dirty
git checkout 3c7c50be178261ff63d8df5ac533fb67f35d0af5
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct pt_regs *regs @@ got uct pt_regs *regs @@
>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse: expected struct pt_regs *regs
>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse: got unsigned long
>> arch/x86/kvm/vmx/vmx.c:4743:43: sparse: sparse: not enough arguments for function handle_user_split_lock
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110011 becomes 11)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110011 becomes 11)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100110 becomes 110)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100310 becomes 310)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100510 becomes 510)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100410 becomes 410)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100310 becomes 310)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100510 becomes 510)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100410 becomes 410)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30203 becomes 203)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30203 becomes 203)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30283 becomes 283)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30283 becomes 283)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b019b becomes 19b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b021b becomes 21b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b029b becomes 29b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b031b becomes 31b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b041b becomes 41b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80c88 becomes c88)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110311 becomes 311)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120992 becomes 992)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120992 becomes 992)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100610 becomes 610)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100690 becomes 690)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100590 becomes 590)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80408 becomes 408)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a039a becomes 39a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a041a becomes 41a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120a92 becomes a92)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a099a becomes 99a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a091a becomes 91a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a048a becomes 48a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a039a becomes 39a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a041a becomes 41a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120a92 becomes a92)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a099a becomes 99a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a091a becomes 91a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a048a becomes 48a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a010a becomes 10a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a050a becomes 50a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a071a becomes 71a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a079a becomes 79a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a009a becomes 9a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180198 becomes 198)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a051a becomes 51a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120392 becomes 392)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a001a becomes 1a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a028a becomes 28a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a030a becomes 30a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a038a becomes 38a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a040a becomes 40a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a028a becomes 28a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a030a becomes 30a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a038a becomes 38a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a040a becomes 40a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100090 becomes 90)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100090 becomes 90)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180118 becomes 118)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a001a becomes 1a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80688 becomes 688)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a009a becomes 9a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100790 becomes 790)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100790 becomes 790)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180198 becomes 198)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120492 becomes 492)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a061a becomes 61a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120492 becomes 492)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a061a becomes 61a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120412 becomes 412)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a059a becomes 59a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120412 becomes 412)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a059a becomes 59a)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (20402 becomes 402)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b001b becomes 1b)
arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: too many warnings
vim +4743 arch/x86/kvm/vmx/vmx.c
4631
4632 static int handle_exception_nmi(struct kvm_vcpu *vcpu)
4633 {
4634 struct vcpu_vmx *vmx = to_vmx(vcpu);
4635 struct kvm_run *kvm_run = vcpu->run;
4636 u32 intr_info, ex_no, error_code;
4637 unsigned long cr2, rip, dr6;
4638 u32 vect_info;
4639
4640 vect_info = vmx->idt_vectoring_info;
4641 intr_info = vmx->exit_intr_info;
4642
4643 if (is_machine_check(intr_info) || is_nmi(intr_info))
4644 return 1; /* handled by handle_exception_nmi_irqoff() */
4645
4646 if (is_invalid_opcode(intr_info))
4647 return handle_ud(vcpu);
4648
4649 error_code = 0;
4650 if (intr_info & INTR_INFO_DELIVER_CODE_MASK)
4651 error_code = vmcs_read32(VM_EXIT_INTR_ERROR_CODE);
4652
4653 if (!vmx->rmode.vm86_active && is_gp_fault(intr_info)) {
4654 WARN_ON_ONCE(!enable_vmware_backdoor);
4655
4656 /*
4657 * VMware backdoor emulation on #GP interception only handles
4658 * IN{S}, OUT{S}, and RDPMC, none of which generate a non-zero
4659 * error code on #GP.
4660 */
4661 if (error_code) {
4662 kvm_queue_exception_e(vcpu, GP_VECTOR, error_code);
4663 return 1;
4664 }
4665 return kvm_emulate_instruction(vcpu, EMULTYPE_VMWARE_GP);
4666 }
4667
4668 /*
4669 * The #PF with PFEC.RSVD = 1 indicates the guest is accessing
4670 * MMIO, it is better to report an internal error.
4671 * See the comments in vmx_handle_exit.
4672 */
4673 if ((vect_info & VECTORING_INFO_VALID_MASK) &&
4674 !(is_page_fault(intr_info) && !(error_code & PFERR_RSVD_MASK))) {
4675 vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
4676 vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_SIMUL_EX;
4677 vcpu->run->internal.ndata = 3;
4678 vcpu->run->internal.data[0] = vect_info;
4679 vcpu->run->internal.data[1] = intr_info;
4680 vcpu->run->internal.data[2] = error_code;
4681 return 0;
4682 }
4683
4684 if (is_page_fault(intr_info)) {
4685 cr2 = vmcs_readl(EXIT_QUALIFICATION);
4686 /* EPT won't cause page fault directly */
4687 WARN_ON_ONCE(!vcpu->arch.apf.host_apf_reason && enable_ept);
4688 return kvm_handle_page_fault(vcpu, error_code, cr2, NULL, 0);
4689 }
4690
4691 ex_no = intr_info & INTR_INFO_VECTOR_MASK;
4692
4693 if (vmx->rmode.vm86_active && rmode_exception(vcpu, ex_no))
4694 return handle_rmode_exception(vcpu, ex_no, error_code);
4695
4696 switch (ex_no) {
4697 case DB_VECTOR:
4698 dr6 = vmcs_readl(EXIT_QUALIFICATION);
4699 if (!(vcpu->guest_debug &
4700 (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
4701 vcpu->arch.dr6 &= ~DR_TRAP_BITS;
4702 vcpu->arch.dr6 |= dr6 | DR6_RTM;
4703 if (is_icebp(intr_info))
4704 WARN_ON(!skip_emulated_instruction(vcpu));
4705
4706 kvm_queue_exception(vcpu, DB_VECTOR);
4707 return 1;
4708 }
4709 kvm_run->debug.arch.dr6 = dr6 | DR6_FIXED_1;
4710 kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7);
4711 /* fall through */
4712 case BP_VECTOR:
4713 /*
4714 * Update instruction length as we may reinject #BP from
4715 * user space while in guest debugging mode. Reading it for
4716 * #DB as well causes no harm, it is not used in that case.
4717 */
4718 vmx->vcpu.arch.event_exit_inst_len =
4719 vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
4720 kvm_run->exit_reason = KVM_EXIT_DEBUG;
4721 rip = kvm_rip_read(vcpu);
4722 kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip;
4723 kvm_run->debug.arch.exception = ex_no;
4724 break;
4725 case AC_VECTOR:
4726 /*
4727 * Reflect #AC to the guest if it's expecting the #AC, i.e. has
4728 * legacy alignment check enabled. Pre-check host split lock
4729 * turned on to avoid the VMREADs needed to check legacy #AC,
4730 * i.e. reflect the #AC if the only possible source is legacy
4731 * alignment checks.
4732 */
4733 if (!boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT) ||
4734 guest_cpu_alignment_check_enabled(vcpu)) {
4735 kvm_queue_exception_e(vcpu, AC_VECTOR, error_code);
4736 return 1;
4737 }
4738
4739 /*
4740 * Forward the #AC to userspace if kernel policy does not allow
4741 * temporarily disabling split lock detection.
4742 */
> 4743 if (handle_user_split_lock(kvm_rip_read(vcpu)))
4744 return 1;
4745 fallthrough;
4746 default:
4747 kvm_run->exit_reason = KVM_EXIT_EXCEPTION;
4748 kvm_run->ex.exception = ex_no;
4749 kvm_run->ex.error_code = error_code;
4750 break;
4751 }
4752 return 0;
4753 }
4754
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-04-04 4:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-04 4:16 [linux-review:UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103 2/2] arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types) kbuild 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.