cperciva d40e2b9930 Add support for Xen blkif indirect segment I/Os. This makes it possible for
the blkfront driver to perform I/Os of up to 2 MB, subject to support from
the blkback to which it is connected and the initiation of such large I/Os
by the rest of the kernel.  In practice, the I/O size is increased from 40 kB
to 128 kB.

The changes to xen/interface/io/blkif.h consist merely of merging updates
from the upstream Xen repository.

In dev/xen/blkfront/block.h we add some convenience macros and structure
fields used for indirect-page I/Os: The device records its negotiated limit
on the number of indirect pages used, while each I/O command structure gains
permanently allocated page(s) for indirect page references and the Xen grant
references for those pages.

In dev/xen/blkfront/blkfront.c we now check in xbd_queue_cb whether a request
is small enough to handle without an indirection page, and either follow the
previous behaviour or use new code for issuing an indirect segment I/O.  In
xbd_connect we read the size of indirect segment I/Os supported by the backend
and select the maximum size we will use; then allocate the pages and Xen grant
references for each I/O command structure.  In xbd_free those grants and pages
are released.

A new loader tunable, hw.xbd.xbd_enable_indirect, can be set to 0 in order to
disable this functionality; it works by pretending that the backend does not
support this feature.  Some backends exhibit a loss of performance with large
I/Os, so users may wish to test with and without this functionality enabled.

Reviewed by:	royger
MFC after:	3 days
Relnotes:	yes
2015-07-30 03:50:01 +00:00
..
2015-07-22 16:26:17 +00:00
2015-01-23 15:14:30 +00:00
2015-01-30 01:13:07 +00:00
2015-02-24 01:00:46 +00:00
2015-03-08 19:55:46 +00:00
2015-01-23 15:14:30 +00:00
2015-07-25 19:24:33 +00:00
2015-06-27 09:01:49 +00:00
2015-06-19 17:34:59 +00:00
2015-06-30 17:00:45 +00:00
2015-06-30 17:00:45 +00:00
2014-08-05 23:35:19 +00:00
2014-08-05 23:58:49 +00:00
2015-06-02 22:45:28 +00:00
2014-09-28 07:40:26 +00:00
2015-07-21 21:07:18 +00:00
2015-04-29 20:08:03 +00:00
2014-10-10 14:17:42 +00:00
2015-07-29 20:50:48 +00:00
2014-10-11 19:36:59 +00:00
2015-03-23 19:47:52 +00:00
2015-04-22 14:38:58 +00:00
2014-12-03 00:47:05 +00:00
2015-07-17 20:29:47 +00:00
2015-07-28 04:54:05 +00:00
2014-11-18 21:58:57 +00:00
2015-06-23 22:22:36 +00:00
2015-06-30 17:00:45 +00:00
2015-06-30 17:00:45 +00:00
2014-09-19 03:55:19 +00:00
2015-03-23 19:47:52 +00:00
2015-06-30 17:00:45 +00:00
2014-11-21 21:34:19 +00:00
2015-06-30 17:00:45 +00:00
2015-07-27 14:34:32 +00:00
2015-07-07 02:42:48 +00:00
2014-11-20 20:09:18 +00:00