[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/2] IOMMU/x86: disallow device assignment to PoD guests
On Thu, Feb 03, 2022 at 11:20:15AM +0100, Jan Beulich wrote: > On 03.02.2022 10:52, Roger Pau Monné wrote: > > On Thu, Feb 03, 2022 at 10:21:54AM +0100, Jan Beulich wrote: > >> On 03.02.2022 10:04, Roger Pau Monné wrote: > >>> On Thu, Feb 03, 2022 at 09:31:03AM +0100, Jan Beulich wrote: > >>>> On 02.02.2022 17:13, Roger Pau Monné wrote: > >>>>> On Tue, Jan 04, 2022 at 10:41:32AM +0100, Jan Beulich wrote: > >>>>>> @@ -359,7 +360,10 @@ p2m_pod_set_mem_target(struct domain *d, > >>>>>> > >>>>>> ASSERT( pod_target >= p2m->pod.count ); > >>>>>> > >>>>>> - ret = p2m_pod_set_cache_target(p2m, pod_target, 1/*preemptible*/); > >>>>>> + if ( has_arch_pdevs(d) || cache_flush_permitted(d) ) > >>>>> > >>>>> Is it possible to have cache flush allowed without any PCI device > >>>>> assigned? AFAICT the iomem/ioport_caps would only get setup when there > >>>>> are device passed through? > >>>> > >>>> One can assign MMIO or ports to a guest the raw way. That's not > >>>> secure, but functionally explicitly permitted. > >>>> > >>>>> TBH I would be fine if we just say that PoD cannot be used in > >>>>> conjunction with an IOMMU, and just check for is_iommu_enable(d) here. > >>>>> > >>>>> I understand it's technically possible for PoD to be used together > >>>>> with a domain that will later get a device passed through once PoD is > >>>>> no longer in use, but I doubt there's much value in supporting that > >>>>> use case, and I fear we might be introducing corner cases that could > >>>>> create issues in the future. Overall I think it would be safer to just > >>>>> disable PoD in conjunction with an IOMMU. > >>>> > >>>> I consider it wrong to put in place such a restriction, but I could > >>>> perhaps accept you and Andrew thinking this way if this was the only > >>>> aspect playing into here. However, this would then want an equivalent > >>>> tools side check, and while hunting down where to make the change as > >>>> done here, I wasn't able to figure out where that alternative > >>>> adjustment would need doing. Hence I would possibly(!) buy into this > >>>> only if someone else took care of doing so properly in the tool stack > >>>> (including the emission of a sensible error message). > >>> > >>> What about the (completely untested) chunk below: > >>> > >>> diff --git a/tools/libs/light/libxl_create.c > >>> b/tools/libs/light/libxl_create.c > >>> index d7a40d7550..e585ef4c5c 100644 > >>> --- a/tools/libs/light/libxl_create.c > >>> +++ b/tools/libs/light/libxl_create.c > >>> @@ -1160,17 +1160,16 @@ int libxl__domain_config_setdefault(libxl__gc *gc, > >>> pod_enabled = (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV) && > >>> (d_config->b_info.target_memkb < d_config->b_info.max_memkb); > >>> > >>> - /* We cannot have PoD and PCI device assignment at the same time > >>> + /* We cannot have PoD and an active IOMMU at the same time > >>> * for HVM guest. It was reported that IOMMU cannot work with PoD > >>> * enabled because it needs to populated entire page table for > >>> - * guest. To stay on the safe side, we disable PCI device > >>> - * assignment when PoD is enabled. > >>> + * guest. > >>> */ > >>> if (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV && > >>> - d_config->num_pcidevs && pod_enabled) { > >>> + d_config->c_info.passthrough != LIBXL_PASSTHROUGH_DISABLED && > >>> + pod_enabled) { > >>> ret = ERROR_INVAL; > >>> - LOGD(ERROR, domid, > >>> - "PCI device assignment for HVM guest failed due to PoD > >>> enabled"); > >>> + LOGD(ERROR, domid, "IOMMU cannot be enabled together with PoD"); > >>> goto error_out; > >>> } > >> > >> Perhaps. Seeing this I actually recall coming across this check during > >> my investigation. Not changing it along the lines of what you do was > >> then really more because of me not being convinced of the extra > >> restriction; I clearly misremembered when writing the earlier reply. > >> If we were to do what you suggest, I'd like to ask that the comment be > >> changed differently, though: "We cannot ..." then isn't really true > >> anymore. We choose not to permit this mode; "cannot" only applies to > >> actual device assignment (and of course only as long as there aren't > >> restartable IOMMU faults). > > > > I'm fine with an adjusted wording here. This was mostly a placement > > suggestion, but I didn't gave much thought to the error message. > > FTAOD: Are you going to transform this into a proper patch then? While > I wouldn't object to such a behavioral change, I also wouldn't want to > put my name under it. But if it went in, I think I might be able to > then drop the libxl adjustment from my patch. Oh, I somewhat assumed you would integrate this check into the patch. I can send a standalone patch myself if that's your preference. Let me do that now. Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |