x86/p2m: guard altp2m routines

Initialize and bring down altp2m only when it is supported by the platform,
e.g. VMX. Also guard p2m_altp2m_propagate_change().
The purpose of that is the possibility to disable altp2m support and exclude its
code from the build completely, when it's not supported by the target platform.

Here hvm_altp2m_supported() is being used to check for ALTP2M availability,
which is only defined if HVM enabled, so a stub for that routine added for
!HVM configuration as well.

Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Sergiy Kibrik authored and Jan Beulich committed 2024-07-24 11:37:34 +02:00
1 parent b3f1cb51cf
commit 5e1a1ef4eb
3 files changed
+11 -5

No files matched your search

+5
View File
@@ -828,6 +828,11 @@ static inline bool hvm_hap_supported(void)
return false;
}
static inline bool hvm_altp2m_supported(void)
{
return false;
}
static inline bool hvm_nested_virt_supported(void)
{
return false;
+5 -4
View File
@@ -128,7 +128,7 @@ int p2m_init(struct domain *d)
return rc;
}
rc = p2m_init_altp2m(d);
rc = hvm_altp2m_supported() ? p2m_init_altp2m(d) : 0;
if ( rc )
{
p2m_teardown_hostp2m(d);
@@ -197,11 +197,12 @@ void p2m_final_teardown(struct domain *d)
{
if ( is_hvm_domain(d) )
{
if ( hvm_altp2m_supported() )
p2m_teardown_altp2m(d);
/*
* We must tear down both of them unconditionally because
* we initialise them unconditionally.
* We must tear down nestedp2m unconditionally because
* we initialise it unconditionally.
*/
p2m_teardown_altp2m(d);
p2m_teardown_nestedp2m(d);
}
+1 -1
View File
@@ -990,7 +990,7 @@ out:
if ( is_epte_present(&old_entry) )
ept_free_entry(p2m, &old_entry, target);
if ( entry_written && p2m_is_hostp2m(p2m) )
if ( hvm_altp2m_supported() && entry_written && p2m_is_hostp2m(p2m) )
{
ret = p2m_altp2m_propagate_change(d, _gfn(gfn), mfn, order, p2mt, p2ma);
if ( !rc )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.