public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Anshuman Khandual <anshuman.khandual@arm.com>,
	linux-kernel@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	kvm@vger.kernel.org
Subject: Re: [PATCH] KVM: Change [g|h]va_t as u64
Date: Fri, 6 Mar 2026 21:48:15 +0800	[thread overview]
Message-ID: <202603062132.hgMBAT4f-lkp@intel.com> (raw)
In-Reply-To: <20260306041125.45643-1-anshuman.khandual@arm.com>

Hi Anshuman,

kernel test robot noticed the following build warnings:

[auto build test WARNING on kvm/queue]
[also build test WARNING on kvm/next kvm/linux-next linus/master v7.0-rc2 next-20260305]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Anshuman-Khandual/KVM-Change-g-h-va_t-as-u64/20260306-123029
base:   https://git.kernel.org/pub/scm/virt/kvm/kvm.git queue
patch link:    https://lore.kernel.org/r/20260306041125.45643-1-anshuman.khandual%40arm.com
patch subject: [PATCH] KVM: Change [g|h]va_t as u64
config: i386-buildonly-randconfig-002-20260306 (https://download.01.org/0day-ci/archive/20260306/202603062132.hgMBAT4f-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260306/202603062132.hgMBAT4f-lkp@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603062132.hgMBAT4f-lkp@intel.com/

All warnings (new ones prefixed by >>):

   arch/x86/kvm/xen.c: In function 'kvm_xen_write_hypercall_page':
>> arch/x86/kvm/xen.c:1350:36: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
    1350 |                 page = memdup_user((u8 __user *)blob_addr, PAGE_SIZE);
         |                                    ^
   arch/x86/kvm/xen.c: In function 'kvm_xen_schedop_poll':
>> arch/x86/kvm/xen.c:1525:39: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    1525 |         if (kvm_read_guest_virt(vcpu, (gva_t)sched_poll.ports, ports,
         |                                       ^
--
   In file included from arch/x86/include/asm/bug.h:193,
                    from arch/x86/include/asm/alternative.h:9,
                    from arch/x86/include/asm/barrier.h:5,
                    from include/asm-generic/bitops/generic-non-atomic.h:7,
                    from include/linux/bitops.h:28,
                    from include/linux/log2.h:12,
                    from arch/x86/include/asm/div64.h:8,
                    from include/linux/math.h:6,
                    from include/linux/math64.h:6,
                    from include/linux/time.h:6,
                    from include/linux/stat.h:19,
                    from include/linux/fs_dirent.h:5,
                    from include/linux/fs/super_types.h:5,
                    from include/linux/fs/super.h:5,
                    from include/linux/fs.h:5,
                    from include/linux/highmem.h:5,
                    from arch/x86/kvm/vmx/vmx.c:17:
   arch/x86/kvm/vmx/vmx.c: In function 'invvpid_error':
>> arch/x86/kvm/vmx/vmx.c:573:25: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'gva_t' {aka 'long long unsigned int'} [-Wformat=]
     573 |         vmx_insn_failed("invvpid failed: ext=0x%lx vpid=%u gva=0x%lx\n",
         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     574 |                         ext, vpid, gva);
         |                                    ~~~
         |                                    |
         |                                    gva_t {aka long long unsigned int}
   include/asm-generic/bug.h:133:31: note: in definition of macro '__WARN_printf'
     133 |                 __warn_printk(arg);                                     \
         |                               ^~~
   include/linux/once_lite.h:31:25: note: in expansion of macro 'WARN'
      31 |                         func(__VA_ARGS__);                              \
         |                         ^~~~
   include/asm-generic/bug.h:185:9: note: in expansion of macro 'DO_ONCE_LITE_IF'
     185 |         DO_ONCE_LITE_IF(condition, WARN, 1, format)
         |         ^~~~~~~~~~~~~~~
   arch/x86/kvm/vmx/vmx.c:531:9: note: in expansion of macro 'WARN_ONCE'
     531 |         WARN_ONCE(1, fmt);              \
         |         ^~~~~~~~~
   arch/x86/kvm/vmx/vmx.c:573:9: note: in expansion of macro 'vmx_insn_failed'
     573 |         vmx_insn_failed("invvpid failed: ext=0x%lx vpid=%u gva=0x%lx\n",
         |         ^~~~~~~~~~~~~~~
   arch/x86/kvm/vmx/vmx.c:573:68: note: format string is defined here
     573 |         vmx_insn_failed("invvpid failed: ext=0x%lx vpid=%u gva=0x%lx\n",
         |                                                                  ~~^
         |                                                                    |
         |                                                                    long unsigned int
         |                                                                  %llx
   In file included from include/asm-generic/bug.h:31:
>> include/linux/kern_levels.h:5:25: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'gva_t' {aka 'long long unsigned int'} [-Wformat=]
       5 | #define KERN_SOH        "\001"          /* ASCII Start Of Header */
         |                         ^~~~~~
   include/linux/printk.h:483:25: note: in definition of macro 'printk_index_wrap'
     483 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
         |                         ^~~~
   include/linux/printk.h:705:17: note: in expansion of macro 'printk'
     705 |                 printk(fmt, ##__VA_ARGS__);                             \
         |                 ^~~~~~
   include/linux/printk.h:721:9: note: in expansion of macro 'printk_ratelimited'
     721 |         printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~~~~~~~~~~~
   include/linux/kern_levels.h:12:25: note: in expansion of macro 'KERN_SOH'
      12 | #define KERN_WARNING    KERN_SOH "4"    /* warning conditions */
         |                         ^~~~~~~~
   include/linux/printk.h:721:28: note: in expansion of macro 'KERN_WARNING'
     721 |         printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
         |                            ^~~~~~~~~~~~
   arch/x86/kvm/vmx/vmx.c:532:9: note: in expansion of macro 'pr_warn_ratelimited'
     532 |         pr_warn_ratelimited(fmt);       \
         |         ^~~~~~~~~~~~~~~~~~~
   arch/x86/kvm/vmx/vmx.c:573:9: note: in expansion of macro 'vmx_insn_failed'
     573 |         vmx_insn_failed("invvpid failed: ext=0x%lx vpid=%u gva=0x%lx\n",
         |         ^~~~~~~~~~~~~~~


vim +1350 arch/x86/kvm/xen.c

3e3246158808d46 David Woodhouse     2021-02-02  1275  
23200b7a30de315 Joao Martins        2018-06-13  1276  int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data)
23200b7a30de315 Joao Martins        2018-06-13  1277  {
23200b7a30de315 Joao Martins        2018-06-13  1278  	struct kvm *kvm = vcpu->kvm;
23200b7a30de315 Joao Martins        2018-06-13  1279  	u32 page_num = data & ~PAGE_MASK;
23200b7a30de315 Joao Martins        2018-06-13  1280  	u64 page_addr = data & PAGE_MASK;
a3833b81b05d0ae David Woodhouse     2020-12-03  1281  	bool lm = is_long_mode(vcpu);
18b99e4d6db65ff Paul Durrant        2024-02-15  1282  	int r = 0;
a3833b81b05d0ae David Woodhouse     2020-12-03  1283  
18b99e4d6db65ff Paul Durrant        2024-02-15  1284  	mutex_lock(&kvm->arch.xen.xen_lock);
18b99e4d6db65ff Paul Durrant        2024-02-15  1285  	if (kvm->arch.xen.long_mode != lm) {
18b99e4d6db65ff Paul Durrant        2024-02-15  1286  		kvm->arch.xen.long_mode = lm;
18b99e4d6db65ff Paul Durrant        2024-02-15  1287  
18b99e4d6db65ff Paul Durrant        2024-02-15  1288  		/*
18b99e4d6db65ff Paul Durrant        2024-02-15  1289  		 * Re-initialize shared_info to put the wallclock in the
18b99e4d6db65ff Paul Durrant        2024-02-15  1290  		 * correct place.
18b99e4d6db65ff Paul Durrant        2024-02-15  1291  		 */
18b99e4d6db65ff Paul Durrant        2024-02-15  1292  		if (kvm->arch.xen.shinfo_cache.active &&
18b99e4d6db65ff Paul Durrant        2024-02-15  1293  		    kvm_xen_shared_info_init(kvm))
18b99e4d6db65ff Paul Durrant        2024-02-15  1294  			r = 1;
18b99e4d6db65ff Paul Durrant        2024-02-15  1295  	}
18b99e4d6db65ff Paul Durrant        2024-02-15  1296  	mutex_unlock(&kvm->arch.xen.xen_lock);
18b99e4d6db65ff Paul Durrant        2024-02-15  1297  
18b99e4d6db65ff Paul Durrant        2024-02-15  1298  	if (r)
18b99e4d6db65ff Paul Durrant        2024-02-15  1299  		return r;
23200b7a30de315 Joao Martins        2018-06-13  1300  
23200b7a30de315 Joao Martins        2018-06-13  1301  	/*
23200b7a30de315 Joao Martins        2018-06-13  1302  	 * If Xen hypercall intercept is enabled, fill the hypercall
23200b7a30de315 Joao Martins        2018-06-13  1303  	 * page with VMCALL/VMMCALL instructions since that's what
23200b7a30de315 Joao Martins        2018-06-13  1304  	 * we catch. Else the VMM has provided the hypercall pages
23200b7a30de315 Joao Martins        2018-06-13  1305  	 * with instructions of its own choosing, so use those.
23200b7a30de315 Joao Martins        2018-06-13  1306  	 */
23200b7a30de315 Joao Martins        2018-06-13  1307  	if (kvm_xen_hypercall_enabled(kvm)) {
23200b7a30de315 Joao Martins        2018-06-13  1308  		u8 instructions[32];
23200b7a30de315 Joao Martins        2018-06-13  1309  		int i;
23200b7a30de315 Joao Martins        2018-06-13  1310  
23200b7a30de315 Joao Martins        2018-06-13  1311  		if (page_num)
23200b7a30de315 Joao Martins        2018-06-13  1312  			return 1;
23200b7a30de315 Joao Martins        2018-06-13  1313  
23200b7a30de315 Joao Martins        2018-06-13  1314  		/* mov imm32, %eax */
23200b7a30de315 Joao Martins        2018-06-13  1315  		instructions[0] = 0xb8;
23200b7a30de315 Joao Martins        2018-06-13  1316  
23200b7a30de315 Joao Martins        2018-06-13  1317  		/* vmcall / vmmcall */
896046474f8d2ea Wei Wang            2024-05-07  1318  		kvm_x86_call(patch_hypercall)(vcpu, instructions + 5);
23200b7a30de315 Joao Martins        2018-06-13  1319  
23200b7a30de315 Joao Martins        2018-06-13  1320  		/* ret */
23200b7a30de315 Joao Martins        2018-06-13  1321  		instructions[8] = 0xc3;
23200b7a30de315 Joao Martins        2018-06-13  1322  
23200b7a30de315 Joao Martins        2018-06-13  1323  		/* int3 to pad */
23200b7a30de315 Joao Martins        2018-06-13  1324  		memset(instructions + 9, 0xcc, sizeof(instructions) - 9);
23200b7a30de315 Joao Martins        2018-06-13  1325  
23200b7a30de315 Joao Martins        2018-06-13  1326  		for (i = 0; i < PAGE_SIZE / sizeof(instructions); i++) {
23200b7a30de315 Joao Martins        2018-06-13  1327  			*(u32 *)&instructions[1] = i;
23200b7a30de315 Joao Martins        2018-06-13  1328  			if (kvm_vcpu_write_guest(vcpu,
23200b7a30de315 Joao Martins        2018-06-13  1329  						 page_addr + (i * sizeof(instructions)),
23200b7a30de315 Joao Martins        2018-06-13  1330  						 instructions, sizeof(instructions)))
23200b7a30de315 Joao Martins        2018-06-13  1331  				return 1;
23200b7a30de315 Joao Martins        2018-06-13  1332  		}
23200b7a30de315 Joao Martins        2018-06-13  1333  	} else {
448841f0b7b50f1 Sean Christopherson 2021-02-08  1334  		/*
448841f0b7b50f1 Sean Christopherson 2021-02-08  1335  		 * Note, truncation is a non-issue as 'lm' is guaranteed to be
448841f0b7b50f1 Sean Christopherson 2021-02-08  1336  		 * false for a 32-bit kernel, i.e. when hva_t is only 4 bytes.
448841f0b7b50f1 Sean Christopherson 2021-02-08  1337  		 */
26e228ec1695011 Sean Christopherson 2025-02-14  1338  		hva_t blob_addr = lm ? kvm->arch.xen.hvm_config.blob_addr_64
26e228ec1695011 Sean Christopherson 2025-02-14  1339  				     : kvm->arch.xen.hvm_config.blob_addr_32;
26e228ec1695011 Sean Christopherson 2025-02-14  1340  		u8 blob_size = lm ? kvm->arch.xen.hvm_config.blob_size_64
26e228ec1695011 Sean Christopherson 2025-02-14  1341  				  : kvm->arch.xen.hvm_config.blob_size_32;
23200b7a30de315 Joao Martins        2018-06-13  1342  		u8 *page;
385407a69d51408 Michal Luczaj       2022-12-26  1343  		int ret;
23200b7a30de315 Joao Martins        2018-06-13  1344  
23200b7a30de315 Joao Martins        2018-06-13  1345  		if (page_num >= blob_size)
23200b7a30de315 Joao Martins        2018-06-13  1346  			return 1;
23200b7a30de315 Joao Martins        2018-06-13  1347  
23200b7a30de315 Joao Martins        2018-06-13  1348  		blob_addr += page_num * PAGE_SIZE;
23200b7a30de315 Joao Martins        2018-06-13  1349  
23200b7a30de315 Joao Martins        2018-06-13 @1350  		page = memdup_user((u8 __user *)blob_addr, PAGE_SIZE);
23200b7a30de315 Joao Martins        2018-06-13  1351  		if (IS_ERR(page))
23200b7a30de315 Joao Martins        2018-06-13  1352  			return PTR_ERR(page);
23200b7a30de315 Joao Martins        2018-06-13  1353  
385407a69d51408 Michal Luczaj       2022-12-26  1354  		ret = kvm_vcpu_write_guest(vcpu, page_addr, page, PAGE_SIZE);
23200b7a30de315 Joao Martins        2018-06-13  1355  		kfree(page);
385407a69d51408 Michal Luczaj       2022-12-26  1356  		if (ret)
23200b7a30de315 Joao Martins        2018-06-13  1357  			return 1;
23200b7a30de315 Joao Martins        2018-06-13  1358  	}
23200b7a30de315 Joao Martins        2018-06-13  1359  	return 0;
23200b7a30de315 Joao Martins        2018-06-13  1360  }
23200b7a30de315 Joao Martins        2018-06-13  1361  
78e9878cb376969 David Woodhouse     2021-02-02  1362  int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc)
78e9878cb376969 David Woodhouse     2021-02-02  1363  {
661a20fab7d156c David Woodhouse     2022-03-03  1364  	/* Only some feature flags need to be *enabled* by userspace */
661a20fab7d156c David Woodhouse     2022-03-03  1365  	u32 permitted_flags = KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL |
6d7228352609085 Paul Durrant        2023-11-02  1366  		KVM_XEN_HVM_CONFIG_EVTCHN_SEND |
6d7228352609085 Paul Durrant        2023-11-02  1367  		KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE;
6d7228352609085 Paul Durrant        2023-11-02  1368  	u32 old_flags;
661a20fab7d156c David Woodhouse     2022-03-03  1369  
661a20fab7d156c David Woodhouse     2022-03-03  1370  	if (xhc->flags & ~permitted_flags)
78e9878cb376969 David Woodhouse     2021-02-02  1371  		return -EINVAL;
78e9878cb376969 David Woodhouse     2021-02-02  1372  
78e9878cb376969 David Woodhouse     2021-02-02  1373  	/*
78e9878cb376969 David Woodhouse     2021-02-02  1374  	 * With hypercall interception the kernel generates its own
78e9878cb376969 David Woodhouse     2021-02-02  1375  	 * hypercall page so it must not be provided.
78e9878cb376969 David Woodhouse     2021-02-02  1376  	 */
78e9878cb376969 David Woodhouse     2021-02-02  1377  	if ((xhc->flags & KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL) &&
78e9878cb376969 David Woodhouse     2021-02-02  1378  	    (xhc->blob_addr_32 || xhc->blob_addr_64 ||
78e9878cb376969 David Woodhouse     2021-02-02  1379  	     xhc->blob_size_32 || xhc->blob_size_64))
78e9878cb376969 David Woodhouse     2021-02-02  1380  		return -EINVAL;
78e9878cb376969 David Woodhouse     2021-02-02  1381  
5c17848134ab1ff Sean Christopherson 2025-02-14  1382  	/*
5c17848134ab1ff Sean Christopherson 2025-02-14  1383  	 * Restrict the MSR to the range that is unofficially reserved for
5c17848134ab1ff Sean Christopherson 2025-02-14  1384  	 * synthetic, virtualization-defined MSRs, e.g. to prevent confusing
5c17848134ab1ff Sean Christopherson 2025-02-14  1385  	 * KVM by colliding with a real MSR that requires special handling.
5c17848134ab1ff Sean Christopherson 2025-02-14  1386  	 */
5c17848134ab1ff Sean Christopherson 2025-02-14  1387  	if (xhc->msr &&
5c17848134ab1ff Sean Christopherson 2025-02-14  1388  	    (xhc->msr < KVM_XEN_MSR_MIN_INDEX || xhc->msr > KVM_XEN_MSR_MAX_INDEX))
5c17848134ab1ff Sean Christopherson 2025-02-14  1389  		return -EINVAL;
5c17848134ab1ff Sean Christopherson 2025-02-14  1390  
310bc39546a435c David Woodhouse     2023-01-11  1391  	mutex_lock(&kvm->arch.xen.xen_lock);
7d6bbebb7bb0294 David Woodhouse     2021-02-02  1392  
26e228ec1695011 Sean Christopherson 2025-02-14  1393  	if (xhc->msr && !kvm->arch.xen.hvm_config.msr)
7d6bbebb7bb0294 David Woodhouse     2021-02-02  1394  		static_branch_inc(&kvm_xen_enabled.key);
26e228ec1695011 Sean Christopherson 2025-02-14  1395  	else if (!xhc->msr && kvm->arch.xen.hvm_config.msr)
7d6bbebb7bb0294 David Woodhouse     2021-02-02  1396  		static_branch_slow_dec_deferred(&kvm_xen_enabled);
7d6bbebb7bb0294 David Woodhouse     2021-02-02  1397  
26e228ec1695011 Sean Christopherson 2025-02-14  1398  	old_flags = kvm->arch.xen.hvm_config.flags;
26e228ec1695011 Sean Christopherson 2025-02-14  1399  	memcpy(&kvm->arch.xen.hvm_config, xhc, sizeof(*xhc));
7d6bbebb7bb0294 David Woodhouse     2021-02-02  1400  
310bc39546a435c David Woodhouse     2023-01-11  1401  	mutex_unlock(&kvm->arch.xen.xen_lock);
6d7228352609085 Paul Durrant        2023-11-02  1402  
6d7228352609085 Paul Durrant        2023-11-02  1403  	if ((old_flags ^ xhc->flags) & KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE)
6d7228352609085 Paul Durrant        2023-11-02  1404  		kvm_make_all_cpus_request(kvm, KVM_REQ_CLOCK_UPDATE);
6d7228352609085 Paul Durrant        2023-11-02  1405  
78e9878cb376969 David Woodhouse     2021-02-02  1406  	return 0;
78e9878cb376969 David Woodhouse     2021-02-02  1407  }
78e9878cb376969 David Woodhouse     2021-02-02  1408  
23200b7a30de315 Joao Martins        2018-06-13  1409  static int kvm_xen_hypercall_set_result(struct kvm_vcpu *vcpu, u64 result)
23200b7a30de315 Joao Martins        2018-06-13  1410  {
23200b7a30de315 Joao Martins        2018-06-13  1411  	kvm_rax_write(vcpu, result);
23200b7a30de315 Joao Martins        2018-06-13  1412  	return kvm_skip_emulated_instruction(vcpu);
23200b7a30de315 Joao Martins        2018-06-13  1413  }
23200b7a30de315 Joao Martins        2018-06-13  1414  
23200b7a30de315 Joao Martins        2018-06-13  1415  static int kvm_xen_hypercall_complete_userspace(struct kvm_vcpu *vcpu)
23200b7a30de315 Joao Martins        2018-06-13  1416  {
23200b7a30de315 Joao Martins        2018-06-13  1417  	struct kvm_run *run = vcpu->run;
23200b7a30de315 Joao Martins        2018-06-13  1418  
23200b7a30de315 Joao Martins        2018-06-13  1419  	if (unlikely(!kvm_is_linear_rip(vcpu, vcpu->arch.xen.hypercall_rip)))
23200b7a30de315 Joao Martins        2018-06-13  1420  		return 1;
23200b7a30de315 Joao Martins        2018-06-13  1421  
23200b7a30de315 Joao Martins        2018-06-13  1422  	return kvm_xen_hypercall_set_result(vcpu, run->xen.u.hcall.result);
23200b7a30de315 Joao Martins        2018-06-13  1423  }
23200b7a30de315 Joao Martins        2018-06-13  1424  
4ea9439fd537313 David Woodhouse     2022-11-12  1425  static inline int max_evtchn_port(struct kvm *kvm)
4ea9439fd537313 David Woodhouse     2022-11-12  1426  {
4ea9439fd537313 David Woodhouse     2022-11-12  1427  	if (IS_ENABLED(CONFIG_64BIT) && kvm->arch.xen.long_mode)
4ea9439fd537313 David Woodhouse     2022-11-12  1428  		return EVTCHN_2L_NR_CHANNELS;
4ea9439fd537313 David Woodhouse     2022-11-12  1429  	else
4ea9439fd537313 David Woodhouse     2022-11-12  1430  		return COMPAT_EVTCHN_2L_NR_CHANNELS;
4ea9439fd537313 David Woodhouse     2022-11-12  1431  }
4ea9439fd537313 David Woodhouse     2022-11-12  1432  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1433  static bool wait_pending_event(struct kvm_vcpu *vcpu, int nr_ports,
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1434  			       evtchn_port_t *ports)
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1435  {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1436  	struct kvm *kvm = vcpu->kvm;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1437  	struct gfn_to_pfn_cache *gpc = &kvm->arch.xen.shinfo_cache;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1438  	unsigned long *pending_bits;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1439  	unsigned long flags;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1440  	bool ret = true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1441  	int idx, i;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1442  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1443  	idx = srcu_read_lock(&kvm->srcu);
4265df667bbdc71 Peng Hao            2022-11-08  1444  	read_lock_irqsave(&gpc->lock, flags);
58f5ee5fedd981e Sean Christopherson 2022-10-13  1445  	if (!kvm_gpc_check(gpc, PAGE_SIZE))
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1446  		goto out_rcu;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1447  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1448  	ret = false;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1449  	if (IS_ENABLED(CONFIG_64BIT) && kvm->arch.xen.long_mode) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1450  		struct shared_info *shinfo = gpc->khva;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1451  		pending_bits = (unsigned long *)&shinfo->evtchn_pending;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1452  	} else {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1453  		struct compat_shared_info *shinfo = gpc->khva;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1454  		pending_bits = (unsigned long *)&shinfo->evtchn_pending;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1455  	}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1456  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1457  	for (i = 0; i < nr_ports; i++) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1458  		if (test_bit(ports[i], pending_bits)) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1459  			ret = true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1460  			break;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1461  		}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1462  	}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1463  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1464   out_rcu:
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1465  	read_unlock_irqrestore(&gpc->lock, flags);
4265df667bbdc71 Peng Hao            2022-11-08  1466  	srcu_read_unlock(&kvm->srcu, idx);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1467  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1468  	return ret;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1469  }
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1470  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1471  static bool kvm_xen_schedop_poll(struct kvm_vcpu *vcpu, bool longmode,
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1472  				 u64 param, u64 *r)
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1473  {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1474  	struct sched_poll sched_poll;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1475  	evtchn_port_t port, *ports;
92c58965e9656dc David Woodhouse     2022-12-26  1476  	struct x86_exception e;
92c58965e9656dc David Woodhouse     2022-12-26  1477  	int i;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1478  
214b0a88c46d5f3 Metin Kaya          2022-03-21  1479  	if (!lapic_in_kernel(vcpu) ||
26e228ec1695011 Sean Christopherson 2025-02-14  1480  	    !(vcpu->kvm->arch.xen.hvm_config.flags & KVM_XEN_HVM_CONFIG_EVTCHN_SEND))
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1481  		return false;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1482  
214b0a88c46d5f3 Metin Kaya          2022-03-21  1483  	if (IS_ENABLED(CONFIG_64BIT) && !longmode) {
214b0a88c46d5f3 Metin Kaya          2022-03-21  1484  		struct compat_sched_poll sp32;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1485  
214b0a88c46d5f3 Metin Kaya          2022-03-21  1486  		/* Sanity check that the compat struct definition is correct */
214b0a88c46d5f3 Metin Kaya          2022-03-21  1487  		BUILD_BUG_ON(sizeof(sp32) != 16);
214b0a88c46d5f3 Metin Kaya          2022-03-21  1488  
92c58965e9656dc David Woodhouse     2022-12-26  1489  		if (kvm_read_guest_virt(vcpu, param, &sp32, sizeof(sp32), &e)) {
214b0a88c46d5f3 Metin Kaya          2022-03-21  1490  			*r = -EFAULT;
214b0a88c46d5f3 Metin Kaya          2022-03-21  1491  			return true;
214b0a88c46d5f3 Metin Kaya          2022-03-21  1492  		}
214b0a88c46d5f3 Metin Kaya          2022-03-21  1493  
214b0a88c46d5f3 Metin Kaya          2022-03-21  1494  		/*
214b0a88c46d5f3 Metin Kaya          2022-03-21  1495  		 * This is a 32-bit pointer to an array of evtchn_port_t which
214b0a88c46d5f3 Metin Kaya          2022-03-21  1496  		 * are uint32_t, so once it's converted no further compat
214b0a88c46d5f3 Metin Kaya          2022-03-21  1497  		 * handling is needed.
214b0a88c46d5f3 Metin Kaya          2022-03-21  1498  		 */
214b0a88c46d5f3 Metin Kaya          2022-03-21  1499  		sched_poll.ports = (void *)(unsigned long)(sp32.ports);
214b0a88c46d5f3 Metin Kaya          2022-03-21  1500  		sched_poll.nr_ports = sp32.nr_ports;
214b0a88c46d5f3 Metin Kaya          2022-03-21  1501  		sched_poll.timeout = sp32.timeout;
214b0a88c46d5f3 Metin Kaya          2022-03-21  1502  	} else {
92c58965e9656dc David Woodhouse     2022-12-26  1503  		if (kvm_read_guest_virt(vcpu, param, &sched_poll,
92c58965e9656dc David Woodhouse     2022-12-26  1504  					sizeof(sched_poll), &e)) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1505  			*r = -EFAULT;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1506  			return true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1507  		}
214b0a88c46d5f3 Metin Kaya          2022-03-21  1508  	}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1509  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1510  	if (unlikely(sched_poll.nr_ports > 1)) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1511  		/* Xen (unofficially) limits number of pollers to 128 */
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1512  		if (sched_poll.nr_ports > 128) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1513  			*r = -EINVAL;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1514  			return true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1515  		}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1516  
bf4afc53b77aeaa Linus Torvalds      2026-02-21  1517  		ports = kmalloc_objs(*ports, sched_poll.nr_ports);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1518  		if (!ports) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1519  			*r = -ENOMEM;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1520  			return true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1521  		}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1522  	} else
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1523  		ports = &port;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1524  
92c58965e9656dc David Woodhouse     2022-12-26 @1525  	if (kvm_read_guest_virt(vcpu, (gva_t)sched_poll.ports, ports,
92c58965e9656dc David Woodhouse     2022-12-26  1526  				sched_poll.nr_ports * sizeof(*ports), &e)) {
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1527  		*r = -EFAULT;
5a53249d149f48b Manuel Andreas      2025-07-23  1528  		goto out;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1529  	}
92c58965e9656dc David Woodhouse     2022-12-26  1530  
92c58965e9656dc David Woodhouse     2022-12-26  1531  	for (i = 0; i < sched_poll.nr_ports; i++) {
4ea9439fd537313 David Woodhouse     2022-11-12  1532  		if (ports[i] >= max_evtchn_port(vcpu->kvm)) {
4ea9439fd537313 David Woodhouse     2022-11-12  1533  			*r = -EINVAL;
4ea9439fd537313 David Woodhouse     2022-11-12  1534  			goto out;
4ea9439fd537313 David Woodhouse     2022-11-12  1535  		}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1536  	}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1537  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1538  	if (sched_poll.nr_ports == 1)
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1539  		vcpu->arch.xen.poll_evtchn = port;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1540  	else
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1541  		vcpu->arch.xen.poll_evtchn = -1;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1542  
79f772b9e8004c5 Sean Christopherson 2022-06-14  1543  	set_bit(vcpu->vcpu_idx, vcpu->kvm->arch.xen.poll_mask);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1544  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1545  	if (!wait_pending_event(vcpu, sched_poll.nr_ports, ports)) {
c9e5f3fa9039611 Jim Mattson         2025-01-13  1546  		kvm_set_mp_state(vcpu, KVM_MP_STATE_HALTED);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1547  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1548  		if (sched_poll.timeout)
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1549  			mod_timer(&vcpu->arch.xen.poll_timer,
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1550  				  jiffies + nsecs_to_jiffies(sched_poll.timeout));
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1551  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1552  		kvm_vcpu_halt(vcpu);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1553  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1554  		if (sched_poll.timeout)
8fa7292fee5c524 Thomas Gleixner     2025-04-05  1555  			timer_delete(&vcpu->arch.xen.poll_timer);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1556  
c9e5f3fa9039611 Jim Mattson         2025-01-13  1557  		kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1558  	}
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1559  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1560  	vcpu->arch.xen.poll_evtchn = 0;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1561  	*r = 0;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1562  out:
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1563  	/* Really, this is only needed in case of timeout */
79f772b9e8004c5 Sean Christopherson 2022-06-14  1564  	clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.xen.poll_mask);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1565  
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1566  	if (unlikely(sched_poll.nr_ports > 1))
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1567  		kfree(ports);
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1568  	return true;
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1569  }
1a65105a5aba9f7 Boris Ostrovsky     2022-03-03  1570  

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

  parent reply	other threads:[~2026-03-06 13:48 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-06  4:11 [PATCH] KVM: Change [g|h]va_t as u64 Anshuman Khandual
2026-03-06  9:55 ` kernel test robot
2026-03-06 10:26 ` kernel test robot
2026-03-06 13:48 ` kernel test robot [this message]
2026-03-06 15:30 ` kernel test robot
2026-03-06 18:16 ` Sean Christopherson
2026-03-08 12:58   ` Anshuman Khandual
2026-03-08 13:35     ` Anshuman Khandual
2026-03-09  8:20     ` Paolo Bonzini
2026-03-09  8:29       ` Anshuman Khandual
2026-03-09  8:31         ` Paolo Bonzini

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=202603062132.hgMBAT4f-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=anshuman.khandual@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=pbonzini@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox