On Fri, 10 Feb 2023 18:42:27 +0100 Eric Farman <farman@xxxxxxxxxxxxx> wrote: > The logic in vfio_ccw_sch_shutdown() always assumed that the input > subchannel would point to a vfio_ccw_private struct, without checking > that one exists. The blamed commit put in a check for this scenario, > to prevent the possibility of a missing private. > > The trouble is that check was put alongside a WARN_ON(), presuming > that such a scenario would be a cause for concern. But this can be > triggered by binding a subchannel to vfio-ccw, and rebooting the > system before starting the mdev (via "mdevctl start" or similar) > or after stopping it. In those cases, shutdown doesn't need to > worry because either the private was never allocated, or it was > cleaned up by vfio_ccw_mdev_remove(). > > Remove the WARN_ON() piece of this check, since there are plausible > scenarios where private would be NULL in this path. > > Fixes: 9e6f07cd1eaa ("vfio/ccw: create a parent struct") > Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx> > --- > drivers/s390/cio/vfio_ccw_drv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c > index 54aba7cceb33..ff538a086fc7 100644 > --- a/drivers/s390/cio/vfio_ccw_drv.c > +++ b/drivers/s390/cio/vfio_ccw_drv.c > @@ -225,7 +225,7 @@ static void vfio_ccw_sch_shutdown(struct subchannel *sch) > struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev); > struct vfio_ccw_private *private = dev_get_drvdata(&parent->dev); > > - if (WARN_ON(!private)) > + if (!private) > return; > > vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE); I see I'm on the To: line here, is this intended to go through the vfio tree rather than s390? Thanks, Alex