Re: [PATCH v5 3/3] LoongArch: KVM: Add vm migration support for LBT registers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bibo,

kernel test robot noticed the following build errors:

[auto build test ERROR on c33ffdb70cc6df4105160f991288e7d2567d7ffa]

url:    https://github.com/intel-lab-lkp/linux/commits/Bibo-Mao/LoongArch-KVM-Add-HW-Binary-Translation-extension-support/20240725-113707
base:   c33ffdb70cc6df4105160f991288e7d2567d7ffa
patch link:    https://lore.kernel.org/r/20240725033404.2675204-4-maobibo%40loongson.cn
patch subject: [PATCH v5 3/3] LoongArch: KVM: Add vm migration support for LBT registers
config: loongarch-defconfig (https://download.01.org/0day-ci/archive/20240725/202407252157.QONm81J6-lkp@xxxxxxxxx/config)
compiler: loongarch64-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240725/202407252157.QONm81J6-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407252157.QONm81J6-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

   arch/loongarch/kvm/vcpu.c: In function 'kvm_get_one_reg':
>> arch/loongarch/kvm/vcpu.c:606:45: error: assignment to 'long unsigned int' from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     606 |                         vcpu->arch.lbt.scr0 = v;
         |                                             ^
   arch/loongarch/kvm/vcpu.c:609:45: error: assignment to 'long unsigned int' from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     609 |                         vcpu->arch.lbt.scr1 = v;
         |                                             ^
   arch/loongarch/kvm/vcpu.c:612:45: error: assignment to 'long unsigned int' from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     612 |                         vcpu->arch.lbt.scr2 = v;
         |                                             ^
   arch/loongarch/kvm/vcpu.c:615:45: error: assignment to 'long unsigned int' from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     615 |                         vcpu->arch.lbt.scr3 = v;
         |                                             ^
   arch/loongarch/kvm/vcpu.c:618:47: error: assignment to 'long unsigned int' from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     618 |                         vcpu->arch.lbt.eflags = v;
         |                                               ^
>> arch/loongarch/kvm/vcpu.c:621:45: error: assignment to 'uint32_t' {aka 'unsigned int'} from 'u64 *' {aka 'long long unsigned int *'} makes integer from pointer without a cast [-Wint-conversion]
     621 |                         vcpu->arch.fpu.ftop = v;
         |                                             ^
   arch/loongarch/kvm/vcpu.c: In function 'kvm_set_one_reg':
>> arch/loongarch/kvm/vcpu.c:700:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     700 |                         *v = vcpu->arch.lbt.scr0;
         |                         ^~
   arch/loongarch/kvm/vcpu.c:703:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     703 |                         *v = vcpu->arch.lbt.scr1;
         |                         ^~
   arch/loongarch/kvm/vcpu.c:706:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     706 |                         *v = vcpu->arch.lbt.scr2;
         |                         ^~
   arch/loongarch/kvm/vcpu.c:709:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     709 |                         *v = vcpu->arch.lbt.scr3;
         |                         ^~
   arch/loongarch/kvm/vcpu.c:712:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     712 |                         *v = vcpu->arch.lbt.eflags;
         |                         ^~
   arch/loongarch/kvm/vcpu.c:715:25: error: invalid type argument of unary '*' (have 'u64' {aka 'long long unsigned int'})
     715 |                         *v = vcpu->arch.fpu.ftop;
         |                         ^~


vim +606 arch/loongarch/kvm/vcpu.c

   568	
   569	static int kvm_get_one_reg(struct kvm_vcpu *vcpu,
   570			const struct kvm_one_reg *reg, u64 *v)
   571	{
   572		int id, ret = 0;
   573		u64 type = reg->id & KVM_REG_LOONGARCH_MASK;
   574	
   575		switch (type) {
   576		case KVM_REG_LOONGARCH_CSR:
   577			id = KVM_GET_IOC_CSR_IDX(reg->id);
   578			ret = _kvm_getcsr(vcpu, id, v);
   579			break;
   580		case KVM_REG_LOONGARCH_CPUCFG:
   581			id = KVM_GET_IOC_CPUCFG_IDX(reg->id);
   582			if (id >= 0 && id < KVM_MAX_CPUCFG_REGS)
   583				*v = vcpu->arch.cpucfg[id];
   584			else
   585				ret = -EINVAL;
   586			break;
   587		case KVM_REG_LOONGARCH_KVM:
   588			switch (reg->id) {
   589			case KVM_REG_LOONGARCH_COUNTER:
   590				*v = drdtime() + vcpu->kvm->arch.time_offset;
   591				break;
   592			case KVM_REG_LOONGARCH_DEBUG_INST:
   593				*v = INSN_HVCL | KVM_HCALL_SWDBG;
   594				break;
   595			default:
   596				ret = -EINVAL;
   597				break;
   598			}
   599			break;
   600		case KVM_REG_LOONGARCH_LBT:
   601			if (!kvm_guest_has_lbt(&vcpu->arch))
   602				return -ENXIO;
   603	
   604			switch (reg->id) {
   605			case KVM_REG_LOONGARCH_LBT_SCR0:
 > 606				vcpu->arch.lbt.scr0 = v;
   607				break;
   608			case KVM_REG_LOONGARCH_LBT_SCR1:
   609				vcpu->arch.lbt.scr1 = v;
   610				break;
   611			case KVM_REG_LOONGARCH_LBT_SCR2:
   612				vcpu->arch.lbt.scr2 = v;
   613				break;
   614			case KVM_REG_LOONGARCH_LBT_SCR3:
   615				vcpu->arch.lbt.scr3 = v;
   616				break;
   617			case KVM_REG_LOONGARCH_LBT_EFLAGS:
   618				vcpu->arch.lbt.eflags = v;
   619				break;
   620			case KVM_REG_LOONGARCH_LBT_FTOP:
 > 621				vcpu->arch.fpu.ftop = v;
   622				break;
   623			default:
   624				ret = -EINVAL;
   625				break;
   626			}
   627			break;
   628		default:
   629			ret = -EINVAL;
   630			break;
   631		}
   632	
   633		return ret;
   634	}
   635	
   636	static int kvm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
   637	{
   638		int ret = 0;
   639		u64 v, size = reg->id & KVM_REG_SIZE_MASK;
   640	
   641		switch (size) {
   642		case KVM_REG_SIZE_U64:
   643			ret = kvm_get_one_reg(vcpu, reg, &v);
   644			if (ret)
   645				return ret;
   646			ret = put_user(v, (u64 __user *)(long)reg->addr);
   647			break;
   648		default:
   649			ret = -EINVAL;
   650			break;
   651		}
   652	
   653		return ret;
   654	}
   655	
   656	static int kvm_set_one_reg(struct kvm_vcpu *vcpu,
   657				const struct kvm_one_reg *reg, u64 v)
   658	{
   659		int id, ret = 0;
   660		u64 type = reg->id & KVM_REG_LOONGARCH_MASK;
   661	
   662		switch (type) {
   663		case KVM_REG_LOONGARCH_CSR:
   664			id = KVM_GET_IOC_CSR_IDX(reg->id);
   665			ret = _kvm_setcsr(vcpu, id, v);
   666			break;
   667		case KVM_REG_LOONGARCH_CPUCFG:
   668			id = KVM_GET_IOC_CPUCFG_IDX(reg->id);
   669			ret = kvm_check_cpucfg(id, v);
   670			if (ret)
   671				break;
   672			vcpu->arch.cpucfg[id] = (u32)v;
   673			break;
   674		case KVM_REG_LOONGARCH_KVM:
   675			switch (reg->id) {
   676			case KVM_REG_LOONGARCH_COUNTER:
   677				/*
   678				 * gftoffset is relative with board, not vcpu
   679				 * only set for the first time for smp system
   680				 */
   681				if (vcpu->vcpu_id == 0)
   682					vcpu->kvm->arch.time_offset = (signed long)(v - drdtime());
   683				break;
   684			case KVM_REG_LOONGARCH_VCPU_RESET:
   685				kvm_reset_timer(vcpu);
   686				memset(&vcpu->arch.irq_pending, 0, sizeof(vcpu->arch.irq_pending));
   687				memset(&vcpu->arch.irq_clear, 0, sizeof(vcpu->arch.irq_clear));
   688				break;
   689			default:
   690				ret = -EINVAL;
   691				break;
   692			}
   693			break;
   694		case KVM_REG_LOONGARCH_LBT:
   695			if (!kvm_guest_has_lbt(&vcpu->arch))
   696				return -ENXIO;
   697	
   698			switch (reg->id) {
   699			case KVM_REG_LOONGARCH_LBT_SCR0:
 > 700				*v = vcpu->arch.lbt.scr0;
   701				break;
   702			case KVM_REG_LOONGARCH_LBT_SCR1:
   703				*v = vcpu->arch.lbt.scr1;
   704				break;
   705			case KVM_REG_LOONGARCH_LBT_SCR2:
   706				*v = vcpu->arch.lbt.scr2;
   707				break;
   708			case KVM_REG_LOONGARCH_LBT_SCR3:
   709				*v = vcpu->arch.lbt.scr3;
   710				break;
   711			case KVM_REG_LOONGARCH_LBT_EFLAGS:
   712				*v = vcpu->arch.lbt.eflags;
   713				break;
   714			case KVM_REG_LOONGARCH_LBT_FTOP:
   715				*v = vcpu->arch.fpu.ftop;
   716				break;
   717			default:
   718				ret = -EINVAL;
   719				break;
   720			}
   721			break;
   722		default:
   723			ret = -EINVAL;
   724			break;
   725		}
   726	
   727		return ret;
   728	}
   729	

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




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux