Message ID | 4C197A9E.5040509@jp.fujitsu.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Thu, Jun 17, 2010 at 10:35:19AM +0100, Jeremy Fitzhardinge wrote: > On 06/17/2010 07:03 AM, H. Peter Anvin wrote: > > On 06/16/2010 09:55 PM, Kenji Kaneshige wrote: [snip] > >> greater value when 44-bits physical address limit is eliminated. And > >> maybe we need to change phys_addr_valid() returns error if physical > >> address is above (1 << __PHYSICAL_MASK_SHIFT)? > >> > > The real question is how much we can fix without an unreasonable cost. > > > > I think it would be a pretty large change. From the Xen's perspective, > any machine even approximately approaching the 2^44 limit will be > capable of running Xen guests in hvm mode, so PV isn't really a concern. Hi Jeremy, Is the implication of that statement that HVM is preferred where supported by HW? -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 07/08/2010 09:24 PM, Simon Horman wrote: >> I think it would be a pretty large change. From the Xen's perspective, >> any machine even approximately approaching the 2^44 limit will be >> capable of running Xen guests in hvm mode, so PV isn't really a concern. >> > Hi Jeremy, > > Is the implication of that statement that HVM is preferred where > supported by HW? > I wouldn't go that far; the PV vs HVM choice is pretty complex, and depends on what your workload is and what hardware you have available. All I meant was what I said: that if you're running on a machine with a large amount of memory, then you should run your 32-bit domains as HVM rather than PV. Though Xen could easily keep domains limited to memory that they can actually use (it already does this, in fact). J -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jul 08, 2010 at 10:33:08PM -0700, Jeremy Fitzhardinge wrote: > On 07/08/2010 09:24 PM, Simon Horman wrote: > >> I think it would be a pretty large change. From the Xen's perspective, > >> any machine even approximately approaching the 2^44 limit will be > >> capable of running Xen guests in hvm mode, so PV isn't really a concern. > >> > > Hi Jeremy, > > > > Is the implication of that statement that HVM is preferred where > > supported by HW? > > > > I wouldn't go that far; the PV vs HVM choice is pretty complex, and > depends on what your workload is and what hardware you have available. > All I meant was what I said: that if you're running on a machine with a > large amount of memory, then you should run your 32-bit domains as HVM > rather than PV. Though Xen could easily keep domains limited to memory > that they can actually use (it already does this, in fact). Hi Jeremy, thanks for the clarification. -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-2.6.34/arch/x86/mm/ioremap.c =================================================================== --- linux-2.6.34.orig/arch/x86/mm/ioremap.c 2010-06-15 04:43:00.978332015 +0900 +++ linux-2.6.34/arch/x86/mm/ioremap.c 2010-06-15 05:32:59.291693007 +0900 @@ -62,8 +62,8 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, unsigned long size, unsigned long prot_val, void *caller) { - unsigned long pfn, offset, vaddr; - resource_size_t last_addr; + unsigned long offset, vaddr; + resource_size_t pfn, last_pfn, last_addr; const resource_size_t unaligned_phys_addr = phys_addr; const unsigned long unaligned_size = size; struct vm_struct *area; @@ -100,10 +100,8 @@ /* * Don't allow anybody to remap normal RAM that we're using.. */ - for (pfn = phys_addr >> PAGE_SHIFT; - (pfn << PAGE_SHIFT) < (last_addr & PAGE_MASK); - pfn++) { - + last_pfn = last_addr >> PAGE_SHIFT; + for (pfn = phys_addr >> PAGE_SHIFT; pfn < last_pfn; pfn++) { int is_ram = page_is_ram(pfn); if (is_ram && pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn))) @@ -115,7 +113,7 @@ * Mappings have to be page-aligned */ offset = phys_addr & ~PAGE_MASK; - phys_addr &= PAGE_MASK; + phys_addr = (phys_addr >> PAGE_SHIFT) << PAGE_SHIFT; size = PAGE_ALIGN(last_addr+1) - phys_addr; retval = reserve_memtype(phys_addr, (u64)phys_addr + size, Index: linux-2.6.34/include/linux/vmalloc.h =================================================================== --- linux-2.6.34.orig/include/linux/vmalloc.h 2010-06-15 04:43:00.970258681 +0900 +++ linux-2.6.34/include/linux/vmalloc.h 2010-06-15 05:32:59.323364960 +0900 @@ -30,7 +30,7 @@ unsigned long flags; struct page **pages; unsigned int nr_pages; - unsigned long phys_addr; + phys_addr_t phys_addr; void *caller; }; Index: linux-2.6.34/lib/ioremap.c =================================================================== --- linux-2.6.34.orig/lib/ioremap.c 2010-06-15 04:43:00.970258681 +0900 +++ linux-2.6.34/lib/ioremap.c 2010-06-15 05:32:59.352457435 +0900 @@ -13,10 +13,10 @@ #include <asm/pgtable.h> static int ioremap_pte_range(pmd_t *pmd, unsigned long addr, - unsigned long end, unsigned long phys_addr, pgprot_t prot) + unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { pte_t *pte; - unsigned long pfn; + u64 pfn; pfn = phys_addr >> PAGE_SHIFT; pte = pte_alloc_kernel(pmd, addr); @@ -31,7 +31,7 @@ } static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr, - unsigned long end, unsigned long phys_addr, pgprot_t prot) + unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { pmd_t *pmd; unsigned long next; @@ -49,7 +49,7 @@ } static inline int ioremap_pud_range(pgd_t *pgd, unsigned long addr, - unsigned long end, unsigned long phys_addr, pgprot_t prot) + unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { pud_t *pud; unsigned long next; @@ -67,7 +67,7 @@ } int ioremap_page_range(unsigned long addr, - unsigned long end, unsigned long phys_addr, pgprot_t prot) + unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { pgd_t *pgd; unsigned long start; Index: linux-2.6.34/include/linux/io.h =================================================================== --- linux-2.6.34.orig/include/linux/io.h 2010-06-15 04:43:00.971256515 +0900 +++ linux-2.6.34/include/linux/io.h 2010-06-15 05:32:59.377701457 +0900 @@ -29,10 +29,10 @@ #ifdef CONFIG_MMU int ioremap_page_range(unsigned long addr, unsigned long end, - unsigned long phys_addr, pgprot_t prot); + phys_addr_t phys_addr, pgprot_t prot); #else static inline int ioremap_page_range(unsigned long addr, unsigned long end, - unsigned long phys_addr, pgprot_t prot) + phys_addr_t phys_addr, pgprot_t prot) { return 0; } Index: linux-2.6.34/mm/vmalloc.c =================================================================== --- linux-2.6.34.orig/mm/vmalloc.c 2010-06-15 04:43:00.963255188 +0900 +++ linux-2.6.34/mm/vmalloc.c 2010-06-15 05:32:59.404457295 +0900 @@ -2403,7 +2403,7 @@ seq_printf(m, " pages=%d", v->nr_pages); if (v->phys_addr) - seq_printf(m, " phys=%lx", v->phys_addr); + seq_printf(m, " phys=%llx", (unsigned long long)v->phys_addr); if (v->flags & VM_IOREMAP) seq_printf(m, " ioremap");