From: David Vrabel <david.vrabel@citrix.com>
To: Vitaly Kuznetsov <vkuznets@redhat.com>, linux-mm@kvack.org
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
linux-doc@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Daniel Kiper <daniel.kiper@oracle.com>,
Kay Sievers <kay@vrfy.org>,
linux-kernel@vger.kernel.org, Tang Chen <tangchen@cn.fujitsu.com>,
xen-devel@lists.xenproject.org,
Igor Mammedov <imammedo@redhat.com>,
David Vrabel <david.vrabel@citrix.com>,
David Rientjes <rientjes@google.com>,
Xishi Qiu <qiuxishi@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Mel Gorman <mgorman@techsingularity.net>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [Xen-devel] [PATCH v4 2/2] xen_balloon: support memory auto onlining policy
Date: Tue, 12 Jan 2016 17:38:32 +0000 [thread overview]
Message-ID: <56953A18.2070407@citrix.com> (raw)
In-Reply-To: <1452617777-10598-3-git-send-email-vkuznets@redhat.com>
On 12/01/16 16:56, Vitaly Kuznetsov wrote:
> Add support for the newly added kernel memory auto onlining policy to Xen
> ballon driver.
[...]
> --- a/drivers/xen/Kconfig
> +++ b/drivers/xen/Kconfig
> @@ -37,23 +37,29 @@ config XEN_BALLOON_MEMORY_HOTPLUG
>
> Memory could be hotplugged in following steps:
>
> - 1) dom0: xl mem-max <domU> <maxmem>
> + 1) domU: ensure that memory auto online policy is in effect by
> + checking /sys/devices/system/memory/auto_online_blocks file
> + (should be 'online').
Step 1 applies to dom0 and domUs.
> --- a/drivers/xen/balloon.c
> +++ b/drivers/xen/balloon.c
> @@ -284,7 +284,7 @@ static void release_memory_resource(struct resource *resource)
> kfree(resource);
> }
>
> -static enum bp_state reserve_additional_memory(void)
> +static enum bp_state reserve_additional_memory(bool online)
> {
> long credit;
> struct resource *resource;
> @@ -338,7 +338,18 @@ 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. It is safe because there can only be
> + * one balloon_process() running at a time and balloon_mutex is
> + * internal to Xen driver, generic memory hotplug code doesn't mess
> + * with it.
There are multiple callers of reserve_additional_memory() and these are
not all serialized via the balloon process. Replace the "It is safe..."
sentence with:
"Unlocking here is safe because the callers drop the mutex before trying
again."
> + */
> + mutex_unlock(&balloon_mutex);
> + rc = add_memory_resource(nid, resource, online);
This should always be memhp_auto_online, because...
> @@ -562,14 +573,11 @@ static void balloon_process(struct work_struct *work)
>
> credit = current_credit();
>
> - if (credit > 0) {
> - if (balloon_is_inflated())
> - state = increase_reservation(credit);
> - else
> - state = reserve_additional_memory();
> - }
> -
> - if (credit < 0)
> + if (credit > 0 && balloon_is_inflated())
> + state = increase_reservation(credit);
> + else if (credit > 0)
> + state = reserve_additional_memory(memhp_auto_online);
> + else if (credit < 0)
> state = decrease_reservation(-credit, GFP_BALLOON);
I'd have preferred this refactored as:
if (credit > 0) {
if (balloon_is_inflated())
...
else
...
} else if (credit < 0) {
...
}
>
> state = update_schedule(state);
> @@ -599,7 +607,7 @@ static int add_ballooned_pages(int nr_pages)
> enum bp_state st;
>
> if (xen_hotplug_unpopulated) {
> - st = reserve_additional_memory();
> + st = reserve_additional_memory(false);
... we want to auto-online this memory as well.
> if (st != BP_ECANCELED) {
> mutex_unlock(&balloon_mutex);
> wait_event(balloon_wq,
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: David Vrabel <david.vrabel@citrix.com>
To: Vitaly Kuznetsov <vkuznets@redhat.com>, <linux-mm@kvack.org>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
<linux-doc@vger.kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Daniel Kiper <daniel.kiper@oracle.com>,
"Kay Sievers" <kay@vrfy.org>, <linux-kernel@vger.kernel.org>,
Tang Chen <tangchen@cn.fujitsu.com>,
<xen-devel@lists.xenproject.org>,
Igor Mammedov <imammedo@redhat.com>,
David Vrabel <david.vrabel@citrix.com>,
David Rientjes <rientjes@google.com>,
Xishi Qiu <qiuxishi@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
"Mel Gorman" <mgorman@techsingularity.net>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [Xen-devel] [PATCH v4 2/2] xen_balloon: support memory auto onlining policy
Date: Tue, 12 Jan 2016 17:38:32 +0000 [thread overview]
Message-ID: <56953A18.2070407@citrix.com> (raw)
In-Reply-To: <1452617777-10598-3-git-send-email-vkuznets@redhat.com>
On 12/01/16 16:56, Vitaly Kuznetsov wrote:
> Add support for the newly added kernel memory auto onlining policy to Xen
> ballon driver.
[...]
> --- a/drivers/xen/Kconfig
> +++ b/drivers/xen/Kconfig
> @@ -37,23 +37,29 @@ config XEN_BALLOON_MEMORY_HOTPLUG
>
> Memory could be hotplugged in following steps:
>
> - 1) dom0: xl mem-max <domU> <maxmem>
> + 1) domU: ensure that memory auto online policy is in effect by
> + checking /sys/devices/system/memory/auto_online_blocks file
> + (should be 'online').
Step 1 applies to dom0 and domUs.
> --- a/drivers/xen/balloon.c
> +++ b/drivers/xen/balloon.c
> @@ -284,7 +284,7 @@ static void release_memory_resource(struct resource *resource)
> kfree(resource);
> }
>
> -static enum bp_state reserve_additional_memory(void)
> +static enum bp_state reserve_additional_memory(bool online)
> {
> long credit;
> struct resource *resource;
> @@ -338,7 +338,18 @@ 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. It is safe because there can only be
> + * one balloon_process() running at a time and balloon_mutex is
> + * internal to Xen driver, generic memory hotplug code doesn't mess
> + * with it.
There are multiple callers of reserve_additional_memory() and these are
not all serialized via the balloon process. Replace the "It is safe..."
sentence with:
"Unlocking here is safe because the callers drop the mutex before trying
again."
> + */
> + mutex_unlock(&balloon_mutex);
> + rc = add_memory_resource(nid, resource, online);
This should always be memhp_auto_online, because...
> @@ -562,14 +573,11 @@ static void balloon_process(struct work_struct *work)
>
> credit = current_credit();
>
> - if (credit > 0) {
> - if (balloon_is_inflated())
> - state = increase_reservation(credit);
> - else
> - state = reserve_additional_memory();
> - }
> -
> - if (credit < 0)
> + if (credit > 0 && balloon_is_inflated())
> + state = increase_reservation(credit);
> + else if (credit > 0)
> + state = reserve_additional_memory(memhp_auto_online);
> + else if (credit < 0)
> state = decrease_reservation(-credit, GFP_BALLOON);
I'd have preferred this refactored as:
if (credit > 0) {
if (balloon_is_inflated())
...
else
...
} else if (credit < 0) {
...
}
>
> state = update_schedule(state);
> @@ -599,7 +607,7 @@ static int add_ballooned_pages(int nr_pages)
> enum bp_state st;
>
> if (xen_hotplug_unpopulated) {
> - st = reserve_additional_memory();
> + st = reserve_additional_memory(false);
... we want to auto-online this memory as well.
> if (st != BP_ECANCELED) {
> mutex_unlock(&balloon_mutex);
> wait_event(balloon_wq,
>
next prev parent reply other threads:[~2016-01-12 17:38 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-12 16:56 [PATCH v4 0/2] memory-hotplug: add automatic onlining policy for the newly added memory Vitaly Kuznetsov
2016-01-12 16:56 ` Vitaly Kuznetsov
2016-01-12 16:56 ` [PATCH v4 1/2] " Vitaly Kuznetsov
2016-01-12 16:56 ` Vitaly Kuznetsov
2016-01-12 16:56 ` Vitaly Kuznetsov
2016-01-12 23:46 ` David Rientjes
2016-01-12 23:46 ` David Rientjes
2016-01-13 11:01 ` Vitaly Kuznetsov
2016-01-13 11:01 ` Vitaly Kuznetsov
2016-01-13 11:01 ` Vitaly Kuznetsov
2016-01-14 0:51 ` David Rientjes
2016-01-14 0:51 ` David Rientjes
2016-01-14 8:49 ` Vitaly Kuznetsov
2016-01-14 8:49 ` Vitaly Kuznetsov
2016-01-14 21:46 ` David Rientjes
2016-01-14 21:46 ` David Rientjes
2016-01-14 21:46 ` David Rientjes
2016-01-15 13:13 ` Vitaly Kuznetsov
2016-01-15 13:13 ` Vitaly Kuznetsov
2016-01-15 13:13 ` Vitaly Kuznetsov
2016-01-14 8:49 ` Vitaly Kuznetsov
2016-01-14 0:51 ` David Rientjes
2016-01-12 23:46 ` David Rientjes
2016-01-13 8:06 ` Daniel Kiper
2016-01-13 8:06 ` Daniel Kiper
2016-01-13 8:06 ` Daniel Kiper
2016-01-12 16:56 ` [PATCH v4 2/2] xen_balloon: support memory auto onlining policy Vitaly Kuznetsov
2016-01-12 16:56 ` Vitaly Kuznetsov
2016-01-12 16:56 ` Vitaly Kuznetsov
2016-01-12 17:38 ` David Vrabel [this message]
2016-01-12 17:38 ` [Xen-devel] " David Vrabel
2016-01-13 8:14 ` Daniel Kiper
2016-01-13 8:14 ` Daniel Kiper
2016-01-13 8:14 ` Daniel Kiper
2016-01-13 10:53 ` [Xen-devel] " Vitaly Kuznetsov
2016-01-13 10:53 ` Vitaly Kuznetsov
2016-01-13 10:53 ` Vitaly Kuznetsov
2016-01-12 17:38 ` David Vrabel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56953A18.2070407@citrix.com \
--to=david.vrabel@citrix.com \
--cc=akpm@linux-foundation.org \
--cc=boris.ostrovsky@oracle.com \
--cc=corbet@lwn.net \
--cc=dan.j.williams@intel.com \
--cc=daniel.kiper@oracle.com \
--cc=gregkh@linuxfoundation.org \
--cc=imammedo@redhat.com \
--cc=kay@vrfy.org \
--cc=kys@microsoft.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=qiuxishi@huawei.com \
--cc=rientjes@google.com \
--cc=tangchen@cn.fujitsu.com \
--cc=vkuznets@redhat.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.