Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757049AbYLIO25 (ORCPT ); Tue, 9 Dec 2008 09:28:57 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754485AbYLIORk (ORCPT ); Tue, 9 Dec 2008 09:17:40 -0500 Received: from outbound-wa4.frontbridge.com ([216.32.181.16]:52848 "EHLO WA4EHSOBE003.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753487AbYLIOQa (ORCPT ); Tue, 9 Dec 2008 09:16:30 -0500 X-BigFish: VPS3(zzzzzzz32i43j65h) X-Spam-TCS-SCL: 4:0 X-FB-SS: 5, X-WSS-ID: 0KBM4Z7-04-AEO-01 From: Joerg Roedel To: avi@redhat.com, mingo@redhat.com, dwmw2@infradead.org, gregkh@suse.de, weidong.han@intel.com CC: iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Joerg Roedel Subject: [PATCH 08/21] AMD IOMMU: add iommu_flush_domain function Date: Tue, 9 Dec 2008 15:16:05 +0100 Message-ID: <1228832178-13429-9-git-send-email-joerg.roedel@amd.com> X-Mailer: git-send-email 1.5.6.4 In-Reply-To: <1228832178-13429-8-git-send-email-joerg.roedel@amd.com> References: <20081209141143.GW12816@amd.com> <1228832178-13429-1-git-send-email-joerg.roedel@amd.com> <1228832178-13429-2-git-send-email-joerg.roedel@amd.com> <1228832178-13429-3-git-send-email-joerg.roedel@amd.com> <1228832178-13429-4-git-send-email-joerg.roedel@amd.com> <1228832178-13429-5-git-send-email-joerg.roedel@amd.com> <1228832178-13429-6-git-send-email-joerg.roedel@amd.com> <1228832178-13429-7-git-send-email-joerg.roedel@amd.com> <1228832178-13429-8-git-send-email-joerg.roedel@amd.com> X-OriginalArrivalTime: 09 Dec 2008 14:16:18.0958 (UTC) FILETIME=[B465D2E0:01C95A08] MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1564 Lines: 49 Impact: add a function to flush a domain id on every IOMMU Signed-off-by: Joerg Roedel --- arch/x86/kernel/amd_iommu.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index 80758cc..7355da0 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c @@ -351,6 +351,28 @@ static void iommu_flush_tlb(struct amd_iommu *iommu, u16 domid) iommu_queue_inv_iommu_pages(iommu, address, domid, 0, 1); } +/* + * This function is used to flush the IO/TLB for a given protection domain + * on every IOMMU in the system + */ +static void iommu_flush_domain(u16 domid) +{ + unsigned long flags; + struct amd_iommu *iommu; + struct iommu_cmd cmd; + + __iommu_build_inv_iommu_pages(&cmd, CMD_INV_IOMMU_ALL_PAGES_ADDRESS, + domid, 1, 1); + + list_for_each_entry(iommu, &amd_iommu_list, list) { + spin_lock_irqsave(&iommu->lock, flags); + __iommu_queue_command(iommu, &cmd); + __iommu_completion_wait(iommu); + __iommu_wait_for_completion(iommu); + spin_unlock_irqrestore(&iommu->lock, flags); + } +} + /**************************************************************************** * * The functions below are used the create the page table mappings for -- 1.5.6.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/