From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Daniel Kiper <daniel.kiper@oracle.com>
Cc: jgross@suse.com, keir@xen.org, ian.campbell@citrix.com,
stefano.stabellini@eu.citrix.com, ross.philipson@citrix.com,
roy.franz@linaro.org, ning.sun@intel.com, jbeulich@suse.com,
xen-devel@lists.xenproject.org, qiaowei.ren@intel.com,
richard.l.maliszewski@intel.com, gang.wei@intel.com,
fu.wei@linaro.org
Subject: Re: [PATCH for-xen-4.5 v4 05/18] x86/boot/reloc: create generic alloc and copy functions
Date: Fri, 17 Oct 2014 18:22:48 +0100 [thread overview]
Message-ID: <54415068.6080102@citrix.com> (raw)
In-Reply-To: <20141017171102.GI3467@olila.local.net-space.pl>
On 17/10/14 18:11, Daniel Kiper wrote:
> On Fri, Oct 17, 2014 at 05:04:33PM +0100, Andrew Cooper wrote:
>> On 17/10/14 15:11, Daniel Kiper wrote:
>>> Create generic alloc and copy functions. We need them to
>>> introduce MBD struct and multiboot2 protocol. Please
>>> check later patches for more details.
>> As I asked before, you need to make some comment about changing the
>> types and introducing loads of casts. Its fine to say that the eventual
>> code will use u32s everywhere, but this information must be in the
>> commit message.
> OK.
>
>>> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
>>> ---
>>> xen/arch/x86/boot/reloc.c | 52 ++++++++++++++++++++++++++++-----------------
>>> 1 file changed, 33 insertions(+), 19 deletions(-)
>>>
>>> diff --git a/xen/arch/x86/boot/reloc.c b/xen/arch/x86/boot/reloc.c
>>> index 4609e55..e1c83f4 100644
>>> --- a/xen/arch/x86/boot/reloc.c
>>> +++ b/xen/arch/x86/boot/reloc.c
>>> @@ -33,9 +33,10 @@ asm (
>>> typedef unsigned int u32;
>>> #include "../../../include/xen/multiboot.h"
>>>
>>> -static void *reloc_mbi_struct(void *old, unsigned int bytes)
>>> +static u32 alloc_struct(u32 bytes)
>>> {
>>> - void *new;
>>> + u32 s;
>>> +
>>> asm(
>>> " call 1f \n"
>>> "1: pop %%edx \n"
>>> @@ -43,50 +44,63 @@ static void *reloc_mbi_struct(void *old, unsigned int bytes)
>>> " sub %1,%0 \n"
>>> " and $~15,%0 \n"
>>> " mov %0,alloc-1b(%%edx) \n"
>>> - " mov %0,%%edi \n"
>>> - " rep movsb \n"
>>> - : "=&r" (new), "+c" (bytes), "+S" (old)
>>> - : : "edx", "edi");
>>> - return new;
>>> + : "=&r" (s) : "r" (bytes) : "edx");
>>> +
>>> + return s;
>>> }
>>>
>>> -static char *reloc_mbi_string(char *old)
>>> +static u32 copy_struct(u32 src, u32 bytes)
>>> +{
>>> + u32 dst, dst_asm;
>>> +
>>> + dst = alloc_struct(bytes);
>>> + dst_asm = dst;
>>> +
>>> + asm volatile("rep movsb" : "+S" (src), "+D" (dst_asm), "+c" (bytes));
>> All 3 registers are only used as inputs, and the modified values are not
>> useful. You can drop dst_asm entirely. See the stack resync code in
>> __start_xen() as an example.
> "rep movsb" clobbers S, D and c. If you put them as inputs then you are
> not able to tell GCC that they are clobbered. It means that GCC will assume
> that e.g. D contents, which in turn is assigned to dst variable, is the same
> before and after "asm volatile" which is not true. So, I do not know how
> 'asm volatile("rep movsb"...' in __start_xen() works and nothing has not
> blown out yet... Probably it is just fortunate coincidence. In my case it
> did not work (to be precise, sometime it worked). Hence, that is why I must
> put all input data as input/output and define additional variable which
> is used by "asm volatile" only. Maybe we should consider fixing this stuff
> in __start_xen() too... Are there other places with that bad guys?
Hmm - is appears that __start_xen() is saved because it only clobbers
the registers which are also clobbered by the unconditional call to
bootstrap_unmap() following it.
I will take a look for other issues.
>
> However, now I am thinking that we should add "memory" to clobbers when
> "rep movsb" and similar thing are used here.
Yes - the memory clobber is very important.
~Andrew
next prev parent reply other threads:[~2014-10-17 17:22 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-17 14:11 [PATCH for-xen-4.5 v4 00/18] xen: Break multiboot (v1) dependency and add multiboot2 support Daniel Kiper
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 01/18] xen/makefile: clean target should remove xen.efi binary Daniel Kiper
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 02/18] x86/boot: fix reloc.S build dependencies Daniel Kiper
2014-10-17 14:51 ` Jan Beulich
2014-10-17 16:10 ` Daniel Kiper
2014-10-17 16:22 ` Jan Beulich
2014-10-17 14:56 ` Andrew Cooper
2014-10-17 15:10 ` Jan Beulich
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 03/18] x86: define cmdline_cook() loader_name argument as a const Daniel Kiper
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 04/18] x86/boot: use constant in head.S instead of hardcoded value Daniel Kiper
2014-10-17 15:00 ` Andrew Cooper
2014-10-17 15:52 ` Daniel Kiper
2014-10-17 16:18 ` Jan Beulich
2014-10-17 16:22 ` Daniel Kiper
2014-10-20 8:00 ` Jan Beulich
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 05/18] x86/boot/reloc: create generic alloc and copy functions Daniel Kiper
2014-10-17 16:04 ` Andrew Cooper
2014-10-17 17:11 ` Daniel Kiper
2014-10-17 17:22 ` Andrew Cooper [this message]
2014-10-17 14:11 ` [PATCH for-xen-4.5 v4 06/18] x86: introduce MultiBoot Data (MBD) type Daniel Kiper
2014-10-17 17:14 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 07/18] x86/efi: add place_string_u32() function Daniel Kiper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 08/18] x86: introduce boot_info structure Daniel Kiper
2014-10-17 20:55 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 09/18] x86: move boot_loader_name from mbi to boot_info Daniel Kiper
2014-10-17 21:05 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 10/18] x86: move cmdline " Daniel Kiper
2014-10-17 21:27 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 11/18] x86: move legacy BIOS memory map stuff " Daniel Kiper
2014-10-17 22:08 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 12/18] x86: move modules data from mbi to boot_info and remove mbi Daniel Kiper
2014-10-17 22:35 ` Andrew Cooper
2014-10-20 8:38 ` Jan Beulich
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 13/18] x86: move EFI memory map stuff to boot_info Daniel Kiper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 14/18] x86: move MPS, ACPI and SMBIOS data " Daniel Kiper
2014-10-17 22:51 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 15/18] x86: move video " Daniel Kiper
2014-10-17 22:55 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 16/18] x86: move HDD " Daniel Kiper
2014-10-17 22:57 ` Andrew Cooper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 17/18] x86/boot: use %ecx instead of %eax Daniel Kiper
2014-10-17 14:12 ` [PATCH for-xen-4.5 v4 18/18] xen/x86: add multiboot2 protocol support Daniel Kiper
2014-10-17 23:13 ` Andrew Cooper
2014-10-17 14:42 ` [PATCH for-xen-4.5 v4 00/18] xen: Break multiboot (v1) dependency and add multiboot2 support Jan Beulich
2014-10-17 15:49 ` Daniel Kiper
2014-10-23 10:19 ` Jan Beulich
2014-10-23 11:08 ` Andrew Cooper
2014-10-23 14:57 ` Daniel Kiper
2014-10-23 15:26 ` Jan Beulich
2014-10-23 15:50 ` Daniel Kiper
2014-10-23 16:04 ` Jan Beulich
2014-10-23 17:55 ` konrad wilk
2014-10-24 9:09 ` Jan Beulich
2014-10-23 15:55 ` Andrew Cooper
2014-10-23 18:04 ` konrad wilk
2014-10-23 21:55 ` Andrew Cooper
2014-10-24 7:07 ` Daniel Kiper
2014-10-23 11:14 ` Stefano Stabellini
2014-10-23 11:33 ` Jan Beulich
2014-10-17 18:02 ` Roy Franz
2014-10-27 11:09 ` 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=54415068.6080102@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=daniel.kiper@oracle.com \
--cc=fu.wei@linaro.org \
--cc=gang.wei@intel.com \
--cc=ian.campbell@citrix.com \
--cc=jbeulich@suse.com \
--cc=jgross@suse.com \
--cc=keir@xen.org \
--cc=ning.sun@intel.com \
--cc=qiaowei.ren@intel.com \
--cc=richard.l.maliszewski@intel.com \
--cc=ross.philipson@citrix.com \
--cc=roy.franz@linaro.org \
--cc=stefano.stabellini@eu.citrix.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.