On Mon, Jun 03, 2019 at 01:14:45PM -0700, Dave Hansen wrote:
> On 5/31/19 4:31 PM, Sean Christopherson wrote:
> > -struct sgx_enclave_add_page {
> > +struct sgx_enclave_add_pages {
> >     __u64   addr;
> >     __u64   src;
> >     __u64   secinfo;
> > +   __u32   nr_pages;
> >     __u16   mrmask;
> >  } __attribute__((__packed__));
> 
> IMNHO this follows a user interface anti-pattern: exposing page sizes
> where not strictly required.
> 
> Think of how this would look to an application if page size was
> variable.  With this interface, they always need to scale their
> operations by page size instead of just aligning it.

I briefly considered taking size in bytes, but I took a shortcut because
EPC pages are architecturally defined to be 4k sized and aligned.  That
being said, I don't necessarily disagree, especially if nr_pages isn't
squeezed into a u32.
 
> BTW, why is nr_pages a u32?  Do we never envision a case where you can
> add more than 4TB of memory to an enclave? ;)

Heh, fair enough.  IIRC, a while back someone posted about having problems
building a 512gb enclave in a 92mb EPC...

How about this for the intermediate patch:

        struct sgx_enclave_add_region {
                __u64   addr;
                __u64   src;
                __u64   size;
                __u64   secinfo;
                __u16   mrmask;
                __u16   reserved16;
                __u32   reserved;
        }

and with the flags field:

        struct sgx_enclave_add_region {
                __u64   addr;
                __u64   src;
                __u64   size;
                __u64   secinfo;
                __u16   mrmask;
                __u16   flags;
                __u32   reserved;
        }

Reply via email to