Hi Paolo,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/auto-latest]
[also build test ERROR on linus/master v5.7-rc4 next-20200505]
[cannot apply to kvm/linux-next linux/master]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    
https://github.com/0day-ci/linux/commits/Paolo-Bonzini/KVM-x86-fix-DR6-delivery-for-various-cases-of-DB-injection/20200507-022910
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
5545b0d34f37831e20cb401ae8160284d20bba30
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   arch/x86/kvm/vmx/vmx.c: In function 'handle_exception_nmi':
>> arch/x86/kvm/vmx/vmx.c:4683:4: error: implicit declaration of function 
>> 'kvm_queue_exception_p'; did you mean 'kvm_queue_exception_e'? 
>> [-Werror=implicit-function-declaration]
       kvm_queue_exception_p(vcpu, DB_VECTOR, dr6);
       ^~~~~~~~~~~~~~~~~~~~~
       kvm_queue_exception_e
   cc1: some warnings being treated as errors

vim +4683 arch/x86/kvm/vmx/vmx.c

  4610  
  4611  static int handle_exception_nmi(struct kvm_vcpu *vcpu)
  4612  {
  4613          struct vcpu_vmx *vmx = to_vmx(vcpu);
  4614          struct kvm_run *kvm_run = vcpu->run;
  4615          u32 intr_info, ex_no, error_code;
  4616          unsigned long cr2, rip, dr6;
  4617          u32 vect_info;
  4618  
  4619          vect_info = vmx->idt_vectoring_info;
  4620          intr_info = vmx->exit_intr_info;
  4621  
  4622          if (is_machine_check(intr_info) || is_nmi(intr_info))
  4623                  return 1; /* handled by handle_exception_nmi_irqoff() */
  4624  
  4625          if (is_invalid_opcode(intr_info))
  4626                  return handle_ud(vcpu);
  4627  
  4628          error_code = 0;
  4629          if (intr_info & INTR_INFO_DELIVER_CODE_MASK)
  4630                  error_code = vmcs_read32(VM_EXIT_INTR_ERROR_CODE);
  4631  
  4632          if (!vmx->rmode.vm86_active && is_gp_fault(intr_info)) {
  4633                  WARN_ON_ONCE(!enable_vmware_backdoor);
  4634  
  4635                  /*
  4636                   * VMware backdoor emulation on #GP interception only 
handles
  4637                   * IN{S}, OUT{S}, and RDPMC, none of which generate a 
non-zero
  4638                   * error code on #GP.
  4639                   */
  4640                  if (error_code) {
  4641                          kvm_queue_exception_e(vcpu, GP_VECTOR, 
error_code);
  4642                          return 1;
  4643                  }
  4644                  return kvm_emulate_instruction(vcpu, 
EMULTYPE_VMWARE_GP);
  4645          }
  4646  
  4647          /*
  4648           * The #PF with PFEC.RSVD = 1 indicates the guest is accessing
  4649           * MMIO, it is better to report an internal error.
  4650           * See the comments in vmx_handle_exit.
  4651           */
  4652          if ((vect_info & VECTORING_INFO_VALID_MASK) &&
  4653              !(is_page_fault(intr_info) && !(error_code & 
PFERR_RSVD_MASK))) {
  4654                  vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
  4655                  vcpu->run->internal.suberror = 
KVM_INTERNAL_ERROR_SIMUL_EX;
  4656                  vcpu->run->internal.ndata = 3;
  4657                  vcpu->run->internal.data[0] = vect_info;
  4658                  vcpu->run->internal.data[1] = intr_info;
  4659                  vcpu->run->internal.data[2] = error_code;
  4660                  return 0;
  4661          }
  4662  
  4663          if (is_page_fault(intr_info)) {
  4664                  cr2 = vmcs_readl(EXIT_QUALIFICATION);
  4665                  /* EPT won't cause page fault directly */
  4666                  WARN_ON_ONCE(!vcpu->arch.apf.host_apf_reason && 
enable_ept);
  4667                  return kvm_handle_page_fault(vcpu, error_code, cr2, 
NULL, 0);
  4668          }
  4669  
  4670          ex_no = intr_info & INTR_INFO_VECTOR_MASK;
  4671  
  4672          if (vmx->rmode.vm86_active && rmode_exception(vcpu, ex_no))
  4673                  return handle_rmode_exception(vcpu, ex_no, error_code);
  4674  
  4675          switch (ex_no) {
  4676          case DB_VECTOR:
  4677                  dr6 = vmcs_readl(EXIT_QUALIFICATION);
  4678                  if (!(vcpu->guest_debug &
  4679                        (KVM_GUESTDBG_SINGLESTEP | 
KVM_GUESTDBG_USE_HW_BP))) {
  4680                          if (is_icebp(intr_info))
  4681                                  
WARN_ON(!skip_emulated_instruction(vcpu));
  4682  
> 4683                          kvm_queue_exception_p(vcpu, DB_VECTOR, dr6);
  4684                          return 1;
  4685                  }
  4686                  kvm_run->debug.arch.dr6 = dr6 | DR6_FIXED_1;
  4687                  kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7);
  4688                  /* fall through */
  4689          case BP_VECTOR:
  4690                  /*
  4691                   * Update instruction length as we may reinject #BP from
  4692                   * user space while in guest debugging mode. Reading it 
for
  4693                   * #DB as well causes no harm, it is not used in that 
case.
  4694                   */
  4695                  vmx->vcpu.arch.event_exit_inst_len =
  4696                          vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
  4697                  kvm_run->exit_reason = KVM_EXIT_DEBUG;
  4698                  rip = kvm_rip_read(vcpu);
  4699                  kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + 
rip;
  4700                  kvm_run->debug.arch.exception = ex_no;
  4701                  break;
  4702          case AC_VECTOR:
  4703                  if (guest_inject_ac(vcpu)) {
  4704                          kvm_queue_exception_e(vcpu, AC_VECTOR, 
error_code);
  4705                          return 1;
  4706                  }
  4707  
  4708                  /*
  4709                   * Handle split lock. Depending on detection mode this 
will
  4710                   * either warn and disable split lock detection for this
  4711                   * task or force SIGBUS on it.
  4712                   */
  4713                  if (handle_guest_split_lock(kvm_rip_read(vcpu)))
  4714                          return 1;
  4715                  fallthrough;
  4716          default:
  4717                  kvm_run->exit_reason = KVM_EXIT_EXCEPTION;
  4718                  kvm_run->ex.exception = ex_no;
  4719                  kvm_run->ex.error_code = error_code;
  4720                  break;
  4721          }
  4722          return 0;
  4723  }
  4724  

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

Attachment: .config.gz
Description: application/gzip

Reply via email to