|
[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 |