xen, blkfront: add support for the multi-queue block layer API

This commit introduces support for the multi-queue block layer API.
The changes are only structural, and force both the use of the
multi-queue API and the use of a single I/O ring, by initializing
statically the number of hardware queues to one.

Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
xen, blkfront: factor out flush-related checks from do_blkif_request()

This commit factors out some checks related to the request insertion
path, which now are performed by both the multi-queue and the request-
queue hooks. This commit introduces no functional change.

Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
xen, blkfront: introduce support for multiple hw queues

This commit introduces in xen-blkfront actual support for multiple
hardware queues. The number of available hardware queues is gathered
from the backend via XenStore; in case the expected XenStore key
is not available, the frontend defaults to a single I/O ring.

Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
xen, blkback: add support for multiple block rings

This commit adds to xen-blkback the support to retrieve the block
layer API being used and the number of available hardware queues,
in case the block layer is using the multi-queue API. This commit
also lets the driver advertise the number of available hardware
queues to the frontend via XenStore, therefore allowing for actual
multiple I/O rings to be used.

Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>