[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH, v3] qemu/xendisk: set maximum number of grants to be used



>>> On 31.05.12 at 13:27, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
wrote:
> On Thu, 31 May 2012, Jan Beulich wrote:
>> 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.
>> 
>> Change in v2: Double the number requested, as we need to account for
>> the allocations needing to happen in 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.
>> 
>> Change in v3: introduce MAX_GRANTS(), and add a comment explaining its
>> definition.
>> 
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> 
> I think it is OK, I'll submit it as a bug fix for QEMU 1.1.
> 
> It should be applied to qemu-xen-traditional too.

This is commit 64c27e5b1fdb6d94bdc0bda3b1869d7383a35c65 in
git.qemu.org/?p=qemu.git.

Jan

>> --- a/hw/xen_disk.c
>> +++ b/hw/xen_disk.c
>> @@ -537,6 +537,15 @@ static void blk_bh(void *opaque)
>>      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)
>>  {
>>      struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, 
> xendev);
>> @@ -548,6 +557,11 @@ static void blk_alloc(struct XenDevice *
>>      if (xen_mode != XEN_EMULATE) {
>>          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)
>> 
>> 
>> 
>> 




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.