All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] vmw_balloon: misc fixes and enhancements
@ 2022-09-13  9:43 Nadav Amit
  2022-09-13  9:43 ` [PATCH 1/3] vmw_balloon: access reset_required through READ/WRITE_ONCE Nadav Amit
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-13  9:43 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, VMware PV-Drivers Reviewers, Arnd Bergmann, Nadav Amit

From: Nadav Amit <namit@vmware.com>

Various relatively minor enhancements. Patches 1-2 address borderline
bugs. There have been no actual bug reports, and the first bug is
theoretical and the second one is a minor performance issue. We
therefore do not ask to backport them, but keep them first since we (or
distributions) might want to backport them later.

Patch 3 is doing some cleanup due to recent changes, with no expected
functional change.

Nadav Amit (3):
  vmw_balloon: access reset_required through READ/WRITE_ONCE
  vmw_balloon: exit if initalization fails
  vmw_balloon: open-code vmballoon_compaction_init()

 drivers/misc/vmw_balloon.c | 71 +++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 40 deletions(-)

-- 
2.25.1


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

* [PATCH 1/3] vmw_balloon: access reset_required through READ/WRITE_ONCE
  2022-09-13  9:43 [PATCH 0/3] vmw_balloon: misc fixes and enhancements Nadav Amit
@ 2022-09-13  9:43 ` Nadav Amit
  2022-09-13  9:43 ` [PATCH 2/3] vmw_balloon: exit if initalization fails Nadav Amit
  2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
  2 siblings, 0 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-13  9:43 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, VMware PV-Drivers Reviewers, Arnd Bergmann, Nadav Amit

From: Nadav Amit <namit@vmware.com>

reset_required might be accessed concurrently, at least through debugfs.
While there is no apparent functional risk, avoid any potential race,
even if it is benign.

Use READ_ONCE() and WRITE_ONCE() when accessing reset_required.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 drivers/misc/vmw_balloon.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 61a2be712bf7..7fa91983c567 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -492,7 +492,7 @@ __vmballoon_cmd(struct vmballoon *b, unsigned long cmd, unsigned long arg1,
 
 	/* mark reset required accordingly */
 	if (status == VMW_BALLOON_ERROR_RESET)
-		b->reset_required = true;
+		WRITE_ONCE(b->reset_required, true);
 
 	return status;
 }
@@ -965,7 +965,7 @@ static int64_t vmballoon_change(struct vmballoon *b)
 	 * Otherwise we might get huge positives instead of negatives
 	 */
 
-	if (b->reset_required)
+	if (READ_ONCE(b->reset_required))
 		return 0;
 
 	/* consider a 2MB slack on deflate, unless the balloon is emptied */
@@ -1446,7 +1446,7 @@ static void vmballoon_reset(struct vmballoon *b)
 	}
 
 	vmballoon_stats_gen_inc(b, VMW_BALLOON_STAT_RESET);
-	b->reset_required = false;
+	WRITE_ONCE(b->reset_required, false);
 
 	error = vmballoon_vmci_init(b);
 	if (error)
@@ -1473,7 +1473,7 @@ static void vmballoon_work(struct work_struct *work)
 	struct vmballoon *b = container_of(dwork, struct vmballoon, dwork);
 	int64_t change = 0;
 
-	if (b->reset_required)
+	if (READ_ONCE(b->reset_required))
 		vmballoon_reset(b);
 
 	down_read(&b->conf_sem);
@@ -1666,7 +1666,7 @@ static int vmballoon_debug_show(struct seq_file *f, void *offset)
 		   VMW_BALLOON_CAPABILITIES);
 	seq_printf(f, "%-22s: %#16lx\n", "used capabilities", b->capabilities);
 	seq_printf(f, "%-22s: %16s\n", "is resetting",
-		   b->reset_required ? "y" : "n");
+		   READ_ONCE(b->reset_required) ? "y" : "n");
 
 	/* format size info */
 	seq_printf(f, "%-22s: %16lu\n", "target", READ_ONCE(b->target));
-- 
2.25.1


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

* [PATCH 2/3] vmw_balloon: exit if initalization fails
  2022-09-13  9:43 [PATCH 0/3] vmw_balloon: misc fixes and enhancements Nadav Amit
  2022-09-13  9:43 ` [PATCH 1/3] vmw_balloon: access reset_required through READ/WRITE_ONCE Nadav Amit
