diff mbox

[1/2] x86/p2m: simplify p2m_next_level()

Message ID 594A65AB02000078001651EE@prv-mh.provo.novell.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Beulich June 21, 2017, 10:25 a.m. UTC
Calculate entry PFN and flags just once, making the respective
variables (and also pg) function wide. Take the opportunity and also
make the induction variable unsigned.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
x86/p2m-pt: simplify p2m_next_level()

Calculate entry PFN and flags just once, making the respective
variables (and also pg) function wide. Take the opportunity and also
make the induction variable unsigned.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m-pt.c
+++ b/xen/arch/x86/mm/p2m-pt.c
@@ -195,7 +195,9 @@ p2m_next_level(struct p2m_domain *p2m, v
     l1_pgentry_t *p2m_entry;
     l1_pgentry_t new_entry;
     void *next;
-    int i;
+    struct page_info *pg;
+    unsigned int i, flags;
+    unsigned long pfn;
 
     if ( !(p2m_entry = p2m_find_entry(*table, gfn_remainder, gfn,
                                       shift, max)) )
@@ -204,8 +206,6 @@ p2m_next_level(struct p2m_domain *p2m, v
     /* PoD/paging: Not present doesn't imply empty. */
     if ( !l1e_get_flags(*p2m_entry) )
     {
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, type);
         if ( pg == NULL )
             return -ENOMEM;
@@ -232,21 +232,17 @@ p2m_next_level(struct p2m_domain *p2m, v
         }
     }
 
-    ASSERT(l1e_get_flags(*p2m_entry) & (_PAGE_PRESENT|_PAGE_PSE));
+    flags = l1e_get_flags(*p2m_entry);
+    pfn = l1e_get_pfn(*p2m_entry);
+    ASSERT(flags & (_PAGE_PRESENT|_PAGE_PSE));
 
     /* split 1GB pages into 2MB pages */
-    if ( type == PGT_l2_page_table && (l1e_get_flags(*p2m_entry) & _PAGE_PSE) )
+    if ( type == PGT_l2_page_table && (flags & _PAGE_PSE) )
     {
-        unsigned long flags, pfn;
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, PGT_l2_page_table);
         if ( pg == NULL )
             return -ENOMEM;
 
-        flags = l1e_get_flags(*p2m_entry);
-        pfn = l1e_get_pfn(*p2m_entry);
-
         l1_entry = __map_domain_page(pg);
         for ( i = 0; i < L2_PAGETABLE_ENTRIES; i++ )
         {
@@ -263,19 +259,14 @@ p2m_next_level(struct p2m_domain *p2m, v
 
 
     /* split single 2MB large page into 4KB page in P2M table */
-    if ( type == PGT_l1_page_table && (l1e_get_flags(*p2m_entry) & _PAGE_PSE) )
+    if ( type == PGT_l1_page_table && (flags & _PAGE_PSE) )
     {
-        unsigned long flags, pfn;
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, PGT_l1_page_table);
         if ( pg == NULL )
             return -ENOMEM;
 
         /* New splintered mappings inherit the flags of the old superpage, 
          * with a little reorganisation for the _PAGE_PSE_PAT bit. */
-        flags = l1e_get_flags(*p2m_entry);
-        pfn = l1e_get_pfn(*p2m_entry);
         if ( pfn & 1 )           /* ==> _PAGE_PSE_PAT was set */
             pfn -= 1;            /* Clear it; _PAGE_PSE becomes _PAGE_PAT */
         else
diff mbox

Patch

--- a/xen/arch/x86/mm/p2m-pt.c
+++ b/xen/arch/x86/mm/p2m-pt.c
@@ -195,7 +195,9 @@  p2m_next_level(struct p2m_domain *p2m, v
     l1_pgentry_t *p2m_entry;
     l1_pgentry_t new_entry;
     void *next;
-    int i;
+    struct page_info *pg;
+    unsigned int i, flags;
+    unsigned long pfn;
 
     if ( !(p2m_entry = p2m_find_entry(*table, gfn_remainder, gfn,
                                       shift, max)) )
@@ -204,8 +206,6 @@  p2m_next_level(struct p2m_domain *p2m, v
     /* PoD/paging: Not present doesn't imply empty. */
     if ( !l1e_get_flags(*p2m_entry) )
     {
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, type);
         if ( pg == NULL )
             return -ENOMEM;
@@ -232,21 +232,17 @@  p2m_next_level(struct p2m_domain *p2m, v
         }
     }
 
-    ASSERT(l1e_get_flags(*p2m_entry) & (_PAGE_PRESENT|_PAGE_PSE));
+    flags = l1e_get_flags(*p2m_entry);
+    pfn = l1e_get_pfn(*p2m_entry);
+    ASSERT(flags & (_PAGE_PRESENT|_PAGE_PSE));
 
     /* split 1GB pages into 2MB pages */
-    if ( type == PGT_l2_page_table && (l1e_get_flags(*p2m_entry) & _PAGE_PSE) )
+    if ( type == PGT_l2_page_table && (flags & _PAGE_PSE) )
     {
-        unsigned long flags, pfn;
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, PGT_l2_page_table);
         if ( pg == NULL )
             return -ENOMEM;
 
-        flags = l1e_get_flags(*p2m_entry);
-        pfn = l1e_get_pfn(*p2m_entry);
-
         l1_entry = __map_domain_page(pg);
         for ( i = 0; i < L2_PAGETABLE_ENTRIES; i++ )
         {
@@ -263,19 +259,14 @@  p2m_next_level(struct p2m_domain *p2m, v
 
 
     /* split single 2MB large page into 4KB page in P2M table */
-    if ( type == PGT_l1_page_table && (l1e_get_flags(*p2m_entry) & _PAGE_PSE) )
+    if ( type == PGT_l1_page_table && (flags & _PAGE_PSE) )
     {
-        unsigned long flags, pfn;
-        struct page_info *pg;
-
         pg = p2m_alloc_ptp(p2m, PGT_l1_page_table);
         if ( pg == NULL )
             return -ENOMEM;
 
         /* New splintered mappings inherit the flags of the old superpage, 
          * with a little reorganisation for the _PAGE_PSE_PAT bit. */
-        flags = l1e_get_flags(*p2m_entry);
-        pfn = l1e_get_pfn(*p2m_entry);
         if ( pfn & 1 )           /* ==> _PAGE_PSE_PAT was set */
             pfn -= 1;            /* Clear it; _PAGE_PSE becomes _PAGE_PAT */
         else