[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 2/6] x86/PV: properly set shadow allocation for Dom0


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 29 Sep 2021 15:13:47 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=w1MgNXQPIZRI2m7FHe+SKi50wAOF1utIT72Ti22BWx0=; b=Eg24EybU/QF+yhw6CmwU4Bhw/3Twfq8tXgD+7kueMKjGCKQZbfpyYe49pC6rU1MyIt/KHTgnCU/caw4cPnpVkbudqtZ+1E+vXwhc1VaX8uj56AG82C6FHFn7vkDA1EXIu4Wx2RmsS56+OZOWxxZaoA+BBGdGDxZ0H3nGNcwEjcbT84rbiQKZgSeqxR3y8lOandvhiiDbSRl/KAWnjKvePB7PX6OHFFeDzrPxwNFlGDDzw0qI/g34FTKgLxBIbnOy17PvGmz70m3hVHYvp0FfnFKeTj10DdxE3rFOtjoDMoB0tL5L8Tvesjq203gubCTuY2i809kPglRr2PvF5YJiGg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l+Rikq+LTX/UwQp7WaEpQONCOFK00ku5+GfhXga7RcKwwrbnFDl79dxF8Ac1GGQfZxApemiooJBq6xvV3f6kIBPBWwItAEWsreFHdigKryfN3QsONtlsmKEUX2Mu0g0PUN4Leq1ey0xzH+NQxVcCukOUCUaqbGQYriSHaQd6HPsYkKfhGXyUuwFAZ+KwK6poovjP4W9YB8HAoDzCP1ChRJHfGq2KEsS0hZQcLcc6xvH0sfcTAVgjVFcGjsvh/Z9iOwMmya+YMamfBUexypOU8YkJNACiMEmJNHsXNDzruBEqaivIjPscq7+WmL5IShU/q8z2pooPwAzHcFL5EhO2xw==
  • Authentication-results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Tim Deegan <tim@xxxxxxx>
  • Delivery-date: Wed, 29 Sep 2021 13:13:53 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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@xxxxxxxx>
Acked-by: Tim Deegan <tim@xxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
v4: Also fill pool when opt_pv_l1tf_hwdom is set.
v2: Latch dom0_paging_pages() result.

--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -1298,7 +1298,7 @@ int shadow_set_allocation(struct domain
 {
     struct page_info *sp;
 
-    ASSERT(paging_locked_by_me(d));
+    ASSERT(paging_locked_by_me(d) || system_state < SYS_STATE_active);
 
     if ( pages > 0 )
     {
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -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 doma
     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");




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.