@ 2022-09-13  9:43 ` Nadav Amit
  2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
  2 siblings, 0 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-13  9:43 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, VMware PV-Drivers Reviewers, Arnd Bergmann, Nadav Amit

From: Nadav Amit <namit@vmware.com>

In certain VMware hypervisor variants the balloon might not be
supported. In such cases initialization would fail, but resources would
keep being unnecessarily wasted. The balloon driver would retry
reinitialization every second for no reason.

Initialize the balloon once during init, before starting the worker. If
initialization fails, put out a message and fail gracefully.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 drivers/misc/vmw_balloon.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 7fa91983c567..762442b9ece8 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -1416,7 +1416,7 @@ static void vmballoon_pop(struct vmballoon *b)
  * is not  empty) and then restarting protocol. This operation normally
  * happens when host responds with VMW_BALLOON_ERROR_RESET to a command.
  */
-static void vmballoon_reset(struct vmballoon *b)
+static int vmballoon_reset(struct vmballoon *b)
 {
 	int error;
 
@@ -1427,11 +1427,13 @@ static void vmballoon_reset(struct vmballoon *b)
 	/* free all pages, skipping monitor unlock */
 	vmballoon_pop(b);
 
-	if (vmballoon_send_start(b, VMW_BALLOON_CAPABILITIES))
+	error = vmballoon_send_start(b, VMW_BALLOON_CAPABILITIES);
+	if (error)
 		goto unlock;
 
 	if ((b->capabilities & VMW_BALLOON_BATCHED_CMDS) != 0) {
-		if (vmballoon_init_batching(b)) {
+		error = vmballoon_init_batching(b);
+		if (error) {
 			/*
 			 * We failed to initialize batching, inform the monitor
 			 * about it by sending a null capability.
@@ -1448,8 +1450,7 @@ static void vmballoon_reset(struct vmballoon *b)
 	vmballoon_stats_gen_inc(b, VMW_BALLOON_STAT_RESET);
 	WRITE_ONCE(b->reset_required, false);
 
-	error = vmballoon_vmci_init(b);
-	if (error)
+	if (vmballoon_vmci_init(b))
 		pr_err_once("failed to initialize vmci doorbell\n");
 
 	if (vmballoon_send_guest_id(b))
@@ -1457,6 +1458,7 @@ static void vmballoon_reset(struct vmballoon *b)
 
 unlock:
 	up_write(&b->conf_sem);
+	return error;
 }
 
 /**
@@ -1879,6 +1881,23 @@ static int __init vmballoon_init(void)
 	if (x86_hyper_type != X86_HYPER_VMWARE)
 		return -ENODEV;
 
+	INIT_LIST_HEAD(&balloon.huge_pages);
+	spin_lock_init(&balloon.comm_lock);
+	init_rwsem(&balloon.conf_sem);
+	balloon.vmci_doorbell = VMCI_INVALID_HANDLE;
+	balloon.batch_page = NULL;
+	balloon.page = NULL;
+	balloon.reset_required = true;
+
+	/*
+	 * Reset the balloon to check that it is indeed supported.
+	 */
+	error = vmballoon_reset(&balloon);
+	if (error) {
+		pr_err("memory ballooning is disabled");
+		goto fail;
+	}
+
 	INIT_DELAYED_WORK(&balloon.dwork, vmballoon_work);
 
 	error = vmballoon_register_shrinker(&balloon);
@@ -1892,14 +1911,6 @@ static int __init vmballoon_init(void)
 	balloon_devinfo_init(&balloon.b_dev_info);
 	vmballoon_compaction_init(&balloon);
 
-	INIT_LIST_HEAD(&balloon.huge_pages);
-	spin_lock_init(&balloon.comm_lock);
-	init_rwsem(&balloon.conf_sem);
-	balloon.vmci_doorbell = VMCI_INVALID_HANDLE;
-	balloon.batch_page = NULL;
-	balloon.page = NULL;
-	balloon.reset_required = true;
-
 	queue_delayed_work(system_freezable_wq, &balloon.dwork, 0);
 
 	vmballoon_debugfs_init(&balloon);
-- 
2.25.1


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

* [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
  2022-09-13  9:43 [PATCH 0/3] vmw_balloon: misc fixes and enhancements Nadav Amit
  2022-09-13  9:43 ` [PATCH 1/3] vmw_balloon: access reset_required through READ/WRITE_ONCE Nadav Amit
  2022-09-13  9:43 ` [PATCH 2/3] vmw_balloon: exit if initalization fails Nadav Amit
@ 2022-09-13  9:43 ` Nadav Amit
  2022-09-14 10:14   ` David Hildenbrand
                     ` (2 more replies)
  2 siblings, 3 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-13  9:43 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, VMware PV-Drivers Reviewers, Arnd Bergmann, Nadav Amit

