Xen-Devel Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released
@ 2019-05-16 21:37 Tamas K Lengyel
  2019-05-16 21:37 ` [Xen-devel] " Tamas K Lengyel
                   ` (4 more replies)
  0 siblings, 5 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, George Dunlap, Andrew Cooper,
	Jan Beulich, Roger Pau Monne

Calling _put_page_type while also holding the page_lock
for that page can cause a deadlock.

The comment being dropped is incorrect since it's now out-of-date.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
This series is based on Andrew Cooper's x86-next branch

v5: BUG_ON early before releasing references
---
 xen/arch/x86/mm/mem_sharing.c | 41 ++++++++++-------------------------
 1 file changed, 11 insertions(+), 30 deletions(-)

diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index f16a3f5324..13b2f009d4 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -648,10 +648,6 @@ static int page_make_private(struct domain *d, struct page_info *page)
         return -EBUSY;
     }
 
-    /* We can only change the type if count is one */
-    /* Because we are locking pages individually, we need to drop
-     * the lock here, while the page is typed. We cannot risk the 
-     * race of page_unlock and then put_page_type. */
     expected_type = (PGT_shared_page | PGT_validated | PGT_locked | 2);
     if ( page->u.inuse.type_info != expected_type )
     {
@@ -660,12 +656,11 @@ static int page_make_private(struct domain *d, struct page_info *page)
         return -EEXIST;
     }
 
+    mem_sharing_page_unlock(page);
+
     /* Drop the final typecount */
     put_page_and_type(page);
 
-    /* Now that we've dropped the type, we can unlock */
-    mem_sharing_page_unlock(page);
-
     /* Change the owner */
     ASSERT(page_get_owner(page) == dom_cow);
     page_set_owner(page, d);
@@ -900,6 +895,7 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
     p2m_type_t smfn_type, cmfn_type;
     struct two_gfns tg;
     struct rmap_iterator ri;
+    unsigned long put_count = 0;
 
     get_two_gfns(sd, sgfn, &smfn_type, NULL, &smfn,
                  cd, cgfn, &cmfn_type, NULL, &cmfn, 0, &tg);
@@ -964,15 +960,6 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
         goto err_out;
     }
 
-    /* Acquire an extra reference, for the freeing below to be safe. */
-    if ( !get_page(cpage, dom_cow) )
-    {
-        ret = -EOVERFLOW;
-        mem_sharing_page_unlock(secondpg);
-        mem_sharing_page_unlock(firstpg);
-        goto err_out;
-    }
-
     /* Merge the lists together */
     rmap_seed_iterator(cpage, &ri);
     while ( (gfn = rmap_iterate(cpage, &ri)) != NULL)
@@ -984,13 +971,14 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
          * Don't change the type of rmap for the client page. */
         rmap_del(gfn, cpage, 0);
         rmap_add(gfn, spage);
-        put_page_and_type(cpage);
+        put_count++;
         d = get_domain_by_id(gfn->domain);
         BUG_ON(!d);
         BUG_ON(set_shared_p2m_entry(d, gfn->gfn, smfn));
         put_domain(d);
     }
     ASSERT(list_empty(&cpage->sharing->gfns));
+    BUG_ON(!put_count);
 
     /* Clear the rest of the shared state */
     page_sharing_dispose(cpage);
@@ -1002,7 +990,9 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
     /* Free the client page */
     if(test_and_clear_bit(_PGC_allocated, &cpage->count_info))
         put_page(cpage);
-    put_page(cpage);
+
+    while ( put_count-- )
+        put_page_and_type(cpage);
 
     /* We managed to free a domain page. */
     atomic_dec(&nr_shared_mfns);
