All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nadav Amit <namit@vmware.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Arnd Bergmann <arnd@arndb.de>
Cc: <linux-kernel@vger.kernel.org>,
	Xavier Deguillard <xdeguillard@vmware.com>,
	Nadav Amit <namit@vmware.com>
Subject: [PATCH v2 03/20] vmw_balloon: merge send_lock and send_unlock path
Date: Thu, 20 Sep 2018 10:30:09 -0700	[thread overview]
Message-ID: <20180920173026.141333-4-namit@vmware.com> (raw)
In-Reply-To: <20180920173026.141333-1-namit@vmware.com>

The lock and unlock code paths are very similar, so avoid the duplicate
code by merging them together.

Reviewed-by: Xavier Deguillard <xdeguillard@vmware.com>
Signed-off-by: Nadav Amit <namit@vmware.com>
---
 drivers/misc/vmw_balloon.c | 62 +++++++++++++-------------------------
 1 file changed, 21 insertions(+), 41 deletions(-)

diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 2ed4875319c8..5e5f61f207f4 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -420,16 +420,18 @@ static bool vmballoon_send_get_target(struct vmballoon *b)
  * check the return value and maybe submit a different page.
  */
 static int vmballoon_send_lock_page(struct vmballoon *b, unsigned long pfn,
-				    unsigned int *hv_status)
+				    unsigned int *hv_status, bool lock)
 {
-	unsigned long status;
+	unsigned long status, cmd;
 	u32 pfn32;
 
 	pfn32 = (u32)pfn;
 	if (pfn32 != pfn)
 		return -EINVAL;
 
-	*hv_status = status = vmballoon_cmd(b, VMW_BALLOON_CMD_LOCK, pfn, 0);
+	cmd = lock ? VMW_BALLOON_CMD_LOCK : VMW_BALLOON_CMD_UNLOCK;
+
+	*hv_status = status = vmballoon_cmd(b, cmd, pfn, 0);
 
 	if (status == VMW_BALLOON_SUCCESS)
 		return 0;
@@ -438,13 +440,18 @@ static int vmballoon_send_lock_page(struct vmballoon *b, unsigned long pfn,
 }
 
 static int vmballoon_send_batched_lock(struct vmballoon *b,
-				       unsigned int num_pages, bool is_2m_pages)
+				       unsigned int num_pages, bool is_2m_pages,
+				       bool lock)
 {
 	unsigned long pfn = PHYS_PFN(virt_to_phys(b->batch_page));
 	unsigned long status, cmd;
 
-	cmd = is_2m_pages ? VMW_BALLOON_CMD_BATCHED_2M_LOCK :
-			    VMW_BALLOON_CMD_BATCHED_LOCK;
+	if (lock)
+		cmd = is_2m_pages ? VMW_BALLOON_CMD_BATCHED_2M_LOCK :
+				    VMW_BALLOON_CMD_BATCHED_LOCK;
+	else
+		cmd = is_2m_pages ? VMW_BALLOON_CMD_BATCHED_2M_UNLOCK :
+				    VMW_BALLOON_CMD_BATCHED_UNLOCK;
 
 	status = vmballoon_cmd(b, cmd, pfn, num_pages);
 
@@ -454,37 +461,6 @@ static int vmballoon_send_batched_lock(struct vmballoon *b,
 	return 1;
 }
 
-/*
- * Notify the host that guest intends to release given page back into
- * the pool of available (to the guest) pages.
- */
-static bool vmballoon_send_unlock_page(struct vmballoon *b, unsigned long pfn)
-{
-	unsigned long status;
-	u32 pfn32;
-
-	pfn32 = (u32)pfn;
-	if (pfn32 != pfn)
-		return false;
-
-	status = vmballoon_cmd(b, VMW_BALLOON_CMD_UNLOCK, pfn, 0);
-	return status == VMW_BALLOON_SUCCESS;
-}
-
-static bool vmballoon_send_batched_unlock(struct vmballoon *b,
-		unsigned int num_pages, bool is_2m_pages)
-{
-	unsigned long pfn = PHYS_PFN(virt_to_phys(b->batch_page));
-	unsigned long status, cmd;
-
-	cmd = is_2m_pages ? VMW_BALLOON_CMD_BATCHED_2M_UNLOCK :
-			    VMW_BALLOON_CMD_BATCHED_UNLOCK;
-
-	status = vmballoon_cmd(b, cmd, pfn, num_pages);
-
-	return status == VMW_BALLOON_SUCCESS;
-}
-
 static struct page *vmballoon_alloc_page(gfp_t flags, bool is_2m_page)
 {
 	if (is_2m_page)
@@ -546,7 +522,8 @@ static int vmballoon_lock_page(struct vmballoon *b, unsigned int num_pages,
 
 	/* is_2m_pages can never happen as 2m pages support implies batching */
 
-	locked = vmballoon_send_lock_page(b, page_to_pfn(page), &hv_status);
+	locked = vmballoon_send_lock_page(b, page_to_pfn(page), &hv_status,
+					  true);
 
 	if (locked) {
 		STATS_INC(b->stats.refused_alloc[false]);
@@ -587,7 +564,7 @@ static int vmballoon_lock_batched_page(struct vmballoon *b,
 	int locked, i;
 	u16 size_per_page = vmballoon_page_size(is_2m_pages);
 
-	locked = vmballoon_send_batched_lock(b, num_pages, is_2m_pages);
+	locked = vmballoon_send_batched_lock(b, num_pages, is_2m_pages, true);
 
 	if (locked > 0) {
 		for (i = 0; i < num_pages; i++) {
@@ -645,10 +622,12 @@ static int vmballoon_unlock_page(struct vmballoon *b, unsigned int num_pages,
 {
 	struct page *page = b->page;
 	struct vmballoon_page_size *page_size = &b->page_sizes[false];
+	unsigned int hv_status;
 
 	/* is_2m_pages can never happen as 2m pages support implies batching */
 
-	if (!vmballoon_send_unlock_page(b, page_to_pfn(page))) {
+	if (!vmballoon_send_lock_page(b, page_to_pfn(page), &hv_status,
+				      false)) {
 		list_add(&page->lru, &page_size->pages);
 		return -EIO;
 	}
@@ -670,7 +649,8 @@ static int vmballoon_unlock_batched_page(struct vmballoon *b,
 	bool hv_success;
 	u16 size_per_page = vmballoon_page_size(is_2m_pages);
 
-	hv_success = vmballoon_send_batched_unlock(b, num_pages, is_2m_pages);
+	hv_success = vmballoon_send_batched_lock(b, num_pages, is_2m_pages,
+						 false);
 
 	if (!hv_success)
 		ret = -EIO;
-- 
2.17.1


  parent reply	other threads:[~2018-09-20 17:31 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20 17:30 [PATCH v2 00/20] vmw_balloon: compaction, shrinker, 64-bit, etc Nadav Amit
2018-09-20 17:30 ` Nadav Amit
2018-09-20 17:30 ` [PATCH v2 01/20] vmw_balloon: handle commands in a single function Nadav Amit
2018-09-20 17:30 ` [PATCH v2 02/20] vmw_balloon: unify commands tracing and stats Nadav Amit
2018-09-20 17:30 ` Nadav Amit [this message]
2018-09-20 17:30 ` [PATCH v2 04/20] vmw_balloon: simplifying batch access Nadav Amit
2018-09-20 17:30 ` [PATCH v2 05/20] vmw_balloon: remove sleeping allocations Nadav Amit
2018-09-20 17:30 ` [PATCH v2 06/20] vmw_balloon: change batch/single lock abstractions Nadav Amit
2018-09-20 17:30 ` [PATCH v2 07/20] vmw_balloon: treat all refused pages equally Nadav Amit
2018-09-20 17:30 ` [PATCH v2 08/20] vmw_balloon: rename VMW_BALLOON_2M_SHIFT to VMW_BALLOON_2M_ORDER Nadav Amit
2018-09-20 17:30 ` [PATCH v2 09/20] vmw_balloon: refactor change size from vmballoon_work Nadav Amit
2018-09-20 17:30 ` [PATCH v2 10/20] vmw_balloon: simplify vmballoon_send_get_target() Nadav Amit
2018-09-20 17:30 ` [PATCH v2 11/20] vmw_balloon: stats rework Nadav Amit
2018-09-20 17:30 ` [PATCH v2 12/20] vmw_balloon: rework the inflate and deflate loops Nadav Amit
2018-09-20 17:30 ` [PATCH v2 13/20] vmw_balloon: general style cleanup Nadav Amit
2018-09-20 17:30 ` [PATCH v2 14/20] vmw_balloon: add reset stat Nadav Amit
2018-09-20 17:30 ` [PATCH v2 15/20] mm/balloon_compaction: suppress allocation warnings Nadav Amit
2018-09-20 17:30   ` Nadav Amit
2018-09-20 17:30 ` [PATCH v2 16/20] mm/balloon_compaction: list interfaces Nadav Amit
2018-09-20 17:30   ` Nadav Amit
2018-09-20 17:30 ` [PATCH v2 17/20] vmw_balloon: compaction support Nadav Amit
2018-09-25 18:15   ` Greg Kroah-Hartman
2018-09-20 17:30 ` [PATCH v2 18/20] vmw_balloon: support 64-bit memory limit Nadav Amit
2018-09-20 17:30 ` [PATCH v2 19/20] vmw_balloon: memory shrinker Nadav Amit
2018-09-20 17:30 ` [PATCH v2 20/20] vmw_balloon: split refused pages Nadav Amit
2018-09-25 18:15 ` [PATCH v2 00/20] vmw_balloon: compaction, shrinker, 64-bit, etc Greg Kroah-Hartman
2018-09-25 18:15   ` Greg Kroah-Hartman
2018-09-25 19:55   ` Nadav Amit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180920173026.141333-4-namit@vmware.com \
    --to=namit@vmware.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=xdeguillard@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.