]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
KVM: selftests / xen: re-map vcpu_info using HVA rather than GPA
authorPaul Durrant <pdurrant@amazon.com>
Fri, 22 Sep 2023 13:47:57 +0000 (13:47 +0000)
committerPaul Durrant <pdurrant@amazon.com>
Mon, 15 Jan 2024 10:49:40 +0000 (10:49 +0000)
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: Paul Durrant <pdurrant@amazon.com>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
---
Cc: Sean Christopherson <seanjc@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: David Woodhouse <dwmw2@infradead.org>
v5:
 - New in this version.

tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c

index a61500ff0822b71abf948dc43e037ed95df42e0d..d2ea0435f4f76332fb702d3e84d19b536a8ea4ee 100644 (file)
@@ -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");