qemu/xendisk: set maximum number of grants to be used
Legacy (non-pvops) gntdev drivers may require this to be done when the number of grants intended to be used simultaneously exceeds a certain driver specific default limit. Signed-off-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
78260a5f08
commit
64c27e5b1f
@ -537,6 +537,15 @@ static void blk_bh(void *opaque)
|
|||||||
blk_handle_requests(blkdev);
|
blk_handle_requests(blkdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to account for the grant allocations requiring contiguous
|
||||||
|
* chunks; the worst case number would be
|
||||||
|
* max_req * max_seg + (max_req - 1) * (max_seg - 1) + 1,
|
||||||
|
* but in order to keep things simple just use
|
||||||
|
* 2 * max_req * max_seg.
|
||||||
|
*/
|
||||||
|
#define MAX_GRANTS(max_req, max_seg) (2 * (max_req) * (max_seg))
|
||||||
|
|
||||||
static void blk_alloc(struct XenDevice *xendev)
|
static void blk_alloc(struct XenDevice *xendev)
|
||||||
{
|
{
|
||||||
struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
|
struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
|
||||||
@ -548,6 +557,11 @@ static void blk_alloc(struct XenDevice *xendev)
|
|||||||
if (xen_mode != XEN_EMULATE) {
|
if (xen_mode != XEN_EMULATE) {
|
||||||
batch_maps = 1;
|
batch_maps = 1;
|
||||||
}
|
}
|
||||||
|
if (xc_gnttab_set_max_grants(xendev->gnttabdev,
|
||||||
|
MAX_GRANTS(max_requests, BLKIF_MAX_SEGMENTS_PER_REQUEST)) < 0) {
|
||||||
|
xen_be_printf(xendev, 0, "xc_gnttab_set_max_grants failed: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int blk_init(struct XenDevice *xendev)
|
static int blk_init(struct XenDevice *xendev)
|
||||||
|
Loading…
Reference in New Issue
Block a user