From: Jan Beulich <jbeulich@suse.com>
To: xen-devel@lists.xenproject.org
Cc: "Hongyan Xia" <hx242@xen.org>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
julien@xen.org, "Wei Liu" <wl@xen.org>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH 2/2] x86: drop high compat r/o M2P table address range
Date: Wed, 15 Apr 2020 10:23:58 +0200 [thread overview]
Message-ID: <520c95ba-f9d0-4260-5426-b450c2310c3c@suse.com> (raw)
In-Reply-To: <fc61fd42-0e09-0f13-bccb-ba0202d936ca@suse.com>
Now that we don't properly hook things up into the page tables anymore
we also don't need to set aside an address range. Drop it, using
compat_idle_pg_table_l2[] simply (explicitly) from slot 0.
While doing the re-arrangement, which is accompanied by the dropping or
replacing of some local variables, restrict the scopes of some further
ones at the same time.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
TBD: With the changed usage perhaps we want to also rename
compat_idle_pg_table_l2[] (to e.g. compat_idle_l2_entries[])?
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -1454,8 +1454,7 @@ static bool pae_xen_mappings_check(const
void init_xen_pae_l2_slots(l2_pgentry_t *l2t, const struct domain *d)
{
memcpy(&l2t[COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(d)],
- &compat_idle_pg_table_l2[
- l2_table_offset(HIRO_COMPAT_MPT_VIRT_START)],
+ compat_idle_pg_table_l2,
COMPAT_L2_PAGETABLE_XEN_SLOTS(d) * sizeof(*l2t));
}
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -217,9 +217,7 @@ static int share_hotadd_m2p_table(struct
static void destroy_compat_m2p_mapping(struct mem_hotadd_info *info)
{
- unsigned long i, va, rwva, pt_pfn;
- unsigned long smap = info->spfn, emap = info->spfn;
- l2_pgentry_t *l2_ro_mpt = compat_idle_pg_table_l2;
+ unsigned long i, smap = info->spfn, emap = info->spfn;
if ( smap > ((RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) >> 2) )
return;
@@ -229,18 +227,19 @@ static void destroy_compat_m2p_mapping(s
for ( i = smap; i < emap; )
{
- va = HIRO_COMPAT_MPT_VIRT_START +
- i * sizeof(*compat_machine_to_phys_mapping);
- rwva = RDWR_COMPAT_MPT_VIRT_START +
- i * sizeof(*compat_machine_to_phys_mapping);
- if ( l2e_get_flags(l2_ro_mpt[l2_table_offset(va)]) & _PAGE_PRESENT )
+ unsigned int off = i * sizeof(*compat_machine_to_phys_mapping);
+ l2_pgentry_t *pl2e = compat_idle_pg_table_l2 + l2_table_offset(off);
+
+ if ( l2e_get_flags(*pl2e) & _PAGE_PRESENT )
{
- pt_pfn = l2e_get_pfn(l2_ro_mpt[l2_table_offset(va)]);
+ unsigned long pt_pfn = l2e_get_pfn(*pl2e);
+
if ( hotadd_mem_valid(pt_pfn, info) )
{
- destroy_xen_mappings(rwva, rwva +
- (1UL << L2_PAGETABLE_SHIFT));
- l2e_write(&l2_ro_mpt[l2_table_offset(va)], l2e_empty());
+ unsigned long rwva = RDWR_COMPAT_MPT_VIRT_START + off;
+
+ destroy_xen_mappings(rwva, rwva + (1UL << L2_PAGETABLE_SHIFT));
+ l2e_write(pl2e, l2e_empty());
}
}
@@ -312,10 +311,9 @@ static void destroy_m2p_mapping(struct m
*/
static int setup_compat_m2p_table(struct mem_hotadd_info *info)
{
- unsigned long i, va, smap, emap, rwva, epfn = info->epfn;
+ unsigned long i, smap, emap, epfn = info->epfn;
mfn_t mfn;
unsigned int n;
- l2_pgentry_t *l2_ro_mpt = NULL;
int err = 0;
smap = info->spfn & (~((1UL << (L2_PAGETABLE_SHIFT - 2)) -1));
@@ -333,8 +331,6 @@ static int setup_compat_m2p_table(struct
emap = ( (epfn + ((1UL << (L2_PAGETABLE_SHIFT - 2)) - 1 )) &
~((1UL << (L2_PAGETABLE_SHIFT - 2)) - 1) );
- l2_ro_mpt = compat_idle_pg_table_l2;
-
#define MFN(x) (((x) << L2_PAGETABLE_SHIFT) / sizeof(unsigned int))
#define CNT ((sizeof(*frame_table) & -sizeof(*frame_table)) / \
sizeof(*compat_machine_to_phys_mapping))
@@ -343,13 +339,11 @@ static int setup_compat_m2p_table(struct
for ( i = smap; i < emap; i += (1UL << (L2_PAGETABLE_SHIFT - 2)) )
{
- va = HIRO_COMPAT_MPT_VIRT_START +
- i * sizeof(*compat_machine_to_phys_mapping);
-
- rwva = RDWR_COMPAT_MPT_VIRT_START +
- i * sizeof(*compat_machine_to_phys_mapping);
+ unsigned int off = i * sizeof(*compat_machine_to_phys_mapping);
+ l2_pgentry_t *pl2e = compat_idle_pg_table_l2 + l2_table_offset(off);
+ unsigned long rwva = RDWR_COMPAT_MPT_VIRT_START + off;
- if (l2e_get_flags(l2_ro_mpt[l2_table_offset(va)]) & _PAGE_PRESENT)
+ if ( l2e_get_flags(*pl2e) & _PAGE_PRESENT )
continue;
for ( n = 0; n < CNT; ++n)
@@ -366,8 +360,7 @@ static int setup_compat_m2p_table(struct
/* Fill with INVALID_M2P_ENTRY. */
memset((void *)rwva, 0xFF, 1UL << L2_PAGETABLE_SHIFT);
/* NB. Cannot be GLOBAL as the ptes get copied into per-VM space. */
- l2e_write(&l2_ro_mpt[l2_table_offset(va)],
- l2e_from_mfn(mfn, _PAGE_PSE|_PAGE_PRESENT));
+ l2e_write(pl2e, l2e_from_mfn(mfn, _PAGE_PSE|_PAGE_PRESENT));
}
#undef CNT
#undef MFN
@@ -616,7 +609,6 @@ void __init paging_init(void)
goto nomem;
compat_idle_pg_table_l2 = l2_ro_mpt;
clear_page(l2_ro_mpt);
- l2_ro_mpt += l2_table_offset(HIRO_COMPAT_MPT_VIRT_START);
/* Allocate and map the compatibility mode machine-to-phys table. */
mpt_size = (mpt_size >> 1) + (1UL << (L2_PAGETABLE_SHIFT - 1));
if ( mpt_size > RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START )
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -215,11 +215,8 @@ extern unsigned char boot_edid_info[128]
/* Slot 261: compatibility machine-to-phys conversion table (1GB). */
#define RDWR_COMPAT_MPT_VIRT_START VMAP_VIRT_END
#define RDWR_COMPAT_MPT_VIRT_END (RDWR_COMPAT_MPT_VIRT_START + GB(1))
-/* Slot 261: high read-only compat machine-to-phys conversion table (1GB). */
-#define HIRO_COMPAT_MPT_VIRT_START RDWR_COMPAT_MPT_VIRT_END
-#define HIRO_COMPAT_MPT_VIRT_END (HIRO_COMPAT_MPT_VIRT_START + GB(1))
/* Slot 261: xen text, static data, bss, per-cpu stubs and executable fixmap (1GB). */
-#define XEN_VIRT_START (HIRO_COMPAT_MPT_VIRT_END)
+#define XEN_VIRT_START RDWR_COMPAT_MPT_VIRT_END
#define XEN_VIRT_END (XEN_VIRT_START + GB(1))
#ifndef CONFIG_BIGMEM
next prev parent reply other threads:[~2020-04-15 8:24 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-08 13:36 [PATCH v2 0/5] use new API for Xen page tables Hongyan Xia
2020-04-08 13:36 ` [PATCH v2 1/5] x86/shim: map and unmap page tables in replace_va_mapping Hongyan Xia
2020-04-09 9:42 ` Jan Beulich
2020-04-14 16:53 ` Hongyan Xia
2020-04-15 6:13 ` Jan Beulich
2020-04-08 13:36 ` [PATCH v2 2/5] x86_64/mm: map and unmap page tables in m2p_mapped Hongyan Xia
2020-04-15 7:54 ` Jan Beulich
2020-04-08 13:36 ` [PATCH v2 3/5] x86_64/mm: map and unmap page tables in share_hotadd_m2p_table Hongyan Xia
2020-04-15 7:55 ` Jan Beulich
2020-04-08 13:36 ` [PATCH v2 4/5] x86_64/mm: map and unmap page tables in destroy_compat_m2p_mapping Hongyan Xia
2020-04-15 8:21 ` [PATCH 0/2] x86: high compat r/o M2P table handling adjustments Jan Beulich
2020-04-15 8:23 ` [PATCH 1/2] x86: drop unnecessary page table walking in compat r/o M2P handling Jan Beulich
2020-04-15 9:59 ` Hongyan Xia
2020-04-15 10:34 ` Jan Beulich
2020-04-15 10:50 ` Hongyan Xia
2020-04-15 11:16 ` Wei Liu
2020-04-15 8:23 ` Jan Beulich [this message]
2020-04-27 19:52 ` [PATCH 2/2] x86: drop high compat r/o M2P table address range Wei Liu
2020-04-28 6:14 ` [PATCH 0/2] x86: high compat r/o M2P table handling adjustments Jan Beulich
2020-04-15 8:25 ` [PATCH v2 4/5] x86_64/mm: map and unmap page tables in destroy_compat_m2p_mapping Jan Beulich
2020-04-08 13:36 ` [PATCH v2 5/5] x86_64/mm: map and unmap page tables in destroy_m2p_mapping Hongyan Xia
2020-04-15 8:32 ` Jan Beulich
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=520c95ba-f9d0-4260-5426-b450c2310c3c@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=hx242@xen.org \
--cc=julien@xen.org \
--cc=roger.pau@citrix.com \
--cc=wl@xen.org \
--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 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).