Re: [PATCH 1/2] uio: add ioctl to uio

From: Xiaoguang Wang
Date: Thu Feb 17 2022 - 07:30:47 EST



hi,

On Thu, Feb 17, 2022 at 10:29:21AM +0800, Guixin Liu wrote:
In TCMU, if backstore holds its own userspace buffer, for read cmd, the
data needs to be copied from userspace buffer to tcmu data area first,
and then needs to be copied from tcmu data area to scsi sgl pages again.

To solve this problem, add ioctl to uio to let userspace backstore can
copy data between scsi sgl pages and its own buffer directly.

Reviewed-by: Xiaoguang Wang <xiaoguang.wang@xxxxxxxxxxxxxxxxx>
Signed-off-by: Guixin Liu <kanie@xxxxxxxxxxxxxxxxx>
---
drivers/uio/uio.c | 22 ++++++++++++++++++++++
include/linux/uio_driver.h | 1 +
No, sorry, thie uio driver will not be adding ioctls to them. If you
need an ioctl, then you should not be using the UIO api but rather use a
custom character driver instead.
I found that early in 2015, there was developer trying to add ioctl interface
to uio framework: https://lore.kernel.org/lkml/20151005080149.GB1747@xxxxxxxxx/

Some of my customers use tcm_loop & tcmu to simulate block devices, it's tcmu
driver that uses uio framework. There maybe more extra work if we tries to replace
uio with a new character driver.

Currently tcmu has performance bottleneck, Guixin's patch uses ioctl interface
to bypass tcmu data area. I also have implemented a tcmu zero-copy feature that
allows tcmu driver map io request sgl's pages to user space, which uses ioctl
to do this mapping work, similar to network getsockopt(TCP_ZEROCOPY_RECEIVE).

I also understand your concerns about ioctl interface. Except that replacing
uio with a new character driver in tcmu, are there any less complicated methods
to complete our needs? Thanks.

Regards,
Xiaoguang Wang

thanks,

greg k-h