From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Wei Liu" <wl@xen.org>, "Roger Pau Monné" <roger.pau@citrix.com>,
"George Dunlap" <george.dunlap@citrix.com>
Subject: [PATCH 12/16] x86/p2m: re-arrange {,__}put_gfn()
Date: Mon, 5 Jul 2021 18:12:49 +0200 [thread overview]
Message-ID: <61ea9272-c4ac-c2da-e1da-8b8930d85264@suse.com> (raw)
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
All explicit callers of __put_gfn() are in HVM-only code and hold a valid
P2M pointer in their hands. Move the paging_mode_translate() check out of
there into put_gfn(), renaming __put_gfn() and making its GFN parameter
type-safe.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1969,9 +1969,9 @@ int hvm_hap_nested_page_fault(paddr_t gp
* altp2m_list lock.
*/
if ( p2m != hostp2m )
- __put_gfn(p2m, gfn);
+ p2m_put_gfn(p2m, _gfn(gfn));
p2m_change_type_one(currd, gfn, p2m_ram_logdirty, p2m_ram_rw);
- __put_gfn(hostp2m, gfn);
+ p2m_put_gfn(hostp2m, _gfn(gfn));
goto out;
}
@@ -1993,8 +1993,8 @@ int hvm_hap_nested_page_fault(paddr_t gp
out_put_gfn:
if ( p2m != hostp2m )
- __put_gfn(p2m, gfn);
- __put_gfn(hostp2m, gfn);
+ p2m_put_gfn(p2m, _gfn(gfn));
+ p2m_put_gfn(hostp2m, _gfn(gfn));
out:
/*
* All of these are delayed until we exit, since we might
--- a/xen/arch/x86/mm/hap/nested_hap.c
+++ b/xen/arch/x86/mm/hap/nested_hap.c
@@ -167,7 +167,7 @@ nestedhap_walk_L0_p2m(struct p2m_domain
direct_mmio_out:
*L0_gpa = (mfn_x(mfn) << PAGE_SHIFT) + (L1_gpa & ~PAGE_MASK);
out:
- __put_gfn(p2m, L1_gpa >> PAGE_SHIFT);
+ p2m_put_gfn(p2m, gaddr_to_gfn(L1_gpa));
return rc;
}
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -333,21 +333,13 @@ mfn_t p2m_get_gfn_type_access(struct p2m
return mfn;
}
-#endif /* CONFIG_HVM */
-
-void __put_gfn(struct p2m_domain *p2m, unsigned long gfn)
+void p2m_put_gfn(struct p2m_domain *p2m, gfn_t gfn)
{
- if ( !p2m || !paging_mode_translate(p2m->domain) )
- /* Nothing to do in this case */
- return;
-
- ASSERT(gfn_locked_by_me(p2m, gfn));
+ ASSERT(gfn_locked_by_me(p2m, gfn_x(gfn)));
- gfn_unlock(p2m, gfn, 0);
+ gfn_unlock(p2m, gfn_x(gfn), 0);
}
-#ifdef CONFIG_HVM
-
/* Atomically look up a GFN and take a reference count on the backing page. */
struct page_info *p2m_get_page_from_gfn(
struct p2m_domain *p2m, gfn_t gfn,
@@ -2086,7 +2078,7 @@ int p2m_altp2m_propagate_change(struct d
else
{
/* At least 2 altp2m's impacted, so reset everything */
- __put_gfn(p2m, gfn_x(gfn));
+ p2m_put_gfn(p2m, gfn);
for ( i = 0; i < MAX_ALTP2M; i++ )
{
@@ -2110,7 +2102,7 @@ int p2m_altp2m_propagate_change(struct d
ret = rc;
}
- __put_gfn(p2m, gfn_x(gfn));
+ p2m_put_gfn(p2m, gfn);
}
altp2m_list_unlock(d);
@@ -2195,7 +2187,7 @@ void audit_p2m(struct domain *d,
* blow away the m2p entry. */
set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY);
}
- __put_gfn(p2m, gfn);
+ p2m_put_gfn(p2m, _gfn(gfn));
P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx\n",
mfn, gfn, mfn_x(p2mfn));
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -503,9 +503,16 @@ static inline mfn_t __nonnull(3) get_gfn
P2M_ALLOC | P2M_UNSHARE)
/* Will release the p2m_lock for this gfn entry. */
-void __put_gfn(struct p2m_domain *p2m, unsigned long gfn);
+void p2m_put_gfn(struct p2m_domain *p2m, gfn_t gfn);
-#define put_gfn(d, gfn) __put_gfn(p2m_get_hostp2m((d)), (gfn))
+static inline void put_gfn(struct domain *d, unsigned long gfn)
+{
+ if ( !paging_mode_translate(d) )
+ /* Nothing to do in this case */
+ return;
+
+ p2m_put_gfn(p2m_get_hostp2m(d), _gfn(gfn));
+}
/* The intent of the "unlocked" accessor is to have the caller not worry about
* put_gfn. They apply to very specific situations: debug printk's, dumps
next prev parent reply other threads:[~2021-07-05 16:13 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-05 16:03 [PATCH 00/16] x86/mm: large parts of P2M code and struct p2m_domain are HVM-only Jan Beulich
2021-07-05 16:05 ` Jan Beulich
2021-07-05 16:05 ` [PATCH 01/16] x86/P2M: rename p2m_remove_page() Jan Beulich
2022-02-04 21:54 ` George Dunlap
2022-02-07 9:20 ` Jan Beulich
2021-07-05 16:06 ` [PATCH 02/16] x86/P2M: introduce p2m_{add,remove}_page() Jan Beulich
2021-07-05 17:47 ` Paul Durrant
2021-07-06 7:05 ` Jan Beulich
2022-02-04 22:07 ` George Dunlap
2022-02-07 9:38 ` Jan Beulich
2022-02-07 15:49 ` George Dunlap
2021-07-05 16:06 ` [PATCH 03/16] x86/P2M: drop a few CONFIG_HVM Jan Beulich
2022-02-04 22:13 ` George Dunlap
2022-02-07 9:51 ` Jan Beulich
2021-07-05 16:07 ` [PATCH 04/16] x86/P2M: move map_domain_gfn() (again) Jan Beulich
2022-02-04 22:17 ` George Dunlap
2021-07-05 16:07 ` [PATCH 05/16] x86/mm: move guest_physmap_{add,remove}_page() Jan Beulich
2022-02-05 21:06 ` George Dunlap
2021-07-05 16:07 ` [PATCH 06/16] x86/mm: split set_identity_p2m_entry() into PV and HVM parts Jan Beulich
2022-02-05 21:09 ` George Dunlap
2021-07-05 16:09 ` [PATCH 07/16] x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table() are HVM-only Jan Beulich
2021-07-07 1:35 ` Tian, Kevin
2022-02-05 21:17 ` George Dunlap
2021-07-05 16:09 ` [PATCH 08/16] x86/P2M: PoD, altp2m, and nested-p2m " Jan Beulich
2022-02-05 21:29 ` George Dunlap
2022-02-07 10:11 ` Jan Beulich
2022-02-07 14:45 ` George Dunlap
2022-02-07 15:23 ` Jan Beulich
2021-07-05 16:10 ` [PATCH 09/16] x86/P2M: split out init/teardown functions Jan Beulich
2022-02-05 21:31 ` George Dunlap
2021-07-05 16:10 ` [PATCH 10/16] x86/P2M: p2m_get_page_from_gfn() is HVM-only Jan Beulich
2022-02-14 14:26 ` George Dunlap
2021-07-05 16:12 ` [PATCH 11/16] x86/P2M: derive a HVM-only variant from __get_gfn_type_access() Jan Beulich
2022-02-14 15:12 ` George Dunlap
2022-02-14 15:20 ` Jan Beulich
2021-07-05 16:12 ` Jan Beulich [this message]
2022-02-14 15:17 ` [PATCH 12/16] x86/p2m: re-arrange {,__}put_gfn() George Dunlap
2021-07-05 16:13 ` [PATCH 13/16] shr_pages field is MEM_SHARING-only Jan Beulich
2021-07-06 12:42 ` Tamas K Lengyel
2022-02-14 15:36 ` George Dunlap
2021-07-05 16:14 ` [PATCH 14/16] paged_pages field is MEM_PAGING-only Jan Beulich
2021-07-06 12:44 ` Tamas K Lengyel
2022-02-14 15:38 ` George Dunlap
2021-07-05 16:14 ` [PATCH 15/16] x86/P2M: p2m.c is HVM-only Jan Beulich
2022-02-14 15:39 ` George Dunlap
2021-07-05 16:15 ` [PATCH 16/16] x86/P2M: the majority for struct p2m_domain's fields are HVM-only Jan Beulich
2021-07-05 17:49 ` Paul Durrant
2022-02-14 15:51 ` George Dunlap
2022-02-14 16:07 ` Jan Beulich
2022-02-16 7:54 ` 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=61ea9272-c4ac-c2da-e1da-8b8930d85264@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--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 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.