WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 07 of 10] Transitive grant support

> >>> -    unsigned long frame;  /* Frame being granted.                     */
> >>> +    domid_t       trans_dom;
> >>> +    uint32_t      trans_gref;
> >>> +    uint32_t      frame;  /* Frame being granted.                     */
> >> 
> >> Using a uint32_t for a frame number is not valid anymore after the recent
> >> sparse physical memory support changes (and I don't think it would have
> >> been valid on ia64 even before).
Yes, agreed, I'll put it back to unsigned long.

> >What about the 'uint32_t frame' in grant_entry_v2_t -- I'm surprised you
> >didn't mention that also? It's most critical we get the sizing of that
> 
> Oops, that one slipped my attention.
> 
> >correct, while we're rev'ing a public interface. Given the definition of
> >__spacer[], it looks like there's space to have a full 'uint64_t frame' in
> >that structure too, no problem. A bit of field reordering might be needed to
> >make everything align naturally yet compactly, is all, I think?
> Agreed. Not sure though whether uintXX_t is the right thing to use -
> after all we have xen_pfn_t for exactly this purpose.
Maybe.  xen_pfn_t probably would be the right type, but, again, it's
not 32/64 clean, which means it'd need some compat stuff.  Not
impossible, but kind of annoying.

Would something like this be acceptable?

struct grant_entry_v2 {
    grant_entry_header_t hdr;
    union {
        /*
         * The frame to which we are granting access.  This field has
         * the same meaning as the grant_entry_v1 field of the same
         * name.
         */
        struct {
            uint32_t pad0;
            uint64_t frame;
        } __attribute__((packed));

        /*
         * If the grant type is GTF_grant_access and GTF_sub_page is
         * set, @domid is allowed to access bytes
         * [@page_off,@page_off+@length) in frame @frame.
         */
        struct {
            uint16_t page_off;
            uint16_t length;
            uint64_t frame;
        } __attribute__((packed)) sub_page;

        /*
         * If the grant is GTF_transitive, @domid is allowed to use
         * the grant @gref in domain @trans_domid, as if it was the
         * local domain.  Obviously, the transitive access must be
         * compatible with the original grant.
         *
         * The current version of Xen does not allow transitive grants
         * to be mapped.
         */
        struct {
            domid_t trans_domid;
            uint16_t pad0;
            grant_ref_t gref;
        } transitive;

        uint32_t __spacer[3]; /* Pad to a power of two */
    };
};
typedef struct grant_entry_v2 grant_entry_v2_t;



The __attribute__((packed))s are very much not a thing of beauty, but
it's at least fairly self-contained.

Steven.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>