Messages in this thread | | | Subject | Re: [Xen-devel] [PATCH 2/2] block/xen-blkfront: Handle non-indirect grant with 64KB pages | From | Julien Grall <> | Date | Tue, 6 Oct 2015 10:58:02 +0100 |
| |
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
| |