From: Elias El Yandouzi <eliasely@amazon.com>
To: <xen-devel@lists.xenproject.org>
Cc: <julien@xen.org>, <pdurrant@amazon.com>, <dwmw@amazon.com>,
Julien Grall <jgrall@amazon.com>,
Elias El Yandouzi <eliasely@amazon.com>
Subject: [PATCH V4 06/15] xen/x86: Add support for the PMAP
Date: Mon, 11 Nov 2024 13:11:39 +0000 [thread overview]
Message-ID: <20241111131148.52568-7-eliasely@amazon.com> (raw)
In-Reply-To: <20241111131148.52568-1-eliasely@amazon.com>
From: Julien Grall <jgrall@amazon.com>
PMAP will be used in a follow-up patch to bootstrap map domain
page infrastructure -- we need some way to map pages to setup the
mapcache without a direct map.
The functions pmap_{map, unmap} open code {set, clear}_fixmap to break
the loop.
Signed-off-by: Julien Grall <jgrall@amazon.com>
Signed-off-by: Elias El Yandouzi <eliasely@amazon.com>
----
The PMAP infrastructure was upstream separately for Arm since
Hongyan sent the secret-free hypervisor series. So this is a new
patch to plumb the feature on x86.
Changes in v4:
* Select PMAP KConfig option iff ONDEMAND_DIRECTMAP is used
Changes in v2:
* Declare PMAP entries earlier in fixed_addresses
* Reword the commit message
diff --git a/xen/arch/x86/include/asm/fixmap.h b/xen/arch/x86/include/asm/fixmap.h
index 516ec3fa6c95..80b7b74fd816 100644
--- a/xen/arch/x86/include/asm/fixmap.h
+++ b/xen/arch/x86/include/asm/fixmap.h
@@ -21,6 +21,8 @@
#include <xen/acpi.h>
#include <xen/pfn.h>
+#include <xen/pmap.h>
+
#include <asm/apicdef.h>
#include <asm/msi.h>
#include <acpi/apei.h>
@@ -53,6 +55,10 @@ enum fixed_addresses {
FIX_PV_CONSOLE,
FIX_XEN_SHARED_INFO,
#endif /* CONFIG_XEN_GUEST */
+#ifdef CONFIG_HAS_PMAP
+ FIX_PMAP_BEGIN,
+ FIX_PMAP_END = FIX_PMAP_BEGIN + NUM_FIX_PMAP,
+#endif
/* Everything else should go further down. */
FIX_APIC_BASE,
FIX_IO_APIC_BASE_0,
diff --git a/xen/arch/x86/include/asm/pmap.h b/xen/arch/x86/include/asm/pmap.h
new file mode 100644
index 000000000000..1b3b729b90b2
--- /dev/null
+++ b/xen/arch/x86/include/asm/pmap.h
@@ -0,0 +1,35 @@
+#ifndef __ASM_PMAP_H__
+#define __ASM_PMAP_H__
+
+#include <asm/fixmap.h>
+
+static inline void arch_pmap_map(unsigned int slot, mfn_t mfn)
+{
+ unsigned long linear = (unsigned long)fix_to_virt(slot);
+ l1_pgentry_t *pl1e = &l1_fixmap[l1_table_offset(linear)];
+
+ BUILD_BUG_ON(FIX_APIC_BASE - 1 > L1_PAGETABLE_ENTRIES - 1);
+ ASSERT(!(l1e_get_flags(*pl1e) & _PAGE_PRESENT));
+
+ l1e_write(pl1e, l1e_from_mfn(mfn, PAGE_HYPERVISOR));
+}
+
+static inline void arch_pmap_unmap(unsigned int slot)
+{
+ unsigned long linear = (unsigned long)fix_to_virt(slot);
+ l1_pgentry_t *pl1e = &l1_fixmap[l1_table_offset(linear)];
+
+ l1e_write(pl1e, l1e_empty());
+ flush_tlb_one_local(linear);
+}
+
+#endif /* __ASM_PMAP_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 72094c491756..2a6c33493927 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -421,6 +421,7 @@ config CRYPTO
config ONDEMAND_DIRECTMAP
bool "On-Demand Directmap"
depends on HAS_ONDEMAND_DIRECTMAP
+ select HAS_PMAP
help
The directmap contains mapping for most of the RAM, making domain
memory easily accessible. While this can improve performance, it also
--
2.40.1
next prev parent reply other threads:[~2024-11-11 13:12 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-11 13:11 [PATCH V4 00/15] Remove the directmap Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 01/15] x86: Create per-domain mapping for guest_root_pt Elias El Yandouzi
2024-12-16 16:01 ` Alejandro Vallejo
2024-11-11 13:11 ` [PATCH V4 02/15] x86/pv: Use copy_domain_page() to manage domheap pages during initrd relocation Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 03/15] x86/pv: Rewrite how building PV dom0 handles domheap mappings Elias El Yandouzi
2024-12-09 17:42 ` Alejandro Vallejo
2024-11-11 13:11 ` [PATCH V4 04/15] x86: Initialize mapcache for PV, HVM, and idle domains Elias El Yandouzi
2024-11-11 18:46 ` Andrew Cooper
2024-11-11 13:11 ` [PATCH V4 05/15] x86: Add a boot option to enable and disable the direct map Elias El Yandouzi
2024-11-11 13:11 ` Elias El Yandouzi [this message]
2024-11-11 13:11 ` [PATCH V4 07/15] x86/domain_page: Remove the fast paths when mfn is not in the directmap Elias El Yandouzi
2024-11-18 18:08 ` Alejandro Vallejo
2024-11-19 7:55 ` Jan Beulich
2024-11-11 13:11 ` [PATCH V4 08/15] xen/page_alloc: Add a path for xenheap when there is no direct map Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 09/15] x86/setup: Leave early boot slightly earlier Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 10/15] xen/page_alloc: vmap heap nodes when they are outside the direct map Elias El Yandouzi
2024-12-13 13:46 ` Alejandro Vallejo
2024-12-13 14:59 ` Alejandro Vallejo
2024-11-11 13:11 ` [PATCH V4 11/15] x86/setup: Do not create valid mappings when directmap=no Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 12/15] xen/arm32: mm: Rename 'first' to 'root' in init_secondary_pagetables() Elias El Yandouzi
2024-11-21 10:34 ` Michal Orzel
2024-11-11 13:11 ` [PATCH V4 13/15] xen/arm64: mm: Use per-pCPU page-tables Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 14/15] xen/arm64: Implement a mapcache for arm64 Elias El Yandouzi
2024-11-11 13:11 ` [PATCH V4 15/15] xen/arm64: Allow the admin to enable/disable the directmap Elias El Yandouzi
2024-11-11 19:03 ` [PATCH V4 00/15] Remove " Andrew Cooper
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=20241111131148.52568-7-eliasely@amazon.com \
--to=eliasely@amazon.com \
--cc=dwmw@amazon.com \
--cc=jgrall@amazon.com \
--cc=julien@xen.org \
--cc=pdurrant@amazon.com \
--cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.