Patch "iommu/vt-d: Fix passthrough mode with translation-disabled devices" has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iommu/vt-d: Fix passthrough mode with translation-disabled devices
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4ed6a540fab8ea4388c1703b73ecfed68a2009d1Mon Sep 17 00:00:00 2001
From: David Woodhouse <[email protected]>
Date: Mon, 11 May 2015 14:59:20 +0100
Subject: iommu/vt-d: Fix passthrough mode with translation-disabled devices
From: David Woodhouse <[email protected]>
commit 4ed6a540fab8ea4388c1703b73ecfed68a2009d1 upstream.
When we use 'intel_iommu=igfx_off' to disable translation for the graphics, and when we discover that the BIOS has misconfigured the DMAR setup for I/OAT, we use a special DUMMY_DEVICE_DOMAIN_INFO value in dev->archdata.iommu to indicate that translation is disabled.
With passthrough mode, we were attempting to dereference that as a normal pointer to a struct device_domain_info when setting up an identity mapping for the affected device.
This fixes the problem by making device_to_iommu() explicitly check for the special value and indicate that no IOMMU was found to handle the devices in question.
--- drivers/iommu/intel-iommu.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/iommu/intel-iommu.c +8 -5
@@ -673,6 +673,11 @@ static void domain_update_iommu_cap(stru domain->iommu_superpage =domain_update_iommu_superpage (NULL ); } +static int iommu_dummy (struct device *dev) +{ +return dev->archdata.iommu ==DUMMY_DEVICE_DOMAIN_INFO ; +} +static struct intel_iommu *device_to_iommu (struct device *dev,u8 *bus,u8 *devfn) {struct dmar_drhd_unit *drhd =NULL ;
@@ -682,6 +687,9 @@ static struct intel_iommu *device_to_iomu16 segment =0 ;int i; +if (iommu_dummy (dev)) +return NULL ; +if (dev_is_pci (dev)) { pdev =to_pci_dev (dev); segment =pci_domain_nr (pdev->bus);
@@ -2974,11 +2982,6 @@ static inline struct dmar_domain *get_vareturn __get_valid_domain_for_dev (dev); } -static int iommu_dummy (struct device *dev) -{ -return dev->archdata.iommu ==DUMMY_DEVICE_DOMAIN_INFO ; -} -/* Check if the dev needs to go through non-identity map and unmap process.*/ static int iommu_no_mapping (struct device *dev) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch queue-4.0/iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in