From: Daniel Kiper <daniel.kiper@oracle.com>
To: Julien Grall <julien.grall@arm.com>
Cc: jgross@suse.com, sstabellini@kernel.org,
andrew.cooper3@citrix.com, cardoe@cardoe.com,
pgnet.dev@gmail.com, ning.sun@intel.com, jbeulich@suse.com,
xen-devel@lists.xenproject.org, qiaowei.ren@intel.com,
gang.wei@intel.com, fu.wei@linaro.org
Subject: Re: [PATCH v11 06/13] efi: create new early memory allocator
Date: Mon, 12 Dec 2016 15:27:14 +0100 [thread overview]
Message-ID: <20161212142714.GA25118@olila.local.net-space.pl> (raw)
In-Reply-To: <39f731c7-e35b-473b-f586-3bc78c943409@arm.com>
On Fri, Dec 09, 2016 at 06:03:06PM +0000, Julien Grall wrote:
> Hi Daniel,
>
> On 05/12/16 22:25, Daniel Kiper wrote:
> >There is a problem with place_string() which is used as early memory
> >allocator. It gets memory chunks starting from start symbol and goes
> >down. Sadly this does not work when Xen is loaded using multiboot2
> >protocol because then the start lives on 1 MiB address and we should
> >not allocate a memory from below of it. So, I tried to use mem_lower
> >address calculated by GRUB2. However, this solution works only on some
> >machines. There are machines in the wild (e.g. Dell PowerEdge R820)
> >which uses first ~640 KiB for boot services code or data... :-(((
> >Hence, we need new memory allocator for Xen EFI boot code which is
> >quite simple and generic and could be used by place_string() and
> >efi_arch_allocate_mmap_buffer(). I think about following solutions:
> >
> >1) We could use native EFI allocation functions (e.g. AllocatePool()
> > or AllocatePages()) to get memory chunk. However, later (somewhere
> > in __start_xen()) we must copy its contents to safe place or reserve
> > it in e820 memory map and map it in Xen virtual address space. This
> > means that the code referring to Xen command line, loaded modules and
> > EFI memory map, mostly in __start_xen(), will be further complicated
> > and diverge from legacy BIOS cases. Additionally, both former things
> > have to be placed below 4 GiB because their addresses are stored in
> > multiboot_info_t structure which has 32-bit relevant members.
> >
> >2) We may allocate memory area statically somewhere in Xen code which
> > could be used as memory pool for early dynamic allocations. Looks
> > quite simple. Additionally, it would not depend on EFI at all and
> > could be used on legacy BIOS platforms if we need it. However, we
> > must carefully choose size of this pool. We do not want increase Xen
> > binary size too much and waste too much memory but also we must fit
> > at least memory map on x86 EFI platforms. As I saw on small machine,
> > e.g. IBM System x3550 M2 with 8 GiB RAM, memory map may contain more
> > than 200 entries. Every entry on x86-64 platform is 40 bytes in size.
> > So, it means that we need more than 8 KiB for EFI memory map only.
> > Additionally, if we use this memory pool for Xen and modules command
> > line storage (it would be used when xen.efi is executed as EFI application)
> > then we should add, I think, about 1 KiB. In this case, to be on safe
> > side, we should assume at least 64 KiB pool for early memory allocations.
> > Which is about 4 times of our earlier calculations. However, during
> > discussion on Xen-devel Jan Beulich suggested that just in case we should
> > use 1 MiB memory pool like it is in original place_string() implementation.
> > So, let's use 1 MiB as it was proposed. If we think that we should not
> > waste unallocated memory in the pool on running system then we can mark
> > this region as __initdata and move all required data to dynamically
> > allocated places somewhere in __start_xen().
> >
> >2a) We could put memory pool into .bss.page_aligned section. Then allocate
> > memory chunks starting from the lowest address. After init phase we can
> > free unused portion of the memory pool as in case of .init.text or .init.data
> > sections. This way we do not need to allocate any space in image file and
> > freeing of unused area in the memory pool is very simple.
> >
> >Now #2a solution is implemented because it is quite simple and requires
> >limited number of changes, especially in __start_xen().
> >
> >New allocator is quite generic and can be used on ARM platforms too.
> >Though it is not enabled on ARM yet due to lack of some prereq.
> >List of them is placed before ebmalloc code.
> >
> >Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
>
> FWIW,
>
> Acked-by: Julien Grall <julien.grall@arm.com>
Thanks a lot!
Daniel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-12-12 14:27 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-05 22:25 [PATCH v11 00/13] x86: multiboot2 protocol support Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 01/13] x86: add " Daniel Kiper
2017-01-10 1:21 ` Doug Goldstein
2017-01-10 8:38 ` Jan Beulich
2017-01-10 15:19 ` Doug Goldstein
2016-12-05 22:25 ` [PATCH v11 02/13] efi: create efi_enabled() Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 03/13] x86: allow EFI reboot method neither on EFI platforms Daniel Kiper
2016-12-07 13:18 ` Jan Beulich
2016-12-07 17:25 ` Daniel Kiper
2017-01-10 1:24 ` Doug Goldstein
2017-01-10 8:21 ` Jan Beulich
2016-12-05 22:25 ` [PATCH v11 04/13] x86: properly calculate xen ELF end of image address Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 05/13] efi: build xen.gz with EFI code Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 06/13] efi: create new early memory allocator Daniel Kiper
2016-12-06 8:27 ` Jan Beulich
2016-12-09 18:03 ` Julien Grall
2016-12-12 14:27 ` Daniel Kiper [this message]
2016-12-05 22:25 ` [PATCH v11 07/13] x86: add multiboot2 protocol support for EFI platforms Daniel Kiper
2016-12-16 13:38 ` Andrew Cooper
2016-12-16 13:50 ` Jan Beulich
2017-01-10 1:37 ` Doug Goldstein
2017-01-10 20:51 ` Doug Goldstein
2017-01-11 19:47 ` Daniel Kiper
2017-01-11 20:20 ` Doug Goldstein
2017-01-12 10:22 ` Jan Beulich
2017-01-12 12:50 ` Daniel Kiper
2017-01-12 15:52 ` Doug Goldstein
2017-01-12 20:28 ` Daniel Kiper
2017-01-12 22:23 ` Doug Goldstein
2017-01-13 0:04 ` Daniel Kiper
2017-01-13 0:35 ` Doug Goldstein
2017-01-13 0:37 ` Doug Goldstein
2017-01-11 19:08 ` Daniel Kiper
2017-01-11 19:50 ` Doug Goldstein
2017-01-11 20:36 ` Daniel Kiper
2017-01-11 20:31 ` Doug Goldstein
2017-01-12 12:18 ` Daniel Kiper
2017-01-12 15:44 ` Doug Goldstein
2017-01-12 19:30 ` Daniel Kiper
2017-01-12 19:46 ` Doug Goldstein
2017-01-12 21:45 ` Daniel Kiper
2017-01-12 22:20 ` Doug Goldstein
2017-01-12 23:44 ` Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 08/13] x86/boot: implement early command line parser in C Daniel Kiper
2016-12-07 13:43 ` Jan Beulich
2016-12-07 17:27 ` Daniel Kiper
2016-12-08 23:08 ` Daniel Kiper
2016-12-09 8:19 ` Jan Beulich
2016-12-09 13:32 ` Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 09/13] x86: change default load address from 1 MiB to 2 MiB Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 10/13] x86/setup: use XEN_IMG_OFFSET instead of Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 11/13] x86: make Xen early boot code relocatable Daniel Kiper
2017-01-10 2:05 ` Doug Goldstein
2017-01-11 20:05 ` Daniel Kiper
2017-01-11 20:23 ` Doug Goldstein
2016-12-05 22:25 ` [PATCH v11 12/13] x86/boot: rename sym_phys() to sym_offs() Daniel Kiper
2016-12-05 22:25 ` [PATCH v11 13/13] x86: add multiboot2 protocol support for relocatable images Daniel Kiper
2016-12-16 15:59 ` [PATCH v11 00/13] x86: multiboot2 protocol support Doug Goldstein
2017-01-10 23:12 ` [PATCH 2/??] memory allocation fix Doug Goldstein
2017-01-11 20:46 ` [PATCH v11 00/13] x86: multiboot2 protocol support Daniel Kiper
2017-01-13 15:45 ` Doug Goldstein
2017-01-13 16:18 ` Daniel Kiper
2017-01-12 17:46 ` Doug Goldstein
2017-01-12 18:26 ` Daniel Kiper
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=20161212142714.GA25118@olila.local.net-space.pl \
--to=daniel.kiper@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=cardoe@cardoe.com \
--cc=fu.wei@linaro.org \
--cc=gang.wei@intel.com \
--cc=jbeulich@suse.com \
--cc=jgross@suse.com \
--cc=julien.grall@arm.com \
--cc=ning.sun@intel.com \
--cc=pgnet.dev@gmail.com \
--cc=qiaowei.ren@intel.com \
--cc=sstabellini@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).