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

[PATCH v3 4/4] x86/shadow: re-work 4-level SHADOW_FOREACH_L2E()


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 8 Feb 2023 15:38:19 +0100
  • 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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XKJmP6oShTkiMe9LQzsbVOzIHfIJVktiMOexocp7MYs=; b=fy2S+gTW/THUSoE7KvVg/sG/JYzC2AGNiW676RhDe4x39cFzCJXXhzGefBK7A+12rWY1OzhLSr+Lw7t5mCR0PkF4TihiePUSiEKC3DfAyNgz4hi15GRDz7VPg1/vEEoaZo2xG01BPu45me3o6ymoGynWaxN3hVhA3krDkvhwIY9jpYrjeaWO/hx7l9udNE72zT9D2Qe8fjf454nyBUWUmJ84YyxTlSmOLngCddVeZ8L7nRG86wax6IDUDoOcNYQrYyj4lva8mmUelZS3suzvgM4Haj23n6n8CLrGjsFEOcep7kzzdOLR7izohloP0IMecCL0yqgOrJM6wGq4KH6Y2w==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A2DhN7QHe7zq7Zsg7u1Bi+z6xTHyas2R9c86qcKo2D5oJFooHYLIvwzMjOO4EtT7h5uD9fvabhnm1fMOw4ZyTRG5FxzU5JbZWrwTwZ0kibQUy8gcSq62CUS9wI07ppulPjy2aqgRimUd6k1l0uu+SNTsCavRwXAVlzNN6tVJtwsjD6J3wMOeeh6uE9qpi6vqMua6d0Jq8ol+XXycZ79e/ntj1nM4amnNS14KStL8fPAfAIGgT9Rlb2euAmMtn7svDO88SQW07cC4yWRSoii+ED25UbPcTzJTRX/h0PHuzmOWdXiI5H2vROzTZXbJH0phqZCXFKM97djYFLYBTFTFew==
  • Authentication-results: dkim=none (message not signed) header.d=none;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>, George Dunlap <george.dunlap@xxxxxxxxxx>
  • Delivery-date: Wed, 08 Feb 2023 14:45:19 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

First of all move the almost loop-invariant condition out of the loop;
transform it into an altered loop boundary, noting that the updating of
_gl2p is relevant only at one use site, and then also only inside the
_code blob it provides. Then drop the shadow_mode_external() part of the
condition as being redundant with the is_pv_32bit_domain() check.
Further, since the new local variable wants to be "unsigned int",
convert the loop induction variable accordingly. Finally also adjust
formatting as most code needs touching anyway.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
v3: Drop shadow_mode_external(). Switch back from using trailing
    underscores. Convert style to be fully conformant.
v2: New.

--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -861,23 +861,22 @@ do {
 /* 64-bit l2: touch all entries except for PAE compat guests. */
 #define SHADOW_FOREACH_L2E(_sl2mfn, _sl2e, _gl2p, _done, _dom, _code)       \
 do {                                                                        \
-    int _i;                                                                 \
-    int _xen = !shadow_mode_external(_dom);                                 \
+    unsigned int _i, _end = SHADOW_L2_PAGETABLE_ENTRIES;                    \
     shadow_l2e_t *_sp = map_domain_page((_sl2mfn));                         \
     ASSERT_VALID_L2(mfn_to_page(_sl2mfn)->u.sh.type);                       \
-    for ( _i = 0; _i < SHADOW_L2_PAGETABLE_ENTRIES; _i++ )                  \
+    if ( is_pv_32bit_domain(_dom) /* implies !shadow_mode_external(_dom) */ && 
\
+         mfn_to_page(_sl2mfn)->u.sh.type != SH_type_l2_64_shadow )          \
+        _end = COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(_dom);                    \
+    for ( _i = 0; _i < _end; ++_i )                                         \
     {                                                                       \
-        if ( (!(_xen))                                                      \
-             || !is_pv_32bit_domain(_dom)                                   \
-             || mfn_to_page(_sl2mfn)->u.sh.type == SH_type_l2_64_shadow     \
-             || (_i < COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(_dom)) )           \
+        (_sl2e) = _sp + _i;                                                 \
+        if ( shadow_l2e_get_flags(*(_sl2e)) & _PAGE_PRESENT )               \
         {                                                                   \
-            (_sl2e) = _sp + _i;                                             \
-            if ( shadow_l2e_get_flags(*(_sl2e)) & _PAGE_PRESENT )           \
-                {_code}                                                     \
-            if ( _done ) break;                                             \
-            increment_ptr_to_guest_entry(_gl2p);                            \
+            _code;                                                          \
         }                                                                   \
+        if ( _done )                                                        \
+            break;                                                          \
+        increment_ptr_to_guest_entry(_gl2p);                                \
     }                                                                       \
     unmap_domain_page(_sp);                                                 \
 } while (0)




 


Rackspace

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