On 02/15/2017 05:34 PM, Xiubo Li wrote: >>> --- a/drivers/uio/uio.c >>> +++ b/drivers/uio/uio.c >>> @@ -708,6 +708,8 @@ static int uio_mmap(struct file *filep, struct >>> vm_area_struct *vma) >>> case UIO_MEM_LOGICAL: >>> case UIO_MEM_VIRTUAL: >>> return uio_mmap_logical(vma); >>> + case UIO_MEM_CUSTOM: >>> + return 0; >> How does this help? > For example, the TCMU will use the map area as ISCSI commands & data ring > buffer(uio0 --> map0). Currently the TCMU will using the fixed small > size map > area as the ring buffer, but this will be the bottleneck for high iops. > > Without knowing how large it is enough, so the new scheme will use the > fixed > small ring buffer area(about 64M ~ 128M) + dynamically "growing" ring > buffer > area(about 1.5G).
The following code is in uio_mmap() in uio.c: if (idev->info->mmap) { ret = idev->info->mmap(idev->info, vma); return ret; } switch (idev->info->mem[mi].memtype) { case UIO_MEM_PHYS: return uio_mmap_physical(vma); case UIO_MEM_LOGICAL: case UIO_MEM_VIRTUAL: return uio_mmap_logical(vma); default: return -EINVAL; } We already have the equivalent of a CUSTOM memtype because TCMU sets the info->mmap fn, overriding uio's default handling choices in favor of its own. HTH -- Regards -- Andy