]> xenbits.xensource.com Git - people/pauldu/linux.git/commitdiff
mark pfn cache dirty with lock held
authorPaul Durrant <pdurrant@amazon.com>
Thu, 9 Nov 2023 14:17:02 +0000 (14:17 +0000)
committerPaul Durrant <pdurrant@amazon.com>
Mon, 20 Nov 2023 18:06:22 +0000 (18:06 +0000)
Signed-off-by: Paul Durrant <pdurrant@amazon.com>
arch/x86/kvm/xen.c

index e53fad915a626486936971757ca3ef61f5216d2c..426306022c2fad7e63c0dfe317e40ab7a094374a 100644 (file)
@@ -452,14 +452,13 @@ static void kvm_xen_update_runstate_guest(struct kvm_vcpu *v, bool atomic)
                smp_wmb();
        }
 
-       if (user_len2)
+       if (user_len2) {
+               mark_page_dirty_in_slot(v->kvm, gpc2->memslot, gpc2->gpa >> PAGE_SHIFT);
                read_unlock(&gpc2->lock);
-
-       read_unlock_irqrestore(&gpc1->lock, flags);
+       }
 
        mark_page_dirty_in_slot(v->kvm, gpc1->memslot, gpc1->gpa >> PAGE_SHIFT);
-       if (user_len2)
-               mark_page_dirty_in_slot(v->kvm, gpc2->memslot, gpc2->gpa >> PAGE_SHIFT);
+       read_unlock_irqrestore(&gpc1->lock, flags);
 }
 
 void kvm_xen_update_runstate(struct kvm_vcpu *v, int state)
@@ -565,13 +564,13 @@ void kvm_xen_inject_pending_events(struct kvm_vcpu *v)
                             : "0" (evtchn_pending_sel32));
                WRITE_ONCE(vi->evtchn_upcall_pending, 1);
        }
+
+       mark_page_dirty_in_slot(v->kvm, gpc->memslot, gpc->gpa >> PAGE_SHIFT);
        read_unlock_irqrestore(&gpc->lock, flags);
 
        /* For the per-vCPU lapic vector, deliver it as MSI. */
        if (v->arch.xen.upcall_vector)
                kvm_xen_inject_vcpu_vector(v);
-
-       mark_page_dirty_in_slot(v->kvm, gpc->memslot, gpc->gpa >> PAGE_SHIFT);
 }
 
 int __kvm_xen_has_interrupt(struct kvm_vcpu *v)