From: Anthony Krowiak <akrowiak@linux.ibm.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: ruanjinjie <ruanjinjie@huawei.com>,
Halil Pasic <pasic@linux.ibm.com>,
Jason Herne <jjherne@linux.ibm.com>,
Kirti Wankhede <kwankhede@nvidia.com>,
Kevin Tian <kevin.tian@intel.com>,
Eric Farman <farman@linux.ibm.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] vfio/ap/ccw/samples: Fix device_register() unwind path
Date: Mon, 5 Dec 2022 14:20:53 -0500 [thread overview]
Message-ID: <9fe1e000-e3ff-bf42-28f7-169fb57dc1ce@linux.ibm.com> (raw)
In-Reply-To: <166999942139.645727.12439756512449846442.stgit@omen>
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com>
On 12/2/22 11:46 AM, Alex Williamson wrote:
> We always need to call put_device() if device_register() fails.
> All vfio drivers calling device_register() include a similar unwind
> stack via gotos, therefore split device_unregister() into its
> device_del() and put_device() components in the unwind path, and
> add a goto target to handle only the put_device() requirement.
>
> Reported-by: Ruan Jinjie <ruanjinjie@huawei.com>
> Link: https://lore.kernel.org/all/20221118032827.3725190-1-ruanjinjie@huawei.com
> Fixes: d61fc96f47fd ("sample: vfio mdev display - host device")
> Fixes: 9d1a546c53b4 ("docs: Sample driver to demonstrate how to use Mediated device framework.")
> Fixes: a5e6e6505f38 ("sample: vfio bochs vbe display (host device for bochs-drm)")
> Fixes: 9e6f07cd1eaa ("vfio/ccw: create a parent struct")
> Fixes: 36360658eb5a ("s390: vfio_ap: link the vfio_ap devices to the vfio_ap bus subsystem")
> Cc: Tony Krowiak <akrowiak@linux.ibm.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Jason Herne <jjherne@linux.ibm.com>
> Cc: Kirti Wankhede <kwankhede@nvidia.com>
> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
> Reviewed-by: Eric Farman <farman@linux.ibm.com>
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> ---
>
> I didn't intend to usurp Ruan's patch, but since the inline version is
> collecting reviews, formally post it and include additional fixes tags
> for vfio-ccw and vfio-ap.
>
> drivers/s390/cio/vfio_ccw_drv.c | 3 ++-
> drivers/s390/crypto/vfio_ap_drv.c | 2 +-
> samples/vfio-mdev/mbochs.c | 7 ++++---
> samples/vfio-mdev/mdpy.c | 7 ++++---
> samples/vfio-mdev/mtty.c | 7 ++++---
> 5 files changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c
> index c2a65808605a..54aba7cceb33 100644
> --- a/drivers/s390/cio/vfio_ccw_drv.c
> +++ b/drivers/s390/cio/vfio_ccw_drv.c
> @@ -199,8 +199,9 @@ static int vfio_ccw_sch_probe(struct subchannel *sch)
> return 0;
>
> out_unreg:
> - device_unregister(&parent->dev);
> + device_del(&parent->dev);
> out_free:
> + put_device(&parent->dev);
> dev_set_drvdata(&sch->dev, NULL);
> return ret;
> }
> diff --git a/drivers/s390/crypto/vfio_ap_drv.c b/drivers/s390/crypto/vfio_ap_drv.c
> index f43cfeabd2cc..997b524bdd2b 100644
> --- a/drivers/s390/crypto/vfio_ap_drv.c
> +++ b/drivers/s390/crypto/vfio_ap_drv.c
> @@ -122,7 +122,7 @@ static int vfio_ap_matrix_dev_create(void)
> return 0;
>
> matrix_drv_err:
> - device_unregister(&matrix_dev->device);
> + device_del(&matrix_dev->device);
> matrix_reg_err:
> put_device(&matrix_dev->device);
> matrix_alloc_err:
> diff --git a/samples/vfio-mdev/mbochs.c b/samples/vfio-mdev/mbochs.c
> index 8b5a3a778a25..e54eb752e1ba 100644
> --- a/samples/vfio-mdev/mbochs.c
> +++ b/samples/vfio-mdev/mbochs.c
> @@ -1430,7 +1430,7 @@ static int __init mbochs_dev_init(void)
>
> ret = device_register(&mbochs_dev);
> if (ret)
> - goto err_class;
> + goto err_put;
>
> ret = mdev_register_parent(&mbochs_parent, &mbochs_dev, &mbochs_driver,
> mbochs_mdev_types,
> @@ -1441,8 +1441,9 @@ static int __init mbochs_dev_init(void)
> return 0;
>
> err_device:
> - device_unregister(&mbochs_dev);
> -err_class:
> + device_del(&mbochs_dev);
> +err_put:
> + put_device(&mbochs_dev);
> class_destroy(mbochs_class);
> err_driver:
> mdev_unregister_driver(&mbochs_driver);
> diff --git a/samples/vfio-mdev/mdpy.c b/samples/vfio-mdev/mdpy.c
> index 721fb06c6413..e8400fdab71d 100644
> --- a/samples/vfio-mdev/mdpy.c
> +++ b/samples/vfio-mdev/mdpy.c
> @@ -717,7 +717,7 @@ static int __init mdpy_dev_init(void)
>
> ret = device_register(&mdpy_dev);
> if (ret)
> - goto err_class;
> + goto err_put;
>
> ret = mdev_register_parent(&mdpy_parent, &mdpy_dev, &mdpy_driver,
> mdpy_mdev_types,
> @@ -728,8 +728,9 @@ static int __init mdpy_dev_init(void)
> return 0;
>
> err_device:
> - device_unregister(&mdpy_dev);
> -err_class:
> + device_del(&mdpy_dev);
> +err_put:
> + put_device(&mdpy_dev);
> class_destroy(mdpy_class);
> err_driver:
> mdev_unregister_driver(&mdpy_driver);
> diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c
> index 3c2a421b9b69..e887de672c52 100644
> --- a/samples/vfio-mdev/mtty.c
> +++ b/samples/vfio-mdev/mtty.c
> @@ -1330,7 +1330,7 @@ static int __init mtty_dev_init(void)
>
> ret = device_register(&mtty_dev.dev);
> if (ret)
> - goto err_class;
> + goto err_put;
>
> ret = mdev_register_parent(&mtty_dev.parent, &mtty_dev.dev,
> &mtty_driver, mtty_mdev_types,
> @@ -1340,8 +1340,9 @@ static int __init mtty_dev_init(void)
> return 0;
>
> err_device:
> - device_unregister(&mtty_dev.dev);
> -err_class:
> + device_del(&mtty_dev.dev);
> +err_put:
> + put_device(&mtty_dev.dev);
> class_destroy(mtty_dev.vd_class);
> err_driver:
> mdev_unregister_driver(&mtty_driver);
>
>
next prev parent reply other threads:[~2022-12-05 19:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-02 16:46 [PATCH] vfio/ap/ccw/samples: Fix device_register() unwind path Alex Williamson
2022-12-05 13:39 ` Jason J. Herne
2022-12-05 19:20 ` Anthony Krowiak [this message]
2022-12-05 22:36 ` Alex Williamson
2022-12-06 10:02 ` Halil Pasic
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=9fe1e000-e3ff-bf42-28f7-169fb57dc1ce@linux.ibm.com \
--to=akrowiak@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=farman@linux.ibm.com \
--cc=jjherne@linux.ibm.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pasic@linux.ibm.com \
--cc=ruanjinjie@huawei.com \
/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.