[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen: introduce XENFEAT_direct_mapped and XENFEAT_not_direct_mapped



commit d66bf122c0ab79063a607d6cf68edf5e91d17d5e
Author:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
AuthorDate: Fri Mar 12 15:16:32 2021 -0800
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Thu Apr 1 17:12:05 2021 +0100

    xen: introduce XENFEAT_direct_mapped and XENFEAT_not_direct_mapped
    
    Introduce two feature flags to tell the domain whether it is
    direct-mapped or not. It allows the guest kernel to make informed
    decisions on things such as swiotlb-xen enablement.
    
    The introduction of both flags (XENFEAT_direct_mapped and
    XENFEAT_not_direct_mapped) allows the guest kernel to avoid any
    guesswork if one of the two is present, or fallback to the current
    checks if neither of them is present.
    
    XENFEAT_direct_mapped is always set for not auto-translated guests.
    
    For auto-translated guests, only Dom0 on ARM is direct-mapped. Also,
    see is_domain_direct_mapped() which refers to auto-translated guests:
    xen/include/asm-arm/domain.h:is_domain_direct_mapped
    xen/include/asm-x86/domain.h:is_domain_direct_mapped
    
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
    Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    
    CC: jbeulich@xxxxxxxx
    CC: andrew.cooper3@xxxxxxxxxx
    CC: julien@xxxxxxx
---
 xen/common/kernel.c           |  4 ++++
 xen/include/public/features.h | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 7a345ae45e..d77756a81e 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -560,6 +560,10 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
                              (1U << XENFEAT_hvm_callback_vector) |
                              (has_pirq(d) ? (1U << XENFEAT_hvm_pirqs) : 0);
 #endif
+            if ( !paging_mode_translate(d) || is_domain_direct_mapped(d) )
+                fi.submap |= (1U << XENFEAT_direct_mapped);
+            else
+                fi.submap |= (1U << XENFEAT_not_direct_mapped);
             break;
         default:
             return -EINVAL;
diff --git a/xen/include/public/features.h b/xen/include/public/features.h
index 1613b2aab8..9ee2f760ef 100644
--- a/xen/include/public/features.h
+++ b/xen/include/public/features.h
@@ -114,6 +114,20 @@
  */
 #define XENFEAT_linux_rsdp_unrestricted   15
 
+/*
+ * A direct-mapped (or 1:1 mapped) domain is a domain for which its
+ * local pages have gfn == mfn. If a domain is direct-mapped,
+ * XENFEAT_direct_mapped is set; otherwise XENFEAT_not_direct_mapped
+ * is set.
+ *
+ * If neither flag is set (e.g. older Xen releases) the assumptions are:
+ * - not auto_translated domains (x86 only) are always direct-mapped
+ * - on x86, auto_translated domains are not direct-mapped
+ * - on ARM, Dom0 is direct-mapped, DomUs are not
+ */
+#define XENFEAT_not_direct_mapped         16
+#define XENFEAT_direct_mapped             17
+
 #define XENFEAT_NR_SUBMAPS 1
 
 #endif /* __XEN_PUBLIC_FEATURES_H__ */
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.