* [RFC 1/2] iommu/io-pgtable-arm: flush TLBs when IO_PGTABLE_QUIRK_TLBI_ON_MAP
2017-07-09 15:15 ` Eric Auger
@ 2017-07-09 15:15 ` Eric Auger
-1 siblings, 0 replies; 19+ messages in thread
From: Eric Auger @ 2017-07-09 15:15 UTC (permalink / raw)
To: eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w,
eric.auger-H+wXaHxf7aLQT0dZR+AlfA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Will.Deacon-5wv7dgnIgG8,
robin.murphy-5wv7dgnIgG8, Jean-Philippe.Brucker-5wv7dgnIgG8
Cc: Marc.Zyngier-5wv7dgnIgG8, christoffer.dall-QSEj5FYQhm4dnm+yROfE0A,
mst-H+wXaHxf7aLQT0dZR+AlfA
This patch implements the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk for
LPAE page tables. It forces TLB invalidations on map.
Signed-off-by: Eric Auger <eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
drivers/iommu/io-pgtable-arm.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 6e5df5e..0ad10fc 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -395,6 +395,8 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
arm_lpae_iopte *ptep = data->pgd;
int ret, lvl = ARM_LPAE_START_LVL(data);
arm_lpae_iopte prot;
+ struct io_pgtable *iop = &data->iop;
+ struct io_pgtable_cfg *cfg = &data->iop.cfg;
/* If no access, then nothing to do */
if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE)))
@@ -402,6 +404,12 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
prot = arm_lpae_prot_to_pte(data, iommu_prot);
ret = __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep);
+
+ if (cfg->quirks & IO_PGTABLE_QUIRK_TLBI_ON_MAP) {
+ io_pgtable_tlb_add_flush(iop, iova, size,
+ ARM_LPAE_GRANULE(data), false);
+ io_pgtable_tlb_sync(iop);
+ }
/*
* Synchronise all PTE updates for the new mapping before there's
* a chance for anything to kick off a table walk for the new iova.
@@ -673,7 +681,8 @@ arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
u64 reg;
struct arm_lpae_io_pgtable *data;
- if (cfg->quirks & ~IO_PGTABLE_QUIRK_ARM_NS)
+ if (cfg->quirks &
+ ~(IO_PGTABLE_QUIRK_ARM_NS | IO_PGTABLE_QUIRK_TLBI_ON_MAP))
return NULL;
data = arm_lpae_alloc_pgtable(cfg);
@@ -762,7 +771,7 @@ arm_64_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie)
struct arm_lpae_io_pgtable *data;
/* The NS quirk doesn't apply at stage 2 */
- if (cfg->quirks)
+ if (cfg->quirks & ~(IO_PGTABLE_QUIRK_TLBI_ON_MAP))
return NULL;
data = arm_lpae_alloc_pgtable(cfg);
--
2.5.5
^ permalink raw reply related [flat|nested] 19+ messages in thread* [RFC 1/2] iommu/io-pgtable-arm: flush TLBs when IO_PGTABLE_QUIRK_TLBI_ON_MAP
@ 2017-07-09 15:15 ` Eric Auger
0 siblings, 0 replies; 19+ messages in thread
From: Eric Auger @ 2017-07-09 15:15 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, iommu, linux-kernel, Will.Deacon,
robin.murphy, Jean-Philippe.Brucker
Cc: christoffer.dall, Marc.Zyngier, alex.williamson, peterx, mst
This patch implements the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk for
LPAE page tables. It forces TLB invalidations on map.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
drivers/iommu/io-pgtable-arm.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 6e5df5e..0ad10fc 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -395,6 +395,8 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
arm_lpae_iopte *ptep = data->pgd;
int ret, lvl = ARM_LPAE_START_LVL(data);
arm_lpae_iopte prot;
+ struct io_pgtable *iop = &data->iop;
+ struct io_pgtable_cfg *cfg = &data->iop.cfg;
/* If no access, then nothing to do */
if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE)))
@@ -402,6 +404,12 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
prot = arm_lpae_prot_to_pte(data, iommu_prot);
ret = __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep);
+
+ if (cfg->quirks & IO_PGTABLE_QUIRK_TLBI_ON_MAP) {
+ io_pgtable_tlb_add_flush(iop, iova, size,
+ ARM_LPAE_GRANULE(data), false);
+ io_pgtable_tlb_sync(iop);
+ }
/*
* Synchronise all PTE updates for the new mapping before there's
* a chance for anything to kick off a table walk for the new iova.
@@ -673,7 +681,8 @@ arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
u64 reg;
struct arm_lpae_io_pgtable *data;
- if (cfg->quirks & ~IO_PGTABLE_QUIRK_ARM_NS)
+ if (cfg->quirks &
+ ~(IO_PGTABLE_QUIRK_ARM_NS | IO_PGTABLE_QUIRK_TLBI_ON_MAP))
return NULL;
data = arm_lpae_alloc_pgtable(cfg);
@@ -762,7 +771,7 @@ arm_64_lpae_alloc_pgtable_s2(struct io_pgtable_cfg *cfg, void *cookie)
struct arm_lpae_io_pgtable *data;
/* The NS quirk doesn't apply at stage 2 */
- if (cfg->quirks)
+ if (cfg->quirks & ~(IO_PGTABLE_QUIRK_TLBI_ON_MAP))
return NULL;
data = arm_lpae_alloc_pgtable(cfg);
--
2.5.5
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [RFC 2/2] arm-smmu-v3: Add tlbi_on_map option
2017-07-09 15:15 ` Eric Auger
@ 2017-07-09 15:15 ` Eric Auger
-1 siblings, 0 replies; 19+ messages in thread
From: Eric Auger @ 2017-07-09 15:15 UTC (permalink / raw)
To: eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w,
eric.auger-H+wXaHxf7aLQT0dZR+AlfA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Will.Deacon-5wv7dgnIgG8,
robin.murphy-5wv7dgnIgG8, Jean-Philippe.Brucker-5wv7dgnIgG8
Cc: Marc.Zyngier-5wv7dgnIgG8, christoffer.dall-QSEj5FYQhm4dnm+yROfE0A,
mst-H+wXaHxf7aLQT0dZR+AlfA
When running a virtual SMMU on a guest we sometimes need to trap
all changes to the translation structures. This is especially useful
to integrate with VFIO. This patch adds a new option that forces
the IO_PGTABLE_QUIRK_TLBI_ON_MAP to be applied on LPAE page tables.
TLBI commands then can be trapped.
Signed-off-by: Eric Auger <eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt | 4 ++++
drivers/iommu/arm-smmu-v3.c | 5 +++++
2 files changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
index be57550..a25337a 100644
--- a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
+++ b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
@@ -46,6 +46,10 @@ the PCIe specification.
devicetree/bindings/interrupt-controller/msi.txt
for a description of the msi-parent property.
+- tlbi-on-map : invalidate caches whenever there is an update of
+ any remapping structure (updates to not-present or
+ present entries).
+
- hisilicon,broken-prefetch-cmd
: Avoid sending CMD_PREFETCH_* commands to the SMMU.
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index 380969a..5003ff7 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -597,6 +597,7 @@ struct arm_smmu_device {
u32 features;
#define ARM_SMMU_OPT_SKIP_PREFETCH (1 << 0)
+#define ARM_SMMU_OPT_TLBI_ON_MAP (1 << 1)
u32 options;
struct arm_smmu_cmdq cmdq;
@@ -663,6 +664,7 @@ struct arm_smmu_option_prop {
static struct arm_smmu_option_prop arm_smmu_options[] = {
{ ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
+ { ARM_SMMU_OPT_TLBI_ON_MAP, "tlbi-on-map" },
{ 0, NULL},
};
@@ -1555,6 +1557,9 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
.iommu_dev = smmu->dev,
};
+ if (smmu->options & ARM_SMMU_OPT_TLBI_ON_MAP)
+ pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_TLBI_ON_MAP;
+
pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
if (!pgtbl_ops)
return -ENOMEM;
--
2.5.5
^ permalink raw reply related [flat|nested] 19+ messages in thread* [RFC 2/2] arm-smmu-v3: Add tlbi_on_map option
@ 2017-07-09 15:15 ` Eric Auger
0 siblings, 0 replies; 19+ messages in thread
From: Eric Auger @ 2017-07-09 15:15 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, iommu, linux-kernel, Will.Deacon,
robin.murphy, Jean-Philippe.Brucker
Cc: christoffer.dall, Marc.Zyngier, alex.williamson, peterx, mst
When running a virtual SMMU on a guest we sometimes need to trap
all changes to the translation structures. This is especially useful
to integrate with VFIO. This patch adds a new option that forces
the IO_PGTABLE_QUIRK_TLBI_ON_MAP to be applied on LPAE page tables.
TLBI commands then can be trapped.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt | 4 ++++
drivers/iommu/arm-smmu-v3.c | 5 +++++
2 files changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
index be57550..a25337a 100644
--- a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
+++ b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt
@@ -46,6 +46,10 @@ the PCIe specification.
devicetree/bindings/interrupt-controller/msi.txt
for a description of the msi-parent property.
+- tlbi-on-map : invalidate caches whenever there is an update of
+ any remapping structure (updates to not-present or
+ present entries).
+
- hisilicon,broken-prefetch-cmd
: Avoid sending CMD_PREFETCH_* commands to the SMMU.
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index 380969a..5003ff7 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -597,6 +597,7 @@ struct arm_smmu_device {
u32 features;
#define ARM_SMMU_OPT_SKIP_PREFETCH (1 << 0)
+#define ARM_SMMU_OPT_TLBI_ON_MAP (1 << 1)
u32 options;
struct arm_smmu_cmdq cmdq;
@@ -663,6 +664,7 @@ struct arm_smmu_option_prop {
static struct arm_smmu_option_prop arm_smmu_options[] = {
{ ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
+ { ARM_SMMU_OPT_TLBI_ON_MAP, "tlbi-on-map" },
{ 0, NULL},
};
@@ -1555,6 +1557,9 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
.iommu_dev = smmu->dev,
};
+ if (smmu->options & ARM_SMMU_OPT_TLBI_ON_MAP)
+ pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_TLBI_ON_MAP;
+
pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
if (!pgtbl_ops)
return -ENOMEM;
--
2.5.5
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
2017-07-09 15:15 ` Eric Auger
@ 2017-07-12 17:54 ` Will Deacon
-1 siblings, 0 replies; 19+ messages in thread
From: Will Deacon @ 2017-07-12 17:54 UTC (permalink / raw)
To: Eric Auger
Cc: mst-H+wXaHxf7aLQT0dZR+AlfA, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
Marc.Zyngier-5wv7dgnIgG8,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A,
eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w
Hi Eric,
On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
> This series adds a new tlbi-on-map option to the smmuv3 driver.
> When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
> LPAE tables and the smmuv3 driver sends TLB invalidations on map.
>
> This mode is useful when running the driver on a guest as it allows
> the virtualizer to trap any change to the translation structures.
> This is similar to the Intel vtd caching mode (CM).
>
> This is especially needed for VFIO integration integration where
> guest mappings must be applied to the physical IOMMU.
>
> At the moment the option only is available for DT probing.
I'm really not a fan of this approach. If a virtual IOMMU implementation is
advertising itself as an SMMUv3, then it should adhere to the SMMUv3
architecture and not require non-standard behaviour from the driver. If
we're going to allow that, then we're better off going the extra mile and
using a PV approach. Given that the the SMMU3 architecture does *not*
require TLBI on map, then I don't think we should be quirking our behaviour
in this way. The fact that you only have this implemented for DT is the
canary in the coal mine imo.
Will
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
@ 2017-07-12 17:54 ` Will Deacon
0 siblings, 0 replies; 19+ messages in thread
From: Will Deacon @ 2017-07-12 17:54 UTC (permalink / raw)
To: Eric Auger
Cc: eric.auger.pro, iommu, linux-kernel, robin.murphy,
Jean-Philippe.Brucker, christoffer.dall, Marc.Zyngier,
alex.williamson, peterx, mst
Hi Eric,
On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
> This series adds a new tlbi-on-map option to the smmuv3 driver.
> When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
> LPAE tables and the smmuv3 driver sends TLB invalidations on map.
>
> This mode is useful when running the driver on a guest as it allows
> the virtualizer to trap any change to the translation structures.
> This is similar to the Intel vtd caching mode (CM).
>
> This is especially needed for VFIO integration integration where
> guest mappings must be applied to the physical IOMMU.
>
> At the moment the option only is available for DT probing.
I'm really not a fan of this approach. If a virtual IOMMU implementation is
advertising itself as an SMMUv3, then it should adhere to the SMMUv3
architecture and not require non-standard behaviour from the driver. If
we're going to allow that, then we're better off going the extra mile and
using a PV approach. Given that the the SMMU3 architecture does *not*
require TLBI on map, then I don't think we should be quirking our behaviour
in this way. The fact that you only have this implemented for DT is the
canary in the coal mine imo.
Will
^ permalink raw reply [flat|nested] 19+ messages in thread
[parent not found: <20170712175454.GF15191-5wv7dgnIgG8@public.gmane.org>]
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
2017-07-12 17:54 ` Will Deacon
@ 2017-07-12 22:07 ` Michael S. Tsirkin
-1 siblings, 0 replies; 19+ messages in thread
From: Michael S. Tsirkin @ 2017-07-12 22:07 UTC (permalink / raw)
To: Will Deacon
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Marc.Zyngier-5wv7dgnIgG8, christoffer.dall-QSEj5FYQhm4dnm+yROfE0A,
eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w
On Wed, Jul 12, 2017 at 06:54:56PM +0100, Will Deacon wrote:
> Hi Eric,
>
> On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
> > This series adds a new tlbi-on-map option to the smmuv3 driver.
> > When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
> > LPAE tables and the smmuv3 driver sends TLB invalidations on map.
> >
> > This mode is useful when running the driver on a guest as it allows
> > the virtualizer to trap any change to the translation structures.
> > This is similar to the Intel vtd caching mode (CM).
> >
> > This is especially needed for VFIO integration integration where
> > guest mappings must be applied to the physical IOMMU.
> >
> > At the moment the option only is available for DT probing.
>
> I'm really not a fan of this approach. If a virtual IOMMU implementation is
> advertising itself as an SMMUv3, then it should adhere to the SMMUv3
> architecture and not require non-standard behaviour from the driver.
You can also just enable e.g. building existing intel VTD code on ARM,
that emulation is already there.
> If
> we're going to allow that, then we're better off going the extra mile and
> using a PV approach. Given that the the SMMU3 architecture does *not*
> require TLBI on map, then I don't think we should be quirking our behaviour
> in this way.
I think using hardware support for nesting is the right final
solution. It will take some time though. Given this, what should
we do meanwhile?
Assuming that's the final destination, a simple quirk like this
seems to be preferable to virtio-iommu which we'll never be
able to offload to hardware.
>The fact that you only have this implemented for DT is the
> canary in the coal mine imo.
>
> Will
As to the last point, I agree absolutely. Need to support ACPI
as well or nothing. It would be nicer IMHO to get it from some
kind of device register, assuming ARM can promise to reserve
some bits for hypervisors to play with.
--
MST
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
@ 2017-07-12 22:07 ` Michael S. Tsirkin
0 siblings, 0 replies; 19+ messages in thread
From: Michael S. Tsirkin @ 2017-07-12 22:07 UTC (permalink / raw)
To: Will Deacon
Cc: Eric Auger, eric.auger.pro, iommu, linux-kernel, robin.murphy,
Jean-Philippe.Brucker, christoffer.dall, Marc.Zyngier,
alex.williamson, peterx
On Wed, Jul 12, 2017 at 06:54:56PM +0100, Will Deacon wrote:
> Hi Eric,
>
> On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
> > This series adds a new tlbi-on-map option to the smmuv3 driver.
> > When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
> > LPAE tables and the smmuv3 driver sends TLB invalidations on map.
> >
> > This mode is useful when running the driver on a guest as it allows
> > the virtualizer to trap any change to the translation structures.
> > This is similar to the Intel vtd caching mode (CM).
> >
> > This is especially needed for VFIO integration integration where
> > guest mappings must be applied to the physical IOMMU.
> >
> > At the moment the option only is available for DT probing.
>
> I'm really not a fan of this approach. If a virtual IOMMU implementation is
> advertising itself as an SMMUv3, then it should adhere to the SMMUv3
> architecture and not require non-standard behaviour from the driver.
You can also just enable e.g. building existing intel VTD code on ARM,
that emulation is already there.
> If
> we're going to allow that, then we're better off going the extra mile and
> using a PV approach. Given that the the SMMU3 architecture does *not*
> require TLBI on map, then I don't think we should be quirking our behaviour
> in this way.
I think using hardware support for nesting is the right final
solution. It will take some time though. Given this, what should
we do meanwhile?
Assuming that's the final destination, a simple quirk like this
seems to be preferable to virtio-iommu which we'll never be
able to offload to hardware.
>The fact that you only have this implemented for DT is the
> canary in the coal mine imo.
>
> Will
As to the last point, I agree absolutely. Need to support ACPI
as well or nothing. It would be nicer IMHO to get it from some
kind of device register, assuming ARM can promise to reserve
some bits for hypervisors to play with.
--
MST
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
2017-07-12 22:07 ` Michael S. Tsirkin
(?)
@ 2017-07-13 9:29 ` Jean-Philippe Brucker
[not found] ` <fd71a432-0799-3c07-4071-c79bce20a561-5wv7dgnIgG8@public.gmane.org>
-1 siblings, 1 reply; 19+ messages in thread
From: Jean-Philippe Brucker @ 2017-07-13 9:29 UTC (permalink / raw)
To: Michael S. Tsirkin, Will Deacon
Cc: Eric Auger, eric.auger.pro, iommu, linux-kernel, robin.murphy,
christoffer.dall, Marc.Zyngier, alex.williamson, peterx
On 12/07/17 23:07, Michael S. Tsirkin wrote:
[...]
> I think using hardware support for nesting is the right final
> solution. It will take some time though. Given this, what should
> we do meanwhile?
>
> Assuming that's the final destination, a simple quirk like this
> seems to be preferable to virtio-iommu which we'll never be
> able to offload to hardware.
That's not entirely true. virtio-iommu will have an extension for hardware
nesting support. It was presented in my initial proposal, and I've made
significant progress since then.
Thanks,
Jean
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
2017-07-12 17:54 ` Will Deacon
@ 2017-07-26 14:41 ` Auger Eric
-1 siblings, 0 replies; 19+ messages in thread
From: Auger Eric @ 2017-07-26 14:41 UTC (permalink / raw)
To: Will Deacon
Cc: mst-H+wXaHxf7aLQT0dZR+AlfA, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
Marc.Zyngier-5wv7dgnIgG8,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A,
eric.auger.pro-Re5JQEeQqe8AvxtiuMwx3w
Hi Will, Michael,
On 12/07/2017 19:54, Will Deacon wrote:
> Hi Eric,
>
> On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
>> This series adds a new tlbi-on-map option to the smmuv3 driver.
>> When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
>> LPAE tables and the smmuv3 driver sends TLB invalidations on map.
>>
>> This mode is useful when running the driver on a guest as it allows
>> the virtualizer to trap any change to the translation structures.
>> This is similar to the Intel vtd caching mode (CM).
>>
>> This is especially needed for VFIO integration integration where
>> guest mappings must be applied to the physical IOMMU.
>>
>> At the moment the option only is available for DT probing.
>
> I'm really not a fan of this approach. If a virtual IOMMU implementation is
> advertising itself as an SMMUv3, then it should adhere to the SMMUv3
> architecture and not require non-standard behaviour from the driver. If
> we're going to allow that, then we're better off going the extra mile and
> using a PV approach. Given that the the SMMU3 architecture does *not*
> require TLBI on map, then I don't think we should be quirking our behaviour
> in this way. The fact that you only have this implemented for DT is the
> canary in the coal mine imo.
I did not proceed with ACPI integration as I focused on the QEMU
integration POC instead. I intended to propose a new model id just like
12275bf iommu/arm-smmu-v3, acpi: Add temporary Cavium SMMU-V3 IORT
model number definitions?
Is it really costly to maintain such a quirk (which by the way does the
same thing as Intel caching mode, unfortunately not in an HW specified
manner) compared to other quirks?
Having an smmu emulated device integrated with vfio can always be useful
for debugging purpose and also to compare perfs/functionality against
virtio-iommu solution. We said both solutions could co-exist, serving
different purposes. Now if you close the door to vfio integration,
emulated smmu just serves the purpose of guests using isolated virtio
devices which limits quite a lot its usage, somehow questioning the
efforts invested to develop/upstream it.
Besides, before any further decision, I need to complete the DPDK use
case enablement as I get a storm of page tlbi's although hugepages are
used. And this hasn't worked yet ...
Thanks
Eric
>
> Will
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [RFC 0/2] arm-smmu-v3 tlbi-on-map option
@ 2017-07-26 14:41 ` Auger Eric
0 siblings, 0 replies; 19+ messages in thread
From: Auger Eric @ 2017-07-26 14:41 UTC (permalink / raw)
To: Will Deacon
Cc: eric.auger.pro, iommu, linux-kernel, robin.murphy,
Jean-Philippe.Brucker, christoffer.dall, Marc.Zyngier,
alex.williamson, peterx, mst
Hi Will, Michael,
On 12/07/2017 19:54, Will Deacon wrote:
> Hi Eric,
>
> On Sun, Jul 09, 2017 at 05:15:01PM +0200, Eric Auger wrote:
>> This series adds a new tlbi-on-map option to the smmuv3 driver.
>> When set, the IO_PGTABLE_QUIRK_TLBI_ON_MAP quirk is applied for
>> LPAE tables and the smmuv3 driver sends TLB invalidations on map.
>>
>> This mode is useful when running the driver on a guest as it allows
>> the virtualizer to trap any change to the translation structures.
>> This is similar to the Intel vtd caching mode (CM).
>>
>> This is especially needed for VFIO integration integration where
>> guest mappings must be applied to the physical IOMMU.
>>
>> At the moment the option only is available for DT probing.
>
> I'm really not a fan of this approach. If a virtual IOMMU implementation is
> advertising itself as an SMMUv3, then it should adhere to the SMMUv3
> architecture and not require non-standard behaviour from the driver. If
> we're going to allow that, then we're better off going the extra mile and
> using a PV approach. Given that the the SMMU3 architecture does *not*
> require TLBI on map, then I don't think we should be quirking our behaviour
> in this way. The fact that you only have this implemented for DT is the
> canary in the coal mine imo.
I did not proceed with ACPI integration as I focused on the QEMU
integration POC instead. I intended to propose a new model id just like
12275bf iommu/arm-smmu-v3, acpi: Add temporary Cavium SMMU-V3 IORT
model number definitions?
Is it really costly to maintain such a quirk (which by the way does the
same thing as Intel caching mode, unfortunately not in an HW specified
manner) compared to other quirks?
Having an smmu emulated device integrated with vfio can always be useful
for debugging purpose and also to compare perfs/functionality against
virtio-iommu solution. We said both solutions could co-exist, serving
different purposes. Now if you close the door to vfio integration,
emulated smmu just serves the purpose of guests using isolated virtio
devices which limits quite a lot its usage, somehow questioning the
efforts invested to develop/upstream it.
Besides, before any further decision, I need to complete the DPDK use
case enablement as I get a storm of page tlbi's although hugepages are
used. And this hasn't worked yet ...
Thanks
Eric
>
> Will
>
^ permalink raw reply [flat|nested] 19+ messages in thread