Will Deacon [off-list ref] writes:
On Thu, Oct 18, 2012 at 03:19:06AM +0100, Rusty Russell wrote:
quoted
We do have an alternate solution: masking out __GFP_HIGHMEM from the
kmalloc of desc. If it fails, we will fall back to laying out the
virtio request directly inside the ring; if it doesn't fit, we'll wait
for the device to consume more buffers.
Hmm, that will probably work for the vring but the zero-copy code for 9p may
just give us an address from userspace if I'm understanding it correctly. In
that case, we really have to do the translation as below (which is actually
much cleaner because everything is page-aligned).
quoted
quoted
@@ -325,7 +326,7 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,
int count = nr_pages;
while (nr_pages) {
s = rest_of_page(data);
- pages[index++] = virt_to_page(data);
+ pages[index++] = kmap_to_page(data);
data += s;
nr_pages--;
}
So what do you reckon? How about I leave this hunk as a separate patch and
have a play masking out __GFP_HIGHMEM for the vring descriptor?
Yes, I think so. A scathing comment would be nice, too...
Thanks,
Rusty.