Re: [PATCH v3 10/11] vfio/ccw: Refactor vfio_ccw_mdev_reset

Matthew Rosato
2022-07-05T19:29:53Z

On 6/30/22 4:36 PM, Eric Farman wrote:
> Use both the FSM Close and Open events when resetting an mdev,
> rather than making a separate call to cio_enable_subchannel().
>
> Signed-off-by: Eric Farman <farman@linux.ibm.com>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>

Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>

> ---
> drivers/s390/cio/vfio_ccw_ops.c | 24 ++++++++++--------------
> 1 file changed, 10 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c
> index fc5b83187bd9..4673b7ddfe20 100644
> --- a/drivers/s390/cio/vfio_ccw_ops.c
> +++ b/drivers/s390/cio/vfio_ccw_ops.c
> @@ -21,25 +21,21 @@ static const struct vfio_device_ops vfio_ccw_dev_ops;
>
> static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)
> {
> - struct subchannel *sch;
> - int ret;
> -
> - sch = private->sch;
> /*
> - * TODO:
> - * In the cureent stage, some things like "no I/O running" and "no
> - * interrupt pending" are clear, but we are not sure what other state
> - * we need to care about.
> - * There are still a lot more instructions need to be handled. We
> - * should come back here later.
> + * If the FSM state is seen as Not Operational after closing
> + * and re-opening the mdev, return an error.
> + *
> + * Otherwise, change the FSM from STANDBY to IDLE which is
> + * normally done by vfio_ccw_mdev_probe() in current lifecycle.
> */
> vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);
> + vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);
> + if (private->state == VFIO_CCW_STATE_NOT_OPER)
> + return -EINVAL;
>
> - ret = cio_enable_subchannel(sch, (u32)(unsigned long)sch);
> - if (!ret)
> - private->state = VFIO_CCW_STATE_IDLE;
> + private->state = VFIO_CCW_STATE_IDLE;
>
> - return ret;
> + return 0;
> }
>
> static int vfio_ccw_mdev_notifier(struct notifier_block *nb,