On Tue, 16 Apr 2019 17:23:14 -0400 Farhan Ali <alifm@xxxxxxxxxxxxx> wrote: > The quiesce function calls cio_cancel_halt_clear() and if we > get an -EBUSY we go into a loop where we: > - wait for any interrupts > - flush all I/O in the workqueue > - retry cio_cancel_halt_clear > > During the period where we are waiting for interrupts or > flushing all I/O, the channel subsystem could have completed > a halt/clear action and turned off the corresponding activity > control bits in the subchannel status word. This means the next > time we call cio_cancel_halt_clear(), we will again start by > calling cancel subchannel and so we can be stuck between calling > cancel and halt forever. > > Rather than calling cio_cancel_halt_clear() immediately after > waiting, let's try to disable the subchannel. If we succeed in > disabling the subchannel then we know nothing else can happen > with the device. > > Suggested-by: Eric Farman <farman@xxxxxxxxxxxxx> > Signed-off-by: Farhan Ali <alifm@xxxxxxxxxxxxx> > --- > ChangeLog: > v2 -> v3 > - Log an error message when cio_cancel_halt_clear > returns EIO and break out of the loop. > > - Did not include past change log as the other patches > of the original series have been queued by Conny. > Old series (v2) can be found here: > https://marc.info/?l=kvm&m=155475754101769&w=2 > > drivers/s390/cio/vfio_ccw_drv.c | 32 ++++++++++++++++++-------------- > 1 file changed, 18 insertions(+), 14 deletions(-) Thanks, applied.