From: Halil Pasic <pasic@linux.ibm.com>
To: Eric Farman <farman@linux.ibm.com>
Cc: linux-s390@vger.kernel.org, Cornelia Huck <cohuck@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Pierre Morel <pmorel@linux.ibm.com>,
kvm@vger.kernel.org, Farhan Ali <alifm@linux.ibm.com>,
qemu-devel@nongnu.org, qemu-s390x@nongnu.org
Subject: Re: [PATCH v2 2/5] vfio-ccw: concurrent I/O handling
Date: Fri, 25 Jan 2019 14:09:18 +0100 [thread overview]
Message-ID: <20190125140918.64686aaf@oc2783563651> (raw)
In-Reply-To: <5627cb78-22b3-0557-7972-256bc9560d86@linux.ibm.com>
On Thu, 24 Jan 2019 21:37:44 -0500
Eric Farman <farman@linux.ibm.com> wrote:
> >> @@ -188,25 +192,30 @@ static ssize_t vfio_ccw_mdev_write(struct
> >> mdev_device *mdev,
> >> {
> >> struct vfio_ccw_private *private;
> >> struct ccw_io_region *region;
> >> + int ret;
> >> if (*ppos + count > sizeof(*region))
> >> return -EINVAL;
> >> private = dev_get_drvdata(mdev_parent_dev(mdev));
> >> - if (private->state != VFIO_CCW_STATE_IDLE)
> >> + if (private->state == VFIO_CCW_STATE_NOT_OPER ||
> >> + private->state == VFIO_CCW_STATE_STANDBY)
> >> return -EACCES;
> >> + if (!mutex_trylock(&private->io_mutex))
> >> + return -EAGAIN;
> >
> > Ah, I see Halil's difficulty here.
> >
> > It is true there is a race condition today, and that this doesn't
> > address it. That's fine, add it to the todo list. But even with that,
> > I don't see what the mutex is enforcing? Two simultaneous SSCHs will be
> > serialized (one will get kicked out with a failed trylock() call), while
> > still leaving the window open between cc=0 on the SSCH and the
> > subsequent interrupt. In the latter case, a second SSCH will come
> > through here, do the copy_from_user below, and then jump to fsm_io_busy
> > to return EAGAIN. Do we really want to stomp on io_region in that case?
> > Why can't we simply return EAGAIN if state==BUSY?
>
> (Answering my own questions as I skim patch 5...)
>
> Because of course this series is for async handling, while I was looking
> specifically at the synchronous code that exists today. I guess then my
> question just remains on how the mutex is adding protection in the sync
> case, because that's still not apparent to me. (Perhaps I missed it in
> a reply to Halil; if so I apologize, there were a lot when I returned.)
Careful, at the end we have vfio_ccw_mdev_write_io_region() and the
write callback for the capchain regions. We could return EAGAIN if
state==BUSY in the vfio_ccw_mdev_write_io_region() (but I would prefer a
different error code -- see my other response).
I answered your mutex question as well. Just a small addendum the mutex
is not only for the cases the userspace acts sane (but also when it acts
insane;).
Halil
WARNING: multiple messages have this Message-ID (diff)
From: Halil Pasic <pasic@linux.ibm.com>
To: Eric Farman <farman@linux.ibm.com>
Cc: Cornelia Huck <cohuck@redhat.com>,
Farhan Ali <alifm@linux.ibm.com>,
Pierre Morel <pmorel@linux.ibm.com>,
linux-s390@vger.kernel.org, kvm@vger.kernel.org,
qemu-devel@nongnu.org, qemu-s390x@nongnu.org,
Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling
Date: Fri, 25 Jan 2019 14:09:18 +0100 [thread overview]
Message-ID: <20190125140918.64686aaf@oc2783563651> (raw)
In-Reply-To: <5627cb78-22b3-0557-7972-256bc9560d86@linux.ibm.com>
On Thu, 24 Jan 2019 21:37:44 -0500
Eric Farman <farman@linux.ibm.com> wrote:
> >> @@ -188,25 +192,30 @@ static ssize_t vfio_ccw_mdev_write(struct
> >> mdev_device *mdev,
> >> {
> >> struct vfio_ccw_private *private;
> >> struct ccw_io_region *region;
> >> + int ret;
> >> if (*ppos + count > sizeof(*region))
> >> return -EINVAL;
> >> private = dev_get_drvdata(mdev_parent_dev(mdev));
> >> - if (private->state != VFIO_CCW_STATE_IDLE)
> >> + if (private->state == VFIO_CCW_STATE_NOT_OPER ||
> >> + private->state == VFIO_CCW_STATE_STANDBY)
> >> return -EACCES;
> >> + if (!mutex_trylock(&private->io_mutex))
> >> + return -EAGAIN;
> >
> > Ah, I see Halil's difficulty here.
> >
> > It is true there is a race condition today, and that this doesn't
> > address it. That's fine, add it to the todo list. But even with that,
> > I don't see what the mutex is enforcing? Two simultaneous SSCHs will be
> > serialized (one will get kicked out with a failed trylock() call), while
> > still leaving the window open between cc=0 on the SSCH and the
> > subsequent interrupt. In the latter case, a second SSCH will come
> > through here, do the copy_from_user below, and then jump to fsm_io_busy
> > to return EAGAIN. Do we really want to stomp on io_region in that case?
> > Why can't we simply return EAGAIN if state==BUSY?
>
> (Answering my own questions as I skim patch 5...)
>
> Because of course this series is for async handling, while I was looking
> specifically at the synchronous code that exists today. I guess then my
> question just remains on how the mutex is adding protection in the sync
> case, because that's still not apparent to me. (Perhaps I missed it in
> a reply to Halil; if so I apologize, there were a lot when I returned.)
Careful, at the end we have vfio_ccw_mdev_write_io_region() and the
write callback for the capchain regions. We could return EAGAIN if
state==BUSY in the vfio_ccw_mdev_write_io_region() (but I would prefer a
different error code -- see my other response).
I answered your mutex question as well. Just a small addendum the mutex
is not only for the cases the userspace acts sane (but also when it acts
insane;).
Halil
next prev parent reply other threads:[~2019-01-25 13:09 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-21 11:03 [PATCH v2 0/5] vfio-ccw: support hsch/csch (kernel part) Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-21 11:03 ` [PATCH v2 1/5] vfio-ccw: make it safe to access channel programs Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-22 14:56 ` Halil Pasic
2019-01-22 14:56 ` [Qemu-devel] " Halil Pasic
2019-01-22 15:19 ` Cornelia Huck
2019-01-22 15:19 ` [Qemu-devel] " Cornelia Huck
2019-01-21 11:03 ` [PATCH v2 2/5] vfio-ccw: concurrent I/O handling Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-21 20:20 ` Halil Pasic
2019-01-21 20:20 ` [Qemu-devel] " Halil Pasic
2019-01-22 10:29 ` Cornelia Huck
2019-01-22 10:29 ` [Qemu-devel] " Cornelia Huck
2019-01-22 11:17 ` Halil Pasic
2019-01-22 11:17 ` [Qemu-devel] " Halil Pasic
2019-01-22 11:53 ` Cornelia Huck
2019-01-22 11:53 ` [Qemu-devel] " Cornelia Huck
2019-01-22 12:46 ` Halil Pasic
2019-01-22 12:46 ` [Qemu-devel] " Halil Pasic
2019-01-22 17:26 ` Cornelia Huck
2019-01-22 17:26 ` [Qemu-devel] " Cornelia Huck
2019-01-22 19:03 ` Halil Pasic
2019-01-22 19:03 ` [Qemu-devel] " Halil Pasic
2019-01-23 10:34 ` Cornelia Huck
2019-01-23 10:34 ` [Qemu-devel] " Cornelia Huck
2019-01-23 13:06 ` Halil Pasic
2019-01-23 13:06 ` [Qemu-devel] " Halil Pasic
2019-01-23 13:34 ` Cornelia Huck
2019-01-23 13:34 ` [Qemu-devel] " Cornelia Huck
2019-01-24 19:16 ` Eric Farman
2019-01-24 19:16 ` [Qemu-devel] " Eric Farman
2019-01-25 10:13 ` Cornelia Huck
2019-01-25 10:13 ` [Qemu-devel] " Cornelia Huck
2019-01-22 18:33 ` Halil Pasic
2019-01-22 18:33 ` [Qemu-devel] " Halil Pasic
2019-01-23 10:21 ` Cornelia Huck
2019-01-23 10:21 ` [Qemu-devel] " Cornelia Huck
2019-01-23 13:30 ` Halil Pasic
2019-01-23 13:30 ` [Qemu-devel] " Halil Pasic
2019-01-24 10:05 ` Cornelia Huck
2019-01-24 10:05 ` [Qemu-devel] " Cornelia Huck
2019-01-24 10:08 ` Pierre Morel
2019-01-24 10:08 ` [Qemu-devel] " Pierre Morel
2019-01-24 10:19 ` Cornelia Huck
2019-01-24 10:19 ` [Qemu-devel] " Cornelia Huck
2019-01-24 11:18 ` Pierre Morel
2019-01-24 11:18 ` [Qemu-devel] " Pierre Morel
2019-01-24 11:45 ` Halil Pasic
2019-01-24 11:45 ` [Qemu-devel] " Halil Pasic
2019-01-24 19:14 ` Eric Farman
2019-01-24 19:14 ` [Qemu-devel] " Eric Farman
2019-01-25 2:25 ` Eric Farman
2019-01-25 2:25 ` [Qemu-devel] " Eric Farman
2019-01-25 2:37 ` Eric Farman
2019-01-25 2:37 ` [Qemu-devel] " Eric Farman
2019-01-25 10:24 ` Cornelia Huck
2019-01-25 10:24 ` [Qemu-devel] " Cornelia Huck
2019-01-25 12:58 ` Cornelia Huck
2019-01-25 12:58 ` [Qemu-devel] " Cornelia Huck
2019-01-25 14:01 ` Halil Pasic
2019-01-25 14:01 ` [Qemu-devel] " Halil Pasic
2019-01-25 14:21 ` Cornelia Huck
2019-01-25 14:21 ` [Qemu-devel] " Cornelia Huck
2019-01-25 16:04 ` Halil Pasic
2019-01-25 16:04 ` [Qemu-devel] " Halil Pasic
2019-01-28 17:13 ` Cornelia Huck
2019-01-28 17:13 ` [Qemu-devel] " Cornelia Huck
2019-01-28 19:30 ` Halil Pasic
2019-01-28 19:30 ` [Qemu-devel] " Halil Pasic
2019-01-29 9:58 ` Cornelia Huck
2019-01-29 9:58 ` [Qemu-devel] " Cornelia Huck
2019-01-29 19:39 ` Halil Pasic
2019-01-29 19:39 ` [Qemu-devel] " Halil Pasic
2019-01-30 13:29 ` Cornelia Huck
2019-01-30 13:29 ` [Qemu-devel] " Cornelia Huck
2019-01-30 14:32 ` Farhan Ali
2019-01-30 14:32 ` [Qemu-devel] " Farhan Ali
2019-01-28 17:09 ` Cornelia Huck
2019-01-28 17:09 ` [Qemu-devel] " Cornelia Huck
2019-01-28 19:15 ` Halil Pasic
2019-01-28 19:15 ` [Qemu-devel] " Halil Pasic
2019-01-28 21:48 ` Eric Farman
2019-01-28 21:48 ` [Qemu-devel] " Eric Farman
2019-01-29 10:20 ` Cornelia Huck
2019-01-29 10:20 ` [Qemu-devel] " Cornelia Huck
2019-01-29 14:14 ` Eric Farman
2019-01-29 14:14 ` [Qemu-devel] " Eric Farman
2019-01-29 18:53 ` Cornelia Huck
2019-01-29 18:53 ` [Qemu-devel] " Cornelia Huck
2019-01-29 10:10 ` Cornelia Huck
2019-01-29 10:10 ` [Qemu-devel] " Cornelia Huck
2019-01-25 15:57 ` Eric Farman
2019-01-25 15:57 ` [Qemu-devel] " Eric Farman
2019-01-28 17:24 ` Cornelia Huck
2019-01-28 17:24 ` [Qemu-devel] " Cornelia Huck
2019-01-28 21:50 ` Eric Farman
2019-01-28 21:50 ` [Qemu-devel] " Eric Farman
2019-01-25 20:22 ` Eric Farman
2019-01-25 20:22 ` [Qemu-devel] " Eric Farman
2019-01-28 17:31 ` Cornelia Huck
2019-01-28 17:31 ` [Qemu-devel] " Cornelia Huck
2019-01-25 13:09 ` Halil Pasic [this message]
2019-01-25 13:09 ` Halil Pasic
2019-01-25 12:58 ` Halil Pasic
2019-01-25 12:58 ` [Qemu-devel] " Halil Pasic
2019-01-25 20:21 ` Eric Farman
2019-01-25 20:21 ` [Qemu-devel] " Eric Farman
2019-01-21 11:03 ` [PATCH v2 3/5] vfio-ccw: add capabilities chain Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-23 15:57 ` [qemu-s390x] " Halil Pasic
2019-01-23 15:57 ` [Qemu-devel] " Halil Pasic
2019-01-25 16:19 ` Eric Farman
2019-01-25 16:19 ` [Qemu-devel] " Eric Farman
2019-01-25 21:00 ` Eric Farman
2019-01-25 21:00 ` [Qemu-devel] " Eric Farman
2019-01-28 17:34 ` Cornelia Huck
2019-01-28 17:34 ` [Qemu-devel] " Cornelia Huck
2019-01-21 11:03 ` [PATCH v2 4/5] s390/cio: export hsch to modules Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-22 15:21 ` [qemu-s390x] " Halil Pasic
2019-01-22 15:21 ` [Qemu-devel] " Halil Pasic
2019-01-21 11:03 ` [PATCH v2 5/5] vfio-ccw: add handling for async channel instructions Cornelia Huck
2019-01-21 11:03 ` [Qemu-devel] " Cornelia Huck
2019-01-23 15:51 ` Halil Pasic
2019-01-23 15:51 ` [Qemu-devel] " Halil Pasic
2019-01-24 10:06 ` Cornelia Huck
2019-01-24 10:06 ` [Qemu-devel] " Cornelia Huck
2019-01-24 10:37 ` Halil Pasic
2019-01-24 10:37 ` [Qemu-devel] " Halil Pasic
2019-01-25 21:00 ` Eric Farman
2019-01-25 21:00 ` [Qemu-devel] " Eric Farman
2019-01-28 17:40 ` Cornelia Huck
2019-01-28 17:40 ` [Qemu-devel] " Cornelia Huck
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=20190125140918.64686aaf@oc2783563651 \
--to=pasic@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=alifm@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=farman@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.