[xen master] Revert "mm: don't hold heap lock in alloc_heap_pages() longer than necessary"

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[xen master] Revert "mm: don't hold heap lock in alloc_heap_pages() longer than necessary"

patchbot
commit dfe280c17dbc93c267a9fdf0caa4c0abdd64cd3c
Author:     Jan Beulich <[hidden email]>
AuthorDate: Wed Aug 30 12:23:23 2017 +0200
Commit:     Jan Beulich <[hidden email]>
CommitDate: Wed Aug 30 12:23:23 2017 +0200

    Revert "mm: don't hold heap lock in alloc_heap_pages() longer than necessary"
   
    This reverts commit dab6a84aadab11f31332030a1e9f0b9282d76156,
    as it introduces a race with free_heap_pages().
---
 xen/common/page_alloc.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 12e06fd..9fa62d2 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -855,7 +855,6 @@ static struct page_info *alloc_heap_pages(
     struct page_info *pg;
     bool need_tlbflush = false;
     uint32_t tlbflush_timestamp = 0;
-    unsigned int dirty_cnt = 0;
 
     /* Make sure there are enough bits in memflags for nodeID. */
     BUILD_BUG_ON((_MEMF_bits - _MEMF_node) < (8 * sizeof(nodeid_t)));
@@ -944,8 +943,6 @@ static struct page_info *alloc_heap_pages(
     if ( d != NULL )
         d->last_alloc_node = node;
 
-    spin_unlock(&heap_lock);
-
     for ( i = 0; i < (1 << order); i++ )
     {
         /* Reference count must continuously be zero for free pages. */
@@ -955,7 +952,7 @@ static struct page_info *alloc_heap_pages(
         {
             if ( !(memflags & MEMF_no_scrub) )
                 scrub_one_page(&pg[i]);
-            dirty_cnt++;
+            node_need_scrub[node]--;
         }
 
         pg[i].count_info = PGC_state_inuse;
@@ -977,8 +974,6 @@ static struct page_info *alloc_heap_pages(
             check_one_page(&pg[i]);
     }
 
-    spin_lock(&heap_lock);
-    node_need_scrub[node] -= dirty_cnt;
     spin_unlock(&heap_lock);
 
     if ( need_tlbflush )
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
[hidden email]
https://lists.xenproject.org/xen-changelog