From: David Vrabel <david.vrabel@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: <linux-kernel@vger.kernel.org>, <xen-devel@lists.xensource.com>
Subject: Re: [Xen-devel] [PATCH 5/7] xen/setup: Transfer MFNs from non-RAM E820 entries and gaps to E820 RAM
Date: Tue, 3 Apr 2012 09:48:43 +0100 [thread overview]
Message-ID: <4F7AB96B.5030900@citrix.com> (raw)
In-Reply-To: <1333139850-28456-6-git-send-email-konrad.wilk@oracle.com>
On 30/03/12 21:37, Konrad Rzeszutek Wilk wrote:
> We will now get:
>
> -Released 283999 pages of unused memory
> +Exchanged 283999 pages
> .. snip..
> -Memory: 6487732k/9208688k available (5817k kernel code, 1136060k absent, 1584896k reserved, 2900k data, 692k init)
> +Memory: 6503888k/8072692k available (5817k kernel code, 1136060k absent, 432744k reserved, 2900k data, 692k init)
This isn't correct. You've have lost ~1 GB of memory which are the
pages that were supposed to be moved. The additional 1GB of reserved
memory in the old case is the balloon.
In xen_memory_setup() where it loops through the e820 to clip the RAM
regions you need to factor in the additional memory you've moved. In
this loop you may need to count the pages in the RAM region instead of
the simple (addr < mem_end) test. Take care with RAM regions with
partial pages and the like.
> which is more in line with classic XenOLinux.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
> arch/x86/xen/setup.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 82 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
> index 1ba8dff..2a12143 100644
> --- a/arch/x86/xen/setup.c
> +++ b/arch/x86/xen/setup.c
> @@ -120,12 +120,89 @@ static unsigned long __init xen_release_chunk(unsigned long start,
> return len;
> }
>
> +static unsigned long __init xen_exchange_chunk(unsigned long start_pfn,
> + unsigned long end_pfn, unsigned long nr_pages, unsigned long exchanged,
> + unsigned long *pages_left, const struct e820entry *list,
> + size_t map_size)
> +{
[...]
> +
> + for (pfn = start_pfn; pfn < start_pfn + nr; pfn++) {
> + unsigned long mfn = pfn_to_mfn(pfn);
> +
> + if (mfn == INVALID_P2M_ENTRY || mfn_to_pfn(mfn) != pfn)
> + break;
> +
> + if (!early_set_phys_to_machine(dest_pfn, mfn))
> + break;
> +
> + /* You would think we should do HYPERVISOR_update_va_mapping
> + * but we don't need to as the hypervisor only sets up the
> + * initial pagetables up to nr_pages, and we stick the MFNs
> + * past that.
> + */
Hmmm. Are you sure this is safe? What happens if Linux tries to use
these pages before creating new page tables? e.g., via some early boot
allocator before the final page tables are setup? (This might not be a
problem, I haven't checked).
You've may have gotten away with it for now because the moved MFNs are
marked as unusable.
David
WARNING: multiple messages have this Message-ID (diff)
From: David Vrabel <david.vrabel@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: linux-kernel@vger.kernel.org, xen-devel@lists.xensource.com
Subject: Re: [Xen-devel] [PATCH 5/7] xen/setup: Transfer MFNs from non-RAM E820 entries and gaps to E820 RAM
Date: Tue, 3 Apr 2012 09:48:43 +0100 [thread overview]
Message-ID: <4F7AB96B.5030900@citrix.com> (raw)
In-Reply-To: <1333139850-28456-6-git-send-email-konrad.wilk@oracle.com>
On 30/03/12 21:37, Konrad Rzeszutek Wilk wrote:
> We will now get:
>
> -Released 283999 pages of unused memory
> +Exchanged 283999 pages
> .. snip..
> -Memory: 6487732k/9208688k available (5817k kernel code, 1136060k absent, 1584896k reserved, 2900k data, 692k init)
> +Memory: 6503888k/8072692k available (5817k kernel code, 1136060k absent, 432744k reserved, 2900k data, 692k init)
This isn't correct. You've have lost ~1 GB of memory which are the
pages that were supposed to be moved. The additional 1GB of reserved
memory in the old case is the balloon.
In xen_memory_setup() where it loops through the e820 to clip the RAM
regions you need to factor in the additional memory you've moved. In
this loop you may need to count the pages in the RAM region instead of
the simple (addr < mem_end) test. Take care with RAM regions with
partial pages and the like.
> which is more in line with classic XenOLinux.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
> arch/x86/xen/setup.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 82 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
> index 1ba8dff..2a12143 100644
> --- a/arch/x86/xen/setup.c
> +++ b/arch/x86/xen/setup.c
> @@ -120,12 +120,89 @@ static unsigned long __init xen_release_chunk(unsigned long start,
> return len;
> }
>
> +static unsigned long __init xen_exchange_chunk(unsigned long start_pfn,
> + unsigned long end_pfn, unsigned long nr_pages, unsigned long exchanged,
> + unsigned long *pages_left, const struct e820entry *list,
> + size_t map_size)
> +{
[...]
> +
> + for (pfn = start_pfn; pfn < start_pfn + nr; pfn++) {
> + unsigned long mfn = pfn_to_mfn(pfn);
> +
> + if (mfn == INVALID_P2M_ENTRY || mfn_to_pfn(mfn) != pfn)
> + break;
> +
> + if (!early_set_phys_to_machine(dest_pfn, mfn))
> + break;
> +
> + /* You would think we should do HYPERVISOR_update_va_mapping
> + * but we don't need to as the hypervisor only sets up the
> + * initial pagetables up to nr_pages, and we stick the MFNs
> + * past that.
> + */
Hmmm. Are you sure this is safe? What happens if Linux tries to use
these pages before creating new page tables? e.g., via some early boot
allocator before the final page tables are setup? (This might not be a
problem, I haven't checked).
You've may have gotten away with it for now because the moved MFNs are
marked as unusable.
David
next prev parent reply other threads:[~2012-04-03 8:48 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-30 20:37 [PATCH] fix /proc/meminfo reporting (v1) Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 1/7] xen/p2m: Move code around to allow for better re-usage Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 2/7] xen/p2m: Allow alloc_p2m_middle to call reserve_brk depending on argument Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 3/7] xen/p2m: Collapse early_alloc_p2m_middle redundant checks Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 4/7] xen/p2m: An early bootup variant of set_phys_to_machine Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 5/7] xen/setup: Transfer MFNs from non-RAM E820 entries and gaps to E820 RAM Konrad Rzeszutek Wilk
2012-04-03 8:48 ` David Vrabel [this message]
2012-04-03 8:48 ` [Xen-devel] " David Vrabel
2012-04-03 13:13 ` Konrad Rzeszutek Wilk
2012-04-06 21:02 ` Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 6/7] xen/setup: Make dom0_mem=XGB behavior be similar to classic Xen kernels Konrad Rzeszutek Wilk
2012-04-03 8:58 ` [Xen-devel] " David Vrabel
2012-04-03 8:58 ` David Vrabel
2012-04-03 9:46 ` Jan Beulich
2012-04-03 9:46 ` Jan Beulich
2012-04-06 21:01 ` Konrad Rzeszutek Wilk
2012-04-09 16:39 ` Jan Beulich
2012-04-09 16:39 ` Jan Beulich
2012-04-09 21:33 ` Konrad Rzeszutek Wilk
2012-04-06 20:59 ` Konrad Rzeszutek Wilk
2012-04-09 16:56 ` Jan Beulich
2012-04-09 16:56 ` Jan Beulich
2012-04-09 21:49 ` Konrad Rzeszutek Wilk
2012-03-30 20:37 ` [PATCH 7/7] xen/setup: Only print "Freeing XXX-YYY pfn range: Z pages freed" if Z > 0 Konrad Rzeszutek Wilk
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=4F7AB96B.5030900@citrix.com \
--to=david.vrabel@citrix.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=xen-devel@lists.xensource.com \
/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.