[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7] evtchn: convert domain event lock to an r/w one



On 7/27/22 11:56, Jan Beulich wrote:
Especially for the use in evtchn_move_pirqs() (called when moving a vCPU
across pCPU-s) and the ones in EOI handling in PCI pass-through code,
serializing perhaps an entire domain isn't helpful when no state (which
isn't e.g. further protected by the per-channel lock) changes.

Unfortunately this implies dropping of lock profiling for this lock,
until r/w locks may get enabled for such functionality.

While ->notify_vcpu_id is now meant to be consistently updated with the
per-channel lock held, an extension applies to ECS_PIRQ: The field is
also guaranteed to not change with the per-domain event lock held for
writing. Therefore the link_pirq_port() call from evtchn_bind_pirq()
could in principle be moved out of the per-channel locked regions, but
this further code churn didn't seem worth it.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
v6: Re-vive and re-base.
v5: Re-base, also over dropped earlier patch.
v4: Re-base, in particular over new earlier patches. Acquire both
     per-domain locks for writing in evtchn_close(). Adjust
     spin_barrier() related comments.
v3: Re-base.
v2: Consistently lock for writing in evtchn_reset(). Fix error path in
     pci_clean_dpci_irqs(). Lock for writing in pt_irq_time_out(),
     hvm_dirq_assist(), hvm_dpci_eoi(), and hvm_dpci_isairq_eoi(). Move
     rw_barrier() introduction here. Re-base over changes earlier in the
     series.


<snip/>

--- a/xen/xsm/flask/flask_op.c
+++ b/xen/xsm/flask/flask_op.c
@@ -530,7 +530,7 @@ static int flask_get_peer_sid(struct xen
      struct evtchn *chn;
      struct domain_security_struct *dsec;
- spin_lock(&d->event_lock);
+    read_lock(&d->event_lock);
if ( !port_is_valid(d, arg->evtchn) )
          goto out;
@@ -548,7 +548,7 @@ static int flask_get_peer_sid(struct xen
      rv = 0;
out:
-    spin_unlock(&d->event_lock);
+    read_unlock(&d->event_lock);
      return rv;
  }

Acked-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx>



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.