From: Juergen Gross <jgross@suse.com>
To: David Vrabel <david.vrabel@citrix.com>,
linux-kernel@vger.kernel.org, xen-devel@lists.xensource.com,
konrad.wilk@oracle.com, boris.ostrovsky@oracle.com
Subject: Re: [Xen-devel] [PATCH 06/13] xen: detect pre-allocated memory interfering with e820 map
Date: Mon, 30 Mar 2015 12:00:01 +0200 [thread overview]
Message-ID: <55191EA1.5020500@suse.com> (raw)
In-Reply-To: <54EDF187.4050507@suse.com>
On 02/25/2015 05:00 PM, Juergen Gross wrote:
> On 02/25/2015 03:24 PM, David Vrabel wrote:
>> On 24/02/15 06:27, Juergen Gross wrote:
>>> On 02/19/2015 07:07 PM, David Vrabel wrote:
>>>> On 18/02/2015 06:51, Juergen Gross wrote:
>>>>> +{
>>>>> + unsigned long pfn;
>>>>> + unsigned long area_start, area_end;
>>>>> + unsigned i;
>>>>> +
>>>>> + for (i = 0; i < XEN_N_RESERVED_AREAS; i++) {
>>>>> +
>>>>> + if (!xen_reserved_area[i].size)
>>>>> + break;
>>>>> +
>>>>> + area_start = PFN_DOWN(xen_reserved_area[i].start);
>>>>> + area_end = PFN_UP(xen_reserved_area[i].start +
>>>>> + xen_reserved_area[i].size);
>>>>> + if (area_start >= end_pfn || area_end <= start_pfn)
>>>>> + continue;
>>>>> +
>>>>> + if (area_start > start_pfn)
>>>>> + xen_set_identity_and_remap_chunk(start_pfn, area_start,
>>>>> + released, remapped);
>>>>> +
>>>>> + if (area_end < end_pfn)
>>>>> + xen_set_identity_and_remap_chunk(area_end, end_pfn,
>>>>> + released, remapped);
>>>>> +
>>>>> + *remapped += min(area_end, end_pfn) -
>>>>> + max(area_start, start_pfn);
>>>>> +
>>>>> + return;
>>>>
>>>> Why not defer the whole chunk that conflicts? Or for that matter defer
>>>> all this remapping to the last minute.
>>>
>>> There are two problems arising from this:
>>>
>>> - In the initrd case remapping would be deferred too long: the initrd
>>> data is still in use when device initialization is running. And we
>>> really want the remap to have happened before PCI space is being
>>> used.
>>
>> I'm not sure I understand what you're saying here.
>
> I thought you wanted to defer the remapping to the point where the
> initrd memory is no longer being used. But the suggestion below is
> more clear.
>
>>
>> I'm suggesting:
>>
>> 1. Reserve all holes.
>>
>> 2. Relocate (if necessary) all modules (initrd, etc.) to regions that
>> are RAM in the e820.
>>
>> 3. Rebuild the p2m in RAM.
>>
>> 4. Relocate frames from E820 holes/reserved to the end, free p2m pages
>> from the holes and replacing them with the read-only 1:1 page (where
>> possible).
>>
>>> - Delaying all remapping to the point where the new p2m list is in place
>>> would either result in a p2m list with all memory holes covered with
>>> individual entries as the new list is built with those holes still
>>> populated, ...
>>> The first option could easily waste significant amounts of memory (on
>>> my test machine with 1TB RAM this would have been about 1GB), while
>>> the second option would be performance critical.
>>
>> I don't understand how this wastes memory. When you relocate the
>> frames from the holes you can reclaim the p2m pages for the holes (and
>> replace them with the r/o mapped identity p2m page).
>
> Okay, this would work, I guess.
>
> I'll have a try with some new patches...
I tried your approach and hit a problem I can't solve without a major
rework of the kernel's init sequence:
dmi_scan_machine() (and possibly other functions like probe_roms())
need the identity mappings of BIOS, ACPI or PCI memory. Otherwise
SMBIOS, DMI and extension ROMs won't be discovered.
This can be solved only by either a complete rework of the sequence of
called init functions (not desirable, I guess) or by doing the unmap
part of the remapping as early as today.
This means, of course, I was just lucky with my resolution of the p2m
table conflicting with the E820 map by just delaying the remapping of
this memory area: in case it would have collided with an area needed
to be identity mapped early, the machine wouldn't have been able to
boot my kernel. So I really need to relocate the p2m list, even if this
is not as easy as delaying the remapping.
Juergen
next prev parent reply other threads:[~2015-03-30 10:00 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-18 6:51 [PATCH 00/13] xen: support pv-domains larger than 512GB Juergen Gross
2015-02-18 6:51 ` [PATCH 01/13] xen: sync with xen header Juergen Gross
2015-02-18 6:51 ` [PATCH 02/13] xen: anchor linear p2m list in shared info structure Juergen Gross
2015-02-18 10:32 ` [Xen-devel] " David Vrabel
2015-02-18 10:32 ` David Vrabel
2015-02-18 10:42 ` Juergen Gross
2015-02-18 10:50 ` Andrew Cooper
2015-02-18 10:50 ` Andrew Cooper
2015-02-18 10:54 ` David Vrabel
2015-02-18 10:54 ` David Vrabel
2015-02-18 10:57 ` Andrew Cooper
2015-02-18 10:57 ` Andrew Cooper
2015-02-18 10:57 ` Juergen Gross
2015-02-18 10:56 ` Juergen Gross
2015-02-18 10:51 ` David Vrabel
2015-02-18 10:51 ` David Vrabel
2015-02-18 6:51 ` [PATCH 03/13] xen: eliminate scalability issues from initial mapping setup Juergen Gross
2015-02-18 6:51 ` [PATCH 04/13] xen: move static e820 map to global scope Juergen Gross
2015-02-19 17:27 ` [Xen-devel] " David Vrabel
2015-02-18 6:51 ` [PATCH 05/13] xen: simplify xen_set_identity_and_remap() by using global variables Juergen Gross
2015-02-19 18:10 ` [Xen-devel] " David Vrabel
2015-02-24 6:15 ` Juergen Gross
2015-02-18 6:51 ` [PATCH 06/13] xen: detect pre-allocated memory interfering with e820 map Juergen Gross
2015-02-19 18:07 ` [Xen-devel] " David Vrabel
2015-02-24 6:27 ` Juergen Gross
2015-02-25 14:24 ` David Vrabel
2015-02-25 14:24 ` David Vrabel
2015-02-25 16:00 ` Juergen Gross
2015-03-30 10:00 ` Juergen Gross [this message]
2015-02-18 6:52 ` [PATCH 07/13] xen: find unused contiguous memory area Juergen Gross
2015-02-19 17:31 ` [Xen-devel] " David Vrabel
2015-02-18 6:52 ` [PATCH 08/13] xen: add service function to copy physical memory areas Juergen Gross
2015-02-19 17:35 ` [Xen-devel] " David Vrabel
2015-02-24 6:34 ` Juergen Gross
2015-02-18 6:52 ` [PATCH 09/13] xen: check for kernel memory conflicting with memory layout Juergen Gross
2015-02-19 17:36 ` [Xen-devel] " David Vrabel
2015-02-24 6:45 ` Juergen Gross
2015-02-18 6:52 ` [PATCH 10/13] xen: check pre-allocated page tables for conflict with memory map Juergen Gross
2015-02-19 17:37 ` [Xen-devel] " David Vrabel
2015-02-24 6:45 ` Juergen Gross
2015-02-18 6:52 ` [PATCH 11/13] xen: move initrd away from e820 non-ram area Juergen Gross
2015-02-19 17:42 ` [Xen-devel] " David Vrabel
2015-02-18 6:52 ` [PATCH 12/13] xen: if p2m list located in to be remapped region delay remapping Juergen Gross
2015-02-19 17:44 ` [Xen-devel] " David Vrabel
2015-02-24 7:01 ` Juergen Gross
2015-02-18 6:52 ` [PATCH 13/13] xen: allow more than 512 GB of RAM for 64 bit pv-domains Juergen Gross
2015-02-18 9:21 ` Paul Bolle
2015-02-18 9:37 ` Juergen Gross
2015-02-18 9:49 ` [Xen-devel] " Jan Beulich
2015-02-18 9:49 ` Jan Beulich
[not found] ` <54E46E3C0200007800060F98@suse.com>
2015-02-18 9:59 ` Juergen Gross
2015-02-18 10:35 ` Paul Bolle
2015-02-18 11:18 ` [Xen-devel] " David Vrabel
2015-02-18 11:18 ` David Vrabel
2015-02-18 11:51 ` Juergen Gross
2015-02-18 11:56 ` Andrew Cooper
2015-02-19 17:51 ` David Vrabel
2015-02-24 7:28 ` Juergen Gross
2015-02-18 11:53 ` Juergen Gross
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=55191EA1.5020500@suse.com \
--to=jgross@suse.com \
--cc=boris.ostrovsky@oracle.com \
--cc=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.