From mboxrd@z Thu Jan 1 00:00:00 1970 From: Don Slutz Subject: Re: [PATCHv2] x86: map portion of kexec crash area that is within the direct map area Date: Wed, 08 Jan 2014 15:54:26 -0500 Message-ID: <52CDBB02.6070702@terremark.com> References: <1389206119-13527-1-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1389206119-13527-1-git-send-email-david.vrabel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: David Vrabel , xen-devel@lists.xen.org Cc: Daniel Kiper , Don Slutz , Jan Beulich List-Id: xen-devel@lists.xenproject.org On 01/08/14 13:35, David Vrabel wrote: > From: David Vrabel > > Commit 7113a45451a9f656deeff070e47672043ed83664 (kexec/x86: do not map > crash kernel area) causes fatal page faults when loading a crash > image. The attempt to zero the first control page allocated from the > crash region will fault as the VA return by map_domain_page() has no > mapping. > > The fault will occur on non-debug builds of Xen when the crash area is > below 5 TiB (which will be most systems). > > The assumption that the crash area mapping was not used is incorrect. > map_domain_page() is used when loading an image and building the > image's page tables to temporarily map the crash area, thus the > mapping is required if the crash area is in the direct map area. > > Reintroduce the mapping, but only the portions of the crash area that > are within the direct map area. > > Reported-by: Don Slutz > Signed-off-by: David Vrabel > Cc: Daniel Kiper > --- > This fixes a Xen crash so is an important fix for the 4.4 release.. > > Changes in v2: > - merge patches into one > - add check for e > s before mapping > --- > xen/arch/x86/setup.c | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c > index 4833ca3..b49256d 100644 > --- a/xen/arch/x86/setup.c > +++ b/xen/arch/x86/setup.c > @@ -1098,6 +1098,17 @@ void __init __start_xen(unsigned long mbi_p) > PFN_UP(mod[i].mod_end), PAGE_HYPERVISOR); > } > > + if ( kexec_crash_area.size ) > + { > + unsigned long s = PFN_DOWN(kexec_crash_area.start); > + unsigned long e = min(s + PFN_UP(kexec_crash_area.size), > + PFN_UP(__pa(HYPERVISOR_VIRT_END - 1))); > + > + if ( e > s ) > + map_pages_to_xen((unsigned long)__va(kexec_crash_area.start), > + s, e - s, PAGE_HYPERVISOR); > + } > + > xen_virt_end = ((unsigned long)_end + (1UL << L2_PAGETABLE_SHIFT) - 1) & > ~((1UL << L2_PAGETABLE_SHIFT) - 1); > destroy_xen_mappings(xen_virt_end, XEN_VIRT_START + BOOTSTRAP_MAP_BASE); 4.4.0-rc1 + this patch works for me. So you can add: Tested-by: Don Slutz -Don Slutz