From: Simon Horman <simon.horman@corigine.com>
To: Stefano Garzarella <sgarzare@redhat.com>
Cc: virtualization@lists.linux-foundation.org,
Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>,
eperezma@redhat.com, netdev@vger.kernel.org, stefanha@redhat.com,
linux-kernel@vger.kernel.org, Jason Wang <jasowang@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH v2 6/8] vdpa_sim: use kthread worker
Date: Thu, 2 Mar 2023 16:30:04 +0100 [thread overview]
Message-ID: <ZADA/GgpbDoi+SzU@corigine.com> (raw)
In-Reply-To: <20230302113421.174582-7-sgarzare@redhat.com>
On Thu, Mar 02, 2023 at 12:34:19PM +0100, Stefano Garzarella wrote:
> Let's use our own kthread to run device jobs.
> This allows us more flexibility, especially we can attach the kthread
> to the user address space when vDPA uses user's VA.
>
> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
> ---
> drivers/vdpa/vdpa_sim/vdpa_sim.h | 3 ++-
> drivers/vdpa/vdpa_sim/vdpa_sim.c | 17 ++++++++++++-----
> 2 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_sim.h
> index acee20faaf6a..ce83f9130a5d 100644
> --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h
> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h
> @@ -57,7 +57,8 @@ struct vdpasim_dev_attr {
> struct vdpasim {
> struct vdpa_device vdpa;
> struct vdpasim_virtqueue *vqs;
> - struct work_struct work;
> + struct kthread_worker *worker;
> + struct kthread_work work;
> struct vdpasim_dev_attr dev_attr;
> /* spinlock to synchronize virtqueue state */
> spinlock_t lock;
> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
> index a6ee830efc38..6feb29726c2a 100644
> --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
> @@ -11,8 +11,8 @@
> #include <linux/module.h>
> #include <linux/device.h>
> #include <linux/kernel.h>
> +#include <linux/kthread.h>
> #include <linux/slab.h>
> -#include <linux/sched.h>
> #include <linux/dma-map-ops.h>
> #include <linux/vringh.h>
> #include <linux/vdpa.h>
> @@ -116,7 +116,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim)
> static const struct vdpa_config_ops vdpasim_config_ops;
> static const struct vdpa_config_ops vdpasim_batch_config_ops;
>
> -static void vdpasim_work_fn(struct work_struct *work)
> +static void vdpasim_work_fn(struct kthread_work *work)
> {
> struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
>
> @@ -159,7 +159,13 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
>
> vdpasim = vdpa_to_sim(vdpa);
> vdpasim->dev_attr = *dev_attr;
> - INIT_WORK(&vdpasim->work, vdpasim_work_fn);
> +
> + kthread_init_work(&vdpasim->work, vdpasim_work_fn);
> + vdpasim->worker = kthread_create_worker(0, "vDPA sim worker: %s",
> + dev_attr->name);
> + if (IS_ERR(vdpasim->worker))
> + goto err_iommu;
Branching to err_iommu will result in a call to put_device(dev)...
> +
> spin_lock_init(&vdpasim->lock);
> spin_lock_init(&vdpasim->iommu_lock);
... but dev is not initialised until the line following this hunk,
which is:
dev = &vdpasim->vdpa.dev;
In order to avoid leaking dev I _think_ the correct approach
is to move the initialisation of dev above the branch to
err_iommu, perhaps above the call to kthread_init_work()
is a good place.
This does move the assignment outside the locks above.
But I _think_ that is ok.
> @@ -212,7 +218,7 @@ EXPORT_SYMBOL_GPL(vdpasim_create);
>
> void vdpasim_schedule_work(struct vdpasim *vdpasim)
> {
> - schedule_work(&vdpasim->work);
> + kthread_queue_work(vdpasim->worker, &vdpasim->work);
> }
> EXPORT_SYMBOL_GPL(vdpasim_schedule_work);
>
> @@ -612,7 +618,8 @@ static void vdpasim_free(struct vdpa_device *vdpa)
> struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
> int i;
>
> - cancel_work_sync(&vdpasim->work);
> + kthread_cancel_work_sync(&vdpasim->work);
> + kthread_destroy_worker(vdpasim->worker);
>
> for (i = 0; i < vdpasim->dev_attr.nvqs; i++) {
> vringh_kiov_cleanup(&vdpasim->vqs[i].out_iov);
> --
> 2.39.2
>
next prev parent reply other threads:[~2023-03-02 15:31 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-02 11:34 [PATCH v2 0/8] vdpa_sim: add support for user VA Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 1/8] vdpa: add bind_mm/unbind_mm callbacks Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-14 3:39 ` Jason Wang
2023-03-14 3:39 ` Jason Wang
2023-03-16 8:17 ` Stefano Garzarella
2023-03-16 8:17 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 2/8] vhost-vdpa: use bind_mm/unbind_mm device callbacks Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-14 3:48 ` Jason Wang
2023-03-14 3:48 ` Jason Wang
2023-03-16 8:31 ` Stefano Garzarella
2023-03-16 8:31 ` Stefano Garzarella
2023-03-16 10:11 ` Stefano Garzarella
2023-03-16 10:11 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 3/8] vringh: replace kmap_atomic() with kmap_local_page() Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-14 3:56 ` Jason Wang
2023-03-14 3:56 ` Jason Wang
2023-03-15 21:12 ` Fabio M. De Francesco
2023-03-16 2:53 ` Jason Wang
2023-03-16 2:53 ` Jason Wang
2023-03-16 8:09 ` Stefano Garzarella
2023-03-16 8:09 ` Stefano Garzarella
2023-03-16 9:25 ` Fabio M. De Francesco
2023-03-16 9:13 ` Fabio M. De Francesco
2023-03-16 9:17 ` Stefano Garzarella
2023-03-16 9:17 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 4/8] vringh: support VA with iotlb Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-03 14:38 ` Eugenio Perez Martin
2023-03-07 9:31 ` Stefano Garzarella
2023-03-07 9:31 ` Stefano Garzarella
2023-03-16 16:07 ` Stefano Garzarella
2023-03-16 16:07 ` Stefano Garzarella
2023-03-17 2:53 ` Jason Wang
2023-03-17 2:53 ` Jason Wang
2023-03-17 9:49 ` Eugenio Perez Martin
2023-03-17 11:25 ` Stefano Garzarella
2023-03-17 11:25 ` Stefano Garzarella
2023-03-14 4:53 ` Jason Wang
2023-03-14 4:53 ` Jason Wang
2023-03-16 8:38 ` Stefano Garzarella
2023-03-16 8:38 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 5/8] vdpa_sim: make devices agnostic for work management Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-03 14:40 ` Eugenio Perez Martin
2023-03-14 5:27 ` Jason Wang
2023-03-14 5:27 ` Jason Wang
2023-03-02 11:34 ` [PATCH v2 6/8] vdpa_sim: use kthread worker Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-02 15:30 ` Simon Horman [this message]
2023-03-02 15:48 ` Stefano Garzarella
2023-03-02 15:48 ` Stefano Garzarella
2023-03-05 11:21 ` kernel test robot
2023-03-05 11:21 ` kernel test robot
2023-03-14 5:31 ` Jason Wang
2023-03-14 5:31 ` Jason Wang
2023-03-02 11:34 ` [PATCH v2 7/8] vdpa_sim: replace the spinlock with a mutex to protect the state Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-14 5:29 ` Jason Wang
2023-03-14 5:29 ` Jason Wang
2023-03-14 5:31 ` Jason Wang
2023-03-14 5:31 ` Jason Wang
2023-03-16 8:42 ` Stefano Garzarella
2023-03-16 8:42 ` Stefano Garzarella
2023-03-02 11:34 ` [PATCH v2 8/8] vdpa_sim: add support for user VA Stefano Garzarella
2023-03-02 11:34 ` Stefano Garzarella
2023-03-14 5:36 ` Jason Wang
2023-03-14 5:36 ` Jason Wang
2023-03-16 9:11 ` Stefano Garzarella
2023-03-16 9:11 ` Stefano Garzarella
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=ZADA/GgpbDoi+SzU@corigine.com \
--to=simon.horman@corigine.com \
--cc=andrey.zhadchenko@virtuozzo.com \
--cc=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
/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.