From: Eric Auger <eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Will.Deacon-5wv7dgnIgG8@public.gmane.org,
robin.murphy-5wv7dgnIgG8@public.gmane.org,
Jean-Philippe.Brucker-5wv7dgnIgG8@public.gmane.org
Cc: mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
Marc.Zyngier-5wv7dgnIgG8@public.gmane.org,
tn-nYOzD4b6Jr9Wk0Htik3J/w@public.gmane.org,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: [RFC v2 4/4] iommu/arm-smmu-v3: add CMD_TLBI_NH_VA_AM command for iova range invalidation
Date: Fri, 11 Aug 2017 15:45:30 +0200 [thread overview]
Message-ID: <1502459130-6234-5-git-send-email-eric.auger@redhat.com> (raw)
In-Reply-To: <1502459130-6234-1-git-send-email-eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
When using a virtual SMMU and running the driver in TLBI_ON_MAP
mode we need invalidate large IOVA ranges. This typically happens
in DPDK use case where hugepages are used. In that case, invalidating
pages by page is really inefficient and we would need to invalidate
by iova range. Unfortunately there is no such command specified in the
SMMUv3 architecture spec. Let's add a new implementation defined command
that takes an address mask.
The CMD_TLBI_NH_VA_AM command format is inherited from CMD_TLBI_NH_VA's
one, replace the currently unused VMID field by the AM field.
Signed-off-by: Eric Auger <eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
drivers/iommu/arm-smmu-v3.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index a1c10af..9da2785 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -492,9 +492,15 @@ struct arm_smmu_cmdq_ent {
#define CMDQ_OP_TLBI_S12_VMALL 0x28
#define CMDQ_OP_TLBI_S2_IPA 0x2a
#define CMDQ_OP_TLBI_NSNH_ALL 0x30
+
+ /* vIOMMU ASID/IOVA Range Invalidation */
+ #define CMDQ_OP_TLBI_NH_VA_AM 0x8F
struct {
u16 asid;
- u16 vmid;
+ union {
+ u16 vmid;
+ u16 am; /* address mask */
+ };
bool leaf;
u64 addr;
} tlbi;
@@ -853,6 +859,12 @@ static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent)
cmd[1] |= ent->tlbi.leaf ? CMDQ_TLBI_1_LEAF : 0;
cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_VA_MASK;
break;
+ case CMDQ_OP_TLBI_NH_VA_AM:
+ cmd[0] |= (u64)ent->tlbi.asid << CMDQ_TLBI_0_ASID_SHIFT;
+ cmd[0] |= (u64)ent->tlbi.am << CMDQ_TLBI_0_VMID_SHIFT;
+ cmd[1] |= ent->tlbi.leaf ? CMDQ_TLBI_1_LEAF : 0;
+ cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_VA_MASK;
+ break;
case CMDQ_OP_TLBI_S2_IPA:
cmd[0] |= (u64)ent->tlbi.vmid << CMDQ_TLBI_0_VMID_SHIFT;
cmd[1] |= ent->tlbi.leaf ? CMDQ_TLBI_1_LEAF : 0;
@@ -1402,8 +1414,14 @@ static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
};
if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
- cmd.opcode = CMDQ_OP_TLBI_NH_VA;
cmd.tlbi.asid = smmu_domain->s1_cfg.cd.asid;
+ if (smmu->options & ARM_SMMU_OPT_TLBI_ON_MAP) {
+ cmd.opcode = CMDQ_OP_TLBI_NH_VA_AM;
+ cmd.tlbi.am = size >> 12;
+ granule = size;
+ } else {
+ cmd.opcode = CMDQ_OP_TLBI_NH_VA;
+ }
} else {
cmd.opcode = CMDQ_OP_TLBI_S2_IPA;
cmd.tlbi.vmid = smmu_domain->s2_cfg.vmid;
--
2.5.5
prev parent reply other threads:[~2017-08-11 13:45 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-11 13:45 [RFC v2 0/4] arm-smmu-v3 tlbi-on-map option Eric Auger
2017-08-11 13:45 ` [RFC v2 3/4] iommu/arm-smmu-v3: Add hypothetical caching mode model Eric Auger
[not found] ` <1502459130-6234-1-git-send-email-eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-11 13:45 ` [RFC v2 1/4] iommu/io-pgtable-arm: flush TLBs when IO_PGTABLE_QUIRK_TLBI_ON_MAP Eric Auger
2017-08-11 13:45 ` [RFC v2 2/4] iommu/arm-smmu-v3: Add tlbi_on_map option Eric Auger
2017-08-17 16:34 ` Will Deacon
[not found] ` <20170817163424.GC30719-5wv7dgnIgG8@public.gmane.org>
2017-08-17 17:47 ` Auger Eric
[not found] ` <d502e172-5e98-cbbb-6a72-db32c71006fc-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-18 2:54 ` Michael S. Tsirkin
[not found] ` <20170818055031-mutt-send-email-mst-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-18 6:50 ` Auger Eric
2017-08-18 2:49 ` Michael S. Tsirkin
2017-08-22 19:09 ` Michael S. Tsirkin
[not found] ` <20170822220457-mutt-send-email-mst-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-23 10:25 ` Will Deacon
2017-08-23 12:36 ` Auger Eric
[not found] ` <cc18b752-97fd-f95f-fdef-478adc06e505-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-23 14:12 ` Michael S. Tsirkin
2017-08-23 16:42 ` Will Deacon
[not found] ` <20170823164255.GB590-5wv7dgnIgG8@public.gmane.org>
2017-08-23 19:43 ` Michael S. Tsirkin
2017-08-24 7:09 ` Auger Eric
2017-10-05 15:14 ` Auger Eric
2017-08-23 14:05 ` Michael S. Tsirkin
2017-08-11 13:45 ` Eric Auger [this message]
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=1502459130-6234-5-git-send-email-eric.auger@redhat.com \
--to=eric.auger-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=Jean-Philippe.Brucker-5wv7dgnIgG8@public.gmane.org \
--cc=Marc.Zyngier-5wv7dgnIgG8@public.gmane.org \
--cc=Will.Deacon-5wv7dgnIgG8@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=robin.murphy-5wv7dgnIgG8@public.gmane.org \
--cc=tn-nYOzD4b6Jr9Wk0Htik3J/w@public.gmane.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;
as well as URLs for NNTP newsgroup(s).