[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 03/11] mini-os/xenbus: Add missing locks to xb_write
Ian Jackson, le Fri 20 Jun 2014 20:04:42 +0100, a écrit : > xb_write was missing any locking against concurrent calls. Well, yes, in its current form mini-os was not really meant to run with multiple processors. There are probably quite other issues like that in there. > Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > --- > xen/xenbus/xenbus.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/xen/xenbus/xenbus.c b/xen/xenbus/xenbus.c > index 0958604..a06dc30 100644 > --- a/xen/xenbus/xenbus.c > +++ b/xen/xenbus/xenbus.c > @@ -45,6 +45,7 @@ > > static struct xenstore_domain_interface *xenstore_buf; > static DECLARE_WAIT_QUEUE_HEAD(xb_waitq); > +static spinlock_t xb_lock = SPIN_LOCK_UNLOCKED; /* protects xenbus req ring > */ > DECLARE_WAIT_QUEUE_HEAD(xenbus_watch_queue); > > xenbus_event_queue xenbus_events; > @@ -372,6 +373,8 @@ static void xb_write(int type, int req_id, > xenbus_transaction_t trans_id, > cur_req = &header_req; > > BUG_ON(len > XENSTORE_RING_SIZE); > + > + spin_lock(&xb_lock); > /* Wait for the ring to drain to the point where we can send the > message. */ > prod = xenstore_buf->req_prod; > @@ -380,9 +383,11 @@ static void xb_write(int type, int req_id, > xenbus_transaction_t trans_id, > /* Wait for there to be space on the ring */ > DEBUG("prod %d, len %d, cons %d, size %d; waiting.\n", > prod, len, xenstore_buf->req_cons, XENSTORE_RING_SIZE); > + spin_unlock(&xb_lock); > wait_event(xb_waitq, > xenstore_buf->req_prod + len - xenstore_buf->req_cons <= > XENSTORE_RING_SIZE); > + spin_lock(&xb_lock); > DEBUG("Back from wait.\n"); > prod = xenstore_buf->req_prod; > } > @@ -419,6 +424,7 @@ static void xb_write(int type, int req_id, > xenbus_transaction_t trans_id, > wmb(); > > xenstore_buf->req_prod += len; > + spin_unlock(&xb_lock); > > /* Send evtchn to notify remote */ > notify_remote_via_evtchn(start_info.store_evtchn); > -- > 1.7.10.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel > -- Samuel <N> sl - display animations aimed to correct users who accidentally enter <N> sl instead of ls. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |