[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling
From: |
Halil Pasic |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling |
Date: |
Fri, 25 Jan 2019 14:09:18 +0100 |
On Thu, 24 Jan 2019 21:37:44 -0500
Eric Farman <address@hidden> 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
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, (continued)
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Halil Pasic, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Halil Pasic, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/28
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/28
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Eric Farman, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/28
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Eric Farman, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Cornelia Huck, 2019/01/28
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling,
Halil Pasic <=
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Halil Pasic, 2019/01/25
- Re: [Qemu-devel] [PATCH v2 2/5] vfio-ccw: concurrent I/O handling, Eric Farman, 2019/01/25
[Qemu-devel] [PATCH v2 4/5] s390/cio: export hsch to modules, Cornelia Huck, 2019/01/21
[Qemu-devel] [PATCH v2 3/5] vfio-ccw: add capabilities chain, Cornelia Huck, 2019/01/21
[Qemu-devel] [PATCH v2 5/5] vfio-ccw: add handling for async channel instructions, Cornelia Huck, 2019/01/21