All of lore.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 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.