WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [LINUX] kexec: remove patches which are n

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [LINUX] kexec: remove patches which are not straight backports.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 08 Dec 2006 15:10:14 +0000
Delivery-date: Fri, 08 Dec 2006 07:09:46 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
# Node ID 1db125262365b993d486272cc28e084bf57e0d66
# Parent  7c3dee5ff185b5cb88078281077e234dcec6138e
[LINUX] kexec: remove patches which are not straight backports.

Their contents will be added to the sparse tree in a subsequent patch.

Changes to kernel/sys.c in kexec-generic.patch remain for now. These
will be taken care of in a later patch.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
---
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-i386.patch   |  105 -----
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-x86_64.patch |  209 
----------
 patches/linux-2.6.16.33/kexec-generic.patch                     |  199 
---------
 patches/linux-2.6.16.33/series                                  |    2 
 4 files changed, 515 deletions(-)

diff -r 7c3dee5ff185 -r 1db125262365 patches/linux-2.6.16.33/kexec-generic.patch
--- a/patches/linux-2.6.16.33/kexec-generic.patch       Fri Dec 08 11:46:48 
2006 +0000
+++ b/patches/linux-2.6.16.33/kexec-generic.patch       Fri Dec 08 11:47:09 
2006 +0000
@@ -1,216 +1,3 @@
---- 0001/include/linux/kexec.h
-+++ work/include/linux/kexec.h
-@@ -31,6 +31,13 @@
- #error KEXEC_ARCH not defined
- #endif
- 
-+#ifndef KEXEC_ARCH_HAS_PAGE_MACROS
-+#define kexec_page_to_pfn(page)  page_to_pfn(page)
-+#define kexec_pfn_to_page(pfn)   pfn_to_page(pfn)
-+#define kexec_virt_to_phys(addr) virt_to_phys(addr)
-+#define kexec_phys_to_virt(addr) phys_to_virt(addr)
-+#endif
-+
- /*
-  * This structure is used to hold the arguments that are used when loading
-  * kernel binaries.
-@@ -91,6 +98,13 @@ struct kimage {
- extern NORET_TYPE void machine_kexec(struct kimage *image) ATTRIB_NORET;
- extern int machine_kexec_prepare(struct kimage *image);
- extern void machine_kexec_cleanup(struct kimage *image);
-+#ifdef CONFIG_XEN
-+extern int xen_machine_kexec_load(struct kimage *image);
-+extern void xen_machine_kexec_unload(struct kimage *image);
-+extern NORET_TYPE void xen_machine_kexec(struct kimage *image) ATTRIB_NORET;
-+extern void xen_machine_kexec_setup_resources(void);
-+extern void xen_machine_kexec_register_resources(struct resource *res);
-+#endif
- extern asmlinkage long sys_kexec_load(unsigned long entry,
-                                       unsigned long nr_segments,
-                                       struct kexec_segment __user *segments,
---- 0001/kernel/kexec.c
-+++ work/kernel/kexec.c
-@@ -403,7 +403,7 @@ static struct page *kimage_alloc_normal_
-               pages = kimage_alloc_pages(GFP_KERNEL, order);
-               if (!pages)
-                       break;
--              pfn   = page_to_pfn(pages);
-+              pfn   = kexec_page_to_pfn(pages);
-               epfn  = pfn + count;
-               addr  = pfn << PAGE_SHIFT;
-               eaddr = epfn << PAGE_SHIFT;
-@@ -437,6 +437,7 @@ static struct page *kimage_alloc_normal_
-       return pages;
- }
- 
-+#ifndef CONFIG_XEN
- static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
-                                                     unsigned int order)
- {
-@@ -490,7 +491,7 @@ static struct page *kimage_alloc_crash_c
-               }
-               /* If I don't overlap any segments I have found my hole! */
-               if (i == image->nr_segments) {
--                      pages = pfn_to_page(hole_start >> PAGE_SHIFT);
-+                      pages = kexec_pfn_to_page(hole_start >> PAGE_SHIFT);
-                       break;
-               }
-       }
-@@ -517,6 +518,13 @@ struct page *kimage_alloc_control_pages(
- 
-       return pages;
- }
-+#else /* !CONFIG_XEN */
-+struct page *kimage_alloc_control_pages(struct kimage *image,
-+                                       unsigned int order)
-+{
-+      return kimage_alloc_normal_control_pages(image, order);
-+}
-+#endif
- 
- static int kimage_add_entry(struct kimage *image, kimage_entry_t entry)
- {
-@@ -532,7 +540,7 @@ static int kimage_add_entry(struct kimag
-                       return -ENOMEM;
- 
-               ind_page = page_address(page);
--              *image->entry = virt_to_phys(ind_page) | IND_INDIRECTION;
-+              *image->entry = kexec_virt_to_phys(ind_page) | IND_INDIRECTION;
-               image->entry = ind_page;
-               image->last_entry = ind_page +
-                                     ((PAGE_SIZE/sizeof(kimage_entry_t)) - 1);
-@@ -593,13 +601,13 @@ static int kimage_terminate(struct kimag
- #define for_each_kimage_entry(image, ptr, entry) \
-       for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE); \
-               ptr = (entry & IND_INDIRECTION)? \
--                      phys_to_virt((entry & PAGE_MASK)): ptr +1)
-+                      kexec_phys_to_virt((entry & PAGE_MASK)): ptr +1)
- 
- static void kimage_free_entry(kimage_entry_t entry)
- {
-       struct page *page;
- 
--      page = pfn_to_page(entry >> PAGE_SHIFT);
-+      page = kexec_pfn_to_page(entry >> PAGE_SHIFT);
-       kimage_free_pages(page);
- }
- 
-@@ -611,6 +619,10 @@ static void kimage_free(struct kimage *i
-       if (!image)
-               return;
- 
-+#ifdef CONFIG_XEN
-+      xen_machine_kexec_unload(image);
-+#endif
-+
-       kimage_free_extra_pages(image);
-       for_each_kimage_entry(image, ptr, entry) {
-               if (entry & IND_INDIRECTION) {
-@@ -686,7 +698,7 @@ static struct page *kimage_alloc_page(st
-        * have a match.
-        */
-       list_for_each_entry(page, &image->dest_pages, lru) {
--              addr = page_to_pfn(page) << PAGE_SHIFT;
-+              addr = kexec_page_to_pfn(page) << PAGE_SHIFT;
-               if (addr == destination) {
-                       list_del(&page->lru);
-                       return page;
-@@ -701,12 +713,12 @@ static struct page *kimage_alloc_page(st
-               if (!page)
-                       return NULL;
-               /* If the page cannot be used file it away */
--              if (page_to_pfn(page) >
-+              if (kexec_page_to_pfn(page) >
-                               (KEXEC_SOURCE_MEMORY_LIMIT >> PAGE_SHIFT)) {
-                       list_add(&page->lru, &image->unuseable_pages);
-                       continue;
-               }
--              addr = page_to_pfn(page) << PAGE_SHIFT;
-+              addr = kexec_page_to_pfn(page) << PAGE_SHIFT;
- 
-               /* If it is the destination page we want use it */
-               if (addr == destination)
-@@ -729,7 +741,7 @@ static struct page *kimage_alloc_page(st
-                       struct page *old_page;
- 
-                       old_addr = *old & PAGE_MASK;
--                      old_page = pfn_to_page(old_addr >> PAGE_SHIFT);
-+                      old_page = kexec_pfn_to_page(old_addr >> PAGE_SHIFT);
-                       copy_highpage(page, old_page);
-                       *old = addr | (*old & ~PAGE_MASK);
- 
-@@ -779,7 +791,7 @@ static int kimage_load_normal_segment(st
-                       result  = -ENOMEM;
-                       goto out;
-               }
--              result = kimage_add_page(image, page_to_pfn(page)
-+              result = kimage_add_page(image, kexec_page_to_pfn(page)
-                                                               << PAGE_SHIFT);
-               if (result < 0)
-                       goto out;
-@@ -811,6 +823,7 @@ out:
-       return result;
- }
- 
-+#ifndef CONFIG_XEN
- static int kimage_load_crash_segment(struct kimage *image,
-                                       struct kexec_segment *segment)
- {
-@@ -833,7 +846,7 @@ static int kimage_load_crash_segment(str
-               char *ptr;
-               size_t uchunk, mchunk;
- 
--              page = pfn_to_page(maddr >> PAGE_SHIFT);
-+              page = kexec_pfn_to_page(maddr >> PAGE_SHIFT);
-               if (page == 0) {
-                       result  = -ENOMEM;
-                       goto out;
-@@ -881,6 +894,13 @@ static int kimage_load_segment(struct ki
- 
-       return result;
- }
-+#else /* CONFIG_XEN */
-+static int kimage_load_segment(struct kimage *image,
-+                              struct kexec_segment *segment)
-+{
-+      return kimage_load_normal_segment(image, segment);
-+}
-+#endif
- 
- /*
-  * Exec Kernel system call: for obvious reasons only root may call it.
-@@ -991,6 +1011,11 @@ asmlinkage long sys_kexec_load(unsigned 
-               if (result)
-                       goto out;
-       }
-+#ifdef CONFIG_XEN
-+      result = xen_machine_kexec_load(image);
-+      if (result)
-+              goto out;
-+#endif
-       /* Install the new kernel, and  Uninstall the old */
-       image = xchg(dest_image, image);
- 
-@@ -1045,7 +1070,6 @@ void crash_kexec(struct pt_regs *regs)
-       struct kimage *image;
-       int locked;
- 
--
-       /* Take the kexec_lock here to prevent sys_kexec_load
-        * running on one cpu from replacing the crash kernel
-        * we are using after a panic on a different cpu.
-@@ -1061,7 +1085,11 @@ void crash_kexec(struct pt_regs *regs)
-                       struct pt_regs fixed_regs;
-                       crash_setup_regs(&fixed_regs, regs);
-                       machine_crash_shutdown(&fixed_regs);
-+#ifdef CONFIG_XEN
-+                      xen_machine_kexec(image);
-+#else
-                       machine_kexec(image);
-+#endif
-               }
-               xchg(&kexec_lock, 0);
-       }
 --- 0002/kernel/sys.c
 +++ work/kernel/sys.c
 @@ -435,8 +435,12 @@ void kernel_kexec(void)
diff -r 7c3dee5ff185 -r 1db125262365 patches/linux-2.6.16.33/series
--- a/patches/linux-2.6.16.33/series    Fri Dec 08 11:46:48 2006 +0000
+++ b/patches/linux-2.6.16.33/series    Fri Dec 08 11:47:09 2006 +0000
@@ -3,10 +3,8 @@ git-2a8a3d5b65e86ec1dfef7d268c64a909eab9
 git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch
 git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch
 linux-2.6.19-rc1-kexec-move_segment_code-i386.patch
-linux-2.6.19-rc1-kexec-xen-i386.patch
 git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch
 linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch
-linux-2.6.19-rc1-kexec-xen-x86_64.patch
 blktap-aio-16_03_06.patch
 device_bind.patch
 fix-hz-suspend.patch
diff -r 7c3dee5ff185 -r 1db125262365 
patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-i386.patch
--- a/patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-i386.patch     Fri Dec 
08 11:46:48 2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
---- 0001/arch/i386/kernel/crash.c
-+++ work/arch/i386/kernel/crash.c
-@@ -90,6 +90,7 @@ static void crash_save_self(struct pt_re
-       crash_save_this_cpu(regs, cpu);
- }
- 
-+#ifndef CONFIG_XEN
- #ifdef CONFIG_SMP
- static atomic_t waiting_for_crash_ipi;
- 
-@@ -158,6 +159,7 @@ static void nmi_shootdown_cpus(void)
-       /* There are no cpus to shootdown */
- }
- #endif
-+#endif /* CONFIG_XEN */
- 
- void machine_crash_shutdown(struct pt_regs *regs)
- {
-@@ -174,10 +176,12 @@ void machine_crash_shutdown(struct pt_re
- 
-       /* Make a note of crashing cpu. Will be used in NMI callback.*/
-       crashing_cpu = smp_processor_id();
-+#ifndef CONFIG_XEN
-       nmi_shootdown_cpus();
-       lapic_shutdown();
- #if defined(CONFIG_X86_IO_APIC)
-       disable_IO_APIC();
- #endif
-+#endif /* CONFIG_XEN */
-       crash_save_self(regs);
- }
---- 0007/arch/i386/kernel/machine_kexec.c
-+++ work/arch/i386/kernel/machine_kexec.c
-@@ -19,6 +19,10 @@
- #include <asm/desc.h>
- #include <asm/system.h>
- 
-+#ifdef CONFIG_XEN
-+#include <xen/interface/kexec.h>
-+#endif
-+
- #define PAGE_ALIGNED __attribute__ ((__aligned__(PAGE_SIZE)))
- static u32 kexec_pgd[1024] PAGE_ALIGNED;
- #ifdef CONFIG_X86_PAE
-@@ -28,6 +32,40 @@ static u32 kexec_pmd1[1024] PAGE_ALIGNED
- static u32 kexec_pte0[1024] PAGE_ALIGNED;
- static u32 kexec_pte1[1024] PAGE_ALIGNED;
- 
-+#ifdef CONFIG_XEN
-+
-+#define __ma(x) (pfn_to_mfn(__pa((x)) >> PAGE_SHIFT) << PAGE_SHIFT)
-+
-+#if PAGES_NR > KEXEC_XEN_NO_PAGES
-+#error PAGES_NR is greater than KEXEC_XEN_NO_PAGES - Xen support will break
-+#endif
-+
-+#if PA_CONTROL_PAGE != 0
-+#error PA_CONTROL_PAGE is non zero - Xen support will break
-+#endif
-+
-+void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, struct kimage 
*image)
-+{
-+      void *control_page;
-+
-+      memset(xki->page_list, 0, sizeof(xki->page_list));
-+
-+      control_page = page_address(image->control_code_page);
-+      memcpy(control_page, relocate_kernel, PAGE_SIZE);
-+
-+      xki->page_list[PA_CONTROL_PAGE] = __ma(control_page);
-+      xki->page_list[PA_PGD] = __ma(kexec_pgd);
-+#ifdef CONFIG_X86_PAE
-+      xki->page_list[PA_PMD_0] = __ma(kexec_pmd0);
-+      xki->page_list[PA_PMD_1] = __ma(kexec_pmd1);
-+#endif
-+      xki->page_list[PA_PTE_0] = __ma(kexec_pte0);
-+      xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
-+
-+}
-+
-+#endif /* CONFIG_XEN */
-+
- /*
-  * A architecture hook called to validate the
-  * proposed image and prepare the control pages
---- 0006/include/asm-i386/kexec.h
-+++ work/include/asm-i386/kexec.h
-@@ -98,6 +98,20 @@ relocate_kernel(unsigned long indirectio
-               unsigned long start_address,
-               unsigned int has_pae) ATTRIB_NORET;
- 
-+
-+/* Under Xen we need to work with machine addresses. These macros give the
-+ * machine address of a certain page to the generic kexec code instead of 
-+ * the pseudo physical address which would be given by the default macros.
-+ */
-+
-+#ifdef CONFIG_XEN
-+#define KEXEC_ARCH_HAS_PAGE_MACROS
-+#define kexec_page_to_pfn(page)  pfn_to_mfn(page_to_pfn(page))
-+#define kexec_pfn_to_page(pfn)   pfn_to_page(mfn_to_pfn(pfn))
-+#define kexec_virt_to_phys(addr) virt_to_machine(addr)
-+#define kexec_phys_to_virt(addr) phys_to_virt(machine_to_phys(addr))
-+#endif
-+
- #endif /* __ASSEMBLY__ */
- 
- #endif /* _I386_KEXEC_H */
diff -r 7c3dee5ff185 -r 1db125262365 
patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-x86_64.patch
--- a/patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-xen-x86_64.patch   Fri Dec 
08 11:46:48 2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +0,0 @@
---- 0001/arch/x86_64/kernel/crash.c
-+++ work/arch/x86_64/kernel/crash.c
-@@ -92,6 +92,7 @@ static void crash_save_self(struct pt_re
-       crash_save_this_cpu(regs, cpu);
- }
- 
-+#ifndef CONFIG_XEN
- #ifdef CONFIG_SMP
- static atomic_t waiting_for_crash_ipi;
- 
-@@ -156,6 +157,7 @@ static void nmi_shootdown_cpus(void)
-       /* There are no cpus to shootdown */
- }
- #endif
-+#endif /* CONFIG_XEN */
- 
- void machine_crash_shutdown(struct pt_regs *regs)
- {
-@@ -173,6 +175,8 @@ void machine_crash_shutdown(struct pt_re
- 
-       /* Make a note of crashing cpu. Will be used in NMI callback.*/
-       crashing_cpu = smp_processor_id();
-+
-+#ifndef CONFIG_XEN
-       nmi_shootdown_cpus();
- 
-       if(cpu_has_apic)
-@@ -181,6 +185,6 @@ void machine_crash_shutdown(struct pt_re
- #if defined(CONFIG_X86_IO_APIC)
-       disable_IO_APIC();
- #endif
--
-+#endif /* CONFIG_XEN */
-       crash_save_self(regs);
- }
---- 0010/arch/x86_64/kernel/machine_kexec.c
-+++ work/arch/x86_64/kernel/machine_kexec.c
-@@ -24,6 +24,104 @@ static u64 kexec_pud1[512] PAGE_ALIGNED;
- static u64 kexec_pmd1[512] PAGE_ALIGNED;
- static u64 kexec_pte1[512] PAGE_ALIGNED;
- 
-+#ifdef CONFIG_XEN
-+
-+/* In the case of Xen, override hypervisor functions to be able to create
-+ * a regular identity mapping page table...
-+ */
-+
-+#include <xen/interface/kexec.h>
-+#include <xen/interface/memory.h>
-+
-+#define x__pmd(x) ((pmd_t) { (x) } )
-+#define x__pud(x) ((pud_t) { (x) } )
-+#define x__pgd(x) ((pgd_t) { (x) } )
-+
-+#define x_pmd_val(x)   ((x).pmd)
-+#define x_pud_val(x)   ((x).pud)
-+#define x_pgd_val(x)   ((x).pgd)
-+
-+static inline void x_set_pmd(pmd_t *dst, pmd_t val)
-+{
-+      x_pmd_val(*dst) = x_pmd_val(val);
-+}
-+
-+static inline void x_set_pud(pud_t *dst, pud_t val)
-+{
-+      x_pud_val(*dst) = phys_to_machine(x_pud_val(val));
-+}
-+
-+static inline void x_pud_clear (pud_t *pud)
-+{
-+      x_pud_val(*pud) = 0;
-+}
-+
-+static inline void x_set_pgd(pgd_t *dst, pgd_t val)
-+{
-+      x_pgd_val(*dst) = phys_to_machine(x_pgd_val(val));
-+}
-+
-+static inline void x_pgd_clear (pgd_t * pgd)
-+{
-+      x_pgd_val(*pgd) = 0;
-+}
-+
-+#define X__PAGE_KERNEL_LARGE_EXEC \
-+         _PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_PSE
-+#define X_KERNPG_TABLE _PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY
-+
-+#define __ma(x) (pfn_to_mfn(__pa((x)) >> PAGE_SHIFT) << PAGE_SHIFT)
-+
-+#if PAGES_NR > KEXEC_XEN_NO_PAGES
-+#error PAGES_NR is greater than KEXEC_XEN_NO_PAGES - Xen support will break
-+#endif
-+
-+#if PA_CONTROL_PAGE != 0
-+#error PA_CONTROL_PAGE is non zero - Xen support will break
-+#endif
-+
-+void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, struct kimage 
*image)
-+{
-+      void *control_page;
-+      void *table_page;
-+
-+      memset(xki->page_list, 0, sizeof(xki->page_list));
-+
-+      control_page = page_address(image->control_code_page) + PAGE_SIZE;
-+      memcpy(control_page, relocate_kernel, PAGE_SIZE);
-+
-+      table_page = page_address(image->control_code_page);
-+
-+      xki->page_list[PA_CONTROL_PAGE] = __ma(control_page);
-+      xki->page_list[PA_TABLE_PAGE] = __ma(table_page);
-+
-+      xki->page_list[PA_PGD] = __ma(kexec_pgd);
-+      xki->page_list[PA_PUD_0] = __ma(kexec_pud0);
-+      xki->page_list[PA_PUD_1] = __ma(kexec_pud1);
-+      xki->page_list[PA_PMD_0] = __ma(kexec_pmd0);
-+      xki->page_list[PA_PMD_1] = __ma(kexec_pmd1);
-+      xki->page_list[PA_PTE_0] = __ma(kexec_pte0);
-+      xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
-+}
-+
-+#else /* CONFIG_XEN */
-+
-+#define x__pmd(x) __pmd(x)
-+#define x__pud(x) __pud(x)
-+#define x__pgd(x) __pgd(x)
-+
-+#define x_set_pmd(x, y) set_pmd(x, y)
-+#define x_set_pud(x, y) set_pud(x, y)
-+#define x_set_pgd(x, y) set_pgd(x, y)
-+
-+#define x_pud_clear(x) pud_clear(x)
-+#define x_pgd_clear(x) pgd_clear(x)
-+
-+#define X__PAGE_KERNEL_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC
-+#define X_KERNPG_TABLE _KERNPG_TABLE
-+
-+#endif /* CONFIG_XEN */
-+
- static void init_level2_page(pmd_t *level2p, unsigned long addr)
- {
-       unsigned long end_addr;
-@@ -31,7 +129,7 @@ static void init_level2_page(pmd_t *leve
-       addr &= PAGE_MASK;
-       end_addr = addr + PUD_SIZE;
-       while (addr < end_addr) {
--              set_pmd(level2p++, __pmd(addr | __PAGE_KERNEL_LARGE_EXEC));
-+              x_set_pmd(level2p++, x__pmd(addr | X__PAGE_KERNEL_LARGE_EXEC));
-               addr += PMD_SIZE;
-       }
- }
-@@ -56,12 +154,12 @@ static int init_level3_page(struct kimag
-               }
-               level2p = (pmd_t *)page_address(page);
-               init_level2_page(level2p, addr);
--              set_pud(level3p++, __pud(__pa(level2p) | _KERNPG_TABLE));
-+              x_set_pud(level3p++, x__pud(__pa(level2p) | X_KERNPG_TABLE));
-               addr += PUD_SIZE;
-       }
-       /* clear the unused entries */
-       while (addr < end_addr) {
--              pud_clear(level3p++);
-+              x_pud_clear(level3p++);
-               addr += PUD_SIZE;
-       }
- out:
-@@ -92,12 +190,12 @@ static int init_level4_page(struct kimag
-               if (result) {
-                       goto out;
-               }
--              set_pgd(level4p++, __pgd(__pa(level3p) | _KERNPG_TABLE));
-+              x_set_pgd(level4p++, x__pgd(__pa(level3p) | X_KERNPG_TABLE));
-               addr += PGDIR_SIZE;
-       }
-       /* clear the unused entries */
-       while (addr < end_addr) {
--              pgd_clear(level4p++);
-+              x_pgd_clear(level4p++);
-               addr += PGDIR_SIZE;
-       }
- out:
-@@ -108,8 +206,14 @@ out:
- static int init_pgtable(struct kimage *image, unsigned long start_pgtable)
- {
-       pgd_t *level4p;
-+      unsigned long x_end_pfn = end_pfn;
-+
-+#ifdef CONFIG_XEN
-+      x_end_pfn = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL);
-+#endif
-+
-       level4p = (pgd_t *)__va(start_pgtable);
--      return init_level4_page(image, level4p, 0, end_pfn << PAGE_SHIFT);
-+      return init_level4_page(image, level4p, 0, x_end_pfn << PAGE_SHIFT);
- }
- 
- int machine_kexec_prepare(struct kimage *image)
---- 0009/include/asm-x86_64/kexec.h
-+++ work/include/asm-x86_64/kexec.h
-@@ -91,6 +91,19 @@ relocate_kernel(unsigned long indirectio
-               unsigned long page_list,
-               unsigned long start_address) ATTRIB_NORET;
- 
-+/* Under Xen we need to work with machine addresses. These macros give the
-+ * machine address of a certain page to the generic kexec code instead of 
-+ * the pseudo physical address which would be given by the default macros.
-+ */
-+
-+#ifdef CONFIG_XEN
-+#define KEXEC_ARCH_HAS_PAGE_MACROS
-+#define kexec_page_to_pfn(page)  pfn_to_mfn(page_to_pfn(page))
-+#define kexec_pfn_to_page(pfn)   pfn_to_page(mfn_to_pfn(pfn))
-+#define kexec_virt_to_phys(addr) virt_to_machine(addr)
-+#define kexec_phys_to_virt(addr) phys_to_virt(machine_to_phys(addr))
-+#endif
-+
- #endif /* __ASSEMBLY__ */
- 
- #endif /* _X86_64_KEXEC_H */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [LINUX] kexec: remove patches which are not straight backports., Xen patchbot-unstable <=