freebsd-skq/sys/xen
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
..
evtchn xen: import a proper event channel user-space device 2014-10-22 16:57:11 +00:00
interface Add support for Xen blkif indirect segment I/Os. This makes it possible for 2015-07-30 03:50:01 +00:00
xenbus Use SYSCTL_OUT_STR() to return strings. 2015-03-14 21:40:24 +00:00
xenmem xen: introduce a newbus function to allocate unused memory 2015-05-08 14:48:40 +00:00
xenstore xen: convert the xenstore user-space char device to a newbus device 2014-09-30 17:31:04 +00:00
blkif.h xen-blk{front/back}: remove broken FreeBSD extensions 2015-06-12 07:50:34 +00:00
error.h xen: add a Xen to BSD error translation 2014-10-22 16:58:52 +00:00
evtchn.h Implement vector callback for PVHVM and unify event channel implementations 2013-08-29 19:52:18 +00:00
features.c Implement vector callback for PVHVM and unify event channel implementations 2013-08-29 19:52:18 +00:00
features.h
gnttab.h xen: convert the Grant-table code to a NewBus device 2014-12-10 11:35:41 +00:00
hvm.h Merge Xen PVHVM support into the GENERIC kernel config for both 2013-09-20 22:59:22 +00:00
hypervisor.h
privcmd.h xen: implement the privcmd user-space device 2014-10-22 17:07:20 +00:00
xen_intr.h xen: allow to register event channels without handlers 2014-10-22 16:51:52 +00:00
xen_msi.h Pacify clang 3.3 by ending the file with a newline. This is common 2015-01-06 21:26:35 +00:00
xen_pci.h xen: create a new PCI bus override 2014-12-09 18:03:25 +00:00
xen_pv.h xen: add missing files 2014-06-16 08:54:04 +00:00
xen-os.h xen: introduce a newbus function to allocate unused memory 2015-05-08 14:48:40 +00:00