From: Yunfei Dong <yunfei.dong@mediatek.com> To: "Jeffrey Kardatzke" <jkardatzke@google.com>, "Nícolas F . R . A . Prado" <nfraprado@collabora.com>, "Nathan Hebert" <nhebert@chromium.org>, "Nicolas Dufresne" <nicolas.dufresne@collabora.com>, "Hans Verkuil" <hverkuil-cisco@xs4all.nl>, "AngeloGioacchino Del Regno" <angelogioacchino.delregno@collabora.com>, "Benjamin Gaignard" <benjamin.gaignard@collabora.com>, "Sebastian Fricke" <sebastian.fricke@collabora.com>, "Tomasz Figa" <tfiga@chromium.org>, "Mauro Carvalho Chehab" <mchehab@kernel.org>, "Marek Szyprowski" <m.szyprowski@samsung.com> Cc: "Chen-Yu Tsai" <wenst@chromium.org>, "Yong Wu" <yong.wu@mediatek.com>, "Hsin-Yi Wang" <hsinyi@chromium.org>, "Fritz Koenig" <frkoenig@chromium.org>, "Daniel Vetter" <daniel@ffwll.ch>, "Steve Cho" <stevecho@chromium.org>, "Yunfei Dong" <yunfei.dong@mediatek.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Brian Starkey" <Brian.Starkey@arm.com>, "John Stultz" <jstultz@google.com>, "T . J . Mercier" <tjmercier@google.com>, "Christian König" <christian.koenig@amd.com>, "Matthias Brugger" <matthias.bgg@gmail.com>, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Project_Global_Chrome_Upstream_Group@mediatek.com Subject: [PATCH v5,06/23] dma-heap: Add proper kref handling on dma-buf heaps Date: Fri, 12 Apr 2024 17:08:34 +0800 [thread overview] Message-ID: <20240412090851.24999-7-yunfei.dong@mediatek.com> (raw) In-Reply-To: <20240412090851.24999-1-yunfei.dong@mediatek.com> From: John Stultz <jstultz@google.com> Add proper refcounting on the dma_heap structure. While existing heaps are built-in, we may eventually have heaps loaded from modules, and we'll need to be able to properly handle the references to the heaps Signed-off-by: John Stultz <jstultz@google.com> Signed-off-by: T.J. Mercier <tjmercier@google.com> Signed-off-by: Yong Wu <yong.wu@mediatek.com> [Yong: Just add comment for "minor" and "refcount"] Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> --- drivers/dma-buf/dma-heap.c | 29 +++++++++++++++++++++++++++++ include/linux/dma-heap.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c index 22f6c193db0d..97025ee8500f 100644 --- a/drivers/dma-buf/dma-heap.c +++ b/drivers/dma-buf/dma-heap.c @@ -11,6 +11,7 @@ #include <linux/dma-buf.h> #include <linux/dma-heap.h> #include <linux/err.h> +#include <linux/kref.h> #include <linux/list.h> #include <linux/nospec.h> #include <linux/syscalls.h> @@ -30,6 +31,7 @@ * @heap_devt: heap device node * @list: list head connecting to list of heaps * @heap_cdev: heap char device + * @refcount: reference counter for this heap device * * Represents a heap of memory from which buffers can be made. */ @@ -40,6 +42,7 @@ struct dma_heap { dev_t heap_devt; struct list_head list; struct cdev heap_cdev; + struct kref refcount; }; static LIST_HEAD(heap_list); @@ -240,6 +243,7 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) if (!heap) return ERR_PTR(-ENOMEM); + kref_init(&heap->refcount); heap->name = exp_info->name; heap->ops = exp_info->ops; heap->priv = exp_info->priv; @@ -304,6 +308,31 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) return err_ret; } +static void dma_heap_release(struct kref *ref) +{ + struct dma_heap *heap = container_of(ref, struct dma_heap, refcount); + unsigned int minor = MINOR(heap->heap_devt); + + mutex_lock(&heap_list_lock); + list_del(&heap->list); + mutex_unlock(&heap_list_lock); + + device_destroy(dma_heap_class, heap->heap_devt); + cdev_del(&heap->heap_cdev); + xa_erase(&dma_heap_minors, minor); + + kfree(heap); +} + +/** + * dma_heap_put - drops a reference to a dmabuf heap, potentially freeing it + * @heap: DMA-Heap whose reference count to decrement + */ +void dma_heap_put(struct dma_heap *heap) +{ + kref_put(&heap->refcount, dma_heap_release); +} + static char *dma_heap_devnode(const struct device *dev, umode_t *mode) { return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev)); diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h index fbe86ec889a8..d57593f8a1bc 100644 --- a/include/linux/dma-heap.h +++ b/include/linux/dma-heap.h @@ -46,4 +46,6 @@ const char *dma_heap_get_name(struct dma_heap *heap); struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); +void dma_heap_put(struct dma_heap *heap); + #endif /* _DMA_HEAPS_H */ -- 2.18.0
WARNING: multiple messages have this Message-ID (diff)
From: Yunfei Dong <yunfei.dong@mediatek.com> To: "Jeffrey Kardatzke" <jkardatzke@google.com>, "Nícolas F . R . A . Prado" <nfraprado@collabora.com>, "Nathan Hebert" <nhebert@chromium.org>, "Nicolas Dufresne" <nicolas.dufresne@collabora.com>, "Hans Verkuil" <hverkuil-cisco@xs4all.nl>, "AngeloGioacchino Del Regno" <angelogioacchino.delregno@collabora.com>, "Benjamin Gaignard" <benjamin.gaignard@collabora.com>, "Sebastian Fricke" <sebastian.fricke@collabora.com>, "Tomasz Figa" <tfiga@chromium.org>, "Mauro Carvalho Chehab" <mchehab@kernel.org>, "Marek Szyprowski" <m.szyprowski@samsung.com> Cc: "Chen-Yu Tsai" <wenst@chromium.org>, "Yong Wu" <yong.wu@mediatek.com>, "Hsin-Yi Wang" <hsinyi@chromium.org>, "Fritz Koenig" <frkoenig@chromium.org>, "Daniel Vetter" <daniel@ffwll.ch>, "Steve Cho" <stevecho@chromium.org>, "Yunfei Dong" <yunfei.dong@mediatek.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Brian Starkey" <Brian.Starkey@arm.com>, "John Stultz" <jstultz@google.com>, "T . J . Mercier" <tjmercier@google.com>, "Christian König" <christian.koenig@amd.com>, "Matthias Brugger" <matthias.bgg@gmail.com>, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Project_Global_Chrome_Upstream_Group@mediatek.com Subject: [PATCH v5,06/23] dma-heap: Add proper kref handling on dma-buf heaps Date: Fri, 12 Apr 2024 17:08:34 +0800 [thread overview] Message-ID: <20240412090851.24999-7-yunfei.dong@mediatek.com> (raw) In-Reply-To: <20240412090851.24999-1-yunfei.dong@mediatek.com> From: John Stultz <jstultz@google.com> Add proper refcounting on the dma_heap structure. While existing heaps are built-in, we may eventually have heaps loaded from modules, and we'll need to be able to properly handle the references to the heaps Signed-off-by: John Stultz <jstultz@google.com> Signed-off-by: T.J. Mercier <tjmercier@google.com> Signed-off-by: Yong Wu <yong.wu@mediatek.com> [Yong: Just add comment for "minor" and "refcount"] Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> --- drivers/dma-buf/dma-heap.c | 29 +++++++++++++++++++++++++++++ include/linux/dma-heap.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c index 22f6c193db0d..97025ee8500f 100644 --- a/drivers/dma-buf/dma-heap.c +++ b/drivers/dma-buf/dma-heap.c @@ -11,6 +11,7 @@ #include <linux/dma-buf.h> #include <linux/dma-heap.h> #include <linux/err.h> +#include <linux/kref.h> #include <linux/list.h> #include <linux/nospec.h> #include <linux/syscalls.h> @@ -30,6 +31,7 @@ * @heap_devt: heap device node * @list: list head connecting to list of heaps * @heap_cdev: heap char device + * @refcount: reference counter for this heap device * * Represents a heap of memory from which buffers can be made. */ @@ -40,6 +42,7 @@ struct dma_heap { dev_t heap_devt; struct list_head list; struct cdev heap_cdev; + struct kref refcount; }; static LIST_HEAD(heap_list); @@ -240,6 +243,7 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) if (!heap) return ERR_PTR(-ENOMEM); + kref_init(&heap->refcount); heap->name = exp_info->name; heap->ops = exp_info->ops; heap->priv = exp_info->priv; @@ -304,6 +308,31 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) return err_ret; } +static void dma_heap_release(struct kref *ref) +{ + struct dma_heap *heap = container_of(ref, struct dma_heap, refcount); + unsigned int minor = MINOR(heap->heap_devt); + + mutex_lock(&heap_list_lock); + list_del(&heap->list); + mutex_unlock(&heap_list_lock); + + device_destroy(dma_heap_class, heap->heap_devt); + cdev_del(&heap->heap_cdev); + xa_erase(&dma_heap_minors, minor); + + kfree(heap); +} + +/** + * dma_heap_put - drops a reference to a dmabuf heap, potentially freeing it + * @heap: DMA-Heap whose reference count to decrement + */ +void dma_heap_put(struct dma_heap *heap) +{ + kref_put(&heap->refcount, dma_heap_release); +} + static char *dma_heap_devnode(const struct device *dev, umode_t *mode) { return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev)); diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h index fbe86ec889a8..d57593f8a1bc 100644 --- a/include/linux/dma-heap.h +++ b/include/linux/dma-heap.h @@ -46,4 +46,6 @@ const char *dma_heap_get_name(struct dma_heap *heap); struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); +void dma_heap_put(struct dma_heap *heap); + #endif /* _DMA_HEAPS_H */ -- 2.18.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-04-12 9:09 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-04-12 9:08 [PATCH v5,00/22] media: add driver to support secure video decoder Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,01/23] v4l2: add restricted memory flags Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,02/23] v4l2: handle restricted memory flags in queue setup Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,03/23] v4l2: verify restricted dmabufs are used in restricted queue Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 03/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,04/23] v4l: add documentation for restricted memory flag Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,05/23] dma-buf: heaps: Deduplicate docs and adopt common format Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 05/23] " Yunfei Dong 2024-04-12 9:16 ` [PATCH v5,05/23] " Christian König 2024-04-12 9:16 ` Christian König 2024-04-12 9:08 ` Yunfei Dong [this message] 2024-04-12 9:08 ` [PATCH v5,06/23] dma-heap: Add proper kref handling on dma-buf heaps Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,07/23] dma-heap: Provide accessors so that in-kernel drivers can allocate dmabufs from specific heaps Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 07/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,08/23] media: mediatek: vcodec: add tee client interface to communiate with optee-os Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 08/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,09/23] media: mediatek: vcodec: allocate tee share memory Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,10/23] media: mediatek: vcodec: send share memory data to optee Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 10/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,11/23] media: mediatek: vcodec: initialize msg and vsi information Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 11/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,12/23] media: mediatek: vcodec: add interface to allocate/free secure memory Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 12/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,13/23] media: mediatek: vcodec: using shared memory as vsi address Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 13/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,14/23] media: mediatek: vcodec: Add capture format to support one plane memory Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 14/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,15/23] media: mediatek: vcodec: Add one plane format Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,16/23] media: mediatek: vcodec: support one plane capture buffer Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 16/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,17/23] media: mediatek: vcodec: re-construct h264 driver to support svp mode Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 17/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,18/23] media: mediatek: vcodec: remove parse nal_info in kernel Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 18/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,19/23] media: mediatek: vcodec: disable wait interrupt for svp mode Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 19/23] " Yunfei Dong 2024-04-15 6:29 ` CK Hu (胡俊光) 2024-04-15 6:29 ` CK Hu (胡俊光) 2024-04-15 6:29 ` CK Hu (胡俊光) 2024-04-16 5:07 ` CK Hu (胡俊光) 2024-04-16 5:07 ` CK Hu (胡俊光) 2024-04-16 5:07 ` CK Hu (胡俊光) 2024-04-12 9:08 ` [PATCH v5,20/23] media: mediatek: vcodec: support tee decoder Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,21/23] media: mediatek: vcodec: move vdec init interface to setup callback Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 21/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,22/23] media: mediatek: vcodec: support hevc svp for mt8188 Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 22/23] " Yunfei Dong 2024-04-12 9:08 ` [PATCH v5,23/23] WIP: media: mediatek: vcodec: support av1 svp decoder " Yunfei Dong 2024-04-12 9:08 ` Yunfei Dong 2024-04-12 9:08 ` [PATCH v5, 23/23] " Yunfei Dong
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=20240412090851.24999-7-yunfei.dong@mediatek.com \ --to=yunfei.dong@mediatek.com \ --cc=Brian.Starkey@arm.com \ --cc=Project_Global_Chrome_Upstream_Group@mediatek.com \ --cc=angelogioacchino.delregno@collabora.com \ --cc=benjamin.gaignard@collabora.com \ --cc=christian.koenig@amd.com \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=frkoenig@chromium.org \ --cc=hsinyi@chromium.org \ --cc=hverkuil-cisco@xs4all.nl \ --cc=jkardatzke@google.com \ --cc=jstultz@google.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=m.szyprowski@samsung.com \ --cc=matthias.bgg@gmail.com \ --cc=mchehab@kernel.org \ --cc=nfraprado@collabora.com \ --cc=nhebert@chromium.org \ --cc=nicolas.dufresne@collabora.com \ --cc=sebastian.fricke@collabora.com \ --cc=stevecho@chromium.org \ --cc=sumit.semwal@linaro.org \ --cc=tfiga@chromium.org \ --cc=tjmercier@google.com \ --cc=wenst@chromium.org \ --cc=yong.wu@mediatek.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: linkBe 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.