Hi Sean,

On Fri, Oct 6, 2023 at 4:21 AM Sean Christopherson <sea...@google.com> wrote:
>
> On Thu, Oct 05, 2023, Fuad Tabba wrote:
> > Hi Sean,
> >
> > On Tue, Oct 3, 2023 at 9:51 PM Sean Christopherson <sea...@google.com> 
> > wrote:
> > > > Like I said, pKVM doesn't need a userspace ABI for managing 
> > > > PRIVATE/SHARED,
> > > > just a way of tracking in the host kernel of what is shared (as opposed 
> > > > to
> > > > the hypervisor, which already has the knowledge). The solution could 
> > > > simply
> > > > be that pKVM does not enable KVM_GENERIC_MEMORY_ATTRIBUTES, has its own
> > > > tracking of the status of the guest pages, and only selects 
> > > > KVM_PRIVATE_MEM.
> > >
> > > At the risk of overstepping my bounds, I think that effectively giving 
> > > the guest
> > > full control over what is shared vs. private is a mistake.  It more or 
> > > less locks
> > > pKVM into a single model, and even within that model, dealing with errors 
> > > and/or
> > > misbehaving guests becomes unnecessarily problematic.
> > >
> > > Using KVM_SET_MEMORY_ATTRIBUTES may not provide value *today*, e.g. the 
> > > userspace
> > > side of pKVM could simply "reflect" all conversion hypercalls, and 
> > > terminate the
> > > VM on errors.  But the cost is very minimal, e.g. a single extra ioctl() 
> > > per
> > > converion, and the upside is that pKVM won't be stuck if a use case comes 
> > > along
> > > that wants to go beyond "all conversion requests either immediately 
> > > succeed or
> > > terminate the guest".
> >
> > Now that I understand the purpose of KVM_SET_MEMORY_ATTRIBUTES, I
> > agree. However, pKVM needs to track at the host kernel (i.e., EL1)
> > whether guest memory is shared or private.
>
> Why does EL1 need it's own view/opinion?  E.g. is it to avoid a accessing data
> that is still private according to EL2 (on behalf of the guest)?
>
> Assuming that's the case, why can't EL1 wait until it gets confirmation from 
> EL2
> that the data is fully shared before doing whatever it is that needs to be 
> done?
>
> Ah, is the problem that whether or not .mmap() is allowed keys off of the 
> state
> of the memory attributes?  If that's so, then yeah, an internal flag in 
> attributes
> is probably the way to go.  It doesn't need to be a "host kernel private" flag
> though, e.g. an IN_FLUX flag to capture that the attributes aren't fully 
> realized
> might be more intuitive for readers, and might have utility for other 
> attributes
> in the future too.

Yes, it's because of mmap. I think that an IN_FLUX flag might work
here. I'll have a go at it and see how it turns out.

Thanks,
/fuad

>
> > One approach would be to add another flag to the attributes that
> > tracks the host kernel view. The way KVM_SET_MEMORY_ATTRIBUTES is
> > implemented now, userspace can zero it, so in that case, that
> > operation would need to be masked to avoid that.
> >
> > Another approach would be to have a pKVM-specific xarray (or similar)
> > to do the tracking, but since there is a structure that's already
> > doing something similar (i.e.,the attributes array), it seems like it
> > would be unnecessary overhead.
> >
> > Do you have any ideas or preferences?
> >
> > Cheers,
> > /fuad

Reply via email to