From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH] kexec: add more pages to v1 environment Date: Tue, 9 Jun 2015 14:02:45 +0100 Message-ID: <5576E3F5.1030400@citrix.com> References: <5576F246020000780008295E@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0389992614509858074==" Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Z2JBG-0000zf-Ex for xen-devel@lists.xenproject.org; Tue, 09 Jun 2015 13:03:02 +0000 In-Reply-To: <5576F246020000780008295E@mail.emea.novell.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: Jan Beulich , xen-devel Cc: David Vrabel List-Id: xen-devel@lists.xenproject.org --===============0389992614509858074== Content-Type: multipart/alternative; boundary="------------070609090007020500080103" --------------070609090007020500080103 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit On 09/06/15 13:03, Jan Beulich wrote: > Destination pages need mappings to be added to the page tables in the > v1 case (where nothing else calls machine_kexec_add_page() for them). > > Further, without the tools mapping the low 1Mb (expected by at least > some Linux version), we need to do so in the hypervisor in the v1 case. > > Suggested-by: David Vrabel > Signed-off-by: Jan Beulich > Tested-by: Alan Robinson > > --- a/xen/common/kexec.c > +++ b/xen/common/kexec.c > @@ -1003,6 +1003,24 @@ static int kexec_do_load_v1(xen_kexec_lo > if ( ret < 0 ) > goto error; > > + if ( arch == EM_386 || arch == EM_X86_64 ) > + { > + /* > + * Ensure 0 - 1 MiB is mapped and accessible by the image. > + * > + * This allows access to VGA memory and the region purgatory copies > + * in the crash case. > + */ > + unsigned long addr; > + > + for ( addr = 0; addr < (1UL << 20); addr += PAGE_SIZE ) MB(1) Otherwise, Reviewed-by: Andrew Cooper > + { > + ret = machine_kexec_add_page(kimage, addr, addr); > + if ( ret < 0 ) > + goto error; > + } > + } > + > ret = kexec_load_slot(kimage); > if ( ret < 0 ) > goto error; > --- a/xen/common/kimage.c > +++ b/xen/common/kimage.c > @@ -923,6 +923,11 @@ int kimage_build_ind(struct kexec_image > ret = kimage_add_page(image, page_to_maddr(xen_page)); > if ( ret < 0 ) > goto done; > + > + ret = machine_kexec_add_page(image, dest, dest); > + if ( ret < 0 ) > + goto done; > + > dest += PAGE_SIZE; > break; > } > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel --------------070609090007020500080103 Content-Type: text/html; charset="windows-1252" Content-Transfer-Encoding: 7bit
On 09/06/15 13:03, Jan Beulich wrote:
Destination pages need mappings to be added to the page tables in the
v1 case (where nothing else calls machine_kexec_add_page() for them).

Further, without the tools mapping the low 1Mb (expected by at least
some Linux version), we need to do so in the hypervisor in the v1 case.

Suggested-by: David Vrabel <david.vrabel@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Alan Robinson <alan.robinson@ts.fujitsu.com>

--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -1003,6 +1003,24 @@ static int kexec_do_load_v1(xen_kexec_lo
     if ( ret < 0 )
         goto error;
 
+    if ( arch == EM_386 || arch == EM_X86_64 )
+    {
+        /*
+         * Ensure 0 - 1 MiB is mapped and accessible by the image.
+         *
+         * This allows access to VGA memory and the region purgatory copies
+         * in the crash case.
+         */
+        unsigned long addr;
+
+        for ( addr = 0; addr < (1UL << 20); addr += PAGE_SIZE )

MB(1)

Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

+        {
+            ret = machine_kexec_add_page(kimage, addr, addr);
+            if ( ret < 0 )
+                goto error;
+        }
+    }
+
     ret = kexec_load_slot(kimage);
     if ( ret < 0 )
         goto error;
--- a/xen/common/kimage.c
+++ b/xen/common/kimage.c
@@ -923,6 +923,11 @@ int kimage_build_ind(struct kexec_image 
             ret = kimage_add_page(image, page_to_maddr(xen_page));
             if ( ret < 0 )
                 goto done;
+
+            ret = machine_kexec_add_page(image, dest, dest);
+            if ( ret < 0 )
+                goto done;
+
             dest += PAGE_SIZE;
             break;
         }





_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

--------------070609090007020500080103-- --===============0389992614509858074== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============0389992614509858074==--