x86/amd-iommu: Pt mode fix for domain_destroy

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Thursday, April 15, 2010 - 1:59 pm

Gitweb:     http://git.kernel.org/linus/04e856c072b84042bb56c487c2868638bb3f78db
Commit:     04e856c072b84042bb56c487c2868638bb3f78db
Parent:     5d214fe6e808a8caa9cb6f610c0190d3f50ac570
Author:     Chris Wright <chrisw@sous-sol.org>
AuthorDate: Wed Feb 17 08:51:20 2010 -0800
Committer:  Joerg Roedel <joerg.roedel@amd.com>
CommitDate: Mon Mar 1 14:16:36 2010 +0100

    x86/amd-iommu: Pt mode fix for domain_destroy
    
    After a guest is shutdown, assigned devices are not properly
    returned to the pt domain.  This can leave the device using
    stale cached IOMMU data, and result in a non-functional
    device after it's re-bound to the host driver.  For example,
    I see this upon rebinding:
    
     AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8000 flags=0x0050]
     AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8040 flags=0x0050]
     AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8080 flags=0x0050]
     AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a80c0 flags=0x0050]
     0000:02:00.0: eth2: Detected Hardware Unit Hang:
     ...
    
    The amd_iommu_destroy_domain() function calls do_detach()
    which doesn't reattach the pt domain to the device.
    Use __detach_device() instead.
    
    Cc: stable@kernel.org
    Signed-off-by: Chris Wright <chrisw@sous-sol.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
 arch/x86/kernel/amd_iommu.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
index b97f2f1..0c04254 100644
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -2298,7 +2298,7 @@ static void cleanup_domain(struct protection_domain *domain)
 	list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {
 		struct device *dev = dev_data->dev;
 
-		do_detach(dev);
+		__detach_device(dev);
 		atomic_set(&dev_data->bind, 0);
 	}
 
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
x86/amd-iommu: Pt mode fix for domain_destroy, Linux Kernel Mailing ..., (Thu Apr 15, 1:59 pm)