On Fri, Aug 21, 2015 at 05:08:35PM +0100, David Vrabel wrote: > On 21/08/15 17:05, Konrad Rzeszutek Wilk wrote: > > > > I have to concur with that. We can't mandate that ARM 64k page MUST use > > indirect descriptors. > > Then it has to be fixed in the block layer to allow < PAGE_SIZE segments > and to get the block layer to split requests for blkfront.
Hey Jens, I am hoping you can help us figure this problem out. The Linux ARM is capable of using 4KB pages and 64KB pages. Our block driver (xen-blkfront) was built with 4KB pages in mind and without using any fancy flags (which some backends lack) the maximum amount of I/O it can fit on a ring is 44KB. This has the unfortunate effect that when the xen-blkfront gets an 'struct request' it can have on page (64KB) and it can't actually fit it on the ring! And the lowest segment size it advertises is PAGE_SIZE (64KB). I believe Julien (who found this) tried initially advertising smaller segment size than PAGE_SIZE (32KB). However looking at __blk_segment_map_sg it looks to assume smallest size is PAGE_SIZE so that would explain why it did not work. One wya to make this work is for the driver (xen-blkfront) to split the 'struct request' I/O in two internal requests. But this has to be a normal problem. Surely there are other drivers (MMC?) that can't handle PAGE_SIZE and have to break their I/Os. Would it make sense for the common block code to be able to deal with this? Thank you! _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel