On Mon, May 22, 2023 at 3:25 PM Bart Van Assche <bvanassche@xxxxxxx> wrote: > > Hi Jens, > > We want to improve Android performance by increasing the page size from 4 KiB > to 16 KiB. However, some of the storage controllers we care about do not support > DMA segments larger than 4 KiB. Hence the need support for DMA segments that are > smaller than the size of one virtual memory page. This patch series implements > that support. Please consider this patch series for the next merge window. > > Thanks, > > Bart. > > Changes compared to v4: > - Fixed the debugfs patch such that the behavior for creating the block > debugfs directory is retained. > - Made the description of patch "Support configuring limits below the page > size" more detailed. Split that patch into two patches. > - Added patch "Use pr_info() instead of printk(KERN_INFO ...)". > > Changes compared to v3: > - Removed CONFIG_BLK_SUB_PAGE_SEGMENTS and QUEUE_FLAG_SUB_PAGE_SEGMENTS. > Replaced these by a new member in struct queue_limits and a static branch. > - The static branch that controls whether or not sub-page limits are enabled > is set by the block layer core instead of by block drivers. > - Dropped the patches that are no longer needed (SCSI core and UFS Exynos > driver). > > Changes compared to v2: > - For SCSI drivers, only set flag QUEUE_FLAG_SUB_PAGE_SEGMENTS if necessary. > - In the scsi_debug patch, sorted kernel module parameters alphabetically. > Only set flag QUEUE_FLAG_SUB_PAGE_SEGMENTS if necessary. > - Added a patch for the UFS Exynos driver that enables > CONFIG_BLK_SUB_PAGE_SEGMENTS if the page size exceeds 4 KiB. > > Changes compared to v1: > - Added a CONFIG variable that controls whether or not small segment support > is enabled. > - Improved patch descriptions. > > Bart Van Assche (9): > block: Use pr_info() instead of printk(KERN_INFO ...) > block: Prepare for supporting sub-page limits > block: Support configuring limits below the page size > block: Make sub_page_limit_queues available in debugfs > block: Support submitting passthrough requests with small segments > block: Add support for filesystem requests and small segments > block: Add support for small segments in blk_rq_map_user_iov() > scsi_debug: Support configuring the maximum segment size > null_blk: Support configuring the maximum segment size > > block/blk-core.c | 4 ++ > block/blk-map.c | 29 +++++++--- > block/blk-merge.c | 8 ++- > block/blk-mq-debugfs.c | 9 ++++ > block/blk-mq-debugfs.h | 6 +++ > block/blk-mq.c | 2 + > block/blk-settings.c | 88 ++++++++++++++++++++++++++----- > block/blk.h | 39 +++++++++++--- > drivers/block/null_blk/main.c | 19 +++++-- > drivers/block/null_blk/null_blk.h | 1 + > drivers/scsi/scsi_debug.c | 4 ++ > include/linux/blkdev.h | 2 + > 12 files changed, 182 insertions(+), 29 deletions(-) > > We have tested this series on Pixel 6 by applying to android common kernel at [0] successfully with 16K page size. Feel free to add Tested-by: Sandeep Dhavale <dhavale@xxxxxxxxxx> -Sandeep. [0] https://android.googlesource.com/kernel/common/+/refs/heads/android14-6.1