From: "Michael S. Tsirkin" <mst@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org>,
linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
kvm@vger.kernel.org, rusty@rustcorp.com.au, jasowang@redhat.com,
virtualization@lists.linux-foundation.org,
Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@kernel.dk>,
target-devel <target-devel@vger.kernel.org>
Subject: Re: [PATCH 5/5] virtio-scsi: introduce multiqueue support
Date: Tue, 4 Sep 2012 16:35:43 +0300 [thread overview]
Message-ID: <20120904133543.GF9805@redhat.com> (raw)
In-Reply-To: <5045E387.4030103@redhat.com>
On Tue, Sep 04, 2012 at 01:18:31PM +0200, Paolo Bonzini wrote:
> Il 04/09/2012 13:09, Michael S. Tsirkin ha scritto:
> >> > queuecommand on CPU #0 queuecommand #2 on CPU #1
> >> > --------------------------------------------------------------
> >> > atomic_inc_return(...) == 1
> >> > atomic_inc_return(...) == 2
> >> > virtscsi_queuecommand to queue #1
> >> > tgt->req_vq = queue #0
> >> > virtscsi_queuecommand to queue #0
> >> >
> >> > then two requests are issued to different queues without a quiescent
> >> > point in the middle.
> > What happens then? Does this break correctness?
>
> Yes, requests to the same target should be processed in FIFO order, or
> you have things like a flush issued before the write it was supposed to
> flush. This is why I can only change the queue when there is no request
> pending.
>
> Paolo
I see. I guess you can rewrite this as:
atomic_inc
if (atomic_read() == 1)
which is a bit cheaper, and make the fact
that you do not need increment and return to be atomic,
explicit.
Another simple idea: store last processor id in target,
if it is unchanged no need to play with req_vq
and take spinlock.
Also - some kind of comment explaining why a similar race can not happen
with this lock in place would be nice: I see why this specific race can
not trigger but since lock is dropped later before you submit command, I
have hard time convincing myself what exactly gurantees that vq is never
switched before or even while command is submitted.
--
MST
next prev parent reply other threads:[~2012-09-04 13:34 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-28 11:54 [PATCH 0/5] Multiqueue virtio-scsi Paolo Bonzini
2012-08-28 11:54 ` [PATCH 1/5] virtio-ring: move queue_index to vring_virtqueue Paolo Bonzini
2012-08-29 7:54 ` Jason Wang
2012-09-05 23:32 ` Rusty Russell
2012-08-28 11:54 ` [PATCH 2/5] virtio: introduce an API to set affinity for a virtqueue Paolo Bonzini
2012-09-05 23:32 ` Rusty Russell
2012-08-28 11:54 ` [PATCH 3/5] virtio-scsi: allocate target pointers in a separate memory block Paolo Bonzini
2012-08-28 14:07 ` Sasha Levin
2012-08-28 14:25 ` Paolo Bonzini
2012-08-28 11:54 ` [PATCH 4/5] virtio-scsi: pass struct virtio_scsi to virtqueue completion function Paolo Bonzini
2012-08-28 11:54 ` [PATCH 5/5] virtio-scsi: introduce multiqueue support Paolo Bonzini
2012-09-04 2:21 ` Nicholas A. Bellinger
2012-09-04 6:46 ` Paolo Bonzini
2012-09-04 8:46 ` Michael S. Tsirkin
2012-09-04 10:25 ` Paolo Bonzini
2012-09-04 11:09 ` Michael S. Tsirkin
2012-09-04 11:18 ` Paolo Bonzini
2012-09-04 13:35 ` Michael S. Tsirkin [this message]
2012-09-04 13:45 ` Paolo Bonzini
2012-09-04 14:19 ` Michael S. Tsirkin
2012-09-04 14:25 ` Paolo Bonzini
2012-09-04 20:11 ` Nicholas A. Bellinger
2012-09-05 7:03 ` Paolo Bonzini
2012-09-04 12:48 ` Michael S. Tsirkin
2012-09-04 13:49 ` Paolo Bonzini
2012-09-04 14:21 ` Michael S. Tsirkin
2012-09-04 14:30 ` Paolo Bonzini
2012-09-04 14:41 ` Michael S. Tsirkin
2012-09-04 14:47 ` Michael S. Tsirkin
2012-09-04 14:55 ` Paolo Bonzini
2012-09-04 15:03 ` Michael S. Tsirkin
2012-08-30 7:13 ` [PATCH 0/5] Multiqueue virtio-scsi Stefan Hajnoczi
2012-08-30 14:53 ` Michael S. Tsirkin
2012-08-30 15:45 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120904133543.GF9805@redhat.com \
--to=mst@redhat.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=jasowang@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=nab@linux-iscsi.org \
--cc=pbonzini@redhat.com \
--cc=rusty@rustcorp.com.au \
--cc=target-devel@vger.kernel.org \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).