RE: [PATCH v2 4/8] ACPI/IORT: Support CANWBS memory access flag
From: "Tian, Kevin" <kevin.tian@intel.com>
Date: 2024-08-30 07:54:03
Also in:
kvm, linux-acpi, linux-iommu, linux-patches
From: Jason Gunthorpe <jgg@nvidia.com>
Sent: Tuesday, August 27, 2024 11:52 PM
From: Nicolin Chen <redacted>
The IORT spec, Issue E.f (April 2024), adds a new CANWBS bit to the Memory
Access Flag field in the Memory Access Properties table, mainly for a PCI
Root Complex.
This CANWBS defines the coherency of memory accesses to be not marked
IOWB
cacheable/shareable. Its value further implies the coherency impact from a
pair of mismatched memory attributes (e.g. in a nested translation case):
0x0: Use of mismatched memory attributes for accesses made by this
device may lead to a loss of coherency.
0x1: Coherency of accesses made by this device to locations in
Conventional memory are ensured as follows, even if the memory
attributes for the accesses presented by the device or provided by
the SMMU are different from Inner and Outer Write-back cacheable,
Shareable.
Note that the loss of coherency on a CANWBS-unsupported HW typically could
occur to an SMMU that doesn't implement the S2FWB feature where additional
cache flush operations would be required to prevent that from happening.
Add a new ACPI_IORT_MF_CANWBS flag and set
IOMMU_FWSPEC_PCI_RC_CANWBS upon
the presence of this new flag.
CANWBS and S2FWB are similar features, in that they both guarantee the VM
can not violate coherency, however S2FWB can be bypassed by PCI No Snoop
TLPs, while CANWBS cannot. Thus CANWBS meets the requirements to set
IOMMU_CAP_ENFORCE_CACHE_COHERENCY.I'm confused here. It is clear that we need a mechanism via which the VM cannot bypass the cache, before Yan's series comes to relax. But according to above description S2FWB cannot 100% guarantee it due to PCI No Snoop. Does it suggest that we should only allow nesting only for CANWBS, or disable/hide PCI No Snoop cap from the guest in case of S2FWB?