Module Name: src Committed By: jym Date: Fri May 29 17:30:51 UTC 2009
Modified Files: src/sys/arch/xen/x86 [jym-xensuspend]: hypervisor_machdep.c Log Message: - use uvm_km_alloc() instead of kmem_alloc() to enforce alignement when allocating p2m_frame pages (xentools can only deal with page-aligned addresses) - *sigh* do not use paddr_t for p2m_frame_list_list with PAE, xentools expect 32 bits addresses even with 64 bits PTE... To generate a diff of this commit: cvs rdiff -u -r1.11.8.1 -r1.11.8.2 src/sys/arch/xen/x86/hypervisor_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/x86/hypervisor_machdep.c diff -u src/sys/arch/xen/x86/hypervisor_machdep.c:1.11.8.1 src/sys/arch/xen/x86/hypervisor_machdep.c:1.11.8.2 --- src/sys/arch/xen/x86/hypervisor_machdep.c:1.11.8.1 Mon Feb 9 00:03:55 2009 +++ src/sys/arch/xen/x86/hypervisor_machdep.c Fri May 29 17:30:51 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor_machdep.c,v 1.11.8.1 2009/02/09 00:03:55 jym Exp $ */ +/* $NetBSD: hypervisor_machdep.c,v 1.11.8.2 2009/05/29 17:30:51 jym Exp $ */ /* * @@ -59,11 +59,10 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.11.8.1 2009/02/09 00:03:55 jym Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.11.8.2 2009/05/29 17:30:51 jym Exp $"); #include <sys/param.h> #include <sys/systm.h> -#include <sys/kmem.h> #include <uvm/uvm_extern.h> @@ -424,10 +423,11 @@ * A L1 page contains the list of MFN we are looking for */ max_pfn = xen_start_info.nr_pages; - fpp = PAGE_SIZE / sizeof(paddr_t); + fpp = PAGE_SIZE / sizeof(unsigned long); /* we only need one L3 page */ - l3_p2m_page = kmem_alloc(PAGE_SIZE, KM_NOSLEEP); + l3_p2m_page = (vaddr_t *)uvm_km_alloc(kernel_map, PAGE_SIZE, + PAGE_SIZE, UVM_KMF_WIRED | UVM_KMF_NOWAIT); if (l3_p2m_page == NULL) panic("could not allocate memory for l3_p2m_page"); @@ -437,7 +437,9 @@ */ l2_p2m_page_size = howmany(max_pfn, fpp); - l2_p2m_page = kmem_alloc(l2_p2m_page_size * PAGE_SIZE, KM_NOSLEEP); + l2_p2m_page = (vaddr_t *)uvm_km_alloc(kernel_map, + l2_p2m_page_size * PAGE_SIZE, + PAGE_SIZE, UVM_KMF_WIRED | UVM_KMF_NOWAIT); if (l2_p2m_page == NULL) panic("could not allocate memory for l2_p2m_page"); @@ -457,7 +459,7 @@ unsigned long max_pfn; max_pfn = xen_start_info.nr_pages; - fpp = PAGE_SIZE / sizeof(paddr_t); + fpp = PAGE_SIZE / sizeof(unsigned long); for (i = 0; i < l2_p2m_page_size; i++) { /* @@ -481,7 +483,7 @@ HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list_list = vtomfn((vaddr_t)l3_p2m_page); - HYPERVISOR_shared_info->arch.max_pfn = max_pfn; + HYPERVISOR_shared_info->arch.max_pfn = max_pfn; } #endif /* XEN3 */