@@ -1167,20 +1157,11 @@ int __mem_sharing_unshare_page(struct domain *d,
     {
         if ( !last_gfn )
             mem_sharing_gfn_destroy(page, d, gfn_info);
-        put_page_and_type(page);
         mem_sharing_page_unlock(page);
-        if ( last_gfn )
-        {
-            if ( !get_page(page, dom_cow) )
-            {
-                put_gfn(d, gfn);
-                domain_crash(d);
-                return -EOVERFLOW;
-            }
-            if ( test_and_clear_bit(_PGC_allocated, &page->count_info) )
-                put_page(page);
+        if ( last_gfn &&
+            test_and_clear_bit(_PGC_allocated, &page->count_info) )
             put_page(page);
-        }
+        put_page_and_type(page);
         put_gfn(d, gfn);
 
         return 0;
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released
  2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
@ 2019-05-16 21:37 ` " Tamas K Lengyel
  2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, George Dunlap, Andrew Cooper,
	Jan Beulich, Roger Pau Monne

Calling _put_page_type while also holding the page_lock
for that page can cause a deadlock.

The comment being dropped is incorrect since it's now out-of-date.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
This series is based on Andrew Cooper's x86-next branch

v5: BUG_ON early before releasing references
---
 xen/arch/x86/mm/mem_sharing.c | 41 ++++++++++-------------------------
 1 file changed, 11 insertions(+), 30 deletions(-)

diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index f16a3f5324..13b2f009d4 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -648,10 +648,6 @@ static int page_make_private(struct domain *d, struct page_info *page)
         return -EBUSY;
     }
 
-    /* We can only change the type if count is one */
-    /* Because we are locking pages individually, we need to drop
-     * the lock here, while the page is typed. We cannot risk the 
-     * race of page_unlock and then put_page_type. */
     expected_type = (PGT_shared_page | PGT_validated | PGT_locked | 2);
     if ( page->u.inuse.type_info != expected_type )
     {
@@ -660,12 +656,11 @@ static int page_make_private(struct domain *d, struct page_info *page)
         return -EEXIST;
     }
 
+    mem_sharing_page_unlock(page);
+
     /* Drop the final typecount */
     put_page_and_type(page);
 
-    /* Now that we've dropped the type, we can unlock */
-    mem_sharing_page_unlock(page);
-
     /* Change the owner */
     ASSERT(page_get_owner(page) == dom_cow);
     page_set_owner(page, d);
@@ -900,6 +895,7 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
     p2m_type_t smfn_type, cmfn_type;
     struct two_gfns tg;
     struct rmap_iterator ri;
+    unsigned long put_count = 0;
 
     get_two_gfns(sd, sgfn, &smfn_type, NULL, &smfn,
                  cd, cgfn, &cmfn_type, NULL, &cmfn, 0, &tg);
@@ -964,15 +960,6 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
         goto err_out;
     }
 
-    /* Acquire an extra reference, for the freeing below to be safe. */
-    if ( !get_page(cpage, dom_cow) )
-    {
-        ret = -EOVERFLOW;
-        mem_sharing_page_unlock(secondpg);
-        mem_sharing_page_unlock(firstpg);
-        goto err_out;
-    }
-
     /* Merge the lists together */
     rmap_seed_iterator(cpage, &ri);
     while ( (gfn = rmap_iterate(cpage, &ri)) != NULL)
@@ -984,13 +971,14 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
          * Don't change the type of rmap for the client page. */
         rmap_del(gfn, cpage, 0);
         rmap_add(gfn, spage);
-        put_page_and_type(cpage);
+        put_count++;
         d = get_domain_by_id(gfn->domain);
         BUG_ON(!d);
         BUG_ON(set_shared_p2m_entry(d, gfn->gfn, smfn));
         put_domain(d);
     }
     ASSERT(list_empty(&cpage->sharing->gfns));
+    BUG_ON(!put_count);
 
     /* Clear the rest of the shared state */
     page_sharing_dispose(cpage);
@@ -1002,7 +990,9 @@ static int share_pages(struct domain *sd, gfn_t sgfn, shr_handle_t sh,
     /* Free the client page */
     if(test_and_clear_bit(_PGC_allocated, &cpage->count_info))
         put_page(cpage);
-    put_page(cpage);
+
+    while ( put_count-- )
+        put_page_and_type(cpage);
 
     /* We managed to free a domain page. */
     atomic_dec(&nr_shared_mfns);
@@ -1167,20 +1157,11 @@ int __mem_sharing_unshare_page(struct domain *d,
     {
         if ( !last_gfn )
             mem_sharing_gfn_destroy(page, d, gfn_info);
-        put_page_and_type(page);
         mem_sharing_page_unlock(page);
-        if ( last_gfn )
-        {
-            if ( !get_page(page, dom_cow) )
-            {
-                put_gfn(d, gfn);
-                domain_crash(d);
-                return -EOVERFLOW;
-            }
-            if ( test_and_clear_bit(_PGC_allocated, &page->count_info) )
-                put_page(page);
+        if ( last_gfn &&
+            test_and_clear_bit(_PGC_allocated, &page->count_info) )
             put_page(page);
-        }
+        put_page_and_type(page);
         put_gfn(d, gfn);
 
         return 0;
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
  2019-05-16 21:37 ` [Xen-devel] " Tamas K Lengyel
@ 2019-05-16 21:37 ` Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
                     ` (2 more replies)
  2019-05-16 21:37 ` [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds Tamas K Lengyel
                   ` (2 subsequent siblings)
  4 siblings, 3 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, George Dunlap, Andrew Cooper,
	Jan Beulich, Roger Pau Monne

Patch cf4b30dca0a "Add debug code to detect illegal page_lock and put_page_type
ordering" added extra sanity checking to page_lock/page_unlock for debug builds
with the assumption that no hypervisor path ever locks two pages at once.

This assumption doesn't hold during memory sharing so we copy a version of
page_lock/unlock to be used exclusively in the memory sharing subsystem
without the sanity checks.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
v5: comments and TODOs
---
 xen/arch/x86/mm/mem_sharing.c | 54 ++++++++++++++++++++++++++++++++---
 xen/include/asm-x86/mm.h      | 15 ++--------
 2 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index 13b2f009d4..f2354d2d6f 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -112,13 +112,59 @@ static inline void page_sharing_dispose(struct page_info *page)
 
 #endif /* MEM_SHARING_AUDIT */
 
-static inline int mem_sharing_page_lock(struct page_info *pg)
+/*
+ * Private implementations of page_lock/unlock to bypass PV-only
+ * sanity checks not applicable to mem-sharing.
+ *
+ * _page_lock is used in memory sharing to protect addition (share) and removal
+ * (unshare) of (gfn,domain) tupples to a list of gfn's that the shared page is
+ * currently backing.
+ * Nesting may happen when sharing (and locking) two pages.
+ * Deadlock is avoided by locking pages in increasing order.
+ * All memory sharing code paths take the p2m lock of the affected gfn before
+ * taking the lock for the underlying page. We enforce ordering between page_lock
+ * and p2m_lock using an mm-locks.h construct.
+ *
+ * TODO: Investigate if PGT_validated is necessary.
+ */
+static inline bool _page_lock(struct page_info *page)
 {
-    int rc;
+    unsigned long x, nx;
+
+    do {
+        while ( (x = page->u.inuse.type_info) & PGT_locked )
+            cpu_relax();
+        nx = x + (1 | PGT_locked);
+        if ( !(x & PGT_validated) ||
+             !(x & PGT_count_mask) ||
+             !(nx & PGT_count_mask) )
+            return false;
+    } while ( cmpxchg(&page->u.inuse.type_info, x, nx) != x );
+
+    return true;
+}
+
+static inline void _page_unlock(struct page_info *page)
+{
+    unsigned long x, nx, y = page->u.inuse.type_info;
+
+    do {
+        x = y;
+        ASSERT((x & PGT_count_mask) && (x & PGT_locked));
+
+        nx = x - (1 | PGT_locked);
+        /* We must not drop the last reference here. */
+        ASSERT(nx & PGT_count_mask);
+    } while ( (y = cmpxchg(&page->u.inuse.type_info, x, nx)) != x );
+}
+
+static inline bool mem_sharing_page_lock(struct page_info *pg)
+{
+    bool rc;
     pg_lock_data_t *pld = &(this_cpu(__pld));
 
     page_sharing_mm_pre_lock();
-    rc = page_lock(pg);
+    rc = _page_lock(pg);
     if ( rc )
     {
         preempt_disable();
@@ -135,7 +181,7 @@ static inline void mem_sharing_page_unlock(struct page_info *pg)
     page_sharing_mm_unlock(pld->mm_unlock_level, 
                            &pld->recurse_count);
     preempt_enable();
-    page_unlock(pg);
+    _page_unlock(pg);
 }
 
 static inline shr_handle_t get_next_handle(void)
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 6faa563167..24c4205ba7 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -356,24 +356,15 @@ struct platform_bad_page {
 const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
 
 /* Per page locks:
- * page_lock() is used for two purposes: pte serialization, and memory sharing.
+ * page_lock() is used for pte serialization.
  *
  * All users of page lock for pte serialization live in mm.c, use it
  * to lock a page table page during pte updates, do not take other locks within
  * the critical section delimited by page_lock/unlock, and perform no
  * nesting.
  *
- * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
- * is used in memory sharing to protect addition (share) and removal (unshare)
- * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
- * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
- * is avoided by locking pages in increasing order.
- * All memory sharing code paths take the p2m lock of the affected gfn before
- * taking the lock for the underlying page. We enforce ordering between page_lock
- * and p2m_lock using an mm-locks.h construct.
- *
- * These two users (pte serialization and memory sharing) do not collide, since
- * sharing is only supported for hvm guests, which do not perform pv pte updates.
+ * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
+ * only supported for hvm guests, which do not perform pv pte updates.
  */
 int page_lock(struct page_info *page);
 void page_unlock(struct page_info *page);
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [Xen-devel] [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
@ 2019-05-16 21:37   ` " Tamas K Lengyel
  2019-05-17  7:21   ` Jan Beulich
  2019-06-17 12:21   ` Tamas K Lengyel
  2 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, George Dunlap, Andrew Cooper,
	Jan Beulich, Roger Pau Monne

Patch cf4b30dca0a "Add debug code to detect illegal page_lock and put_page_type
ordering" added extra sanity checking to page_lock/page_unlock for debug builds
with the assumption that no hypervisor path ever locks two pages at once.

This assumption doesn't hold during memory sharing so we copy a version of
page_lock/unlock to be used exclusively in the memory sharing subsystem
without the sanity checks.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
v5: comments and TODOs
---
 xen/arch/x86/mm/mem_sharing.c | 54 ++++++++++++++++++++++++++++++++---
 xen/include/asm-x86/mm.h      | 15 ++--------
 2 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index 13b2f009d4..f2354d2d6f 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -112,13 +112,59 @@ static inline void page_sharing_dispose(struct page_info *page)
 
 #endif /* MEM_SHARING_AUDIT */
 
-static inline int mem_sharing_page_lock(struct page_info *pg)
+/*
+ * Private implementations of page_lock/unlock to bypass PV-only
+ * sanity checks not applicable to mem-sharing.
+ *
+ * _page_lock is used in memory sharing to protect addition (share) and removal
+ * (unshare) of (gfn,domain) tupples to a list of gfn's that the shared page is
+ * currently backing.
+ * Nesting may happen when sharing (and locking) two pages.
+ * Deadlock is avoided by locking pages in increasing order.
+ * All memory sharing code paths take the p2m lock of the affected gfn before
+ * taking the lock for the underlying page. We enforce ordering between page_lock
+ * and p2m_lock using an mm-locks.h construct.
+ *
+ * TODO: Investigate if PGT_validated is necessary.
+ */
+static inline bool _page_lock(struct page_info *page)
 {
-    int rc;
+    unsigned long x, nx;
+
+    do {
+        while ( (x = page->u.inuse.type_info) & PGT_locked )
+            cpu_relax();
+        nx = x + (1 | PGT_locked);
+        if ( !(x & PGT_validated) ||
+             !(x & PGT_count_mask) ||
+             !(nx & PGT_count_mask) )
+            return false;
+    } while ( cmpxchg(&page->u.inuse.type_info, x, nx) != x );
+
+    return true;
+}
+
+static inline void _page_unlock(struct page_info *page)
+{
+    unsigned long x, nx, y = page->u.inuse.type_info;
+
+    do {
+        x = y;
+        ASSERT((x & PGT_count_mask) && (x & PGT_locked));
+
+        nx = x - (1 | PGT_locked);
+        /* We must not drop the last reference here. */
+        ASSERT(nx & PGT_count_mask);
+    } while ( (y = cmpxchg(&page->u.inuse.type_info, x, nx)) != x );
+}
+
+static inline bool mem_sharing_page_lock(struct page_info *pg)
+{
+    bool rc;
     pg_lock_data_t *pld = &(this_cpu(__pld));
 
     page_sharing_mm_pre_lock();
-    rc = page_lock(pg);
+    rc = _page_lock(pg);
     if ( rc )
     {
         preempt_disable();
@@ -135,7 +181,7 @@ static inline void mem_sharing_page_unlock(struct page_info *pg)
     page_sharing_mm_unlock(pld->mm_unlock_level, 
                            &pld->recurse_count);
     preempt_enable();
-    page_unlock(pg);
+    _page_unlock(pg);
 }
 
 static inline shr_handle_t get_next_handle(void)
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 6faa563167..24c4205ba7 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -356,24 +356,15 @@ struct platform_bad_page {
 const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
 
 /* Per page locks:
- * page_lock() is used for two purposes: pte serialization, and memory sharing.
+ * page_lock() is used for pte serialization.
  *
  * All users of page lock for pte serialization live in mm.c, use it
  * to lock a page table page during pte updates, do not take other locks within
  * the critical section delimited by page_lock/unlock, and perform no
  * nesting.
  *
- * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
- * is used in memory sharing to protect addition (share) and removal (unshare)
- * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
- * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
- * is avoided by locking pages in increasing order.
- * All memory sharing code paths take the p2m lock of the affected gfn before
- * taking the lock for the underlying page. We enforce ordering between page_lock
- * and p2m_lock using an mm-locks.h construct.
- *
- * These two users (pte serialization and memory sharing) do not collide, since
- * sharing is only supported for hvm guests, which do not perform pv pte updates.
+ * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
+ * only supported for hvm guests, which do not perform pv pte updates.
  */
 int page_lock(struct page_info *page);
 void page_unlock(struct page_info *page);
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds
  2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
  2019-05-16 21:37 ` [Xen-devel] " Tamas K Lengyel
  2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
@ 2019-05-16 21:37 ` Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
  2019-06-17 12:24   ` Tamas K Lengyel
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
  2019-06-17 12:23 ` [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
  4 siblings, 2 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Andrew Cooper, Tamas K Lengyel, Wei Liu, Jan Beulich, Roger Pau Monne

Improves performance for release builds.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
 xen/include/asm-x86/mem_sharing.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/include/asm-x86/mem_sharing.h
index 9f9f7e93e3..afd0c17292 100644
--- a/xen/include/asm-x86/mem_sharing.h
+++ b/xen/include/asm-x86/mem_sharing.h
@@ -25,7 +25,11 @@
 #include <public/memory.h>
 
 /* Auditing of memory sharing code? */
+#ifndef NDEBUG
 #define MEM_SHARING_AUDIT 1
+#else
+#define MEM_SHARING_AUDIT 0
+#endif
 
 typedef uint64_t shr_handle_t; 
 
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [Xen-devel] [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds
  2019-05-16 21:37 ` [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds Tamas K Lengyel
@ 2019-05-16 21:37   ` " Tamas K Lengyel
  2019-06-17 12:24   ` Tamas K Lengyel
  1 sibling, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Andrew Cooper, Tamas K Lengyel, Wei Liu, Jan Beulich, Roger Pau Monne

Improves performance for release builds.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
---
 xen/include/asm-x86/mem_sharing.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/include/asm-x86/mem_sharing.h
index 9f9f7e93e3..afd0c17292 100644
--- a/xen/include/asm-x86/mem_sharing.h
+++ b/xen/include/asm-x86/mem_sharing.h
@@ -25,7 +25,11 @@
 #include <public/memory.h>
 
 /* Auditing of memory sharing code? */
+#ifndef NDEBUG
 #define MEM_SHARING_AUDIT 1
+#else
+#define MEM_SHARING_AUDIT 0
+#endif
 
 typedef uint64_t shr_handle_t; 
 
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
                   ` (2 preceding siblings ...)
  2019-05-16 21:37 ` [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds Tamas K Lengyel
@ 2019-05-16 21:37 ` Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
                     ` (3 more replies)
  2019-06-17 12:23 ` [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
  4 siblings, 4 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, Konrad Rzeszutek Wilk, George Dunlap,
	Andrew Cooper, Ian Jackson, Tim Deegan, Julien Grall,
	Stefano Stabellini, Jan Beulich, Roger Pau Monne

Disable it by default as it is only an experimental subsystem.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Julien Grall <julien.grall@arm.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
----
v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other fixups
---
 xen/arch/x86/Kconfig              |  6 +++++-
 xen/arch/x86/domain.c             |  2 ++
 xen/arch/x86/domctl.c             |  2 ++
 xen/arch/x86/mm/Makefile          |  2 +-
 xen/arch/x86/x86_64/compat/mm.c   |  2 ++
 xen/arch/x86/x86_64/mm.c          |  2 ++
 xen/common/Kconfig                |  3 ---
 xen/common/domain.c               |  2 +-
 xen/common/grant_table.c          |  2 +-
 xen/common/memory.c               |  2 +-
 xen/common/vm_event.c             |  6 +++---
 xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
 xen/include/asm-x86/mm.h          |  3 +++
 xen/include/xen/sched.h           |  2 +-
 xen/include/xsm/dummy.h           |  2 +-
 xen/include/xsm/xsm.h             |  4 ++--
 xen/xsm/dummy.c                   |  2 +-
 xen/xsm/flask/hooks.c             |  4 ++--
 18 files changed, 58 insertions(+), 18 deletions(-)

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 4b8b07b549..600ca5c12e 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -17,7 +17,6 @@ config X86
 	select HAS_KEXEC
 	select MEM_ACCESS_ALWAYS_ON
 	select HAS_MEM_PAGING
-	select HAS_MEM_SHARING
 	select HAS_NS16550
 	select HAS_PASSTHROUGH
 	select HAS_PCI
@@ -198,6 +197,11 @@ config PV_SHIM_EXCLUSIVE
 	  firmware, and will not function correctly in other scenarios.
 
 	  If unsure, say N.
+
+config MEM_SHARING
+	bool "Xen memory sharing support" if EXPERT = "y"
+	depends on HVM
+
 endmenu
 
 source "common/Kconfig"
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index d2d9f2fc3c..474df8433b 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2046,6 +2046,7 @@ int domain_relinquish_resources(struct domain *d)
             d->arch.auto_unmask = 0;
         }
 
+#ifdef CONFIG_MEM_SHARING
     PROGRESS(shared):
 
         if ( is_hvm_domain(d) )
@@ -2056,6 +2057,7 @@ int domain_relinquish_resources(struct domain *d)
             if ( ret )
                 return ret;
         }
+#endif
 
         spin_lock(&d->page_alloc_lock);
         page_list_splice(&d->arch.relmem_list, &d->page_list);
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 9bf2d0820f..bc9e024ccc 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -1231,9 +1231,11 @@ long arch_do_domctl(
         break;
     }
 
+#ifdef CONFIG_MEM_SHARING
     case XEN_DOMCTL_mem_sharing_op:
         ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op);
         break;
+#endif
 
 #if P2M_AUDIT && defined(CONFIG_HVM)
     case XEN_DOMCTL_audit_p2m:
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index 5a17646f98..5010a29d6c 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -6,7 +6,7 @@ obj-$(CONFIG_HVM) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
 obj-$(CONFIG_SHADOW_PAGING) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
 obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-y += mem_paging.o
-obj-y += mem_sharing.o
+obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
 obj-y += p2m.o p2m-pt.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o
 obj-y += paging.o
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index 32410ed273..d4c6be3032 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -152,8 +152,10 @@ int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     case XENMEM_paging_op:
         return mem_paging_memop(guest_handle_cast(arg, xen_mem_paging_op_t));
 
+#ifdef CONFIG_MEM_SHARING
     case XENMEM_sharing_op:
         return mem_sharing_memop(guest_handle_cast(arg, xen_mem_sharing_op_t));
+#endif
 
     default:
         rc = -ENOSYS;
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index d8f558bc3a..51d1d511f2 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -993,8 +993,10 @@ long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     case XENMEM_paging_op:
         return mem_paging_memop(guest_handle_cast(arg, xen_mem_paging_op_t));
 
+#ifdef CONFIG_MEM_SHARING
     case XENMEM_sharing_op:
         return mem_sharing_memop(guest_handle_cast(arg, xen_mem_sharing_op_t));
+#endif
 
     default:
         rc = -ENOSYS;
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 7a12346f19..6e28fc48af 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -45,9 +45,6 @@ config MEM_ACCESS
 config HAS_MEM_PAGING
 	bool
 
-config HAS_MEM_SHARING
-	bool
-
 config HAS_PDX
 	bool
 
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 90c66079f9..0815cf8f07 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -923,7 +923,7 @@ static void complete_domain_destroy(struct rcu_head *head)
     xfree(d->vm_event_paging);
 #endif
     xfree(d->vm_event_monitor);
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     xfree(d->vm_event_share);
 #endif
 
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 80728ea57d..6c40dccae9 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -3760,7 +3760,7 @@ void grant_table_init_vcpu(struct vcpu *v)
     v->maptrack_tail = MAPTRACK_TAIL;
 }
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref,
                             gfn_t *gfn, uint16_t *status)
 {
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 520d6f4803..69851f4344 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -1671,7 +1671,7 @@ int check_get_page_from_gfn(struct domain *d, gfn_t gfn, bool readonly,
         return -EAGAIN;
     }
 #endif
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     if ( (q & P2M_UNSHARE) && p2m_is_shared(p2mt) )
     {
         if ( page )
diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
index 6e68be47bc..163a671cea 100644
--- a/xen/common/vm_event.c
+++ b/xen/common/vm_event.c
@@ -544,7 +544,7 @@ static void monitor_notification(struct vcpu *v, unsigned int port)
     vm_event_resume(v->domain, v->domain->vm_event_monitor);
 }
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 /* Registered with Xen-bound event channel for incoming notifications. */
 static void mem_sharing_notification(struct vcpu *v, unsigned int port)
 {
@@ -574,7 +574,7 @@ void vm_event_cleanup(struct domain *d)
         destroy_waitqueue_head(&d->vm_event_monitor->wq);
         (void)vm_event_disable(d, &d->vm_event_monitor);
     }
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     if ( vm_event_check_ring(d->vm_event_share) )
     {
         destroy_waitqueue_head(&d->vm_event_share->wq);
@@ -720,7 +720,7 @@ int vm_event_domctl(struct domain *d, struct xen_domctl_vm_event_op *vec,
     }
     break;
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     case XEN_DOMCTL_VM_EVENT_OP_SHARING:
     {
         rc = -EINVAL;
diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/include/asm-x86/mem_sharing.h
index afd0c17292..db22468744 100644
--- a/xen/include/asm-x86/mem_sharing.h
+++ b/xen/include/asm-x86/mem_sharing.h
@@ -24,6 +24,8 @@
 #include <public/domctl.h>
 #include <public/memory.h>
 
+#ifdef CONFIG_MEM_SHARING
+
 /* Auditing of memory sharing code? */
 #ifndef NDEBUG
 #define MEM_SHARING_AUDIT 1
@@ -99,4 +101,30 @@ int mem_sharing_domctl(struct domain *d,
  */
 int relinquish_shared_pages(struct domain *d);
 
+#else
+
+static inline unsigned int mem_sharing_get_nr_saved_mfns(void)
+{
+    return 0;
+}
+static inline unsigned int mem_sharing_get_nr_shared_mfns(void)
+{
+    return 0;
+}
+static inline int mem_sharing_unshare_page(struct domain *d,
+                                           unsigned long gfn,
+                                           uint16_t flags)
+{
+    ASSERT_UNREACHABLE();
+    return -EOPNOTSUPP;
+}
+static inline int mem_sharing_notify_enomem(struct domain *d, unsigned long gfn,
+                              bool allow_sleep)
+{
+    ASSERT_UNREACHABLE();
+    return -EOPNOTSUPP;
+}
+
+#endif
+
 #endif /* __MEM_SHARING_H__ */
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 24c4205ba7..d8ab53d688 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -127,6 +127,8 @@ struct page_info
         /* For non-pinnable single-page shadows, a higher entry that points
          * at us. */
         paddr_t up;
+
+#ifdef CONFIG_MEM_SHARING
         /* For shared/sharable pages, we use a doubly-linked list
          * of all the {pfn,domain} pairs that map this page. We also include
          * an opaque handle, which is effectively a version, so that clients
@@ -134,6 +136,7 @@ struct page_info
          * This list is allocated and freed when a page is shared/unshared.
          */
         struct page_sharing_info *sharing;
+#endif
     };
 
     /* Reference count and various PGC_xxx flags and fields. */
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 2201faca6b..410c74489f 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -459,7 +459,7 @@ struct domain
     /* Various vm_events */
 
     /* Memory sharing support */
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     struct vm_event_domain *vm_event_share;
 #endif
     /* Memory paging support */
diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index 01d2814fed..ef52bb1764 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -597,7 +597,7 @@ static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static XSM_INLINE int xsm_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index 9a90355056..d61ba77374 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -150,7 +150,7 @@ struct xsm_operations {
     int (*mem_paging) (struct domain *d);
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     int (*mem_sharing) (struct domain *d);
 #endif
 
@@ -597,7 +597,7 @@ static inline int xsm_mem_paging (xsm_default_t def, struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
 {
     return xsm_ops->mem_sharing(d);
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index c9a566f2b5..5705e52791 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -128,7 +128,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
     set_to_dummy_if_null(ops, mem_paging);
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     set_to_dummy_if_null(ops, mem_sharing);
 #endif
 
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index a7d690ac3c..791c1f66af 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1262,7 +1262,7 @@ static int flask_mem_paging(struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static int flask_mem_sharing(struct domain *d)
 {
     return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__MEM_SHARING);
@@ -1829,7 +1829,7 @@ static struct xsm_operations flask_ops = {
     .mem_paging = flask_mem_paging,
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     .mem_sharing = flask_mem_sharing,
 #endif
 
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
@ 2019-05-16 21:37   ` " Tamas K Lengyel
  2019-05-17  7:23   ` Jan Beulich
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-16 21:37 UTC (permalink / raw)
  To: xen-devel
  Cc: Tamas K Lengyel, Wei Liu, Konrad Rzeszutek Wilk, George Dunlap,
	Andrew Cooper, Ian Jackson, Tim Deegan, Julien Grall,
	Stefano Stabellini, Jan Beulich, Roger Pau Monne

Disable it by default as it is only an experimental subsystem.

Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Roger Pau Monne <roger.pau@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Julien Grall <julien.grall@arm.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
----
v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other fixups
---
 xen/arch/x86/Kconfig              |  6 +++++-
 xen/arch/x86/domain.c             |  2 ++
 xen/arch/x86/domctl.c             |  2 ++
 xen/arch/x86/mm/Makefile          |  2 +-
 xen/arch/x86/x86_64/compat/mm.c   |  2 ++
 xen/arch/x86/x86_64/mm.c          |  2 ++
 xen/common/Kconfig                |  3 ---
 xen/common/domain.c               |  2 +-
 xen/common/grant_table.c          |  2 +-
 xen/common/memory.c               |  2 +-
 xen/common/vm_event.c             |  6 +++---
 xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
 xen/include/asm-x86/mm.h          |  3 +++
 xen/include/xen/sched.h           |  2 +-
 xen/include/xsm/dummy.h           |  2 +-
 xen/include/xsm/xsm.h             |  4 ++--
 xen/xsm/dummy.c                   |  2 +-
 xen/xsm/flask/hooks.c             |  4 ++--
 18 files changed, 58 insertions(+), 18 deletions(-)

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 4b8b07b549..600ca5c12e 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -17,7 +17,6 @@ config X86
 	select HAS_KEXEC
 	select MEM_ACCESS_ALWAYS_ON
 	select HAS_MEM_PAGING
-	select HAS_MEM_SHARING
 	select HAS_NS16550
 	select HAS_PASSTHROUGH
 	select HAS_PCI
@@ -198,6 +197,11 @@ config PV_SHIM_EXCLUSIVE
 	  firmware, and will not function correctly in other scenarios.
 
 	  If unsure, say N.
+
+config MEM_SHARING
+	bool "Xen memory sharing support" if EXPERT = "y"
+	depends on HVM
+
 endmenu
 
 source "common/Kconfig"
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index d2d9f2fc3c..474df8433b 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2046,6 +2046,7 @@ int domain_relinquish_resources(struct domain *d)
             d->arch.auto_unmask = 0;
         }
 
+#ifdef CONFIG_MEM_SHARING
     PROGRESS(shared):
 
         if ( is_hvm_domain(d) )
@@ -2056,6 +2057,7 @@ int domain_relinquish_resources(struct domain *d)
             if ( ret )
                 return ret;
         }
+#endif
 
         spin_lock(&d->page_alloc_lock);
         page_list_splice(&d->arch.relmem_list, &d->page_list);
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 9bf2d0820f..bc9e024ccc 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -1231,9 +1231,11 @@ long arch_do_domctl(
         break;
     }
 
+#ifdef CONFIG_MEM_SHARING
     case XEN_DOMCTL_mem_sharing_op:
         ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op);
         break;
+#endif
 
 #if P2M_AUDIT && defined(CONFIG_HVM)
     case XEN_DOMCTL_audit_p2m:
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index 5a17646f98..5010a29d6c 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -6,7 +6,7 @@ obj-$(CONFIG_HVM) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
 obj-$(CONFIG_SHADOW_PAGING) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
 obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-y += mem_paging.o
-obj-y += mem_sharing.o
+obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
 obj-y += p2m.o p2m-pt.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o
 obj-y += paging.o
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index 32410ed273..d4c6be3032 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -152,8 +152,10 @@ int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     case XENMEM_paging_op:
         return mem_paging_memop(guest_handle_cast(arg, xen_mem_paging_op_t));
 
+#ifdef CONFIG_MEM_SHARING
     case XENMEM_sharing_op:
         return mem_sharing_memop(guest_handle_cast(arg, xen_mem_sharing_op_t));
+#endif
 
     default:
         rc = -ENOSYS;
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index d8f558bc3a..51d1d511f2 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -993,8 +993,10 @@ long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     case XENMEM_paging_op:
         return mem_paging_memop(guest_handle_cast(arg, xen_mem_paging_op_t));
 
+#ifdef CONFIG_MEM_SHARING
     case XENMEM_sharing_op:
         return mem_sharing_memop(guest_handle_cast(arg, xen_mem_sharing_op_t));
+#endif
 
     default:
         rc = -ENOSYS;
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 7a12346f19..6e28fc48af 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -45,9 +45,6 @@ config MEM_ACCESS
 config HAS_MEM_PAGING
 	bool
 
-config HAS_MEM_SHARING
-	bool
-
 config HAS_PDX
 	bool
 
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 90c66079f9..0815cf8f07 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -923,7 +923,7 @@ static void complete_domain_destroy(struct rcu_head *head)
     xfree(d->vm_event_paging);
 #endif
     xfree(d->vm_event_monitor);
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     xfree(d->vm_event_share);
 #endif
 
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 80728ea57d..6c40dccae9 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -3760,7 +3760,7 @@ void grant_table_init_vcpu(struct vcpu *v)
     v->maptrack_tail = MAPTRACK_TAIL;
 }
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref,
                             gfn_t *gfn, uint16_t *status)
 {
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 520d6f4803..69851f4344 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -1671,7 +1671,7 @@ int check_get_page_from_gfn(struct domain *d, gfn_t gfn, bool readonly,
         return -EAGAIN;
     }
 #endif
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     if ( (q & P2M_UNSHARE) && p2m_is_shared(p2mt) )
     {
         if ( page )
diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
index 6e68be47bc..163a671cea 100644
--- a/xen/common/vm_event.c
+++ b/xen/common/vm_event.c
@@ -544,7 +544,7 @@ static void monitor_notification(struct vcpu *v, unsigned int port)
     vm_event_resume(v->domain, v->domain->vm_event_monitor);
 }
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 /* Registered with Xen-bound event channel for incoming notifications. */
 static void mem_sharing_notification(struct vcpu *v, unsigned int port)
 {
@@ -574,7 +574,7 @@ void vm_event_cleanup(struct domain *d)
         destroy_waitqueue_head(&d->vm_event_monitor->wq);
         (void)vm_event_disable(d, &d->vm_event_monitor);
     }
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     if ( vm_event_check_ring(d->vm_event_share) )
     {
         destroy_waitqueue_head(&d->vm_event_share->wq);
@@ -720,7 +720,7 @@ int vm_event_domctl(struct domain *d, struct xen_domctl_vm_event_op *vec,
     }
     break;
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     case XEN_DOMCTL_VM_EVENT_OP_SHARING:
     {
         rc = -EINVAL;
diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/include/asm-x86/mem_sharing.h
index afd0c17292..db22468744 100644
--- a/xen/include/asm-x86/mem_sharing.h
+++ b/xen/include/asm-x86/mem_sharing.h
@@ -24,6 +24,8 @@
 #include <public/domctl.h>
 #include <public/memory.h>
 
+#ifdef CONFIG_MEM_SHARING
+
 /* Auditing of memory sharing code? */
 #ifndef NDEBUG
 #define MEM_SHARING_AUDIT 1
@@ -99,4 +101,30 @@ int mem_sharing_domctl(struct domain *d,
  */
 int relinquish_shared_pages(struct domain *d);
 
+#else
+
+static inline unsigned int mem_sharing_get_nr_saved_mfns(void)
+{
+    return 0;
+}
+static inline unsigned int mem_sharing_get_nr_shared_mfns(void)
+{
+    return 0;
+}
+static inline int mem_sharing_unshare_page(struct domain *d,
+                                           unsigned long gfn,
+                                           uint16_t flags)
+{
+    ASSERT_UNREACHABLE();
+    return -EOPNOTSUPP;
+}
+static inline int mem_sharing_notify_enomem(struct domain *d, unsigned long gfn,
+                              bool allow_sleep)
+{
+    ASSERT_UNREACHABLE();
+    return -EOPNOTSUPP;
+}
+
+#endif
+
 #endif /* __MEM_SHARING_H__ */
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 24c4205ba7..d8ab53d688 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -127,6 +127,8 @@ struct page_info
         /* For non-pinnable single-page shadows, a higher entry that points
          * at us. */
         paddr_t up;
+
+#ifdef CONFIG_MEM_SHARING
         /* For shared/sharable pages, we use a doubly-linked list
          * of all the {pfn,domain} pairs that map this page. We also include
          * an opaque handle, which is effectively a version, so that clients
@@ -134,6 +136,7 @@ struct page_info
          * This list is allocated and freed when a page is shared/unshared.
          */
         struct page_sharing_info *sharing;
+#endif
     };
 
     /* Reference count and various PGC_xxx flags and fields. */
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 2201faca6b..410c74489f 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -459,7 +459,7 @@ struct domain
     /* Various vm_events */
 
     /* Memory sharing support */
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     struct vm_event_domain *vm_event_share;
 #endif
     /* Memory paging support */
diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index 01d2814fed..ef52bb1764 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -597,7 +597,7 @@ static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static XSM_INLINE int xsm_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index 9a90355056..d61ba77374 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -150,7 +150,7 @@ struct xsm_operations {
     int (*mem_paging) (struct domain *d);
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     int (*mem_sharing) (struct domain *d);
 #endif
 
@@ -597,7 +597,7 @@ static inline int xsm_mem_paging (xsm_default_t def, struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
 {
     return xsm_ops->mem_sharing(d);
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index c9a566f2b5..5705e52791 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -128,7 +128,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
     set_to_dummy_if_null(ops, mem_paging);
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     set_to_dummy_if_null(ops, mem_sharing);
 #endif
 
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index a7d690ac3c..791c1f66af 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1262,7 +1262,7 @@ static int flask_mem_paging(struct domain *d)
 }
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
 static int flask_mem_sharing(struct domain *d)
 {
     return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__MEM_SHARING);
@@ -1829,7 +1829,7 @@ static struct xsm_operations flask_ops = {
     .mem_paging = flask_mem_paging,
 #endif
 
-#ifdef CONFIG_HAS_MEM_SHARING
+#ifdef CONFIG_MEM_SHARING
     .mem_sharing = flask_mem_sharing,
 #endif
 
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
@ 2019-05-17  7:21   ` Jan Beulich
  2019-05-17  7:21     ` [Xen-devel] " Jan Beulich
  2019-05-17 20:04     ` Tamas K Lengyel
  2019-06-17 12:21   ` Tamas K Lengyel
  2 siblings, 2 replies; 30+ messages in thread
From: Jan Beulich @ 2019-05-17  7:21 UTC (permalink / raw)
  To: Tamas K Lengyel
  Cc: George Dunlap, Andrew Cooper, Wei Liu, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> --- a/xen/include/asm-x86/mm.h
> +++ b/xen/include/asm-x86/mm.h
> @@ -356,24 +356,15 @@ struct platform_bad_page {
>  const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
>  
>  /* Per page locks:
> - * page_lock() is used for two purposes: pte serialization, and memory sharing.
> + * page_lock() is used for pte serialization.
>   *
>   * All users of page lock for pte serialization live in mm.c, use it
>   * to lock a page table page during pte updates, do not take other locks within
>   * the critical section delimited by page_lock/unlock, and perform no
>   * nesting.
>   *
> - * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
> - * is used in memory sharing to protect addition (share) and removal (unshare)
> - * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
> - * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
> - * is avoided by locking pages in increasing order.
> - * All memory sharing code paths take the p2m lock of the affected gfn before
> - * taking the lock for the underlying page. We enforce ordering between page_lock
> - * and p2m_lock using an mm-locks.h construct.
> - *
> - * These two users (pte serialization and memory sharing) do not collide, since
> - * sharing is only supported for hvm guests, which do not perform pv pte updates.
> + * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
> + * only supported for hvm guests, which do not perform pv pte updates.

Hmm, I thought we had agreed on you also correcting the wording of
the sentence you now retain (as requested). As said before, a HVM
(PVH to be precise) Dom0 can very well perform PV PTE updates, just
not on itself. I had suggested the wording "which do not have PV PTEs
updated" - I'd be fine for this to be folded in while committing, to avoid
another round trip. With this
Acked-by: Jan Beulich <jbeulich@suse.com>

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-17  7:21   ` Jan Beulich
@ 2019-05-17  7:21     ` " Jan Beulich
  2019-05-17 20:04     ` Tamas K Lengyel
  1 sibling, 0 replies; 30+ messages in thread
From: Jan Beulich @ 2019-05-17  7:21 UTC (permalink / raw)
  To: Tamas K Lengyel
  Cc: George Dunlap, Andrew Cooper, Wei Liu, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> --- a/xen/include/asm-x86/mm.h
> +++ b/xen/include/asm-x86/mm.h
> @@ -356,24 +356,15 @@ struct platform_bad_page {
>  const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
>  
>  /* Per page locks:
> - * page_lock() is used for two purposes: pte serialization, and memory sharing.
> + * page_lock() is used for pte serialization.
>   *
>   * All users of page lock for pte serialization live in mm.c, use it
>   * to lock a page table page during pte updates, do not take other locks within
>   * the critical section delimited by page_lock/unlock, and perform no
>   * nesting.
>   *
> - * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
> - * is used in memory sharing to protect addition (share) and removal (unshare)
> - * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
> - * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
> - * is avoided by locking pages in increasing order.
> - * All memory sharing code paths take the p2m lock of the affected gfn before
> - * taking the lock for the underlying page. We enforce ordering between page_lock
> - * and p2m_lock using an mm-locks.h construct.
> - *
> - * These two users (pte serialization and memory sharing) do not collide, since
> - * sharing is only supported for hvm guests, which do not perform pv pte updates.
> + * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
> + * only supported for hvm guests, which do not perform pv pte updates.

Hmm, I thought we had agreed on you also correcting the wording of
the sentence you now retain (as requested). As said before, a HVM
(PVH to be precise) Dom0 can very well perform PV PTE updates, just
not on itself. I had suggested the wording "which do not have PV PTEs
updated" - I'd be fine for this to be folded in while committing, to avoid
another round trip. With this
Acked-by: Jan Beulich <jbeulich@suse.com>

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
@ 2019-05-17  7:23   ` Jan Beulich
  2019-05-17  7:23     ` [Xen-devel] " Jan Beulich
  2019-06-03  8:26   ` Jan Beulich
  2019-06-17 12:17   ` Tamas K Lengyel
  3 siblings, 1 reply; 30+ messages in thread
From: Jan Beulich @ 2019-05-17  7:23 UTC (permalink / raw)
  To: Tamas K Lengyel
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> Disable it by default as it is only an experimental subsystem.
> 
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

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



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-17  7:23   ` Jan Beulich
@ 2019-05-17  7:23     ` " Jan Beulich
  0 siblings, 0 replies; 30+ messages in thread
From: Jan Beulich @ 2019-05-17  7:23 UTC (permalink / raw)
  To: Tamas K Lengyel
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> Disable it by default as it is only an experimental subsystem.
> 
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

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



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-17  7:21   ` Jan Beulich
  2019-05-17  7:21     ` [Xen-devel] " Jan Beulich
@ 2019-05-17 20:04     ` Tamas K Lengyel
  2019-05-17 20:04       ` [Xen-devel] " Tamas K Lengyel
  1 sibling, 1 reply; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-17 20:04 UTC (permalink / raw)
  To: Jan Beulich
  Cc: George Dunlap, Andrew Cooper, Wei Liu, xen-devel, Roger Pau Monne

On Fri, May 17, 2019 at 1:21 AM Jan Beulich <JBeulich@suse.com> wrote:
>
> >>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> > --- a/xen/include/asm-x86/mm.h
> > +++ b/xen/include/asm-x86/mm.h
> > @@ -356,24 +356,15 @@ struct platform_bad_page {
> >  const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
> >
> >  /* Per page locks:
> > - * page_lock() is used for two purposes: pte serialization, and memory sharing.
> > + * page_lock() is used for pte serialization.
> >   *
> >   * All users of page lock for pte serialization live in mm.c, use it
> >   * to lock a page table page during pte updates, do not take other locks within
> >   * the critical section delimited by page_lock/unlock, and perform no
> >   * nesting.
> >   *
> > - * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
> > - * is used in memory sharing to protect addition (share) and removal (unshare)
> > - * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
> > - * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
> > - * is avoided by locking pages in increasing order.
> > - * All memory sharing code paths take the p2m lock of the affected gfn before
> > - * taking the lock for the underlying page. We enforce ordering between page_lock
> > - * and p2m_lock using an mm-locks.h construct.
> > - *
> > - * These two users (pte serialization and memory sharing) do not collide, since
> > - * sharing is only supported for hvm guests, which do not perform pv pte updates.
> > + * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
> > + * only supported for hvm guests, which do not perform pv pte updates.
>
> Hmm, I thought we had agreed on you also correcting the wording of
> the sentence you now retain (as requested). As said before, a HVM
> (PVH to be precise) Dom0 can very well perform PV PTE updates, just
> not on itself. I had suggested the wording "which do not have PV PTEs
> updated" - I'd be fine for this to be folded in while committing, to avoid
> another round trip. With this

Thanks, I do seem to have missed that.

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-17 20:04     ` Tamas K Lengyel
@ 2019-05-17 20:04       ` " Tamas K Lengyel
  0 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-05-17 20:04 UTC (permalink / raw)
  To: Jan Beulich
  Cc: George Dunlap, Andrew Cooper, Wei Liu, xen-devel, Roger Pau Monne

On Fri, May 17, 2019 at 1:21 AM Jan Beulich <JBeulich@suse.com> wrote:
>
> >>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> > --- a/xen/include/asm-x86/mm.h
> > +++ b/xen/include/asm-x86/mm.h
> > @@ -356,24 +356,15 @@ struct platform_bad_page {
> >  const struct platform_bad_page *get_platform_badpages(unsigned int *array_size);
> >
> >  /* Per page locks:
> > - * page_lock() is used for two purposes: pte serialization, and memory sharing.
> > + * page_lock() is used for pte serialization.
> >   *
> >   * All users of page lock for pte serialization live in mm.c, use it
> >   * to lock a page table page during pte updates, do not take other locks within
> >   * the critical section delimited by page_lock/unlock, and perform no
> >   * nesting.
> >   *
> > - * All users of page lock for memory sharing live in mm/mem_sharing.c. Page_lock
> > - * is used in memory sharing to protect addition (share) and removal (unshare)
> > - * of (gfn,domain) tupples to a list of gfn's that the shared page is currently
> > - * backing. Nesting may happen when sharing (and locking) two pages -- deadlock
> > - * is avoided by locking pages in increasing order.
> > - * All memory sharing code paths take the p2m lock of the affected gfn before
> > - * taking the lock for the underlying page. We enforce ordering between page_lock
> > - * and p2m_lock using an mm-locks.h construct.
> > - *
> > - * These two users (pte serialization and memory sharing) do not collide, since
> > - * sharing is only supported for hvm guests, which do not perform pv pte updates.
> > + * The use of PGT_locked in mem_sharing does not collide, since mem_sharing is
> > + * only supported for hvm guests, which do not perform pv pte updates.
>
> Hmm, I thought we had agreed on you also correcting the wording of
> the sentence you now retain (as requested). As said before, a HVM
> (PVH to be precise) Dom0 can very well perform PV PTE updates, just
> not on itself. I had suggested the wording "which do not have PV PTEs
> updated" - I'd be fine for this to be folded in while committing, to avoid
> another round trip. With this

Thanks, I do seem to have missed that.

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
  2019-05-17  7:23   ` Jan Beulich
@ 2019-06-03  8:26   ` Jan Beulich
  2019-06-03  8:26     ` [Xen-devel] " Jan Beulich
                       ` (2 more replies)
  2019-06-17 12:17   ` Tamas K Lengyel
  3 siblings, 3 replies; 30+ messages in thread
From: Jan Beulich @ 2019-06-03  8:26 UTC (permalink / raw)
  To: Daniel de Graaf
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, Tamas K Lengyel, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> Disable it by default as it is only an experimental subsystem.
> 
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> Cc: Jan Beulich <jbeulich@suse.com>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> Cc: Wei Liu <wei.liu2@citrix.com>
> Cc: Roger Pau Monne <roger.pau@citrix.com>
> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Julien Grall <julien.grall@arm.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Tim Deegan <tim@xen.org>
> Cc: George Dunlap <george.dunlap@eu.citrix.com>
> ----
> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other 
> fixups
> ---
>  xen/arch/x86/Kconfig              |  6 +++++-
>  xen/arch/x86/domain.c             |  2 ++
>  xen/arch/x86/domctl.c             |  2 ++
>  xen/arch/x86/mm/Makefile          |  2 +-
>  xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>  xen/arch/x86/x86_64/mm.c          |  2 ++
>  xen/common/Kconfig                |  3 ---
>  xen/common/domain.c               |  2 +-
>  xen/common/grant_table.c          |  2 +-
>  xen/common/memory.c               |  2 +-
>  xen/common/vm_event.c             |  6 +++---
>  xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>  xen/include/asm-x86/mm.h          |  3 +++
>  xen/include/xen/sched.h           |  2 +-
>  xen/include/xsm/dummy.h           |  2 +-
>  xen/include/xsm/xsm.h             |  4 ++--
>  xen/xsm/dummy.c                   |  2 +-
>  xen/xsm/flask/hooks.c             |  4 ++--
>  18 files changed, 58 insertions(+), 18 deletions(-)

Daniel, it looks like you weren't Cc-ed here, but your ack is needed.

Jan

> diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
> index 4b8b07b549..600ca5c12e 100644
> --- a/xen/arch/x86/Kconfig
> +++ b/xen/arch/x86/Kconfig
> @@ -17,7 +17,6 @@ config X86
>  	select HAS_KEXEC
>  	select MEM_ACCESS_ALWAYS_ON
>  	select HAS_MEM_PAGING
> -	select HAS_MEM_SHARING
>  	select HAS_NS16550
>  	select HAS_PASSTHROUGH
>  	select HAS_PCI
> @@ -198,6 +197,11 @@ config PV_SHIM_EXCLUSIVE
>  	  firmware, and will not function correctly in other scenarios.
>  
>  	  If unsure, say N.
> +
> +config MEM_SHARING
> +	bool "Xen memory sharing support" if EXPERT = "y"
> +	depends on HVM
> +
>  endmenu
>  
>  source "common/Kconfig"
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index d2d9f2fc3c..474df8433b 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -2046,6 +2046,7 @@ int domain_relinquish_resources(struct domain *d)
>              d->arch.auto_unmask = 0;
>          }
>  
> +#ifdef CONFIG_MEM_SHARING
>      PROGRESS(shared):
>  
>          if ( is_hvm_domain(d) )
> @@ -2056,6 +2057,7 @@ int domain_relinquish_resources(struct domain *d)
>              if ( ret )
>                  return ret;
>          }
> +#endif
>  
>          spin_lock(&d->page_alloc_lock);
>          page_list_splice(&d->arch.relmem_list, &d->page_list);
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index 9bf2d0820f..bc9e024ccc 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -1231,9 +1231,11 @@ long arch_do_domctl(
>          break;
>      }
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XEN_DOMCTL_mem_sharing_op:
>          ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op);
>          break;
> +#endif
>  
>  #if P2M_AUDIT && defined(CONFIG_HVM)
>      case XEN_DOMCTL_audit_p2m:
> diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
> index 5a17646f98..5010a29d6c 100644
> --- a/xen/arch/x86/mm/Makefile
> +++ b/xen/arch/x86/mm/Makefile
> @@ -6,7 +6,7 @@ obj-$(CONFIG_HVM) += guest_walk_2.o guest_walk_3.o 
> guest_walk_4.o
>  obj-$(CONFIG_SHADOW_PAGING) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
>  obj-$(CONFIG_MEM_ACCESS) += mem_access.o
>  obj-y += mem_paging.o
> -obj-y += mem_sharing.o
> +obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
>  obj-y += p2m.o p2m-pt.o
>  obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o
>  obj-y += paging.o
> diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
> index 32410ed273..d4c6be3032 100644
> --- a/xen/arch/x86/x86_64/compat/mm.c
> +++ b/xen/arch/x86/x86_64/compat/mm.c
> @@ -152,8 +152,10 @@ int compat_arch_memory_op(unsigned long cmd, 
> XEN_GUEST_HANDLE_PARAM(void) arg)
>      case XENMEM_paging_op:
>          return mem_paging_memop(guest_handle_cast(arg, 
> xen_mem_paging_op_t));
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XENMEM_sharing_op:
>          return mem_sharing_memop(guest_handle_cast(arg, 
> xen_mem_sharing_op_t));
> +#endif
>  
>      default:
>          rc = -ENOSYS;
> diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
> index d8f558bc3a..51d1d511f2 100644
> --- a/xen/arch/x86/x86_64/mm.c
> +++ b/xen/arch/x86/x86_64/mm.c
> @@ -993,8 +993,10 @@ long subarch_memory_op(unsigned long cmd, 
> XEN_GUEST_HANDLE_PARAM(void) arg)
>      case XENMEM_paging_op:
>          return mem_paging_memop(guest_handle_cast(arg, 
> xen_mem_paging_op_t));
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XENMEM_sharing_op:
>          return mem_sharing_memop(guest_handle_cast(arg, 
> xen_mem_sharing_op_t));
> +#endif
>  
>      default:
>          rc = -ENOSYS;
> diff --git a/xen/common/Kconfig b/xen/common/Kconfig
> index 7a12346f19..6e28fc48af 100644
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -45,9 +45,6 @@ config MEM_ACCESS
>  config HAS_MEM_PAGING
>  	bool
>  
> -config HAS_MEM_SHARING
> -	bool
> -
>  config HAS_PDX
>  	bool
>  
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index 90c66079f9..0815cf8f07 100644
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -923,7 +923,7 @@ static void complete_domain_destroy(struct rcu_head 
> *head)
>      xfree(d->vm_event_paging);
>  #endif
>      xfree(d->vm_event_monitor);
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      xfree(d->vm_event_share);
>  #endif
>  
> diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
> index 80728ea57d..6c40dccae9 100644
> --- a/xen/common/grant_table.c
> +++ b/xen/common/grant_table.c
> @@ -3760,7 +3760,7 @@ void grant_table_init_vcpu(struct vcpu *v)
>      v->maptrack_tail = MAPTRACK_TAIL;
>  }
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref,
>                              gfn_t *gfn, uint16_t *status)
>  {
> diff --git a/xen/common/memory.c b/xen/common/memory.c
> index 520d6f4803..69851f4344 100644
> --- a/xen/common/memory.c
> +++ b/xen/common/memory.c
> @@ -1671,7 +1671,7 @@ int check_get_page_from_gfn(struct domain *d, gfn_t 
> gfn, bool readonly,
>          return -EAGAIN;
>      }
>  #endif
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      if ( (q & P2M_UNSHARE) && p2m_is_shared(p2mt) )
>      {
>          if ( page )
> diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
> index 6e68be47bc..163a671cea 100644
> --- a/xen/common/vm_event.c
> +++ b/xen/common/vm_event.c
> @@ -544,7 +544,7 @@ static void monitor_notification(struct vcpu *v, unsigned 
> int port)
>      vm_event_resume(v->domain, v->domain->vm_event_monitor);
>  }
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  /* Registered with Xen-bound event channel for incoming notifications. */
>  static void mem_sharing_notification(struct vcpu *v, unsigned int port)
>  {
> @@ -574,7 +574,7 @@ void vm_event_cleanup(struct domain *d)
>          destroy_waitqueue_head(&d->vm_event_monitor->wq);
>          (void)vm_event_disable(d, &d->vm_event_monitor);
>      }
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      if ( vm_event_check_ring(d->vm_event_share) )
>      {
>          destroy_waitqueue_head(&d->vm_event_share->wq);
> @@ -720,7 +720,7 @@ int vm_event_domctl(struct domain *d, struct 
> xen_domctl_vm_event_op *vec,
>      }
>      break;
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      case XEN_DOMCTL_VM_EVENT_OP_SHARING:
>      {
>          rc = -EINVAL;
> diff --git a/xen/include/asm-x86/mem_sharing.h 
> b/xen/include/asm-x86/mem_sharing.h
> index afd0c17292..db22468744 100644
> --- a/xen/include/asm-x86/mem_sharing.h
> +++ b/xen/include/asm-x86/mem_sharing.h
> @@ -24,6 +24,8 @@
>  #include <public/domctl.h>
>  #include <public/memory.h>
>  
> +#ifdef CONFIG_MEM_SHARING
> +
>  /* Auditing of memory sharing code? */
>  #ifndef NDEBUG
>  #define MEM_SHARING_AUDIT 1
> @@ -99,4 +101,30 @@ int mem_sharing_domctl(struct domain *d,
>   */
>  int relinquish_shared_pages(struct domain *d);
>  
> +#else
> +
> +static inline unsigned int mem_sharing_get_nr_saved_mfns(void)
> +{
> +    return 0;
> +}
> +static inline unsigned int mem_sharing_get_nr_shared_mfns(void)
> +{
> +    return 0;
> +}
> +static inline int mem_sharing_unshare_page(struct domain *d,
> +                                           unsigned long gfn,
> +                                           uint16_t flags)
> +{
> +    ASSERT_UNREACHABLE();
> +    return -EOPNOTSUPP;
> +}
> +static inline int mem_sharing_notify_enomem(struct domain *d, unsigned long 
> gfn,
> +                              bool allow_sleep)
> +{
> +    ASSERT_UNREACHABLE();
> +    return -EOPNOTSUPP;
> +}
> +
> +#endif
> +
>  #endif /* __MEM_SHARING_H__ */
> diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
> index 24c4205ba7..d8ab53d688 100644
> --- a/xen/include/asm-x86/mm.h
> +++ b/xen/include/asm-x86/mm.h
> @@ -127,6 +127,8 @@ struct page_info
>          /* For non-pinnable single-page shadows, a higher entry that points
>           * at us. */
>          paddr_t up;
> +
> +#ifdef CONFIG_MEM_SHARING
>          /* For shared/sharable pages, we use a doubly-linked list
>           * of all the {pfn,domain} pairs that map this page. We also 
> include
>           * an opaque handle, which is effectively a version, so that 
> clients
> @@ -134,6 +136,7 @@ struct page_info
>           * This list is allocated and freed when a page is shared/unshared.
>           */
>          struct page_sharing_info *sharing;
> +#endif
>      };
>  
>      /* Reference count and various PGC_xxx flags and fields. */
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 2201faca6b..410c74489f 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -459,7 +459,7 @@ struct domain
>      /* Various vm_events */
>  
>      /* Memory sharing support */
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      struct vm_event_domain *vm_event_share;
>  #endif
>      /* Memory paging support */
> diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
> index 01d2814fed..ef52bb1764 100644
> --- a/xen/include/xsm/dummy.h
> +++ b/xen/include/xsm/dummy.h
> @@ -597,7 +597,7 @@ static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG 
> struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static XSM_INLINE int xsm_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
>  {
>      XSM_ASSERT_ACTION(XSM_DM_PRIV);
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index 9a90355056..d61ba77374 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -150,7 +150,7 @@ struct xsm_operations {
>      int (*mem_paging) (struct domain *d);
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      int (*mem_sharing) (struct domain *d);
>  #endif
>  
> @@ -597,7 +597,7 @@ static inline int xsm_mem_paging (xsm_default_t def, 
> struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
>  {
>      return xsm_ops->mem_sharing(d);
> diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
> index c9a566f2b5..5705e52791 100644
> --- a/xen/xsm/dummy.c
> +++ b/xen/xsm/dummy.c
> @@ -128,7 +128,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
>      set_to_dummy_if_null(ops, mem_paging);
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      set_to_dummy_if_null(ops, mem_sharing);
>  #endif
>  
> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index a7d690ac3c..791c1f66af 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1262,7 +1262,7 @@ static int flask_mem_paging(struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static int flask_mem_sharing(struct domain *d)
>  {
>      return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__MEM_SHARING);
> @@ -1829,7 +1829,7 @@ static struct xsm_operations flask_ops = {
>      .mem_paging = flask_mem_paging,
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      .mem_sharing = flask_mem_sharing,
>  #endif
>  
> -- 
> 2.20.1




_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03  8:26   ` Jan Beulich
@ 2019-06-03  8:26     ` " Jan Beulich
  2019-06-03 16:38     ` Tamas K Lengyel
  2019-06-04 14:36     ` Daniel De Graaf
  2 siblings, 0 replies; 30+ messages in thread
From: Jan Beulich @ 2019-06-03  8:26 UTC (permalink / raw)
  To: Daniel de Graaf
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, Tamas K Lengyel, xen-devel, Roger Pau Monne

>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> Disable it by default as it is only an experimental subsystem.
> 
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> Cc: Jan Beulich <jbeulich@suse.com>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> Cc: Wei Liu <wei.liu2@citrix.com>
> Cc: Roger Pau Monne <roger.pau@citrix.com>
> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Julien Grall <julien.grall@arm.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Tim Deegan <tim@xen.org>
> Cc: George Dunlap <george.dunlap@eu.citrix.com>
> ----
> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other 
> fixups
> ---
>  xen/arch/x86/Kconfig              |  6 +++++-
>  xen/arch/x86/domain.c             |  2 ++
>  xen/arch/x86/domctl.c             |  2 ++
>  xen/arch/x86/mm/Makefile          |  2 +-
>  xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>  xen/arch/x86/x86_64/mm.c          |  2 ++
>  xen/common/Kconfig                |  3 ---
>  xen/common/domain.c               |  2 +-
>  xen/common/grant_table.c          |  2 +-
>  xen/common/memory.c               |  2 +-
>  xen/common/vm_event.c             |  6 +++---
>  xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>  xen/include/asm-x86/mm.h          |  3 +++
>  xen/include/xen/sched.h           |  2 +-
>  xen/include/xsm/dummy.h           |  2 +-
>  xen/include/xsm/xsm.h             |  4 ++--
>  xen/xsm/dummy.c                   |  2 +-
>  xen/xsm/flask/hooks.c             |  4 ++--
>  18 files changed, 58 insertions(+), 18 deletions(-)

Daniel, it looks like you weren't Cc-ed here, but your ack is needed.

Jan

> diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
> index 4b8b07b549..600ca5c12e 100644
> --- a/xen/arch/x86/Kconfig
> +++ b/xen/arch/x86/Kconfig
> @@ -17,7 +17,6 @@ config X86
>  	select HAS_KEXEC
>  	select MEM_ACCESS_ALWAYS_ON
>  	select HAS_MEM_PAGING
> -	select HAS_MEM_SHARING
>  	select HAS_NS16550
>  	select HAS_PASSTHROUGH
>  	select HAS_PCI
> @@ -198,6 +197,11 @@ config PV_SHIM_EXCLUSIVE
>  	  firmware, and will not function correctly in other scenarios.
>  
>  	  If unsure, say N.
> +
> +config MEM_SHARING
> +	bool "Xen memory sharing support" if EXPERT = "y"
> +	depends on HVM
> +
>  endmenu
>  
>  source "common/Kconfig"
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index d2d9f2fc3c..474df8433b 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -2046,6 +2046,7 @@ int domain_relinquish_resources(struct domain *d)
>              d->arch.auto_unmask = 0;
>          }
>  
> +#ifdef CONFIG_MEM_SHARING
>      PROGRESS(shared):
>  
>          if ( is_hvm_domain(d) )
> @@ -2056,6 +2057,7 @@ int domain_relinquish_resources(struct domain *d)
>              if ( ret )
>                  return ret;
>          }
> +#endif
>  
>          spin_lock(&d->page_alloc_lock);
>          page_list_splice(&d->arch.relmem_list, &d->page_list);
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index 9bf2d0820f..bc9e024ccc 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -1231,9 +1231,11 @@ long arch_do_domctl(
>          break;
>      }
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XEN_DOMCTL_mem_sharing_op:
>          ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op);
>          break;
> +#endif
>  
>  #if P2M_AUDIT && defined(CONFIG_HVM)
>      case XEN_DOMCTL_audit_p2m:
> diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
> index 5a17646f98..5010a29d6c 100644
> --- a/xen/arch/x86/mm/Makefile
> +++ b/xen/arch/x86/mm/Makefile
> @@ -6,7 +6,7 @@ obj-$(CONFIG_HVM) += guest_walk_2.o guest_walk_3.o 
> guest_walk_4.o
>  obj-$(CONFIG_SHADOW_PAGING) += guest_walk_2.o guest_walk_3.o guest_walk_4.o
>  obj-$(CONFIG_MEM_ACCESS) += mem_access.o
>  obj-y += mem_paging.o
> -obj-y += mem_sharing.o
> +obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
>  obj-y += p2m.o p2m-pt.o
>  obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o
>  obj-y += paging.o
> diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
> index 32410ed273..d4c6be3032 100644
> --- a/xen/arch/x86/x86_64/compat/mm.c
> +++ b/xen/arch/x86/x86_64/compat/mm.c
> @@ -152,8 +152,10 @@ int compat_arch_memory_op(unsigned long cmd, 
> XEN_GUEST_HANDLE_PARAM(void) arg)
>      case XENMEM_paging_op:
>          return mem_paging_memop(guest_handle_cast(arg, 
> xen_mem_paging_op_t));
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XENMEM_sharing_op:
>          return mem_sharing_memop(guest_handle_cast(arg, 
> xen_mem_sharing_op_t));
> +#endif
>  
>      default:
>          rc = -ENOSYS;
> diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
> index d8f558bc3a..51d1d511f2 100644
> --- a/xen/arch/x86/x86_64/mm.c
> +++ b/xen/arch/x86/x86_64/mm.c
> @@ -993,8 +993,10 @@ long subarch_memory_op(unsigned long cmd, 
> XEN_GUEST_HANDLE_PARAM(void) arg)
>      case XENMEM_paging_op:
>          return mem_paging_memop(guest_handle_cast(arg, 
> xen_mem_paging_op_t));
>  
> +#ifdef CONFIG_MEM_SHARING
>      case XENMEM_sharing_op:
>          return mem_sharing_memop(guest_handle_cast(arg, 
> xen_mem_sharing_op_t));
> +#endif
>  
>      default:
>          rc = -ENOSYS;
> diff --git a/xen/common/Kconfig b/xen/common/Kconfig
> index 7a12346f19..6e28fc48af 100644
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -45,9 +45,6 @@ config MEM_ACCESS
>  config HAS_MEM_PAGING
>  	bool
>  
> -config HAS_MEM_SHARING
> -	bool
> -
>  config HAS_PDX
>  	bool
>  
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index 90c66079f9..0815cf8f07 100644
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -923,7 +923,7 @@ static void complete_domain_destroy(struct rcu_head 
> *head)
>      xfree(d->vm_event_paging);
>  #endif
>      xfree(d->vm_event_monitor);
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      xfree(d->vm_event_share);
>  #endif
>  
> diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
> index 80728ea57d..6c40dccae9 100644
> --- a/xen/common/grant_table.c
> +++ b/xen/common/grant_table.c
> @@ -3760,7 +3760,7 @@ void grant_table_init_vcpu(struct vcpu *v)
>      v->maptrack_tail = MAPTRACK_TAIL;
>  }
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref,
>                              gfn_t *gfn, uint16_t *status)
>  {
> diff --git a/xen/common/memory.c b/xen/common/memory.c
> index 520d6f4803..69851f4344 100644
> --- a/xen/common/memory.c
> +++ b/xen/common/memory.c
> @@ -1671,7 +1671,7 @@ int check_get_page_from_gfn(struct domain *d, gfn_t 
> gfn, bool readonly,
>          return -EAGAIN;
>      }
>  #endif
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      if ( (q & P2M_UNSHARE) && p2m_is_shared(p2mt) )
>      {
>          if ( page )
> diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
> index 6e68be47bc..163a671cea 100644
> --- a/xen/common/vm_event.c
> +++ b/xen/common/vm_event.c
> @@ -544,7 +544,7 @@ static void monitor_notification(struct vcpu *v, unsigned 
> int port)
>      vm_event_resume(v->domain, v->domain->vm_event_monitor);
>  }
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  /* Registered with Xen-bound event channel for incoming notifications. */
>  static void mem_sharing_notification(struct vcpu *v, unsigned int port)
>  {
> @@ -574,7 +574,7 @@ void vm_event_cleanup(struct domain *d)
>          destroy_waitqueue_head(&d->vm_event_monitor->wq);
>          (void)vm_event_disable(d, &d->vm_event_monitor);
>      }
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      if ( vm_event_check_ring(d->vm_event_share) )
>      {
>          destroy_waitqueue_head(&d->vm_event_share->wq);
> @@ -720,7 +720,7 @@ int vm_event_domctl(struct domain *d, struct 
> xen_domctl_vm_event_op *vec,
>      }
>      break;
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      case XEN_DOMCTL_VM_EVENT_OP_SHARING:
>      {
>          rc = -EINVAL;
> diff --git a/xen/include/asm-x86/mem_sharing.h 
> b/xen/include/asm-x86/mem_sharing.h
> index afd0c17292..db22468744 100644
> --- a/xen/include/asm-x86/mem_sharing.h
> +++ b/xen/include/asm-x86/mem_sharing.h
> @@ -24,6 +24,8 @@
>  #include <public/domctl.h>
>  #include <public/memory.h>
>  
> +#ifdef CONFIG_MEM_SHARING
> +
>  /* Auditing of memory sharing code? */
>  #ifndef NDEBUG
>  #define MEM_SHARING_AUDIT 1
> @@ -99,4 +101,30 @@ int mem_sharing_domctl(struct domain *d,
>   */
>  int relinquish_shared_pages(struct domain *d);
>  
> +#else
> +
> +static inline unsigned int mem_sharing_get_nr_saved_mfns(void)
> +{
> +    return 0;
> +}
> +static inline unsigned int mem_sharing_get_nr_shared_mfns(void)
> +{
> +    return 0;
> +}
> +static inline int mem_sharing_unshare_page(struct domain *d,
> +                                           unsigned long gfn,
> +                                           uint16_t flags)
> +{
> +    ASSERT_UNREACHABLE();
> +    return -EOPNOTSUPP;
> +}
> +static inline int mem_sharing_notify_enomem(struct domain *d, unsigned long 
> gfn,
> +                              bool allow_sleep)
> +{
> +    ASSERT_UNREACHABLE();
> +    return -EOPNOTSUPP;
> +}
> +
> +#endif
> +
>  #endif /* __MEM_SHARING_H__ */
> diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
> index 24c4205ba7..d8ab53d688 100644
> --- a/xen/include/asm-x86/mm.h
> +++ b/xen/include/asm-x86/mm.h
> @@ -127,6 +127,8 @@ struct page_info
>          /* For non-pinnable single-page shadows, a higher entry that points
>           * at us. */
>          paddr_t up;
> +
> +#ifdef CONFIG_MEM_SHARING
>          /* For shared/sharable pages, we use a doubly-linked list
>           * of all the {pfn,domain} pairs that map this page. We also 
> include
>           * an opaque handle, which is effectively a version, so that 
> clients
> @@ -134,6 +136,7 @@ struct page_info
>           * This list is allocated and freed when a page is shared/unshared.
>           */
>          struct page_sharing_info *sharing;
> +#endif
>      };
>  
>      /* Reference count and various PGC_xxx flags and fields. */
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 2201faca6b..410c74489f 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -459,7 +459,7 @@ struct domain
>      /* Various vm_events */
>  
>      /* Memory sharing support */
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      struct vm_event_domain *vm_event_share;
>  #endif
>      /* Memory paging support */
> diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
> index 01d2814fed..ef52bb1764 100644
> --- a/xen/include/xsm/dummy.h
> +++ b/xen/include/xsm/dummy.h
> @@ -597,7 +597,7 @@ static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG 
> struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static XSM_INLINE int xsm_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
>  {
>      XSM_ASSERT_ACTION(XSM_DM_PRIV);
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index 9a90355056..d61ba77374 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -150,7 +150,7 @@ struct xsm_operations {
>      int (*mem_paging) (struct domain *d);
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      int (*mem_sharing) (struct domain *d);
>  #endif
>  
> @@ -597,7 +597,7 @@ static inline int xsm_mem_paging (xsm_default_t def, 
> struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
>  {
>      return xsm_ops->mem_sharing(d);
> diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
> index c9a566f2b5..5705e52791 100644
> --- a/xen/xsm/dummy.c
> +++ b/xen/xsm/dummy.c
> @@ -128,7 +128,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
>      set_to_dummy_if_null(ops, mem_paging);
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      set_to_dummy_if_null(ops, mem_sharing);
>  #endif
>  
> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index a7d690ac3c..791c1f66af 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1262,7 +1262,7 @@ static int flask_mem_paging(struct domain *d)
>  }
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>  static int flask_mem_sharing(struct domain *d)
>  {
>      return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__MEM_SHARING);
> @@ -1829,7 +1829,7 @@ static struct xsm_operations flask_ops = {
>      .mem_paging = flask_mem_paging,
>  #endif
>  
> -#ifdef CONFIG_HAS_MEM_SHARING
> +#ifdef CONFIG_MEM_SHARING
>      .mem_sharing = flask_mem_sharing,
>  #endif
>  
> -- 
> 2.20.1




_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03  8:26   ` Jan Beulich
  2019-06-03  8:26     ` [Xen-devel] " Jan Beulich
@ 2019-06-03 16:38     ` Tamas K Lengyel
  2019-06-03 16:38       ` [Xen-devel] " Tamas K Lengyel
                         ` (2 more replies)
  2019-06-04 14:36     ` Daniel De Graaf
  2 siblings, 3 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-03 16:38 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, Julien Grall, xen-devel, Daniel de Graaf,
	Roger Pau Monne

On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>
> >>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> > Disable it by default as it is only an experimental subsystem.
> >
> > Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> > Cc: Jan Beulich <jbeulich@suse.com>
> > Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> > Cc: Wei Liu <wei.liu2@citrix.com>
> > Cc: Roger Pau Monne <roger.pau@citrix.com>
> > Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> > Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> > Cc: Julien Grall <julien.grall@arm.com>
> > Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > Cc: Tim Deegan <tim@xen.org>
> > Cc: George Dunlap <george.dunlap@eu.citrix.com>
> > ----
> > v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
> > fixups
> > ---
> >  xen/arch/x86/Kconfig              |  6 +++++-
> >  xen/arch/x86/domain.c             |  2 ++
> >  xen/arch/x86/domctl.c             |  2 ++
> >  xen/arch/x86/mm/Makefile          |  2 +-
> >  xen/arch/x86/x86_64/compat/mm.c   |  2 ++
> >  xen/arch/x86/x86_64/mm.c          |  2 ++
> >  xen/common/Kconfig                |  3 ---
> >  xen/common/domain.c               |  2 +-
> >  xen/common/grant_table.c          |  2 +-
> >  xen/common/memory.c               |  2 +-
> >  xen/common/vm_event.c             |  6 +++---
> >  xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
> >  xen/include/asm-x86/mm.h          |  3 +++
> >  xen/include/xen/sched.h           |  2 +-
> >  xen/include/xsm/dummy.h           |  2 +-
> >  xen/include/xsm/xsm.h             |  4 ++--
> >  xen/xsm/dummy.c                   |  2 +-
> >  xen/xsm/flask/hooks.c             |  4 ++--
> >  18 files changed, 58 insertions(+), 18 deletions(-)
>
> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.

Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:38     ` Tamas K Lengyel
@ 2019-06-03 16:38       ` " Tamas K Lengyel
  2019-06-03 16:40       ` Julien Grall
  2019-06-04  8:41       ` Razvan Cojocaru
  2 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-03 16:38 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, Julien Grall, xen-devel, Daniel de Graaf,
	Roger Pau Monne

On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>
> >>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> > Disable it by default as it is only an experimental subsystem.
> >
> > Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> > Cc: Jan Beulich <jbeulich@suse.com>
> > Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> > Cc: Wei Liu <wei.liu2@citrix.com>
> > Cc: Roger Pau Monne <roger.pau@citrix.com>
> > Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> > Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> > Cc: Julien Grall <julien.grall@arm.com>
> > Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > Cc: Tim Deegan <tim@xen.org>
> > Cc: George Dunlap <george.dunlap@eu.citrix.com>
> > ----
> > v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
> > fixups
> > ---
> >  xen/arch/x86/Kconfig              |  6 +++++-
> >  xen/arch/x86/domain.c             |  2 ++
> >  xen/arch/x86/domctl.c             |  2 ++
> >  xen/arch/x86/mm/Makefile          |  2 +-
> >  xen/arch/x86/x86_64/compat/mm.c   |  2 ++
> >  xen/arch/x86/x86_64/mm.c          |  2 ++
> >  xen/common/Kconfig                |  3 ---
> >  xen/common/domain.c               |  2 +-
> >  xen/common/grant_table.c          |  2 +-
> >  xen/common/memory.c               |  2 +-
> >  xen/common/vm_event.c             |  6 +++---
> >  xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
> >  xen/include/asm-x86/mm.h          |  3 +++
> >  xen/include/xen/sched.h           |  2 +-
> >  xen/include/xsm/dummy.h           |  2 +-
> >  xen/include/xsm/xsm.h             |  4 ++--
> >  xen/xsm/dummy.c                   |  2 +-
> >  xen/xsm/flask/hooks.c             |  4 ++--
> >  18 files changed, 58 insertions(+), 18 deletions(-)
>
> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.

Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:38     ` Tamas K Lengyel
  2019-06-03 16:38       ` [Xen-devel] " Tamas K Lengyel
@ 2019-06-03 16:40       ` Julien Grall
  2019-06-03 16:40         ` [Xen-devel] " Julien Grall
  2019-06-03 16:55         ` Tamas K Lengyel
  2019-06-04  8:41       ` Razvan Cojocaru
  2 siblings, 2 replies; 30+ messages in thread
From: Julien Grall @ 2019-06-03 16:40 UTC (permalink / raw)
  To: Tamas K Lengyel, Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, xen-devel, Daniel de Graaf, Roger Pau Monne

Hi,

On 03/06/2019 17:38, Tamas K Lengyel wrote:
> On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>>
>>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
>>> Disable it by default as it is only an experimental subsystem.
>>>
>>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
>>> Cc: Jan Beulich <jbeulich@suse.com>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>> Cc: Wei Liu <wei.liu2@citrix.com>
>>> Cc: Roger Pau Monne <roger.pau@citrix.com>
>>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
>>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>>> Cc: Julien Grall <julien.grall@arm.com>
>>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> Cc: Stefano Stabellini <sstabellini@kernel.org>
>>> Cc: Tim Deegan <tim@xen.org>
>>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
>>> ----
>>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
>>> fixups
>>> ---
>>>   xen/arch/x86/Kconfig              |  6 +++++-
>>>   xen/arch/x86/domain.c             |  2 ++
>>>   xen/arch/x86/domctl.c             |  2 ++
>>>   xen/arch/x86/mm/Makefile          |  2 +-
>>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>>>   xen/arch/x86/x86_64/mm.c          |  2 ++
>>>   xen/common/Kconfig                |  3 ---
>>>   xen/common/domain.c               |  2 +-
>>>   xen/common/grant_table.c          |  2 +-
>>>   xen/common/memory.c               |  2 +-
>>>   xen/common/vm_event.c             |  6 +++---
>>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>>>   xen/include/asm-x86/mm.h          |  3 +++
>>>   xen/include/xen/sched.h           |  2 +-
>>>   xen/include/xsm/dummy.h           |  2 +-
>>>   xen/include/xsm/xsm.h             |  4 ++--
>>>   xen/xsm/dummy.c                   |  2 +-
>>>   xen/xsm/flask/hooks.c             |  4 ++--
>>>   18 files changed, 58 insertions(+), 18 deletions(-)
>>
>> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> 
> Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Nowadays, add_maintainers.pl should do the right for you without having to 
modifying by hand each patch:

42sh> scripts/add_maintainers.pl -d .

Cheers,


-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:40       ` Julien Grall
@ 2019-06-03 16:40         ` " Julien Grall
  2019-06-03 16:55         ` Tamas K Lengyel
  1 sibling, 0 replies; 30+ messages in thread
From: Julien Grall @ 2019-06-03 16:40 UTC (permalink / raw)
  To: Tamas K Lengyel, Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, xen-devel, Daniel de Graaf, Roger Pau Monne

Hi,

On 03/06/2019 17:38, Tamas K Lengyel wrote:
> On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>>
>>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
>>> Disable it by default as it is only an experimental subsystem.
>>>
>>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
>>> Cc: Jan Beulich <jbeulich@suse.com>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>> Cc: Wei Liu <wei.liu2@citrix.com>
>>> Cc: Roger Pau Monne <roger.pau@citrix.com>
>>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
>>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>>> Cc: Julien Grall <julien.grall@arm.com>
>>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> Cc: Stefano Stabellini <sstabellini@kernel.org>
>>> Cc: Tim Deegan <tim@xen.org>
>>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
>>> ----
>>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
>>> fixups
>>> ---
>>>   xen/arch/x86/Kconfig              |  6 +++++-
>>>   xen/arch/x86/domain.c             |  2 ++
>>>   xen/arch/x86/domctl.c             |  2 ++
>>>   xen/arch/x86/mm/Makefile          |  2 +-
>>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>>>   xen/arch/x86/x86_64/mm.c          |  2 ++
>>>   xen/common/Kconfig                |  3 ---
>>>   xen/common/domain.c               |  2 +-
>>>   xen/common/grant_table.c          |  2 +-
>>>   xen/common/memory.c               |  2 +-
>>>   xen/common/vm_event.c             |  6 +++---
>>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>>>   xen/include/asm-x86/mm.h          |  3 +++
>>>   xen/include/xen/sched.h           |  2 +-
>>>   xen/include/xsm/dummy.h           |  2 +-
>>>   xen/include/xsm/xsm.h             |  4 ++--
>>>   xen/xsm/dummy.c                   |  2 +-
>>>   xen/xsm/flask/hooks.c             |  4 ++--
>>>   18 files changed, 58 insertions(+), 18 deletions(-)
>>
>> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> 
> Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Nowadays, add_maintainers.pl should do the right for you without having to 
modifying by hand each patch:

42sh> scripts/add_maintainers.pl -d .

Cheers,


-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:40       ` Julien Grall
  2019-06-03 16:40         ` [Xen-devel] " Julien Grall
@ 2019-06-03 16:55         ` Tamas K Lengyel
  2019-06-03 16:55           ` [Xen-devel] " Tamas K Lengyel
  1 sibling, 1 reply; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-03 16:55 UTC (permalink / raw)
  To: Julien Grall
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, Jan Beulich, xen-devel, Daniel de Graaf,
	Roger Pau Monne

On Mon, Jun 3, 2019 at 10:40 AM Julien Grall <julien.grall@arm.com> wrote:
>
> Hi,
>
> On 03/06/2019 17:38, Tamas K Lengyel wrote:
> > On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
> >>
> >>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> >>> Disable it by default as it is only an experimental subsystem.
> >>>
> >>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> >>> Cc: Jan Beulich <jbeulich@suse.com>
> >>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> >>> Cc: Wei Liu <wei.liu2@citrix.com>
> >>> Cc: Roger Pau Monne <roger.pau@citrix.com>
> >>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> >>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> >>> Cc: Julien Grall <julien.grall@arm.com>
> >>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> >>> Cc: Stefano Stabellini <sstabellini@kernel.org>
> >>> Cc: Tim Deegan <tim@xen.org>
> >>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
> >>> ----
> >>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
> >>> fixups
> >>> ---
> >>>   xen/arch/x86/Kconfig              |  6 +++++-
> >>>   xen/arch/x86/domain.c             |  2 ++
> >>>   xen/arch/x86/domctl.c             |  2 ++
> >>>   xen/arch/x86/mm/Makefile          |  2 +-
> >>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
> >>>   xen/arch/x86/x86_64/mm.c          |  2 ++
> >>>   xen/common/Kconfig                |  3 ---
> >>>   xen/common/domain.c               |  2 +-
> >>>   xen/common/grant_table.c          |  2 +-
> >>>   xen/common/memory.c               |  2 +-
> >>>   xen/common/vm_event.c             |  6 +++---
> >>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
> >>>   xen/include/asm-x86/mm.h          |  3 +++
> >>>   xen/include/xen/sched.h           |  2 +-
> >>>   xen/include/xsm/dummy.h           |  2 +-
> >>>   xen/include/xsm/xsm.h             |  4 ++--
> >>>   xen/xsm/dummy.c                   |  2 +-
> >>>   xen/xsm/flask/hooks.c             |  4 ++--
> >>>   18 files changed, 58 insertions(+), 18 deletions(-)
> >>
> >> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> >
> > Indeed, I've also seem to have missed CC-ing Razvan (fixed now).
>
> Nowadays, add_maintainers.pl should do the right for you without having to
> modifying by hand each patch:
>
> 42sh> scripts/add_maintainers.pl -d .

Hi Julien,
ah good call! I've been using scripts/get_maintainers.pl which
evidently is more error-prone in case the patch goes through revisions
and I forget to re-check if more people need CC-ing now.

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:55         ` Tamas K Lengyel
@ 2019-06-03 16:55           ` " Tamas K Lengyel
  0 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-03 16:55 UTC (permalink / raw)
  To: Julien Grall
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, Jan Beulich, xen-devel, Daniel de Graaf,
	Roger Pau Monne

On Mon, Jun 3, 2019 at 10:40 AM Julien Grall <julien.grall@arm.com> wrote:
>
> Hi,
>
> On 03/06/2019 17:38, Tamas K Lengyel wrote:
> > On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
> >>
> >>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
> >>> Disable it by default as it is only an experimental subsystem.
> >>>
> >>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> >>> Cc: Jan Beulich <jbeulich@suse.com>
> >>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> >>> Cc: Wei Liu <wei.liu2@citrix.com>
> >>> Cc: Roger Pau Monne <roger.pau@citrix.com>
> >>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
> >>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> >>> Cc: Julien Grall <julien.grall@arm.com>
> >>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> >>> Cc: Stefano Stabellini <sstabellini@kernel.org>
> >>> Cc: Tim Deegan <tim@xen.org>
> >>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
> >>> ----
> >>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
> >>> fixups
> >>> ---
> >>>   xen/arch/x86/Kconfig              |  6 +++++-
> >>>   xen/arch/x86/domain.c             |  2 ++
> >>>   xen/arch/x86/domctl.c             |  2 ++
> >>>   xen/arch/x86/mm/Makefile          |  2 +-
> >>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
> >>>   xen/arch/x86/x86_64/mm.c          |  2 ++
> >>>   xen/common/Kconfig                |  3 ---
> >>>   xen/common/domain.c               |  2 +-
> >>>   xen/common/grant_table.c          |  2 +-
> >>>   xen/common/memory.c               |  2 +-
> >>>   xen/common/vm_event.c             |  6 +++---
> >>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
> >>>   xen/include/asm-x86/mm.h          |  3 +++
> >>>   xen/include/xen/sched.h           |  2 +-
> >>>   xen/include/xsm/dummy.h           |  2 +-
> >>>   xen/include/xsm/xsm.h             |  4 ++--
> >>>   xen/xsm/dummy.c                   |  2 +-
> >>>   xen/xsm/flask/hooks.c             |  4 ++--
> >>>   18 files changed, 58 insertions(+), 18 deletions(-)
> >>
> >> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> >
> > Indeed, I've also seem to have missed CC-ing Razvan (fixed now).
>
> Nowadays, add_maintainers.pl should do the right for you without having to
> modifying by hand each patch:
>
> 42sh> scripts/add_maintainers.pl -d .

Hi Julien,
ah good call! I've been using scripts/get_maintainers.pl which
evidently is more error-prone in case the patch goes through revisions
and I forget to re-check if more people need CC-ing now.

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03 16:38     ` Tamas K Lengyel
  2019-06-03 16:38       ` [Xen-devel] " Tamas K Lengyel
  2019-06-03 16:40       ` Julien Grall
@ 2019-06-04  8:41       ` Razvan Cojocaru
  2019-06-04  8:41         ` [Xen-devel] " Razvan Cojocaru
  2 siblings, 1 reply; 30+ messages in thread
From: Razvan Cojocaru @ 2019-06-04  8:41 UTC (permalink / raw)
  To: Tamas K Lengyel, Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, xen-devel, Daniel de Graaf, Roger Pau Monne

On 6/3/19 7:38 PM, Tamas K Lengyel wrote:
> On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>>
>>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
>>> Disable it by default as it is only an experimental subsystem.
>>>
>>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
>>> Cc: Jan Beulich <jbeulich@suse.com>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>> Cc: Wei Liu <wei.liu2@citrix.com>
>>> Cc: Roger Pau Monne <roger.pau@citrix.com>
>>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
>>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>>> Cc: Julien Grall <julien.grall@arm.com>
>>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> Cc: Stefano Stabellini <sstabellini@kernel.org>
>>> Cc: Tim Deegan <tim@xen.org>
>>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
>>> ----
>>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
>>> fixups
>>> ---
>>>   xen/arch/x86/Kconfig              |  6 +++++-
>>>   xen/arch/x86/domain.c             |  2 ++
>>>   xen/arch/x86/domctl.c             |  2 ++
>>>   xen/arch/x86/mm/Makefile          |  2 +-
>>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>>>   xen/arch/x86/x86_64/mm.c          |  2 ++
>>>   xen/common/Kconfig                |  3 ---
>>>   xen/common/domain.c               |  2 +-
>>>   xen/common/grant_table.c          |  2 +-
>>>   xen/common/memory.c               |  2 +-
>>>   xen/common/vm_event.c             |  6 +++---
>>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>>>   xen/include/asm-x86/mm.h          |  3 +++
>>>   xen/include/xen/sched.h           |  2 +-
>>>   xen/include/xsm/dummy.h           |  2 +-
>>>   xen/include/xsm/xsm.h             |  4 ++--
>>>   xen/xsm/dummy.c                   |  2 +-
>>>   xen/xsm/flask/hooks.c             |  4 ++--
>>>   18 files changed, 58 insertions(+), 18 deletions(-)
>>
>> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> 
> Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>


Thanks,
Razvan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-04  8:41       ` Razvan Cojocaru
@ 2019-06-04  8:41         ` " Razvan Cojocaru
  0 siblings, 0 replies; 30+ messages in thread
From: Razvan Cojocaru @ 2019-06-04  8:41 UTC (permalink / raw)
  To: Tamas K Lengyel, Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, xen-devel, Daniel de Graaf, Roger Pau Monne

On 6/3/19 7:38 PM, Tamas K Lengyel wrote:
> On Mon, Jun 3, 2019 at 2:26 AM Jan Beulich <JBeulich@suse.com> wrote:
>>
>>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
>>> Disable it by default as it is only an experimental subsystem.
>>>
>>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
>>> Cc: Jan Beulich <jbeulich@suse.com>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>> Cc: Wei Liu <wei.liu2@citrix.com>
>>> Cc: Roger Pau Monne <roger.pau@citrix.com>
>>> Cc: George Dunlap <George.Dunlap@eu.citrix.com>
>>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>>> Cc: Julien Grall <julien.grall@arm.com>
>>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> Cc: Stefano Stabellini <sstabellini@kernel.org>
>>> Cc: Tim Deegan <tim@xen.org>
>>> Cc: George Dunlap <george.dunlap@eu.citrix.com>
>>> ----
>>> v4: add ASSERT_UNREACHABLE to inlined functions where applicable & other
>>> fixups
>>> ---
>>>   xen/arch/x86/Kconfig              |  6 +++++-
>>>   xen/arch/x86/domain.c             |  2 ++
>>>   xen/arch/x86/domctl.c             |  2 ++
>>>   xen/arch/x86/mm/Makefile          |  2 +-
>>>   xen/arch/x86/x86_64/compat/mm.c   |  2 ++
>>>   xen/arch/x86/x86_64/mm.c          |  2 ++
>>>   xen/common/Kconfig                |  3 ---
>>>   xen/common/domain.c               |  2 +-
>>>   xen/common/grant_table.c          |  2 +-
>>>   xen/common/memory.c               |  2 +-
>>>   xen/common/vm_event.c             |  6 +++---
>>>   xen/include/asm-x86/mem_sharing.h | 28 ++++++++++++++++++++++++++++
>>>   xen/include/asm-x86/mm.h          |  3 +++
>>>   xen/include/xen/sched.h           |  2 +-
>>>   xen/include/xsm/dummy.h           |  2 +-
>>>   xen/include/xsm/xsm.h             |  4 ++--
>>>   xen/xsm/dummy.c                   |  2 +-
>>>   xen/xsm/flask/hooks.c             |  4 ++--
>>>   18 files changed, 58 insertions(+), 18 deletions(-)
>>
>> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> 
> Indeed, I've also seem to have missed CC-ing Razvan (fixed now).

Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>


Thanks,
Razvan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-06-03  8:26   ` Jan Beulich
  2019-06-03  8:26     ` [Xen-devel] " Jan Beulich
  2019-06-03 16:38     ` Tamas K Lengyel
@ 2019-06-04 14:36     ` Daniel De Graaf
  2 siblings, 0 replies; 30+ messages in thread
From: Daniel De Graaf @ 2019-06-04 14:36 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	George Dunlap, Andrew Cooper, Ian Jackson, Tim Deegan,
	Julien Grall, Tamas K Lengyel, xen-devel, Roger Pau Monne

On 6/3/19 4:26 AM, Jan Beulich wrote:
>>>> On 16.05.19 at 23:37, <tamas@tklengyel.com> wrote:
>> Disable it by default as it is only an experimental subsystem.
>>
>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> 
> Daniel, it looks like you weren't Cc-ed here, but your ack is needed.
> 
> Jan

Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
                     ` (2 preceding siblings ...)
  2019-06-03  8:26   ` Jan Beulich
@ 2019-06-17 12:17   ` Tamas K Lengyel
  3 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-17 12:17 UTC (permalink / raw)
  To: Xen-devel
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Ian Jackson,
	Tim Deegan, Julien Grall, Jan Beulich, Daniel De Graaf,
	Roger Pau Monne

On Thu, May 16, 2019 at 11:38 PM Tamas K Lengyel <tamas@tklengyel.com> wrote:
>
> Disable it by default as it is only an experimental subsystem.
>
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

Patch ping, are any more ack's missing on this one? Current tally is:

Acked-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

This patch could be merged separate from the series I posted it as part of.

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr
  2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
  2019-05-17  7:21   ` Jan Beulich
@ 2019-06-17 12:21   ` Tamas K Lengyel
  2 siblings, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-17 12:21 UTC (permalink / raw)
  To: Xen-devel
  Cc: George Dunlap, Andrew Cooper, Wei Liu, Jan Beulich, Roger Pau Monne

On Thu, May 16, 2019 at 11:38 PM Tamas K Lengyel <tamas@tklengyel.com> wrote:
>
> Patch cf4b30dca0a "Add debug code to detect illegal page_lock and put_page_type
> ordering" added extra sanity checking to page_lock/page_unlock for debug builds
> with the assumption that no hypervisor path ever locks two pages at once.
>
> This assumption doesn't hold during memory sharing so we copy a version of
> page_lock/unlock to be used exclusively in the memory sharing subsystem
> without the sanity checks.
>
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

Patch ping. Current tally:

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

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released
  2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
                   ` (3 preceding siblings ...)
  2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
@ 2019-06-17 12:23 ` Tamas K Lengyel
  2019-06-17 13:46   ` Jan Beulich
  4 siblings, 1 reply; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-17 12:23 UTC (permalink / raw)
  To: Xen-devel
  Cc: George Dunlap, Andrew Cooper, Wei Liu, Jan Beulich, Roger Pau Monne

On Thu, May 16, 2019 at 11:38 PM Tamas K Lengyel <tamas@tklengyel.com> wrote:
>
> Calling _put_page_type while also holding the page_lock
> for that page can cause a deadlock.
>
> The comment being dropped is incorrect since it's now out-of-date.
>
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

Patch ping. Unclear whose Ack is strictly needed as this is only
touching mem_sharing code and nothing else.

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds
  2019-05-16 21:37 ` [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds Tamas K Lengyel
  2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
@ 2019-06-17 12:24   ` Tamas K Lengyel
  1 sibling, 0 replies; 30+ messages in thread
From: Tamas K Lengyel @ 2019-06-17 12:24 UTC (permalink / raw)
  To: Xen-devel; +Cc: Andrew Cooper, Wei Liu, Jan Beulich, Roger Pau Monne

On Thu, May 16, 2019 at 11:38 PM Tamas K Lengyel <tamas@tklengyel.com> wrote:
>
> Improves performance for release builds.
>
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

Patch ping. Unclear whose Ack is strictly needed as this is only
touching mem_sharing code and nothing else.

Thanks,
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released
  2019-06-17 12:23 ` [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
@ 2019-06-17 13:46   ` Jan Beulich
  0 siblings, 0 replies; 30+ messages in thread
From: Jan Beulich @ 2019-06-17 13:46 UTC (permalink / raw)
  To: George Dunlap, Tamas K Lengyel
  Cc: Andrew Cooper, Wei Liu, xen-devel, Roger Pau Monne

>>> On 17.06.19 at 14:23, <tamas@tklengyel.com> wrote:
> On Thu, May 16, 2019 at 11:38 PM Tamas K Lengyel <tamas@tklengyel.com> wrote:
>>
>> Calling _put_page_type while also holding the page_lock
>> for that page can cause a deadlock.
>>
>> The comment being dropped is incorrect since it's now out-of-date.
>>
>> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
> 
> Patch ping. Unclear whose Ack is strictly needed as this is only
> touching mem_sharing code and nothing else.

In such cases I think it should be the next-level-up maintainer whose
ack should be chased; at least that's what I typically would do. This
would be George in this cases afaict. Otherwise, if George wouldn't
have the cycles to look at this closely enough to give an ack, I'd be
happy to provide mine as "replacement".

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, back to index

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-16 21:37 [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
2019-05-16 21:37 ` [Xen-devel] " Tamas K Lengyel
2019-05-16 21:37 ` [PATCH v5 2/4] x86/mem_sharing: copy a page_lock version to be internal to memshr Tamas K Lengyel
2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
2019-05-17  7:21   ` Jan Beulich
2019-05-17  7:21     ` [Xen-devel] " Jan Beulich
2019-05-17 20:04     ` Tamas K Lengyel
2019-05-17 20:04       ` [Xen-devel] " Tamas K Lengyel
2019-06-17 12:21   ` Tamas K Lengyel
2019-05-16 21:37 ` [PATCH v5 3/4] x86/mem_sharing: enable mem_share audit mode only in debug builds Tamas K Lengyel
2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
2019-06-17 12:24   ` Tamas K Lengyel
2019-05-16 21:37 ` [PATCH v5 4/4] x86/mem_sharing: compile mem_sharing subsystem only when kconfig is enabled Tamas K Lengyel
2019-05-16 21:37   ` [Xen-devel] " Tamas K Lengyel
2019-05-17  7:23   ` Jan Beulich
2019-05-17  7:23     ` [Xen-devel] " Jan Beulich
2019-06-03  8:26   ` Jan Beulich
2019-06-03  8:26     ` [Xen-devel] " Jan Beulich
2019-06-03 16:38     ` Tamas K Lengyel
2019-06-03 16:38       ` [Xen-devel] " Tamas K Lengyel
2019-06-03 16:40       ` Julien Grall
2019-06-03 16:40         ` [Xen-devel] " Julien Grall
2019-06-03 16:55         ` Tamas K Lengyel
2019-06-03 16:55           ` [Xen-devel] " Tamas K Lengyel
2019-06-04  8:41       ` Razvan Cojocaru
2019-06-04  8:41         ` [Xen-devel] " Razvan Cojocaru
2019-06-04 14:36     ` Daniel De Graaf
2019-06-17 12:17   ` Tamas K Lengyel
2019-06-17 12:23 ` [Xen-devel] [PATCH v5 1/4] x86/mem_sharing: reorder when pages are unlocked and released Tamas K Lengyel
2019-06-17 13:46   ` Jan Beulich

Xen-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/xen-devel/0 xen-devel/git/0.git
	git clone --mirror https://lore.kernel.org/xen-devel/1 xen-devel/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 xen-devel xen-devel/ https://lore.kernel.org/xen-devel \
		xen-devel@lists.xenproject.org xen-devel@archiver.kernel.org
	public-inbox-index xen-devel


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.xenproject.lists.xen-devel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox