From: Joerg Roedel <joro@8bytes.org>
To: iommu@lists.linux-foundation.org
Cc: linux-kernel@vger.kernel.org, Joerg Roedel <jroedel@suse.de>
Subject: [PATCH 05/12] iommu/amd: Set alias DTE in do_attach/do_detach
Date: Tue, 20 Oct 2015 17:33:38 +0200 [thread overview]
Message-ID: <1445355225-17557-6-git-send-email-joro@8bytes.org> (raw)
In-Reply-To: <1445355225-17557-1-git-send-email-joro@8bytes.org>
From: Joerg Roedel <jroedel@suse.de>
With this we don't have to create dev_data entries for
non-existent devices (which only exist as request-ids).
Signed-off-by: Joerg Roedel <jroedel@suse.de>
---
drivers/iommu/amd_iommu.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index d47c4b1..187a8bf 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -1114,11 +1114,15 @@ static int device_flush_iotlb(struct iommu_dev_data *dev_data,
static int device_flush_dte(struct iommu_dev_data *dev_data)
{
struct amd_iommu *iommu;
+ u16 alias;
int ret;
iommu = amd_iommu_rlookup_table[dev_data->devid];
+ alias = amd_iommu_alias_table[dev_data->devid];
ret = iommu_flush_dte(iommu, dev_data->devid);
+ if (!ret && alias != dev_data->devid)
+ ret = iommu_flush_dte(iommu, alias);
if (ret)
return ret;
@@ -1984,27 +1988,33 @@ static void do_attach(struct iommu_dev_data *dev_data,
struct protection_domain *domain)
{
struct amd_iommu *iommu;
+ u16 alias;
bool ats;
iommu = amd_iommu_rlookup_table[dev_data->devid];
+ alias = amd_iommu_alias_table[dev_data->devid];
ats = dev_data->ats.enabled;
/* Update data structures */
dev_data->domain = domain;
list_add(&dev_data->list, &domain->dev_list);
- set_dte_entry(dev_data->devid, domain, ats);
/* Do reference counting */
domain->dev_iommu[iommu->index] += 1;
domain->dev_cnt += 1;
- /* Flush the DTE entry */
+ /* Update device table */
+ set_dte_entry(dev_data->devid, domain, ats);
+ if (alias != dev_data->devid)
+ set_dte_entry(dev_data->devid, domain, ats);
+
device_flush_dte(dev_data);
}
static void do_detach(struct iommu_dev_data *dev_data)
{
struct amd_iommu *iommu;
+ u16 alias;
/*
* First check if the device is still attached. It might already
@@ -2016,6 +2026,7 @@ static void do_detach(struct iommu_dev_data *dev_data)
return;
iommu = amd_iommu_rlookup_table[dev_data->devid];
+ alias = amd_iommu_alias_table[dev_data->devid];
/* decrease reference counters */
dev_data->domain->dev_iommu[iommu->index] -= 1;
@@ -2025,6 +2036,8 @@ static void do_detach(struct iommu_dev_data *dev_data)
dev_data->domain = NULL;
list_del(&dev_data->list);
clear_dte_entry(dev_data->devid);
+ if (alias != dev_data->devid)
+ clear_dte_entry(alias);
/* Flush the DTE entry */
device_flush_dte(dev_data);
--
1.9.1
next prev parent reply other threads:[~2015-10-20 15:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-20 15:33 [PATCH 00/12] AMD IOMMU alias handling cleanups and code removal Joerg Roedel
2015-10-20 15:33 ` [PATCH 01/12] iommu/amd: Do not BUG_ON in __detach_device() Joerg Roedel
2015-10-20 15:33 ` [PATCH 02/12] iommu/amd: Do not iterate over alias-list in __[attach|detach]_device Joerg Roedel
2015-10-20 15:33 ` [PATCH 03/12] iommu/amd: Don't disable IRQs in __detach_device Joerg Roedel
2015-10-20 15:33 ` [PATCH 04/12] iommu/amd: WARN when __[attach|detach]_device are called with irqs enabled Joerg Roedel
2015-10-20 15:33 ` Joerg Roedel [this message]
2015-10-20 15:33 ` [PATCH 06/12] iommu/amd: Remove old alias handling code Joerg Roedel
2015-10-20 15:33 ` [PATCH 07/12] iommu/amd: Align DTE flag definitions Joerg Roedel
2015-10-20 15:33 ` [PATCH 08/12] iommu/amd: Remove cmd_buf_size and evt_buf_size from struct amd_iommu Joerg Roedel
2015-10-20 15:33 ` [PATCH 09/12] iommu/amd: Cleanup buffer allocation Joerg Roedel
2015-10-20 15:33 ` [PATCH 10/12] iommu/amd: Initialize amd_iommu_last_bdf for DEV_ALL Joerg Roedel
2015-10-20 15:33 ` [PATCH 11/12] iommu/amd: Remove first/last_device handling Joerg Roedel
2015-10-20 15:33 ` [PATCH 12/12] iommu/amd: Remove find_last_devid_on_pci() Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1445355225-17557-6-git-send-email-joro@8bytes.org \
--to=joro@8bytes.org \
--cc=iommu@lists.linux-foundation.org \
--cc=jroedel@suse.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®