]> git.baikalelectronics.ru Git - kernel.git/commit
hv_balloon: fix bugs in num_pages_onlined accounting
authorVitaly Kuznetsov <vkuznets@redhat.com>
Mon, 5 Mar 2018 05:17:21 +0000 (22:17 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 6 Mar 2018 17:57:17 +0000 (09:57 -0800)
commitdf798adbefd3c20a77adb9cfd5fe7382d9b7b708
treead0180b4990be6a6003075e0c08e1004df681542
parent9a18c7f1fef2b0cf396d023f29b6e5394d6df34d
hv_balloon: fix bugs in num_pages_onlined accounting

Our num_pages_onlined accounting is buggy:
1) In case we're offlining a memory block which was present at boot (e.g.
   when there was no hotplug at all) we subtract 32k from 0 and as
   num_pages_onlined is unsigned get a very big positive number.

2) Commit 113ced656f40 ("Drivers: hv: balloon: Correctly update onlined
   page count") made num_pages_onlined counter accurate on onlining but
   totally incorrect on offlining for partly populated regions: no matter
   how many pages were onlined and what was actually added to
   num_pages_onlined counter we always subtract the full region (32k) so
   again, num_pages_onlined can wrap around zero. By onlining/offlining
   the same partly populated region multiple times we can make the
   situation worse.

Solve these issues by doing accurate accounting on offlining: walk HAS
list, check for covered range and gaps.

Fixes: 113ced656f40 ("Drivers: hv: balloon: Correctly update onlined page count")
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hv/hv_balloon.c