From: Nadav Amit <namit@vmware.com>

Following commit 68f2736a85832 ("mm: Convert all PageMovable users to
movable_operations"), the code of vmballoon_compaction_init() is very
simple and does not worth a separate function.

Instead, open code vmballoon_compaction_init. As migratepage is always
defined, use IS_ENABLED(), which makes the code easier to read. No
functional change is intended.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 drivers/misc/vmw_balloon.c | 26 +++-----------------------
 1 file changed, 3 insertions(+), 23 deletions(-)

diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 762442b9ece8..46212cd09854 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -1848,28 +1848,6 @@ static int vmballoon_migratepage(struct balloon_dev_info *b_dev_info,
 	return ret;
 }
 
-/**
- * vmballoon_compaction_init() - initialized compaction for the balloon.
- *
- * @b: pointer to the balloon.
- *
- * If during the initialization a failure occurred, this function does not
- * perform cleanup. The caller must call vmballoon_compaction_deinit() in this
- * case.
- *
- * Return: zero on success or error code on failure.
- */
-static __init void vmballoon_compaction_init(struct vmballoon *b)
-{
-	b->b_dev_info.migratepage = vmballoon_migratepage;
-}
-
-#else /* CONFIG_BALLOON_COMPACTION */
-static inline void vmballoon_compaction_init(struct vmballoon *b)
-{
-}
-#endif /* CONFIG_BALLOON_COMPACTION */
-
 static int __init vmballoon_init(void)
 {
 	int error;
@@ -1909,7 +1887,9 @@ static int __init vmballoon_init(void)
 	 * balloon_devinfo_init() .
 	 */
 	balloon_devinfo_init(&balloon.b_dev_info);
-	vmballoon_compaction_init(&balloon);
+
+	if (IS_ENABLED(CONFIG_BALLOON_COMPACTION))
+		b->b_dev_info.migratepage = vmballoon_migratepage;
 
 	queue_delayed_work(system_freezable_wq, &balloon.dwork, 0);
 
-- 
2.25.1


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

* Re: [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
  2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
@ 2022-09-14 10:14   ` David Hildenbrand
  2022-09-15  0:05   ` kernel test robot
  2022-09-16  8:10   ` kernel test robot
  2 siblings, 0 replies; 9+ messages in thread
From: David Hildenbrand @ 2022-09-14 10:14 UTC (permalink / raw)
  To: Nadav Amit, Greg Kroah-Hartman
  Cc: linux-kernel, VMware PV-Drivers Reviewers, Arnd Bergmann, Nadav Amit

On 13.09.22 11:43, Nadav Amit wrote:
> From: Nadav Amit <namit@vmware.com>
> 
> Following commit 68f2736a85832 ("mm: Convert all PageMovable users to
> movable_operations"), the code of vmballoon_compaction_init() is very
> simple and does not worth a separate function.
> 
> Instead, open code vmballoon_compaction_init. As migratepage is always
> defined, use IS_ENABLED(), which makes the code easier to read. No
> functional change is intended.
> 
> Signed-off-by: Nadav Amit <namit@vmware.com>
> ---

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb


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

* Re: [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
  2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
  2022-09-14 10:14   ` David Hildenbrand
@ 2022-09-15  0:05   ` kernel test robot
  2022-09-15  3:16       ` Nadav Amit
  2022-09-16  8:10   ` kernel test robot
  2 siblings, 1 reply; 9+ messages in thread
From: kernel test robot @ 2022-09-15  0:05 UTC (permalink / raw)
  To: Nadav Amit, Greg Kroah-Hartman
  Cc: llvm, kbuild-all, linux-kernel, VMware PV-Drivers Reviewers,
	Arnd Bergmann, Nadav Amit

Hi Nadav,

I love your patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on linus/master v6.0-rc5 next-20220914]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Nadav-Amit/vmw_balloon-misc-fixes-and-enhancements/20220914-021333
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git ceecbbddbf549fe0b7ffa3804a6e255b3360030f
config: i386-randconfig-a012-20220912 (https://download.01.org/0day-ci/archive/20220915/202209150729.vb9gopf2-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/aa1f38765dd703cbeb3450454d0b5b2c7f5a8f8d
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Nadav-Amit/vmw_balloon-misc-fixes-and-enhancements/20220914-021333
        git checkout aa1f38765dd703cbeb3450454d0b5b2c7f5a8f8d
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/misc/vmw_balloon.c:1732:2: error: unterminated conditional directive
   #ifdef CONFIG_BALLOON_COMPACTION
    ^
   1 error generated.


vim +1732 drivers/misc/vmw_balloon.c

453dc65931915ab drivers/misc/vmware_balloon.c Dmitry Torokhov 2010-04-23  1730  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1731  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25 @1732  #ifdef CONFIG_BALLOON_COMPACTION
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1733  /**
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1734   * vmballoon_migratepage() - migrates a balloon page.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1735   * @b_dev_info: balloon device information descriptor.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1736   * @newpage: the page to which @page should be migrated.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1737   * @page: a ballooned page that should be migrated.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1738   * @mode: migration mode, ignored.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1739   *
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1740   * This function is really open-coded, but that is according to the interface
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1741   * that balloon_compaction provides.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1742   *
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1743   * Return: zero on success, -EAGAIN when migration cannot be performed
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1744   *	   momentarily, and -EBUSY if migration failed and should be retried
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1745   *	   with that specific page.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1746   */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1747  static int vmballoon_migratepage(struct balloon_dev_info *b_dev_info,
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1748  				 struct page *newpage, struct page *page,
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1749  				 enum migrate_mode mode)
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1750  {
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1751  	unsigned long status, flags;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1752  	struct vmballoon *b;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1753  	int ret;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1754  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1755  	b = container_of(b_dev_info, struct vmballoon, b_dev_info);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1756  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1757  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1758  	 * If the semaphore is taken, there is ongoing configuration change
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1759  	 * (i.e., balloon reset), so try again.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1760  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1761  	if (!down_read_trylock(&b->conf_sem))
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1762  		return -EAGAIN;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1763  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1764  	spin_lock(&b->comm_lock);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1765  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1766  	 * We must start by deflating and not inflating, as otherwise the
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1767  	 * hypervisor may tell us that it has enough memory and the new page is
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1768  	 * not needed. Since the old page is isolated, we cannot use the list
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1769  	 * interface to unlock it, as the LRU field is used for isolation.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1770  	 * Instead, we use the native interface directly.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1771  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1772  	vmballoon_add_page(b, 0, page);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1773  	status = vmballoon_lock_op(b, 1, VMW_BALLOON_4K_PAGE,
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1774  				   VMW_BALLOON_DEFLATE);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1775  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1776  	if (status == VMW_BALLOON_SUCCESS)
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1777  		status = vmballoon_status_page(b, 0, &page);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1778  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1779  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1780  	 * If a failure happened, let the migration mechanism know that it
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1781  	 * should not retry.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1782  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1783  	if (status != VMW_BALLOON_SUCCESS) {
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1784  		spin_unlock(&b->comm_lock);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1785  		ret = -EBUSY;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1786  		goto out_unlock;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1787  	}
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1788  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1789  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1790  	 * The page is isolated, so it is safe to delete it without holding
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1791  	 * @pages_lock . We keep holding @comm_lock since we will need it in a
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1792  	 * second.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1793  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1794  	balloon_page_delete(page);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1795  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1796  	put_page(page);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1797  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1798  	/* Inflate */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1799  	vmballoon_add_page(b, 0, newpage);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1800  	status = vmballoon_lock_op(b, 1, VMW_BALLOON_4K_PAGE,
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1801  				   VMW_BALLOON_INFLATE);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1802  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1803  	if (status == VMW_BALLOON_SUCCESS)
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1804  		status = vmballoon_status_page(b, 0, &newpage);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1805  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1806  	spin_unlock(&b->comm_lock);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1807  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1808  	if (status != VMW_BALLOON_SUCCESS) {
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1809  		/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1810  		 * A failure happened. While we can deflate the page we just
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1811  		 * inflated, this deflation can also encounter an error. Instead
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1812  		 * we will decrease the size of the balloon to reflect the
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1813  		 * change and report failure.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1814  		 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1815  		atomic64_dec(&b->size);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1816  		ret = -EBUSY;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1817  	} else {
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1818  		/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1819  		 * Success. Take a reference for the page, and we will add it to
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1820  		 * the list after acquiring the lock.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1821  		 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1822  		get_page(newpage);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1823  		ret = MIGRATEPAGE_SUCCESS;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1824  	}
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1825  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1826  	/* Update the balloon list under the @pages_lock */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1827  	spin_lock_irqsave(&b->b_dev_info.pages_lock, flags);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1828  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1829  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1830  	 * On inflation success, we already took a reference for the @newpage.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1831  	 * If we succeed just insert it to the list and update the statistics
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1832  	 * under the lock.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1833  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1834  	if (ret == MIGRATEPAGE_SUCCESS) {
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1835  		balloon_page_insert(&b->b_dev_info, newpage);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1836  		__count_vm_event(BALLOON_MIGRATE);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1837  	}
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1838  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1839  	/*
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1840  	 * We deflated successfully, so regardless to the inflation success, we
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1841  	 * need to reduce the number of isolated_pages.
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1842  	 */
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1843  	b->b_dev_info.isolated_pages--;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1844  	spin_unlock_irqrestore(&b->b_dev_info.pages_lock, flags);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1845  
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1846  out_unlock:
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1847  	up_read(&b->conf_sem);
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1848  	return ret;
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1849  }
83a8afa72e9c0a2 drivers/misc/vmw_balloon.c    Nadav Amit      2019-04-25  1850  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

* Re: [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
  2022-09-15  0:05   ` kernel test robot
@ 2022-09-15  3:16       ` Nadav Amit
  0 siblings, 0 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-15  3:16 UTC (permalink / raw)
  To: kernel test robot
  Cc: Greg Kroah-Hartman, llvm, kbuild-all, LKML, Pv-drivers, Arnd Bergmann

On Sep 14, 2022, at 5:05 PM, kernel test robot <lkp@intel.com> wrote:

> ⚠ External Email
> 
> Hi Nadav,
> 
> I love your patch! Yet something to improve:

Ugh. Last minute change and my build was done without VMW_BALLOON.

Sorry. Will send v2.

Regards,
Nadav

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

* Re: [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
@ 2022-09-15  3:16       ` Nadav Amit
  0 siblings, 0 replies; 9+ messages in thread
From: Nadav Amit @ 2022-09-15  3:16 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 275 bytes --]

On Sep 14, 2022, at 5:05 PM, kernel test robot <lkp@intel.com> wrote:

> ⚠ External Email
> 
> Hi Nadav,
> 
> I love your patch! Yet something to improve:

Ugh. Last minute change and my build was done without VMW_BALLOON.

Sorry. Will send v2.

Regards,
Nadav

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

* Re: [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init()
  2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
  2022-09-14 10:14   ` David Hildenbrand
  2022-09-15  0:05   ` kernel test robot
@ 2022-09-16  8:10   ` kernel test robot
  2 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2022-09-16  8:10 UTC (permalink / raw)
  To: Nadav Amit, Greg Kroah-Hartman
  Cc: llvm, kbuild-all, linux-kernel, VMware PV-Drivers Reviewers,
	Arnd Bergmann, Nadav Amit

Hi Nadav,

I love your patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on linus/master v6.0-rc5 next-20220915]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Nadav-Amit/vmw_balloon-misc-fixes-and-enhancements/20220914-021333
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git ceecbbddbf549fe0b7ffa3804a6e255b3360030f
config: x86_64-randconfig-a014 (https://download.01.org/0day-ci/archive/20220916/202209161512.GNTVEnlu-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/aa1f38765dd703cbeb3450454d0b5b2c7f5a8f8d
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Nadav-Amit/vmw_balloon-misc-fixes-and-enhancements/20220914-021333
        git checkout aa1f38765dd703cbeb3450454d0b5b2c7f5a8f8d
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/misc/vmw_balloon.c:1892:3: error: use of undeclared identifier 'b'
                   b->b_dev_info.migratepage = vmballoon_migratepage;
                   ^
   drivers/misc/vmw_balloon.c:1732:2: error: unterminated conditional directive
   #ifdef CONFIG_BALLOON_COMPACTION
    ^
   2 errors generated.


vim +/b +1892 drivers/misc/vmw_balloon.c

  1850	
  1851	static int __init vmballoon_init(void)
  1852	{
  1853		int error;
  1854	
  1855		/*
  1856		 * Check if we are running on VMware's hypervisor and bail out
  1857		 * if we are not.
  1858		 */
  1859		if (x86_hyper_type != X86_HYPER_VMWARE)
  1860			return -ENODEV;
  1861	
  1862		INIT_LIST_HEAD(&balloon.huge_pages);
  1863		spin_lock_init(&balloon.comm_lock);
  1864		init_rwsem(&balloon.conf_sem);
  1865		balloon.vmci_doorbell = VMCI_INVALID_HANDLE;
  1866		balloon.batch_page = NULL;
  1867		balloon.page = NULL;
  1868		balloon.reset_required = true;
  1869	
  1870		/*
  1871		 * Reset the balloon to check that it is indeed supported.
  1872		 */
  1873		error = vmballoon_reset(&balloon);
  1874		if (error) {
  1875			pr_err("memory ballooning is disabled");
  1876			goto fail;
  1877		}
  1878	
  1879		INIT_DELAYED_WORK(&balloon.dwork, vmballoon_work);
  1880	
  1881		error = vmballoon_register_shrinker(&balloon);
  1882		if (error)
  1883			goto fail;
  1884	
  1885		/*
  1886		 * Initialization of compaction must be done after the call to
  1887		 * balloon_devinfo_init() .
  1888		 */
  1889		balloon_devinfo_init(&balloon.b_dev_info);
  1890	
  1891		if (IS_ENABLED(CONFIG_BALLOON_COMPACTION))
> 1892			b->b_dev_info.migratepage = vmballoon_migratepage;
  1893	
  1894		queue_delayed_work(system_freezable_wq, &balloon.dwork, 0);
  1895	
  1896		vmballoon_debugfs_init(&balloon);
  1897	
  1898		return 0;
  1899	fail:
  1900		vmballoon_unregister_shrinker(&balloon);
  1901		return error;
  1902	}
  1903	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

end of thread, other threads:[~2022-09-16  8:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-13  9:43 [PATCH 0/3] vmw_balloon: misc fixes and enhancements Nadav Amit
2022-09-13  9:43 ` [PATCH 1/3] vmw_balloon: access reset_required through READ/WRITE_ONCE Nadav Amit
2022-09-13  9:43 ` [PATCH 2/3] vmw_balloon: exit if initalization fails Nadav Amit
2022-09-13  9:43 ` [PATCH 3/3] vmw_balloon: open-code vmballoon_compaction_init() Nadav Amit
2022-09-14 10:14   ` David Hildenbrand
2022-09-15  0:05   ` kernel test robot
2022-09-15  3:16     ` Nadav Amit
2022-09-15  3:16       ` Nadav Amit
2022-09-16  8:10   ` kernel test robot

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.