From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758365AbcBXR0x (ORCPT ); Wed, 24 Feb 2016 12:26:53 -0500 Received: from smtp.citrix.com ([66.165.176.89]:1461 "EHLO SMTP.CITRIX.COM" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757767AbcBXR0v (ORCPT ); Wed, 24 Feb 2016 12:26:51 -0500 X-IronPort-AV: E=Sophos;i="5.22,494,1449532800"; d="scan'208";a="334228246" Subject: Re: [Xen-devel] [PATCH v2] xen/x86: Zero out .bss for PV guests To: Boris Ostrovsky , , References: <1456327186-27354-1-git-send-email-boris.ostrovsky@oracle.com> CC: , , , From: Andrew Cooper Message-ID: <56CDE7D9.6000209@citrix.com> Date: Wed, 24 Feb 2016 17:26:49 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.5.0 MIME-Version: 1.0 In-Reply-To: <1456327186-27354-1-git-send-email-boris.ostrovsky@oracle.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-DLP: MIA1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24/02/16 15:19, Boris Ostrovsky wrote: > Baremetal kernels clear .bss early in the boot but Xen PV guests don't > execute that code. They have been able to run without problems because > Xen domain builder happens to give out zeroed pages. However, since this > is not really guaranteed, .bss should be explicitly cleared. > > (Since we introduce macros for specifying 32- and 64-bit registers we > can get rid of ifdefs in startup_xen()) > > Signed-off-by: Boris Ostrovsky > Cc: stable@vger.kernel.org > --- > arch/x86/xen/xen-head.S | 29 ++++++++++++++++++++++------- > 1 file changed, 22 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S > index b65f59a..2af87d1 100644 > --- a/arch/x86/xen/xen-head.S > +++ b/arch/x86/xen/xen-head.S > @@ -35,16 +35,31 @@ > #define PVH_FEATURES (0) > #endif > > - __INIT > -ENTRY(startup_xen) > - cld > #ifdef CONFIG_X86_32 > - mov %esi,xen_start_info > - mov $init_thread_union+THREAD_SIZE,%esp > +#define REG(register) %e##register > +#define WSIZE_SHIFT 2 > +#define STOS stosl > #else > - mov %rsi,xen_start_info > - mov $init_thread_union+THREAD_SIZE,%rsp > +#define REG(register) %r##register > +#define WSIZE_SHIFT 3 > +#define STOS stosq > #endif > + > + __INIT > +ENTRY(startup_xen) > + cld > + > + /* Clear .bss */ > + xor REG(ax),REG(ax) If we are nitpicking, This should be xor %eax, %eax even in 64bit. Functionally identical, and shorter to encode. ~Andrew