forked from Minki/linux
Drivers: hv: balloon: Support status report for larger page sizes
DM_STATUS_REPORT expects the numbers of pages in the unit of 4k pages (HV_HYP_PAGE) instead of guest pages, so to make it work when guest page sizes are larger than 4k, convert the numbers of guest pages into the numbers of HV_HYP_PAGEs. Note that the numbers of guest pages are still used for tracing because tracing is internal to the guest kernel. Reported-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Reviewed-by: Michael Kelley <mikelley@microsoft.com> Link: https://lore.kernel.org/r/20220325023212.1570049-2-boqun.feng@gmail.com Signed-off-by: Wei Liu <wei.liu@kernel.org>
This commit is contained in:
parent
b6cae15b57
commit
b3d6dd09ff
@ -17,6 +17,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/count_zeros.h>
|
||||
#include <linux/memory_hotplug.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/notifier.h>
|
||||
@ -1130,6 +1131,7 @@ static void post_status(struct hv_dynmem_device *dm)
|
||||
struct dm_status status;
|
||||
unsigned long now = jiffies;
|
||||
unsigned long last_post = last_post_time;
|
||||
unsigned long num_pages_avail, num_pages_committed;
|
||||
|
||||
if (pressure_report_delay > 0) {
|
||||
--pressure_report_delay;
|
||||
@ -1154,16 +1156,21 @@ static void post_status(struct hv_dynmem_device *dm)
|
||||
* num_pages_onlined) as committed to the host, otherwise it can try
|
||||
* asking us to balloon them out.
|
||||
*/
|
||||
status.num_avail = si_mem_available();
|
||||
status.num_committed = vm_memory_committed() +
|
||||
num_pages_avail = si_mem_available();
|
||||
num_pages_committed = vm_memory_committed() +
|
||||
dm->num_pages_ballooned +
|
||||
(dm->num_pages_added > dm->num_pages_onlined ?
|
||||
dm->num_pages_added - dm->num_pages_onlined : 0) +
|
||||
compute_balloon_floor();
|
||||
|
||||
trace_balloon_status(status.num_avail, status.num_committed,
|
||||
trace_balloon_status(num_pages_avail, num_pages_committed,
|
||||
vm_memory_committed(), dm->num_pages_ballooned,
|
||||
dm->num_pages_added, dm->num_pages_onlined);
|
||||
|
||||
/* Convert numbers of pages into numbers of HV_HYP_PAGEs. */
|
||||
status.num_avail = num_pages_avail * NR_HV_HYP_PAGES_IN_PAGE;
|
||||
status.num_committed = num_pages_committed * NR_HV_HYP_PAGES_IN_PAGE;
|
||||
|
||||
/*
|
||||
* If our transaction ID is no longer current, just don't
|
||||
* send the status. This can happen if we were interrupted
|
||||
|
Loading…
Reference in New Issue
Block a user