Re: [PATCH v5 06/14] x86/ioremap: Support hypervisor specified range to map as encrypted

From: Sean Christopherson
Date: Fri Feb 10 2023 - 15:58:06 EST


On Fri, Feb 10, 2023, Sean Christopherson wrote:
> On Fri, Feb 10, 2023, Dave Hansen wrote:
> > On 2/10/23 11:36, Borislav Petkov wrote:
> > >> One approach is to go with the individual device attributes for now.>> If the list does grow significantly, there will probably be patterns
> > >> or groupings that we can't discern now. We could restructure into
> > >> larger buckets at that point based on those patterns/groupings.
> > > There's a reason the word "platform" is in cc_platform_has(). Initially
> > > we wanted to distinguish attributes of the different platforms. So even
> > > if y'all don't like CC_ATTR_PARAVISOR, that is what distinguishes this
> > > platform and it *is* one platform.
> > >
> > > So call it CC_ATTR_SEV_VTOM as it uses that technology or whatever. But
> > > call it like the platform, not to mean "I need this functionality".
> >
> > I can live with that. There's already a CC_ATTR_GUEST_SEV_SNP, so it
> > would at least not be too much of a break from what we already have.
>
> I'm fine with CC_ATTR_SEV_VTOM, assuming the proposal is to have something like:
>
> static inline bool is_address_range_private(resource_size_t addr)
> {
> if (cc_platform_has(CC_ATTR_SEV_VTOM))
> return is_address_below_vtom(addr);
>
> return false;
> }
>
> i.e. not have SEV_VTOM mean "I/O APIC and vTPM are private". Though I don't see
> the point in making it SEV vTOM specific or using a flag. Despite what any of us
> think about TDX paravisors, it's completely doable within the confines of TDX to
> have an emulated device reside in the private address space. E.g. why not
> something like this?
>
> static inline bool is_address_range_private(resource_size_t addr)
> {
> return addr < cc_platform_private_end;
> }
>
> where SEV fills in "cc_platform_private_end" when vTOM is enabled, and TDX does
> the same. Or wrap cc_platform_private_end in a helper, etc.

Gah, forgot that the intent with TDX is to enumerate devices in their legacy
address spaces. So a TDX guest couldn't do this by default, but if/when Hyper-V
or some other hypervisor moves I/O APIC, vTPM, etc... into the TCB, the common
code would just work and only the hypervisor-specific paravirt code would need
to change.

Probably need a more specific name than is_address_range_private() though, e.g.
is_mmio_address_range_private()?