From: Julien Grall <julien.grall@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Julien Grall <julien.grall@arm.com>, sstabellini@kernel.org
Subject: [PATCH 06/15] xen/arm: Rework lpae_mapping
Date: Mon, 16 Jul 2018 18:27:03 +0100 [thread overview]
Message-ID: <20180716172712.20294-7-julien.grall@arm.com> (raw)
In-Reply-To: <20180716172712.20294-1-julien.grall@arm.com>
Currently, lpae_mapping can only work on entry from any level other than
3. Make it work with any level by extending the prototype to pass the
level.
At the same time, rename the function to lpae_is_mapping so naming stay
consistent accross lpae_* helpers.
Signed-off-by: Julien Grall <julien.grall@arm.com>
---
xen/arch/arm/p2m.c | 12 +++++++-----
xen/include/asm-arm/lpae.h | 13 +++++++++----
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index ebf74760fa..72a84a33fd 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -241,7 +241,8 @@ static int p2m_create_table(struct p2m_domain *p2m, lpae_t *entry);
* GUEST_TABLE_SUPER_PAGE: The next entry points to a superpage.
*/
static int p2m_next_level(struct p2m_domain *p2m, bool read_only,
- lpae_t **table, unsigned int offset)
+ unsigned int level, lpae_t **table,
+ unsigned int offset)
{
lpae_t *entry;
int ret;
@@ -260,7 +261,8 @@ static int p2m_next_level(struct p2m_domain *p2m, bool read_only,
}
/* The function p2m_next_level is never called at the 3rd level */
- if ( lpae_mapping(*entry) )
+ ASSERT(level < 3);
+ if ( lpae_is_mapping(*entry, level) )
return GUEST_TABLE_SUPER_PAGE;
mfn = _mfn(entry->p2m.base);
@@ -331,7 +333,7 @@ mfn_t p2m_get_entry(struct p2m_domain *p2m, gfn_t gfn,
for ( level = P2M_ROOT_LEVEL; level < 3; level++ )
{
- rc = p2m_next_level(p2m, true, &table, offsets[level]);
+ rc = p2m_next_level(p2m, true, level, &table, offsets[level]);
if ( rc == GUEST_TABLE_MAP_FAILED )
goto out_unmap;
else if ( rc != GUEST_TABLE_NORMAL_PAGE )
@@ -804,7 +806,7 @@ static int __p2m_set_entry(struct p2m_domain *p2m,
* is about to be removed (i.e mfn == INVALID_MFN).
*/
rc = p2m_next_level(p2m, mfn_eq(smfn, INVALID_MFN),
- &table, offsets[level]);
+ level, &table, offsets[level]);
if ( rc == GUEST_TABLE_MAP_FAILED )
{
/*
@@ -861,7 +863,7 @@ static int __p2m_set_entry(struct p2m_domain *p2m,
/* then move to the level we want to make real changes */
for ( ; level < target; level++ )
{
- rc = p2m_next_level(p2m, true, &table, offsets[level]);
+ rc = p2m_next_level(p2m, true, level, &table, offsets[level]);
/*
* The entry should be found and either be a table
diff --git a/xen/include/asm-arm/lpae.h b/xen/include/asm-arm/lpae.h
index b30853e79d..4cf188ff82 100644
--- a/xen/include/asm-arm/lpae.h
+++ b/xen/include/asm-arm/lpae.h
@@ -134,7 +134,7 @@ static inline bool lpae_valid(lpae_t pte)
}
/*
- * These two can only be used on L0..L2 ptes because L3 mappings set
+ * This one can only be used on L0..L2 ptes because L3 mappings set
* the table bit and therefore these would return the opposite to what
* you would expect.
*/
@@ -143,14 +143,19 @@ static inline bool lpae_table(lpae_t pte)
return lpae_valid(pte) && pte.walk.table;
}
-static inline bool lpae_mapping(lpae_t pte)
+static inline bool lpae_is_mapping(lpae_t pte, unsigned int level)
{
- return lpae_valid(pte) && !pte.walk.table;
+ if ( !lpae_valid(pte) )
+ return false;
+ else if ( level == 3 )
+ return pte.walk.table;
+ else
+ return !pte.walk.table;
}
static inline bool lpae_is_superpage(lpae_t pte, unsigned int level)
{
- return (level < 3) && lpae_mapping(pte);
+ return (level < 3) && lpae_is_mapping(pte, level);
}
static inline bool lpae_is_page(lpae_t pte, unsigned int level)
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-07-16 17:27 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-16 17:26 [PATCH 00/15] xen/arm: Bunch of clean-up/improvement Julien Grall
2018-07-16 17:26 ` [PATCH 01/15] xen/arm: cpregs: Allow HSR_CPREG* to receive more than 1 parameter Julien Grall
2018-08-14 21:47 ` Stefano Stabellini
2018-07-16 17:26 ` [PATCH 02/15] xen/arm: cpregs: Fix typo in the documentation of TTBCR Julien Grall
2018-08-14 20:39 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 03/15] xen/arm: Introduce helpers to clear/flags flags in HCR_EL2 Julien Grall
2018-08-14 20:46 ` Stefano Stabellini
2018-08-14 21:23 ` Julien Grall
2018-08-14 21:49 ` Stefano Stabellini
2018-08-14 22:53 ` Julien Grall
2018-08-14 23:03 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 04/15] xen/arm: p2m: Reduce the locking section in get_page_from_gva Julien Grall
2018-08-14 20:49 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 05/15] xen/arm: p2m: Limit call to mem access code use " Julien Grall
2018-07-17 9:54 ` Razvan Cojocaru
2018-08-14 20:59 ` Stefano Stabellini
2018-07-16 17:27 ` Julien Grall [this message]
2018-08-14 21:04 ` [PATCH 06/15] xen/arm: Rework lpae_mapping Stefano Stabellini
2018-07-16 17:27 ` [PATCH 07/15] xen/arm: Rework lpae_table Julien Grall
2018-08-14 21:07 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 08/15] xen/arm: Rename lpae_valid to lpae_is_valid Julien Grall
2018-08-14 21:09 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 09/15] xen/arm: guest_walk: Use lpae_is_mapping to simplify the code Julien Grall
2018-08-14 21:14 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 10/15] xen/arm: Introduce helpers to get/set an MFN from/to an LPAE entry Julien Grall
2018-08-14 21:25 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 11/15] xen/arm: Allow lpae_is_{table, mapping} helpers to work on invalid entry Julien Grall
2018-08-14 21:33 ` Stefano Stabellini
2018-08-14 22:51 ` Julien Grall
2018-08-15 19:13 ` Stefano Stabellini
2018-08-16 8:51 ` Julien Grall
2018-07-16 17:27 ` [PATCH 12/15] xen/arm: p2m: Rename ret to mfn in p2m_lookup Julien Grall
2018-08-14 21:35 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 13/15] xen/arm: p2m: Introduce a new variable removing_mapping in __p2m_set_entry Julien Grall
2018-08-14 21:37 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 14/15] xen/arm: guest_walk_tables: Switch the return to bool Julien Grall
2018-08-14 21:41 ` Stefano Stabellini
2018-07-16 17:27 ` [PATCH 15/15] xen/arm: traps: Move the implementation of GUEST_BUG_ON in traps.h Julien Grall
2018-08-14 21:43 ` Stefano Stabellini
2018-08-16 8:54 ` Julien Grall
2018-08-16 18:17 ` Stefano Stabellini
2018-08-20 9:17 ` Julien Grall
2018-08-20 22:02 ` Stefano Stabellini
2018-07-23 17:12 ` [PATCH 00/15] xen/arm: Bunch of clean-up/improvement Julien Grall
2018-08-22 15:45 ` Julien Grall
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=20180716172712.20294-7-julien.grall@arm.com \
--to=julien.grall@arm.com \
--cc=sstabellini@kernel.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).