* [PATCH v3 1/4] Make place for common balloon code
[not found] <20220822113747.3630776-1-alexander.atanasov@virtuozzo.com>
@ 2022-08-22 11:37 ` Alexander Atanasov
2022-08-22 15:58 ` Nadav Amit
2022-08-22 11:37 ` [PATCH v3 2/4] Enable balloon drivers to report inflated memory Alexander Atanasov
` (2 subsequent siblings)
3 siblings, 1 reply; 5+ messages in thread
From: Alexander Atanasov @ 2022-08-22 11:37 UTC (permalink / raw)
To: Michael Ellerman, Nicholas Piggin, Christophe Leroy, Nadav Amit,
VMware PV-Drivers Reviewers, Arnd Bergmann, Greg Kroah-Hartman,
Michael S. Tsirkin, David Hildenbrand, Jason Wang, Andrew Morton
Cc: kernel, Alexander Atanasov, linux-kernel, linuxppc-dev,
virtualization, linux-mm
mm/balloon_compaction.c -> mm/balloon.c
File already contains code that is common along balloon
drivers so rename it to reflect its contents.
include/linux/balloon_compaction.h -> include/linux/balloon.h
Remove it from files which do not actually use it.
Drop externs from function delcarations.
Signed-off-by: Alexander Atanasov <alexander.atanasov@virtuozzo.com>
---
MAINTAINERS | 4 ++--
arch/powerpc/platforms/pseries/cmm.c | 2 +-
drivers/misc/vmw_balloon.c | 2 +-
drivers/virtio/virtio_balloon.c | 2 +-
include/linux/{balloon_compaction.h => balloon.h} | 12 +++++-------
mm/Makefile | 2 +-
mm/{balloon_compaction.c => balloon.c} | 4 +---
mm/migrate.c | 1 -
mm/vmscan.c | 1 -
9 files changed, 12 insertions(+), 18 deletions(-)
rename include/linux/{balloon_compaction.h => balloon.h} (93%)
rename mm/{balloon_compaction.c => balloon.c} (99%)
diff --git a/MAINTAINERS b/MAINTAINERS
index 9d7f64dc0efe..98d6ff5f226d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -21494,8 +21494,8 @@ L: virtualization@lists.linux-foundation.org
S: Maintained
F: drivers/virtio/virtio_balloon.c
F: include/uapi/linux/virtio_balloon.h
-F: include/linux/balloon_compaction.h
-F: mm/balloon_compaction.c
+F: include/linux/balloon.h
+F: mm/balloon.c
VIRTIO CRYPTO DRIVER
M: Gonglei <arei.gonglei@huawei.com>
diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c
index 5f4037c1d7fe..1d40f6416d6a 100644
--- a/arch/powerpc/platforms/pseries/cmm.c
+++ b/arch/powerpc/platforms/pseries/cmm.c
@@ -19,7 +19,7 @@
#include <linux/stringify.h>
#include <linux/swap.h>
#include <linux/device.h>
-#include <linux/balloon_compaction.h>
+#include <linux/balloon.h>
#include <asm/firmware.h>
#include <asm/hvcall.h>
#include <asm/mmu.h>
diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 61a2be712bf7..91d4d2a285c5 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -29,7 +29,7 @@
#include <linux/rwsem.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
-#include <linux/balloon_compaction.h>
+#include <linux/balloon.h>
#include <linux/vmw_vmci_defs.h>
#include <linux/vmw_vmci_api.h>
#include <asm/hypervisor.h>
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 3f78a3a1eb75..d0c27c680721 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -13,7 +13,7 @@
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/module.h>
-#include <linux/balloon_compaction.h>
+#include <linux/balloon.h>
#include <linux/oom.h>
#include <linux/wait.h>
#include <linux/mm.h>
diff --git a/include/linux/balloon_compaction.h b/include/linux/balloon.h
similarity index 93%
rename from include/linux/balloon_compaction.h
rename to include/linux/balloon.h
index 5ca2d5699620..46ac8f61f607 100644
--- a/include/linux/balloon_compaction.h
+++ b/include/linux/balloon.h
@@ -1,7 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
- * include/linux/balloon_compaction.h
- *
* Common interface definitions for making balloon pages movable by compaction.
*
* Balloon page migration makes use of the general non-lru movable page
@@ -59,13 +57,13 @@ struct balloon_dev_info {
struct page *page, enum migrate_mode mode);
};
-extern struct page *balloon_page_alloc(void);
-extern void balloon_page_enqueue(struct balloon_dev_info *b_dev_info,
+struct page *balloon_page_alloc(void);
+void balloon_page_enqueue(struct balloon_dev_info *b_dev_info,
struct page *page);
-extern struct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info);
-extern size_t balloon_page_list_enqueue(struct balloon_dev_info *b_dev_info,
+struct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info);
+size_t balloon_page_list_enqueue(struct balloon_dev_info *b_dev_info,
struct list_head *pages);
-extern size_t balloon_page_list_dequeue(struct balloon_dev_info *b_dev_info,
+size_t balloon_page_list_dequeue(struct balloon_dev_info *b_dev_info,
struct list_head *pages, size_t n_req_pages);
static inline void balloon_devinfo_init(struct balloon_dev_info *balloon)
diff --git a/mm/Makefile b/mm/Makefile
index 9a564f836403..550cb0663f50 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -112,7 +112,7 @@ obj-$(CONFIG_ZSMALLOC) += zsmalloc.o
obj-$(CONFIG_Z3FOLD) += z3fold.o
obj-$(CONFIG_GENERIC_EARLY_IOREMAP) += early_ioremap.o
obj-$(CONFIG_CMA) += cma.o
-obj-$(CONFIG_MEMORY_BALLOON) += balloon_compaction.o
+obj-$(CONFIG_MEMORY_BALLOON) += balloon.o
obj-$(CONFIG_PAGE_EXTENSION) += page_ext.o
obj-$(CONFIG_PAGE_TABLE_CHECK) += page_table_check.o
obj-$(CONFIG_CMA_DEBUGFS) += cma_debug.o
diff --git a/mm/balloon_compaction.c b/mm/balloon.c
similarity index 99%
rename from mm/balloon_compaction.c
rename to mm/balloon.c
index 22c96fed70b5..22b3e876bc78 100644
--- a/mm/balloon_compaction.c
+++ b/mm/balloon.c
@@ -1,7 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * mm/balloon_compaction.c
- *
* Common interface for making balloon pages movable by compaction.
*
* Copyright (C) 2012, Red Hat, Inc. Rafael Aquini <aquini@redhat.com>
@@ -9,7 +7,7 @@
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/export.h>
-#include <linux/balloon_compaction.h>
+#include <linux/balloon.h>
static void balloon_page_enqueue_one(struct balloon_dev_info *b_dev_info,
struct page *page)
diff --git a/mm/migrate.c b/mm/migrate.c
index 6a1597c92261..a4c8bb334dde 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -41,7 +41,6 @@
#include <linux/pfn_t.h>
#include <linux/memremap.h>
#include <linux/userfaultfd_k.h>
-#include <linux/balloon_compaction.h>
#include <linux/page_idle.h>
#include <linux/page_owner.h>
#include <linux/sched/mm.h>
diff --git a/mm/vmscan.c b/mm/vmscan.c
index b2b1431352dc..f21d65b0d2e2 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -54,7 +54,6 @@
#include <asm/div64.h>
#include <linux/swapops.h>
-#include <linux/balloon_compaction.h>
#include <linux/sched/sysctl.h>
#include "internal.h"
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/4] Enable balloon drivers to report inflated memory
[not found] <20220822113747.3630776-1-alexander.atanasov@virtuozzo.com>
2022-08-22 11:37 ` [PATCH v3 1/4] Make place for common balloon code Alexander Atanasov
@ 2022-08-22 11:37 ` Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 3/4] Display inflated memory to users Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 4/4] drivers: virtio: balloon - update inflated memory Alexander Atanasov
3 siblings, 0 replies; 5+ messages in thread
From: Alexander Atanasov @ 2022-08-22 11:37 UTC (permalink / raw)
To: Andrew Morton; +Cc: kernel, Alexander Atanasov, linux-kernel, linux-mm
Add counters to be updated by the balloon drivers.
Create balloon notifier to propagate changes.
Signed-off-by: Alexander Atanasov <alexander.atanasov@virtuozzo.com>
---
include/linux/balloon.h | 18 ++++++++++++++++++
mm/balloon.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/include/linux/balloon.h b/include/linux/balloon.h
index 46ac8f61f607..59657da77d95 100644
--- a/include/linux/balloon.h
+++ b/include/linux/balloon.h
@@ -57,6 +57,24 @@ struct balloon_dev_info {
struct page *page, enum migrate_mode mode);
};
+extern atomic_long_t mem_balloon_inflated_total_kb;
+extern atomic_long_t mem_balloon_inflated_free_kb;
+
+void balloon_set_inflated_total(long inflated_kb);
+void balloon_set_inflated_free(long inflated_kb);
+
+#define BALLOON_CHANGED_TOTAL 0
+#define BALLOON_CHANGED_FREE 1
+
+int register_balloon_notifier(struct notifier_block *nb);
+void unregister_balloon_notifier(struct notifier_block *nb);
+
+#define balloon_notifier(fn, pri) ({ \
+ static struct notifier_block fn##_mem_nb __meminitdata =\
+ { .notifier_call = fn, .priority = pri }; \
+ register_balloon_notifier(&fn##_mem_nb); \
+})
+
struct page *balloon_page_alloc(void);
void balloon_page_enqueue(struct balloon_dev_info *b_dev_info,
struct page *page);
diff --git a/mm/balloon.c b/mm/balloon.c
index 22b3e876bc78..8e1d5855fef8 100644
--- a/mm/balloon.c
+++ b/mm/balloon.c
@@ -7,8 +7,44 @@
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/export.h>
+#include <linux/notifier.h>
#include <linux/balloon.h>
+atomic_long_t mem_balloon_inflated_total_kb = ATOMIC_LONG_INIT(0);
+atomic_long_t mem_balloon_inflated_free_kb = ATOMIC_LONG_INIT(0);
+SRCU_NOTIFIER_HEAD_STATIC(balloon_chain);
+
+int register_balloon_notifier(struct notifier_block *nb)
+{
+ return srcu_notifier_chain_register(&balloon_chain, nb);
+}
+EXPORT_SYMBOL(register_balloon_notifier);
+
+void unregister_balloon_notifier(struct notifier_block *nb)
+{
+ srcu_notifier_chain_unregister(&balloon_chain, nb);
+}
+EXPORT_SYMBOL(unregister_balloon_notifier);
+
+static int balloon_notify(unsigned long val)
+{
+ return srcu_notifier_call_chain(&balloon_chain, val, NULL);
+}
+
+void balloon_set_inflated_total(long inflated_kb)
+{
+ atomic_long_set(&mem_balloon_inflated_total_kb, inflated_kb);
+ balloon_notify(BALLOON_CHANGED_TOTAL);
+}
+EXPORT_SYMBOL(balloon_set_inflated_total);
+
+void balloon_set_inflated_free(long inflated_kb)
+{
+ atomic_long_set(&mem_balloon_inflated_free_kb, inflated_kb);
+ balloon_notify(BALLOON_CHANGED_FREE);
+}
+EXPORT_SYMBOL(balloon_set_inflated_free);
+
static void balloon_page_enqueue_one(struct balloon_dev_info *b_dev_info,
struct page *page)
{
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 3/4] Display inflated memory to users
[not found] <20220822113747.3630776-1-alexander.atanasov@virtuozzo.com>
2022-08-22 11:37 ` [PATCH v3 1/4] Make place for common balloon code Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 2/4] Enable balloon drivers to report inflated memory Alexander Atanasov
@ 2022-08-22 11:37 ` Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 4/4] drivers: virtio: balloon - update inflated memory Alexander Atanasov
3 siblings, 0 replies; 5+ messages in thread
From: Alexander Atanasov @ 2022-08-22 11:37 UTC (permalink / raw)
To: Jonathan Corbet
Cc: kernel, Alexander Atanasov, linux-kernel, linux-fsdevel, linux-doc
Add InflatedTotal and InflatedFree to /proc/meminfo
Signed-off-by: Alexander Atanasov <alexander.atanasov@virtuozzo.com>
---
Documentation/filesystems/proc.rst | 6 ++++++
fs/proc/meminfo.c | 10 ++++++++++
2 files changed, 16 insertions(+)
diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems/proc.rst
index e7aafc82be99..690e1b90ffee 100644
--- a/Documentation/filesystems/proc.rst
+++ b/Documentation/filesystems/proc.rst
@@ -991,6 +991,8 @@ Example output. You may not have all of these fields.
VmallocUsed: 40444 kB
VmallocChunk: 0 kB
Percpu: 29312 kB
+ InflatedTotal: 2097152 kB
+ InflatedFree: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 4149248 kB
ShmemHugePages: 0 kB
@@ -1138,6 +1140,10 @@ VmallocChunk
Percpu
Memory allocated to the percpu allocator used to back percpu
allocations. This stat excludes the cost of metadata.
+InflatedTotal and InflatedFree
+ Amount of memory that is inflated by the balloon driver.
+ Due to differences among the drivers inflated memory
+ is subtracted from TotalRam or from MemFree.
HardwareCorrupted
The amount of RAM/memory in KB, the kernel identifies as
corrupted.
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 6e89f0e2fd20..7182886efdbf 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -16,6 +16,9 @@
#ifdef CONFIG_CMA
#include <linux/cma.h>
#endif
+#ifdef CONFIG_MEMORY_BALLOON
+#include <linux/balloon.h>
+#endif
#include <asm/page.h>
#include "internal.h"
@@ -153,6 +156,13 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
global_zone_page_state(NR_FREE_CMA_PAGES));
#endif
+#ifdef CONFIG_MEMORY_BALLOON
+ seq_printf(m, "InflatedTotal: %8ld kB\n",
+ atomic_long_read(&mem_balloon_inflated_total_kb));
+ seq_printf(m, "InflatedFree: %8ld kB\n",
+ atomic_long_read(&mem_balloon_inflated_free_kb));
+#endif
+
hugetlb_report_meminfo(m);
arch_report_meminfo(m);
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 4/4] drivers: virtio: balloon - update inflated memory
[not found] <20220822113747.3630776-1-alexander.atanasov@virtuozzo.com>
` (2 preceding siblings ...)
2022-08-22 11:37 ` [PATCH v3 3/4] Display inflated memory to users Alexander Atanasov
@ 2022-08-22 11:37 ` Alexander Atanasov
3 siblings, 0 replies; 5+ messages in thread
From: Alexander Atanasov @ 2022-08-22 11:37 UTC (permalink / raw)
To: Michael S. Tsirkin, David Hildenbrand, Jason Wang
Cc: kernel, Alexander Atanasov, virtualization, linux-kernel
Update the inflated memory when it changes.
Signed-off-by: Alexander Atanasov <alexander.atanasov@virtuozzo.com>
---
drivers/virtio/virtio_balloon.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index d0c27c680721..e9c3642eef17 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -450,10 +450,15 @@ static void virtballoon_changed(struct virtio_device *vdev)
static void update_balloon_size(struct virtio_balloon *vb)
{
u32 actual = vb->num_pages;
+ long inflated_kb = actual << (VIRTIO_BALLOON_PFN_SHIFT - 10);
/* Legacy balloon config space is LE, unlike all other devices. */
virtio_cwrite_le(vb->vdev, struct virtio_balloon_config, actual,
&actual);
+ if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
+ balloon_set_inflated_free(inflated_kb);
+ else
+ balloon_set_inflated_total(inflated_kb);
}
static void update_balloon_stats_func(struct work_struct *work)
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/4] Make place for common balloon code
2022-08-22 11:37 ` [PATCH v3 1/4] Make place for common balloon code Alexander Atanasov
@ 2022-08-22 15:58 ` Nadav Amit
0 siblings, 0 replies; 5+ messages in thread
From: Nadav Amit @ 2022-08-22 15:58 UTC (permalink / raw)
To: Alexander Atanasov
Cc: Michael Ellerman, Nicholas Piggin, Christophe Leroy, Pv-drivers,
Arnd Bergmann, Greg Kroah-Hartman, Michael S. Tsirkin,
David Hildenbrand, Jason Wang, Andrew Morton, kernel,
linux-kernel, linuxppc-dev, virtualization, linux-mm
On Aug 22, 2022, at 4:37 AM, Alexander Atanasov <alexander.atanasov@virtuozzo.com> wrote:
> mm/balloon_compaction.c -> mm/balloon.c
> File already contains code that is common along balloon
> drivers so rename it to reflect its contents.
>
> include/linux/balloon_compaction.h -> include/linux/balloon.h
> Remove it from files which do not actually use it.
> Drop externs from function delcarations.
>
> Signed-off-by: Alexander Atanasov <alexander.atanasov@virtuozzo.com>
Makes so much sense.
Acked-by: Nadav Amit <namit@vmware.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-08-22 15:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20220822113747.3630776-1-alexander.atanasov@virtuozzo.com>
2022-08-22 11:37 ` [PATCH v3 1/4] Make place for common balloon code Alexander Atanasov
2022-08-22 15:58 ` Nadav Amit
2022-08-22 11:37 ` [PATCH v3 2/4] Enable balloon drivers to report inflated memory Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 3/4] Display inflated memory to users Alexander Atanasov
2022-08-22 11:37 ` [PATCH v3 4/4] drivers: virtio: balloon - update inflated memory Alexander Atanasov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).