mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
Backport commit 3714ce1d6655098ee69ede632883e5874d67e4ab "iommu/arm-smmu: Disable stalling faults for all endpoints" from the Linux kernel. This works-around Erratum #842869. Original commit message: Enabling stalling faults can result in hardware deadlock on poorly designed systems, particularly those with a PCI root complex upstream of the SMMU. Although it's not really Linux's job to save hardware integrators from their own misfortune, it *is* our job to stop userspace (e.g. VFIO clients) from hosing the system for everybody else, even if they might already be required to have elevated privileges. Given that the fault handling code currently executes entirely in IRQ context, there is nothing that can sensibly be done to recover from things like page faults anyway, so let's rip this code out for now and avoid the potential for deadlock. Cc: <stable@vger.kernel.org> Fixes: 48ec83bcbcf5 ("iommu/arm-smmu: Add initial driver support for ARM SMMUv3 devices") Reported-by: Matt Evans <matt.evans@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Stefano Stabellini <stefanos@xilinx.com> Acked-by: Julien Grall <julien.grall@arm.com>
52 lines
2.8 KiB
Plaintext
52 lines
2.8 KiB
Plaintext
Silicon Errata and Software Workarounds
|
|
=======================================
|
|
|
|
It is an unfortunate fact of life that hardware is often produced with
|
|
so-called "errata", which can cause it to deviate from the architecture
|
|
under specific circumstances. For hardware produced by ARM, these
|
|
errata are broadly classified into the following categories:
|
|
|
|
Category A: A critical error without a viable workaround.
|
|
Category B: A significant or critical error with an acceptable
|
|
workaround.
|
|
Category C: A minor error that is not expected to occur under normal
|
|
operation.
|
|
|
|
For more information, consult one of the "Software Developers Errata
|
|
Notice" documents available on infocenter.arm.com (registration
|
|
required).
|
|
|
|
As far as Xen is concerned, Category B errata may require some special
|
|
treatment in the hypervisor. For example, avoiding a particular sequence
|
|
of code, or configuring the processor in a particular way. A less common
|
|
situation may require similar actions in order to declassify a Category A
|
|
erratum into a Category C erratum. These are collectively known as
|
|
"software workarounds" and are only required in the minority of cases
|
|
(e.g. those cases that both require a non-secure workaround *and* can
|
|
be triggered by Xen).
|
|
|
|
For software workarounds that may adversely impact systems unaffected by
|
|
the erratum in question, a Kconfig entry is added under "ARM errata
|
|
workarounds via the alternatives framework". These are enabled by default
|
|
and patched in at runtime when an affected CPU is detected. Note that
|
|
runtime patching is only supported on ARM64. For less-intrusive workarounds,
|
|
a Kconfig option is not available and the code is structured (preferably
|
|
with a comment) in such a way that the erratum will not be hit.
|
|
|
|
This approach can make it slightly onerous to determine exactly which
|
|
errata are worked around in an arbitrary hypervisor source tree, so this
|
|
file acts as a registry of software workarounds in the Xen hypervisor and
|
|
will be updated when new workarounds are committed and backported to
|
|
stable hypervisors.
|
|
|
|
| Implementor | Component | Erratum ID | Kconfig |
|
|
+----------------+-----------------+-----------------+-------------------------+
|
|
| ARM | Cortex-A15 | #766422 | N/A |
|
|
| ARM | Cortex-A53 | #827319 | ARM64_ERRATUM_827319 |
|
|
| ARM | Cortex-A53 | #824069 | ARM64_ERRATUM_824069 |
|
|
| ARM | Cortex-A53 | #819472 | ARM64_ERRATUM_819472 |
|
|
| ARM | Cortex-A57 | #852523 | N/A |
|
|
| ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
|
|
| ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
|
|
| ARM | MMU-500 | #842869 | N/A |
|