All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Argo: don't obtain excess page references
@ 2022-10-11  9:28 Jan Beulich
  2022-11-21 12:41 ` Ping: " Jan Beulich
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Beulich @ 2022-10-11  9:28 UTC (permalink / raw)
  To: xen-devel; +Cc: Christopher Clark

find_ring_mfn() already holds a page reference when trying to obtain a
writable type reference. We shouldn't make assumptions on the general
reference count limit being effectively "infinity". Obtain merely a type
ref, re-using the general ref by only dropping the previously acquired
one in the case of an error.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
I further question the log-dirty check there: The present P2M type of a
page doesn't really matter for writing to the page (plus it's stale by
the time it is looked at). Instead I think every write to such a page
needs to be accompanied by a call to paging_mark_dirty().

--- a/xen/common/argo.c
+++ b/xen/common/argo.c
@@ -1429,10 +1429,11 @@ find_ring_mfn(struct domain *d, gfn_t gf
         ret = -EAGAIN;
 #endif
     else if ( (p2mt != p2m_ram_rw) ||
-              !get_page_and_type(page, d, PGT_writable_page) )
+              !get_page_type(page, PGT_writable_page) )
         ret = -EINVAL;
 
-    put_page(page);
+    if ( unlikely(ret) )
+        put_page(page);
 
     return ret;
 }


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

end of thread, other threads:[~2023-02-13 10:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-11  9:28 [PATCH] Argo: don't obtain excess page references Jan Beulich
2022-11-21 12:41 ` Ping: " Jan Beulich
2022-11-23 17:09   ` Christopher Clark
2023-01-30  4:35   ` Christopher Clark
2023-01-30  8:03     ` Jan Beulich
2023-02-13 10:55       ` Jan Beulich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.