Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b605c2d9 authored by Alex Ng's avatar Alex Ng Committed by Greg Kroah-Hartman
Browse files

Drivers: hv: balloon: Use available memory value in pressure report



Reports for available memory should use the si_mem_available() value.
The previous freeram value does not include available page cache memory.

Signed-off-by: default avatarAlex Ng <alexng@messages.microsoft.com>
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eece30b9
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -1075,7 +1075,6 @@ static unsigned long compute_balloon_floor(void)
static void post_status(struct hv_dynmem_device *dm)
{
	struct dm_status status;
	struct sysinfo val;
	unsigned long now = jiffies;
	unsigned long last_post = last_post_time;

@@ -1087,7 +1086,6 @@ static void post_status(struct hv_dynmem_device *dm)
	if (!time_after(now, (last_post_time + HZ)))
		return;

	si_meminfo(&val);
	memset(&status, 0, sizeof(struct dm_status));
	status.hdr.type = DM_STATUS_REPORT;
	status.hdr.size = sizeof(struct dm_status);
@@ -1103,7 +1101,7 @@ 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 = val.freeram;
	status.num_avail = si_mem_available();
	status.num_committed = vm_memory_committed() +
		dm->num_pages_ballooned +
		(dm->num_pages_added > dm->num_pages_onlined ?
@@ -1209,7 +1207,7 @@ static void balloon_up(struct work_struct *dummy)
	int ret;
	bool done = false;
	int i;
	struct sysinfo val;
	long avail_pages;
	unsigned long floor;

	/* The host balloons pages in 2M granularity. */
@@ -1221,12 +1219,12 @@ static void balloon_up(struct work_struct *dummy)
	 */
	alloc_unit = 512;

	si_meminfo(&val);
	avail_pages = si_mem_available();
	floor = compute_balloon_floor();

	/* Refuse to balloon below the floor, keep the 2M granularity. */
	if (val.freeram < num_pages || val.freeram - num_pages < floor) {
		num_pages = val.freeram > floor ? (val.freeram - floor) : 0;
	if (avail_pages < num_pages || avail_pages - num_pages < floor) {
		num_pages = avail_pages > floor ? (avail_pages - floor) : 0;
		num_pages -= num_pages % PAGES_IN_2M;
	}

@@ -1237,7 +1235,6 @@ static void balloon_up(struct work_struct *dummy)
		bl_resp->hdr.size = sizeof(struct dm_balloon_response);
		bl_resp->more_pages = 1;


		num_pages -= num_ballooned;
		num_ballooned = alloc_balloon_pages(&dm_device, num_pages,
						    bl_resp, alloc_unit);