Commit b4dfbfdc authored by Paul Durrant's avatar Paul Durrant Committed by Sean Christopherson
Browse files

KVM: selftests: re-map Xen's vcpu_info using HVA rather than GPA



If the relevant capability (KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA) is present
then re-map vcpu_info using the HVA part way through the tests to make sure
then there is no functional change.

Signed-off-by: default avatarPaul Durrant <pdurrant@amazon.com>
Reviewed-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
Link: https://lore.kernel.org/r/20240215152916.1158-16-paul@xen.org


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 9397b533
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ enum {
	TEST_POLL_TIMEOUT,
	TEST_POLL_MASKED,
	TEST_POLL_WAKE,
	SET_VCPU_INFO,
	TEST_TIMER_PAST,
	TEST_LOCKING_SEND_RACE,
	TEST_LOCKING_POLL_RACE,
@@ -321,6 +322,10 @@ static void guest_code(void)

	GUEST_SYNC(TEST_POLL_WAKE);

	/* Set the vcpu_info to point at exactly the place it already is to
	 * make sure the attribute is functional. */
	GUEST_SYNC(SET_VCPU_INFO);

	/* A timer wake an *unmasked* port which should wake us with an
	 * actual interrupt, while we're polling on a different port. */
	ports[0]++;
@@ -888,6 +893,16 @@ int main(int argc, char *argv[])
				alarm(1);
				break;

			case SET_VCPU_INFO:
				if (has_shinfo_hva) {
					struct kvm_xen_vcpu_attr vih = {
						.type = KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO_HVA,
						.u.hva = (unsigned long)vinfo
					};
					vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &vih);
				}
				break;

			case TEST_TIMER_PAST:
				TEST_ASSERT(!evtchn_irq_expected,
					    "Expected event channel IRQ but it didn't happen");