From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH V5 02/15] Move x86 specific funtions/variables to arch header Date: Mon, 22 Sep 2014 11:56:46 +0100 Message-ID: <54201C8E0200007800036D60@mail.emea.novell.com> References: <1411080607-32365-1-git-send-email-roy.franz@linaro.org> <1411080607-32365-3-git-send-email-roy.franz@linaro.org> <541C0772020000780003672C@mail.emea.novell.com> <1411383132.18331.22.camel@kazak.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1411383132.18331.22.camel@kazak.uk.xensource.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: keir@xen.org, tim@xen.org, xen-devel@lists.xen.org, Roy Franz , stefano.stabellini@citrix.com, fu.wei@linaro.org List-Id: xen-devel@lists.xenproject.org >>> On 22.09.14 at 12:52, wrote: > On Fri, 2014-09-19 at 09:37 +0100, Jan Beulich wrote: >> >>> On 19.09.14 at 00:49, wrote: >> > @@ -687,82 +645,6 @@ static int __init set_color(u32 mask, int bpp, u8 > *pos, u8 *sz) >> > return max(*pos + *sz, bpp); >> > } >> > >> > -extern const intpte_t __page_tables_start[], __page_tables_end[]; >> > -#define in_page_tables(v) ((intpte_t *)(v) >= __page_tables_start && \ >> > - (intpte_t *)(v) < __page_tables_end) >> > - >> > -#define PE_BASE_RELOC_ABS 0 >> > -#define PE_BASE_RELOC_HIGHLOW 3 >> > -#define PE_BASE_RELOC_DIR64 10 >> > - >> > -extern const struct pe_base_relocs { >> > - u32 rva; >> > - u32 size; >> > - u16 entries[]; >> > -} __base_relocs_start[], __base_relocs_end[]; >> > - >> > -static void __init relocate_image(unsigned long delta) >> > -{ >> > - const struct pe_base_relocs *base_relocs; >> > - >> > - for ( base_relocs = __base_relocs_start; base_relocs < > __base_relocs_end; ) >> > - { >> > - unsigned int i, n; >> > - >> > - n = (base_relocs->size - sizeof(*base_relocs)) / >> > - sizeof(*base_relocs->entries); >> > - for ( i = 0; i < n; ++i ) >> > - { >> > - unsigned long addr = xen_phys_start + base_relocs->rva + >> > - (base_relocs->entries[i] & 0xfff); >> > - >> > - switch ( base_relocs->entries[i] >> 12 ) >> > - { >> > - case PE_BASE_RELOC_ABS: >> > - break; >> > - case PE_BASE_RELOC_HIGHLOW: >> > - if ( delta ) >> > - { >> > - *(u32 *)addr += delta; >> > - if ( in_page_tables(addr) ) >> > - *(u32 *)addr += xen_phys_start; >> > - } >> > - break; >> > - case PE_BASE_RELOC_DIR64: >> > - if ( delta ) >> > - { >> > - *(u64 *)addr += delta; >> > - if ( in_page_tables(addr) ) >> > - *(intpte_t *)addr += xen_phys_start; >> > - } >> > - break; >> > - default: >> > - blexit(L"Unsupported relocation type"); >> > - } >> > - } >> > - base_relocs = (const void *)(base_relocs->entries + i + (i & 1)); >> > - } >> > -} >> >> Hmm, so you're still moving the relocation processing code - why? I >> don't recall you having said you're sure you'll not need this on ARM. > > ARM relocates itself to the top of memory during bringup already. I > don't think we need to do it here as well/instead. There are two relocations (on x86) actually: One (always used) is to move the hypervisor image to high physical memory. The other (needed under UEFI only) is to relocate the hypervisor from where the UEFI loader put it (running in physical mode, virtual and physical addresses are the same) to its linked virtual address. Are you saying that ARM isn't in need of this? Jan