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

Re: [Xen-devel] Sub page Grant Table mappings



On 22/12/15 20:59, Mike Belopuhov wrote:
> Hi,
>
> I'm trying to get grant table sub page mappings working on Xen 4.5.
> I know there have been some changes in the trunk regarding moving src/
> dst checks closer together, but I can't test this easily atm.  Please
> bear with me for a moment.  Or tell me that it might have been broken
> previously.
>
> What I'm trying to do is to map in a 2k cluster from the networking
> stack (we call it an mbuf cluster, you might call it skb something)
> onto the Netfront Rx ring.  2 clusters fit one page.  Therefore for
> one frame address which is a (PA >> 12) I might have 2 entries one
> after the other, both with sub_page.length = 2048 but one with a
> sub_page.page_off = 2048 and the other with a 0 offset.  Both come
> with (GTF_permit_access | GTF_sub_page) flags.
>
> When I do that, Xen stops liking me and says:
>
> (XEN) grant_table.c:2162:d0v1 copy dest out of bounds: 0 < 2048 || 90 > 2048
> (XEN) grant_table.c:2162:d0v1 copy dest out of bounds: 0 < 2048 || 119 > 2048
> (XEN) grant_table.c:2162:d0v2 copy dest out of bounds: 0 < 2048 || 70 > 2048
> (XEN) grant_table.c:2162:d0v2 copy dest out of bounds: 0 < 2048 || 119 > 2048
> (XEN) grant_table.c:2162:d0v2 copy dest out of bounds: 0 < 2048 || 119 > 2048
> ...
>
> The relevant code does this:
>
>     if ( dest_is_gref )
>     {
>         unsigned dest_off, dest_len;
>         rc = __acquire_grant_for_copy(dd, op->dest.u.ref,
>                                       current->domain->domain_id, 0,
>                                       &d_frame, &d_pg, &dest_off, &dest_len, 
> 1);
>         if ( rc != GNTST_okay )
>             goto error_out;
>         have_d_grant = 1;
>         if ( op->dest.offset < dest_off ||
>              op->len > dest_len )
>             PIN_FAIL(error_out, GNTST_general_error,
>                      "copy dest out of bounds: %d < %d || %d > %d\n",
>                      op->dest.offset, dest_off,
>                      op->len, dest_len);
>     }
>
> I fail to understand what am I doing wrong in this case.  Any clues
> will be greatly appreciated.
>
> 4k clusters mapped in as full_page mappings work as expected.
>
> Cheers,
> Mike

I presume you are on x86 here.

Architecturally, a 4k page is the minimum granularity which permissions
can be applied to.  It is not possible to make a 2k block accessible,
but an adjacent 2k block inaccessible.

As a result, grant mapping of a subpage grant is prohibited, but you are
(or at least should be) able to grant copy it.

Can you describe precisely which domains are doing what in your example?

~Andrew

_______________________________________________
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®.