x86/PV: properly set shadow allocation for Dom0

Leaving shadow setup just to the L1TF tasklet means running Dom0 on a
minimally acceptable shadow memory pool, rather than what normally
would be used (also, for example, for PVH). Populate the pool before
triggering the tasklet (or in preparation for L1TF checking logic to
trigger it), on a best effort basis (again like done for PVH).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Tim Deegan <tim@xen.org>
This commit is contained in:
Jan Beulich committed 2021-12-03 11:14:24 +01:00
1 parent 05657c6d18
commit c037dfb909
2 files changed
+17 -2

No files matched your search

+1 -1
View File
@@ -1298,7 +1298,7 @@ int shadow_set_allocation(struct domain *d, unsigned int pages, bool *preempted)
{
struct page_info *sp;
ASSERT(paging_locked_by_me(d));
ASSERT(paging_locked_by_me(d) || system_state < SYS_STATE_active);
if ( pages > 0 )
{
+16 -1
View File
@@ -21,6 +21,7 @@
#include <asm/page.h>
#include <asm/pv/mm.h>
#include <asm/setup.h>
#include <asm/shadow.h>
/* Allow ring-3 access in long mode as guest cannot use ring 1 ... */
#define BASE_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_USER)
@@ -928,8 +929,22 @@ int __init dom0_construct_pv(struct domain *d,
if ( d->domain_id == hardware_domid )
iommu_hwdom_init(d);
/* Activate shadow mode, if requested. Reuse the pv_l1tf tasklet. */
#ifdef CONFIG_SHADOW_PAGING
/* Fill the shadow pool if necessary. */
if ( opt_dom0_shadow || opt_pv_l1tf_hwdom )
{
bool preempted;
nr_pt_pages = dom0_paging_pages(d, nr_pages);
do {
preempted = false;
shadow_set_allocation(d, nr_pt_pages, &preempted);
process_pending_softirqs();
} while ( preempted );
}
/* Activate shadow mode, if requested. Reuse the pv_l1tf tasklet. */
if ( opt_dom0_shadow )
{
printk("Switching dom0 to using shadow paging\n");
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.