[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 05/12] IOMMU: rename and re-type ats_enabled
On Mon, May 06, 2024 at 03:20:38PM +0200, Jan Beulich wrote: > On 06.05.2024 14:42, Roger Pau Monné wrote: > > On Thu, Feb 15, 2024 at 11:15:39AM +0100, Jan Beulich wrote: > >> Make the variable a tristate, with (as done elsewhere) a negative value > >> meaning "default". Since all use sites need looking at, also rename it > >> to match our usual "opt_*" pattern. While touching it, also move it to > >> .data.ro_after_init. > > > > I guess I need to look at further patches, as given the feedback on > > the past version I think we agreed we want to set ATS unconditionally > > disabled by default, and hence I'm not sure I see the point of the > > tri-state if enabling ATS will require an explicit opt-in on the > > command line (ats=1). > > With the present wording in the VT-d spec (which we've now had vague > indication that it may not be meant that way) there needs to be > tristate behavior: > - With "ats=0" ATS won't be used. > - With "ats=1" ATS will be used for all ATS-capable devices. > - Without either option ATS will be used for devices where firmware > mandates its use. I'm afraid I don't agree to this behavior. Regardless of what the firmware requests ATS must only be enabled on user-request (iow: when the ats=1 command line option is passed). Otherwise ATS must remain disabled for all devices. It's not fine for firmware to trigger the enabling of a feature that's not supported on Xen. > >> @@ -196,7 +196,7 @@ static int __must_check amd_iommu_setup_ > >> dte->sys_mgt = MASK_EXTR(ivrs_dev->device_flags, > >> ACPI_IVHD_SYSTEM_MGMT); > >> > >> if ( use_ats(pdev, iommu, ivrs_dev) ) > >> - dte->i = ats_enabled; > >> + dte->i = true; > > > > Might be easier to just use: > > > > dte->i = use_ats(pdev, iommu, ivrs_dev); > > I'm hesitant here, as in principle we might be overwriting a "true" by > "false" then. Hm, but that would be fine, what's the point in enabling the IOMMU to reply to ATS requests if ATS is not enabled on the device? IOW: overwriting a "true" with a "false" seem like the correct behavior if it's based on the output of use_ats(). > >> @@ -257,7 +257,7 @@ static int __must_check amd_iommu_setup_ > >> ACPI_IVHD_SYSTEM_MGMT)); > >> > >> if ( use_ats(pdev, iommu, ivrs_dev) ) > >> - ASSERT(dte->i == ats_enabled); > >> + ASSERT(dte->i); > > > > ASSERT(dte->i == use_ats(pdev, iommu, ivrs_dev)); > > I'm okay switching here, but better to the precise logical equivalent of > the earlier code: > > ASSERT(dte->i || !use_ats(pdev, iommu, ivrs_dev)); Hm, I see. I think we should be more strict with this (see my previous comment), but we could defer to a later change. > > >> @@ -43,7 +43,7 @@ static inline int pci_ats_enabled(int se > >> > >> static inline int pci_ats_device(int seg, int bus, int devfn) > >> { > >> - if ( !ats_enabled ) > >> + if ( !opt_ats ) > >> return 0; > > > > Can't you remove that check altogether now, since you are adding an > > opt_ats check to use_ats()? > > Two reasons why not: For one this isn't AMD-specific code, and hence > shouldn't be tied to the AMD-specific use_ats(). In principle VT-d > code should be okay to call here, too. And then > amd_iommu_disable_domain_device() doesn't use use_ats(), but does call > here. Oh, that's confusing, I didn't realize use_ats was AMD specific code. It should have some kind of prefix to avoid this kind of confusion. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |