Skip to content

Commit

Permalink
xen_balloon: support memory auto onlining policy
Browse files Browse the repository at this point in the history
Add support for the newly added kernel memory auto onlining policy to
Xen ballon driver.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Suggested-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Acked-by: David Vrabel <david.vrabel@citrix.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Daniel Kiper <daniel.kiper@oracle.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Tang Chen <tangchen@cn.fujitsu.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Kay Sievers <kay@vrfy.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Vitaly Kuznetsov authored and Linus Torvalds committed Mar 15, 2016
1 parent 31bc385 commit 703fc13
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
23 changes: 15 additions & 8 deletions drivers/xen/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,30 @@ config XEN_BALLOON_MEMORY_HOTPLUG

Memory could be hotplugged in following steps:

1) dom0: xl mem-max <domU> <maxmem>
1) target domain: ensure that memory auto online policy is in
effect by checking /sys/devices/system/memory/auto_online_blocks
file (should be 'online').

2) control domain: xl mem-max <target-domain> <maxmem>
where <maxmem> is >= requested memory size,

2) dom0: xl mem-set <domU> <memory>
3) control domain: xl mem-set <target-domain> <memory>
where <memory> is requested memory size; alternatively memory
could be added by writing proper value to
/sys/devices/system/xen_memory/xen_memory0/target or
/sys/devices/system/xen_memory/xen_memory0/target_kb on dumU,
/sys/devices/system/xen_memory/xen_memory0/target_kb on the
target domain.

3) domU: for i in /sys/devices/system/memory/memory*/state; do \
[ "`cat "$i"`" = offline ] && echo online > "$i"; done
Alternatively, if memory auto onlining was not requested at step 1
the newly added memory can be manually onlined in the target domain
by doing the following:

Memory could be onlined automatically on domU by adding following line to udev rules:
for i in /sys/devices/system/memory/memory*/state; do \
[ "`cat "$i"`" = offline ] && echo online > "$i"; done

SUBSYSTEM=="memory", ACTION=="add", RUN+="/bin/sh -c '[ -f /sys$devpath/state ] && echo online > /sys$devpath/state'"
or by adding the following line to udev rules:

In that case step 3 should be omitted.
SUBSYSTEM=="memory", ACTION=="add", RUN+="/bin/sh -c '[ -f /sys$devpath/state ] && echo online > /sys$devpath/state'"

config XEN_BALLOON_MEMORY_HOTPLUG_LIMIT
int "Hotplugged memory limit (in GiB) for a PV guest"
Expand Down
11 changes: 10 additions & 1 deletion drivers/xen/balloon.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,16 @@ static enum bp_state reserve_additional_memory(void)
}
#endif

rc = add_memory_resource(nid, resource, false);
/*
* add_memory_resource() will call online_pages() which in its turn
* will call xen_online_page() callback causing deadlock if we don't
* release balloon_mutex here. Unlocking here is safe because the
* callers drop the mutex before trying again.
*/
mutex_unlock(&balloon_mutex);
rc = add_memory_resource(nid, resource, memhp_auto_online);
mutex_lock(&balloon_mutex);

if (rc) {
pr_warn("Cannot add additional memory (%i)\n", rc);
goto err;
Expand Down

0 comments on commit 703fc13

Please sign in to comment.