diff mbox

[Xen-devel,RFC,2/2] xen/arm: introduce XENFEAT_grant_map_11

Message ID 1404834794-16055-2-git-send-email-stefano.stabellini@eu.citrix.com
State New
Headers show

Commit Message

Stefano Stabellini July 8, 2014, 3:53 p.m. UTC
The flag specifies that the hypervisor maps a grant page to guest
physical address == machine address of the page in addition to the
normal grant mapping address.

Frontends are allowed to map the same page multiple times using multiple
grant references. On the backend side it can be difficult to find out
the physical address corresponding to a particular machine address,
especially at the completation of a dma operation. To simplify address
translations, we introduce a second mapping of the grant at physical
address == machine address so that dom0 can issue cache maintenance
operations without having to find the pfn.

On ARM enable the flag and this behaviour by default if the domain is
directly mapped.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 xen/common/kernel.c               |    4 ++++
 xen/include/asm-arm/grant_table.h |    3 +--
 xen/include/public/features.h     |    3 +++
 3 files changed, 8 insertions(+), 2 deletions(-)

Comments

Ian Campbell July 16, 2014, 3:59 p.m. UTC | #1
On Tue, 2014-07-08 at 16:53 +0100, Stefano Stabellini wrote:
> +/* Xen also maps grant references at pfn = mfn */
> +#define XENFEAT_grant_map_11              12

David also mentioned this but "11" is not a very good rendering of 1:1.
I know we use this internally within both Xen and Linux but perhaps at
the hypercall API layer we could use "identity" or something instead?

It might be worth trying to include a word which implies "in addition to
the mapping you asked for" as well, for clarity.

> +
>  #define XENFEAT_NR_SUBMAPS 1
>  
>  #endif /* __XEN_PUBLIC_FEATURES_H__ */
Stefano Stabellini July 22, 2014, 2:36 p.m. UTC | #2
On Wed, 16 Jul 2014, Ian Campbell wrote:
> On Tue, 2014-07-08 at 16:53 +0100, Stefano Stabellini wrote:
> > +/* Xen also maps grant references at pfn = mfn */
> > +#define XENFEAT_grant_map_11              12
> 
> David also mentioned this but "11" is not a very good rendering of 1:1.
> I know we use this internally within both Xen and Linux but perhaps at
> the hypercall API layer we could use "identity" or something instead?

I am fine with XENFEAT_grant_map_identity.
I'll wait for Jan's review before reposting.


> It might be worth trying to include a word which implies "in addition to
> the mapping you asked for" as well, for clarity.
diff mbox

Patch

diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 7e83353..556ad14 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -325,6 +325,10 @@  DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
                 break;
             }
 #endif
+#ifdef CONFIG_ARM
+            if ( is_domain_direct_mapped(d) )
+                fi.submap |= 1U << XENFEAT_grant_map_11;
+#endif
             break;
         default:
             return -EINVAL;
diff --git a/xen/include/asm-arm/grant_table.h b/xen/include/asm-arm/grant_table.h
index eac8a70..91ba230 100644
--- a/xen/include/asm-arm/grant_table.h
+++ b/xen/include/asm-arm/grant_table.h
@@ -33,8 +33,7 @@  static inline int replace_grant_supported(void)
     ( ((i >= nr_grant_frames(d->grant_table)) &&                         \
      (i < max_nr_grant_frames)) ? 0 : (d->arch.grant_table_gpfn[i]))
 
-#define gnttab_need_iommu_mapping(d)                    \
-    (is_domain_direct_mapped(d) && need_iommu(d))
+#define gnttab_need_iommu_mapping(d)            (is_domain_direct_mapped(d))
 
 #endif /* __ASM_GRANT_TABLE_H__ */
 /*
diff --git a/xen/include/public/features.h b/xen/include/public/features.h
index a149aa6..95b87fd 100644
--- a/xen/include/public/features.h
+++ b/xen/include/public/features.h
@@ -94,6 +94,9 @@ 
 /* operation as Dom0 is supported */
 #define XENFEAT_dom0                      11
 
+/* Xen also maps grant references at pfn = mfn */
+#define XENFEAT_grant_map_11              12
+
 #define XENFEAT_NR_SUBMAPS 1
 
 #endif /* __XEN_PUBLIC_FEATURES_H__ */