Re: [Xen-devel] [PATCH 2/2] block/xen-blkfront: Handle non-indirect grant with 64KB pages

From: Julien Grall
Date: Tue Oct 06 2015 - 05:58:14 EST


Hi Roger,

On 06/10/2015 10:39, Roger Pau Monnà wrote:
El 05/10/15 a les 19.05, Julien Grall ha escrit:
On 05/10/15 17:01, Roger Pau Monnà wrote:
El 11/09/15 a les 21.32, Julien Grall ha escrit:
ring_req->u.rw.nr_segments = num_grant;
+ if (unlikely(require_extra_req)) {
+ id2 = blkif_ring_get_request(info, req, &ring_req2);

How can you guarantee that there's always going to be another free
request? AFAICT blkif_queue_rq checks for RING_FULL, but you don't
actually know if there's only one slot or more than one available.

Because the depth of the queue is divided by 2 when the extra request is
used (see xlvbd_init_blk_queue).

I just noticed that I didn't mention this restriction in the commit message. I will do it in the next revision.

I see, that's quite restrictive but I guess it's better than introducing
a new ring macro in order to figure out if there are at least two free
slots.

I actually didn't think about your suggestion. I choose to divide by two based on the assumption that the block framework will always try to send a request with the maximum data possible.

I don't know if this assumption is correct as I'm not fully aware how the block framework is working.

If it's valid, in the case of 64KB guest, the maximum size of a request would be 64KB when indirect segment is not supported. So we would end up with a lot of 64KB request which will require 2 ring request.

Regards,

--
Julien Grall
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/