[meta-xilinx] [linux-xlnx] uio as module fails to link
Jean-Francois Dagenais
jeff.dagenais at gmail.com
Tue Jul 9 05:26:43 PDT 2019
Quick turn-around!
> On Jul 8, 2019, at 14:51, Hyun Kwon <hyun.kwon at xilinx.com> wrote:
>
> Hi JFD,
>
> Thanks for reporting the issue.
>
> On Mon, 2019-07-08 at 09:01:03 -0700, Jean-Francois Dagenais wrote:
>> Anyone tried that? I get:
>>
>> WARNING: modpost: missing MODULE_LICENSE() in drivers/uio/uio_dmabuf.o
>> see include/linux/module.h for more information
>> ERROR: "uio_dmabuf_map" [drivers/uio/uio.ko] undefined!
>> ERROR: "uio_dmabuf_unmap" [drivers/uio/uio.ko] undefined!
>> ERROR: "uio_dmabuf_cleanup" [drivers/uio/uio.ko] undefined!
>>
>> uio/Makefile shows:
>> obj-$(CONFIG_UIO) += uio.o uio_dmabuf.o
>>
>> I got it to compile by hacking uio.c to #include uio_dmabuf.c instead of the .h but that's probably not the correct way to fix this.
>>
>
> The easiest fix would be to merge uio_dmabuf.c into uio.c. Please see
> the attached patch and let me know if you see any other better way.
> Hehe, that was essentially what my #include "uio_dmabuf.c" was doing. This patch
> fixes the problem. See my suggestion below.
>
> Thanks,
> -hyun
>
> From 84cbe02cf2775dca911c2b734dded794150698a8 Mon Sep 17 00:00:00 2001
> From: Hyun Kwon <hyun.kwon at xilinx.com>
> Date: Mon, 8 Jul 2019 11:37:03 -0700
> Subject: [PATCH 1/1] uio: dmabuf: Merge the dmabuf functions into uio.c
>
> With a separate uio_dmabuf.c, it's tricky to build the uio as
> a separate kernel module.
>
> Reported-by: Jean-Francois Dagenais <jeff.dagenais at gmail.com>
> Signed-off-by: Hyun Kwon <hyun.kwon at xilinx.com>
Tested-by: Jean-Francois Dagenais <jeff.dagenais at gmail.com>
> ---
> drivers/uio/Makefile | 2 +-
> drivers/uio/uio.c | 191 ++++++++++++++++++++++++++++++++++++++++++
> drivers/uio/uio_dmabuf.c | 210 -----------------------------------------------
> 3 files changed, 192 insertions(+), 211 deletions(-)
> delete mode 100644 drivers/uio/uio_dmabuf.c
>
> diff --git a/drivers/uio/Makefile b/drivers/uio/Makefile
> index 7af888a..aea3e17 100644
> --- a/drivers/uio/Makefile
> +++ b/drivers/uio/Makefile
> @@ -1,5 +1,5 @@
> # SPDX-License-Identifier: GPL-2.0
> -obj-$(CONFIG_UIO) += uio.o uio_dmabuf.o
> +obj-$(CONFIG_UIO) += uio.o
> obj-$(CONFIG_UIO_CIF) += uio_cif.o
> obj-$(CONFIG_UIO_PDRV_GENIRQ) += uio_pdrv_genirq.o
> obj-$(CONFIG_UIO_DMEM_GENIRQ) += uio_dmem_genirq.o
> diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
> index e054fa7..175fb6b 100644
> --- a/drivers/uio/uio.c
> +++ b/drivers/uio/uio.c
> @@ -26,6 +26,7 @@
> #include <linux/uio_driver.h>
> #include <linux/list.h>
> #include <linux/mutex.h>
> +#include <linux/dma-buf.h>
>
> #include <uapi/linux/uio/uio.h>
>
> @@ -455,6 +456,196 @@ static irqreturn_t uio_interrupt(int irq, void *dev_id)
> return ret;
> }
Would it be better to put all this dmabuf inside a
#ifdef CONFIG_DMA_SHARED_BUFFER
maybe? (Or IS_REACHABLE(CONFIG_DMA_SHARED_BUFFER), not sure which formulation works for all cases...)
>
> +struct uio_dmabuf_mem {
> + int dbuf_fd;
> + struct dma_buf *dbuf;
> + struct dma_buf_attachment *dbuf_attach;
> + struct sg_table *sgt;
> + enum dma_data_direction dir;
> + struct list_head list;
> +};
> +
> +long uio_dmabuf_map(struct uio_device *dev, struct list_head *dbufs,
> + struct mutex *dbufs_lock, void __user *user_args)
> +{
> + struct uio_dmabuf_args args;
> + struct uio_dmabuf_mem *dbuf_mem;
> + struct dma_buf *dbuf;
> + struct dma_buf_attachment *dbuf_attach;
> + enum dma_data_direction dir;
> + struct sg_table *sgt;
> + long ret;
> +
> + if (copy_from_user(&args, user_args, sizeof(args))) {
> + ret = -EFAULT;
> + dev_err(dev->dev.parent, "failed to copy from user\n");
> + goto err;
> + }
> +
> + dbuf = dma_buf_get(args.dbuf_fd);
> + if (IS_ERR(dbuf)) {
> + dev_err(dev->dev.parent, "failed to get dmabuf\n");
> + return PTR_ERR(dbuf);
> + }
> +
> + dbuf_attach = dma_buf_attach(dbuf, dev->dev.parent);
> + if (IS_ERR(dbuf_attach)) {
> + dev_err(dev->dev.parent, "failed to attach dmabuf\n");
> + ret = PTR_ERR(dbuf_attach);
> + goto err_put;
> + }
> +
> [...]
More information about the meta-xilinx
mailing list