* [[PATCH -mm] 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. [not found] <1340029247-6949-1-git-send-email-riel@surriel.com> @ 2012-06-18 14:20 ` Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 4/6] mm: remove x86 arch_get_unmapped_area(_topdown) Rik van Riel ` (2 subsequent siblings) 3 siblings, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:20 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel, knoel, Rik van Riel, Rik van Riel <<< No Message Collected >>> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [[PATCH -mm] 4/6] mm: remove x86 arch_get_unmapped_area(_topdown) [not found] <1340029247-6949-1-git-send-email-riel@surriel.com> 2012-06-18 14:20 ` [[PATCH -mm] 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel @ 2012-06-18 14:20 ` Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 5/6] remove MIPS arch_get_unmapped_area code Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 6/6] remove ARM arch_get_unmapped_area functions Rik van Riel 3 siblings, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:20 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel, knoel, Rik van Riel, Rik van Riel <<< No Message Collected >>> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [[PATCH -mm] 5/6] remove MIPS arch_get_unmapped_area code [not found] <1340029247-6949-1-git-send-email-riel@surriel.com> 2012-06-18 14:20 ` [[PATCH -mm] 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 4/6] mm: remove x86 arch_get_unmapped_area(_topdown) Rik van Riel @ 2012-06-18 14:20 ` Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 6/6] remove ARM arch_get_unmapped_area functions Rik van Riel 3 siblings, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:20 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel, knoel, Rik van Riel, Ralf Baechle, sjhill, Rik van Riel <<< No Message Collected >>> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [[PATCH -mm] 6/6] remove ARM arch_get_unmapped_area functions [not found] <1340029247-6949-1-git-send-email-riel@surriel.com> ` (2 preceding siblings ...) 2012-06-18 14:20 ` [[PATCH -mm] 5/6] remove MIPS arch_get_unmapped_area code Rik van Riel @ 2012-06-18 14:20 ` Rik van Riel 3 siblings, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:20 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel, knoel, Rik van Riel, Russell King, Rik van Riel <<< No Message Collected >>> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH -mm 0/6] mm: scalable and unified arch_get_unmapped_area @ 2012-06-18 14:31 Rik van Riel 2012-06-18 14:31 ` [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel 0 siblings, 1 reply; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:31 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel A long time ago, we decided to limit the number of VMAs per process to 64k. As it turns out, there actually are programs using tens of thousands of VMAs. The linear search in arch_get_unmapped_area and arch_get_unmapped_area_topdown can be a real issue for those programs. This patch series aims to fix the scalability issue by tracking the size of each free hole in the VMA rbtree, propagating the free hole info up the tree. Another major goal is to put the bulk of the necessary arch_get_unmapped_area(_topdown) functionality into one set of functions, so we can eliminate the custom large functions per architecture, sticking to a few much smaller architecture specific functions instead. In this version I have only gotten rid of the x86, ARM and MIPS arch-specific code, and am already showing a fairly promising diffstat: arch/arm/include/asm/pgtable.h | 6 arch/arm/mm/init.c | 3 arch/arm/mm/mmap.c | 217 ------------------ arch/mips/include/asm/page.h | 2 arch/mips/include/asm/pgtable.h | 7 arch/mips/mm/mmap.c | 177 -------------- arch/x86/include/asm/elf.h | 3 arch/x86/include/asm/pgtable_64.h | 4 arch/x86/kernel/sys_x86_64.c | 200 ++-------------- arch/x86/vdso/vma.c | 2 include/linux/mm_types.h | 8 include/linux/sched.h | 13 + mm/internal.h | 5 mm/mmap.c | 455 ++++++++++++++++++++++++++++++-------- 14 files changed, 420 insertions(+), 682 deletions(-) TODO: - eliminate arch-specific functions for more architectures - integrate hugetlbfs alignment (with Andi Kleen's patch?) Performance Testing performance with a benchmark that allocates tens of thousands of VMAs, unmaps them and mmaps them some more in a loop, shows promising results. Vanilla 3.4 kernel: $ ./agua_frag_test_64 .......... Min Time (ms): 6 Avg. Time (ms): 294.0000 Max Time (ms): 609 Std Dev (ms): 113.1664 Standard deviation exceeds 10 With patches: $ ./agua_frag_test_64 .......... Min Time (ms): 14 Avg. Time (ms): 38.0000 Max Time (ms): 60 Std Dev (ms): 3.9312 All checks pass The total run time of the test goes down by about a factor 4. More importantly, the worst case performance of the loop (which is what really hurt some applications) has gone down by about a factor 10. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 14:31 [PATCH -mm 0/6] mm: scalable and unified arch_get_unmapped_area Rik van Riel @ 2012-06-18 14:31 ` Rik van Riel 2012-06-18 16:30 ` Andi Kleen 0 siblings, 1 reply; 12+ messages in thread From: Rik van Riel @ 2012-06-18 14:31 UTC (permalink / raw) To: linux-mm Cc: akpm, aarcange, peterz, minchan, kosaki.motohiro, andi, hnaz, mel, linux-kernel, Rik van Riel, Rik van Riel From: Rik van Riel <riel@surriel.com> Teach the generic arch_get_unmapped_area(_topdown) code to call the page colouring code. Signed-off-by: Rik van Riel <riel@redhat.com> --- arch/mips/include/asm/page.h | 2 - arch/mips/include/asm/pgtable.h | 1 + arch/x86/include/asm/elf.h | 3 - arch/x86/include/asm/pgtable_64.h | 1 + arch/x86/kernel/sys_x86_64.c | 35 +++++++++----- arch/x86/vdso/vma.c | 2 +- include/linux/sched.h | 8 +++- mm/mmap.c | 91 ++++++++++++++++++++++++++++++++----- 8 files changed, 111 insertions(+), 32 deletions(-) diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index da9bd7d..459cc25 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h @@ -63,8 +63,6 @@ extern void build_copy_page(void); extern void clear_page(void * page); extern void copy_page(void * to, void * from); -extern unsigned long shm_align_mask; - static inline unsigned long pages_do_alias(unsigned long addr1, unsigned long addr2) { diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index b2202a6..f133a4c 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -415,6 +415,7 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, */ #define HAVE_ARCH_UNMAPPED_AREA #define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN +#define HAVE_ARCH_ALIGN_ADDR /* * No page table caches to initialise diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h index 5939f44..dc2d0bf 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -358,8 +358,6 @@ static inline int mmap_is_ia32(void) enum align_flags { ALIGN_VA_32 = BIT(0), ALIGN_VA_64 = BIT(1), - ALIGN_VDSO = BIT(2), - ALIGN_TOPDOWN = BIT(3), }; struct va_alignment { @@ -368,5 +366,4 @@ struct va_alignment { } ____cacheline_aligned; extern struct va_alignment va_align; -extern unsigned long align_addr(unsigned long, struct file *, enum align_flags); #endif /* _ASM_X86_ELF_H */ diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h index 8af36f6..8408ccd 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h @@ -170,6 +170,7 @@ extern void cleanup_highmap(void); #define HAVE_ARCH_UNMAPPED_AREA #define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN #define HAVE_ARCH_GET_ADDRESS_RANGE +#define HAVE_ARCH_ALIGN_ADDR #define pgtable_cache_init() do { } while (0) #define check_pgt_cache() do { } while (0) diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c index 2595a5e..ac0afb8 100644 --- a/arch/x86/kernel/sys_x86_64.c +++ b/arch/x86/kernel/sys_x86_64.c @@ -25,31 +25,40 @@ * @flags denotes the allocation direction - bottomup or topdown - * or vDSO; see call sites below. */ -unsigned long align_addr(unsigned long addr, struct file *filp, - enum align_flags flags) +unsigned long arch_align_addr(unsigned long addr, struct file *filp, + unsigned long pgoff, unsigned long flags, + enum mmap_allocation_direction direction) { - unsigned long tmp_addr; + unsigned long tmp_addr = PAGE_ALIGN(addr); /* handle 32- and 64-bit case with a single conditional */ if (va_align.flags < 0 || !(va_align.flags & (2 - mmap_is_ia32()))) - return addr; + return tmp_addr; - if (!(current->flags & PF_RANDOMIZE)) - return addr; + /* Always allow MAP_FIXED. Colouring is a performance thing only. */ + if (flags & MAP_FIXED) + return tmp_addr; - if (!((flags & ALIGN_VDSO) || filp)) - return addr; + if (!(current->flags & PF_RANDOMIZE)) + return tmp_addr; - tmp_addr = addr; + if (!(filp || direction == ALLOC_VDSO)) + return tmp_addr; /* * We need an address which is <= than the original * one only when in topdown direction. */ - if (!(flags & ALIGN_TOPDOWN)) + if (direction == ALLOC_UP) tmp_addr += va_align.mask; tmp_addr &= ~va_align.mask; + tmp_addr += ((pgoff << PAGE_SHIFT) & va_align.mask); + + if (direction == ALLOC_DOWN && tmp_addr > addr) { + tmp_addr -= va_align.mask; + tmp_addr &= ~va_align.mask; + } return tmp_addr; } @@ -159,7 +168,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, full_search: - addr = align_addr(addr, filp, 0); + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_UP); for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { /* At this point: (!vma || addr < vma->vm_end). */ @@ -186,7 +195,7 @@ full_search: mm->cached_hole_size = vma->vm_start - addr; addr = vma->vm_end; - addr = align_addr(addr, filp, 0); + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_UP); } } @@ -235,7 +244,7 @@ try_again: addr -= len; do { - addr = align_addr(addr, filp, ALIGN_TOPDOWN); + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_DOWN); /* * Lookup failure means no vma is above this address, diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c index 00aaf04..83e0355 100644 --- a/arch/x86/vdso/vma.c +++ b/arch/x86/vdso/vma.c @@ -141,7 +141,7 @@ static unsigned long vdso_addr(unsigned long start, unsigned len) * unaligned here as a result of stack start randomization. */ addr = PAGE_ALIGN(addr); - addr = align_addr(addr, NULL, ALIGN_VDSO); + addr = arch_align_addr(addr, NULL, 0, 0, ALLOC_VDSO); return addr; } diff --git a/include/linux/sched.h b/include/linux/sched.h index fc76318..18f9326 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -390,12 +390,18 @@ extern int sysctl_max_map_count; #ifdef CONFIG_MMU enum mmap_allocation_direction { ALLOC_UP, - ALLOC_DOWN + ALLOC_DOWN, + ALLOC_VDSO, }; extern void arch_pick_mmap_layout(struct mm_struct *mm); extern void arch_get_address_range(unsigned long flags, unsigned long *begin, unsigned long *end, enum mmap_allocation_direction direction); +extern unsigned long shm_align_mask; +extern unsigned long +arch_align_addr(unsigned long addr, struct file *filp, + unsigned long pgoff, unsigned long flags, + enum mmap_allocation_direction direction); extern unsigned long arch_get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); diff --git a/mm/mmap.c b/mm/mmap.c index 92cf0bf..0314cb1 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1465,6 +1465,51 @@ unacct_error: return error; } +#ifndef HAVE_ARCH_ALIGN_ADDR +/* Each architecture is responsible for setting this to the required value. */ +unsigned long shm_align_mask = PAGE_SIZE - 1; +EXPORT_SYMBOL(shm_align_mask); + +unsigned long arch_align_addr(unsigned long addr, struct file *filp, + unsigned long pgoff, unsigned long flags, + enum mmap_allocation_direction direction) +{ + unsigned long tmp_addr = PAGE_ALIGN(addr); + + if (shm_align_mask <= PAGE_SIZE) + return tmp_addr; + + /* Allow MAP_FIXED without MAP_SHARED at any address. */ + if ((flags & (MAP_FIXED|MAP_SHARED)) == MAP_FIXED) + return tmp_addr; + + /* Enforce page colouring for any file or MAP_SHARED mapping. */ + if (!(filp || (flags & MAP_SHARED))) + return tmp_addr; + + /* + * We need an address which is <= than the original + * one only when in topdown direction. + */ + if (direction == ALLOC_UP) + tmp_addr += shm_align_mask; + + tmp_addr &= ~shm_align_mask; + tmp_addr += ((pgoff << PAGE_SHIFT) & shm_align_mask); + + /* + * When aligning down, make sure we did not accidentally go up. + * The caller will check for underflow. + */ + if (direction == ALLOC_DOWN && tmp_addr > addr) { + tmp_addr -= shm_align_mask; + tmp_addr &= ~shm_align_mask; + } + + return tmp_addr; +} +#endif + #ifndef HAVE_ARCH_GET_ADDRESS_RANGE void arch_get_address_range(unsigned long flags, unsigned long *begin, unsigned long *end, enum mmap_allocation_direction direction) @@ -1513,18 +1558,22 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, struct mm_struct *mm = current->mm; struct vm_area_struct *vma = NULL; struct rb_node *rb_node; - unsigned long lower_limit, upper_limit; + unsigned long lower_limit, upper_limit, tmp_addr; arch_get_address_range(flags, &lower_limit, &upper_limit, ALLOC_UP); if (len > TASK_SIZE) return -ENOMEM; - if (flags & MAP_FIXED) + if (flags & MAP_FIXED) { + tmp_addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_UP); + if (tmp_addr != PAGE_ALIGN(addr)) + return -EINVAL; return addr; + } if (addr) { - addr = PAGE_ALIGN(addr); + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_UP); vma = find_vma(mm, addr); if (TASK_SIZE - len >= addr && (!vma || addr + len <= vma->vm_start)) @@ -1533,7 +1582,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, /* Find the left-most free area of sufficient size. */ for (addr = 0, rb_node = mm->mm_rb.rb_node; rb_node; ) { - unsigned long vma_start; + unsigned long vma_start, tmp_addr; int found_here = 0; vma = rb_to_vma(rb_node); @@ -1541,13 +1590,17 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, if (vma->vm_start > len) { if (!vma->vm_prev) { /* This is the left-most VMA. */ - if (vma->vm_start - len >= lower_limit) { - addr = lower_limit; + tmp_addr = arch_align_addr(lower_limit, filp, + pgoff, flags, ALLOC_UP); + if (vma->vm_start - len >= tmp_addr) { + addr = tmp_addr; goto found_addr; } } else { /* Is this hole large enough? Remember it. */ vma_start = max(vma->vm_prev->vm_end, lower_limit); + vma_start = arch_align_addr(vma_start, filp, + pgoff, flags, ALLOC_UP); if (vma->vm_start - len >= vma_start) { addr = vma_start; found_here = 1; @@ -1599,6 +1652,8 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, if (addr < lower_limit) addr = lower_limit; + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_UP); + found_addr: if (TASK_SIZE - len < addr) return -ENOMEM; @@ -1656,12 +1711,17 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, if (len > TASK_SIZE) return -ENOMEM; - if (flags & MAP_FIXED) + if (flags & MAP_FIXED) { + unsigned long tmp_addr; + tmp_addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_DOWN); + if (tmp_addr != PAGE_ALIGN(addr)) + return -EINVAL; return addr; + } /* requesting a specific address */ if (addr) { - addr = PAGE_ALIGN(addr); + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_DOWN); vma = find_vma(mm, addr); if (TASK_SIZE - len >= addr && (!vma || addr + len <= vma->vm_start)) @@ -1678,7 +1738,9 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, */ if (upper_limit - len > mm->highest_vma) { addr = upper_limit - len; - goto found_addr; + addr = arch_align_addr(addr, filp, pgoff, flags, ALLOC_DOWN); + if (addr > mm->highest_vma); + goto found_addr; } /* Find the right-most free area of sufficient size. */ @@ -1691,9 +1753,14 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, /* Is this hole large enough? Remember it. */ vma_start = min(vma->vm_start, upper_limit); if (vma_start > len) { - if (!vma->vm_prev || - (vma_start - len >= vma->vm_prev->vm_end)) { - addr = vma_start - len; + unsigned long tmp_addr = vma_start - len; + tmp_addr = arch_align_addr(tmp_addr, filp, + pgoff, flags, ALLOC_DOWN); + /* No underflow? Does it still fit the hole? */ + if (tmp_addr && tmp_addr <= vma_start - len && + (!vma->vm_prev || + tmp_addr >= vma->vm_prev->vm_end)) { + addr = tmp_addr; found_here = 1; } } -- 1.7.7.6 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 14:31 ` [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel @ 2012-06-18 16:30 ` Andi Kleen 2012-06-18 16:45 ` Rik van Riel 0 siblings, 1 reply; 12+ messages in thread From: Andi Kleen @ 2012-06-18 16:30 UTC (permalink / raw) To: Rik van Riel Cc: linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel Rik van Riel <riel@redhat.com> writes: > From: Rik van Riel <riel@surriel.com> > > Teach the generic arch_get_unmapped_area(_topdown) code to call the > page colouring code. What tree is that against? I cannot find x86 page colouring code in next or mainline. -Andi -- ak@linux.intel.com -- Speaking for myself only -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 16:30 ` Andi Kleen @ 2012-06-18 16:45 ` Rik van Riel 2012-06-18 18:16 ` Borislav Petkov 0 siblings, 1 reply; 12+ messages in thread From: Rik van Riel @ 2012-06-18 16:45 UTC (permalink / raw) To: Andi Kleen Cc: linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On 06/18/2012 12:30 PM, Andi Kleen wrote: > Rik van Riel<riel@redhat.com> writes: > >> From: Rik van Riel<riel@surriel.com> >> >> Teach the generic arch_get_unmapped_area(_topdown) code to call the >> page colouring code. > > What tree is that against? I cannot find x86 page colouring code in next > or mainline. This is against mainline. See align_addr in arch/x86/kernel/sys_x86_64.c and the call sites in arch_get_unmapped_area(_topdown). On certain AMD chips, Linux tries to get certain allocations aligned to avoid cache aliasing issues. -- All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 16:45 ` Rik van Riel @ 2012-06-18 18:16 ` Borislav Petkov 2012-06-18 19:00 ` Rik van Riel 2012-06-18 19:02 ` Rik van Riel 0 siblings, 2 replies; 12+ messages in thread From: Borislav Petkov @ 2012-06-18 18:16 UTC (permalink / raw) To: Rik van Riel Cc: Andi Kleen, linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On Mon, Jun 18, 2012 at 12:45:48PM -0400, Rik van Riel wrote: > >What tree is that against? I cannot find x86 page colouring code in next > >or mainline. > > This is against mainline. Which mainline do you mean exactly? 1/6 doesn't apply ontop of current mainline and by "current" I mean v3.5-rc3-57-g39a50b42f702. -- Regards/Gruss, Boris. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 18:16 ` Borislav Petkov @ 2012-06-18 19:00 ` Rik van Riel 2012-06-18 19:02 ` Rik van Riel 1 sibling, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 19:00 UTC (permalink / raw) To: Borislav Petkov, Andi Kleen, linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On 06/18/2012 02:16 PM, Borislav Petkov wrote: > On Mon, Jun 18, 2012 at 12:45:48PM -0400, Rik van Riel wrote: >>> What tree is that against? I cannot find x86 page colouring code in next >>> or mainline. >> >> This is against mainline. > > Which mainline do you mean exactly? > > 1/6 doesn't apply ontop of current mainline and by "current" I mean > v3.5-rc3-57-g39a50b42f702. I git pulled on Friday, then used guilt to apply and rediff all the patches. I pull from here: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 I see no g39a50b... commit after pulling that tree here. Do you have any local changes by chance? -- All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 18:16 ` Borislav Petkov 2012-06-18 19:00 ` Rik van Riel @ 2012-06-18 19:02 ` Rik van Riel 2012-06-18 20:37 ` Borislav Petkov 1 sibling, 1 reply; 12+ messages in thread From: Rik van Riel @ 2012-06-18 19:02 UTC (permalink / raw) To: Borislav Petkov, Andi Kleen, linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On 06/18/2012 02:16 PM, Borislav Petkov wrote: > On Mon, Jun 18, 2012 at 12:45:48PM -0400, Rik van Riel wrote: >>> What tree is that against? I cannot find x86 page colouring code in next >>> or mainline. >> >> This is against mainline. > > Which mainline do you mean exactly? > > 1/6 doesn't apply ontop of current mainline and by "current" I mean > v3.5-rc3-57-g39a50b42f702. After pulling in the latest patches, including that 39a50b... commit, all patches still apply here when I type guilt push -a. -- All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 19:02 ` Rik van Riel @ 2012-06-18 20:37 ` Borislav Petkov 2012-06-18 22:03 ` Rik van Riel 0 siblings, 1 reply; 12+ messages in thread From: Borislav Petkov @ 2012-06-18 20:37 UTC (permalink / raw) To: Rik van Riel Cc: Andi Kleen, linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On Mon, Jun 18, 2012 at 03:02:54PM -0400, Rik van Riel wrote: > On 06/18/2012 02:16 PM, Borislav Petkov wrote: > >On Mon, Jun 18, 2012 at 12:45:48PM -0400, Rik van Riel wrote: > >>>What tree is that against? I cannot find x86 page colouring code in next > >>>or mainline. > >> > >>This is against mainline. > > > >Which mainline do you mean exactly? > > > >1/6 doesn't apply ontop of current mainline and by "current" I mean > >v3.5-rc3-57-g39a50b42f702. > > After pulling in the latest patches, including that > 39a50b... commit, all patches still apply here when > I type guilt push -a. That's strange. I'm also pulling from git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 Btw, if I had local changes, the top commit id would've changed, right? So I wouldn't have had 39a50b anymore. Just in case, I tried applying 1/6 on another repository and it still doesn't apply: $ patch -p1 --dry-run -i /tmp/riel.01 patching file include/linux/mm_types.h Hunk #1 succeeded at 300 (offset -7 lines). patching file mm/mmap.c Hunk #2 succeeded at 206 with fuzz 1 (offset -45 lines). Hunk #3 FAILED at 398. Hunk #4 FAILED at 461. Hunk #5 succeeded at 603 (offset -57 lines). Hunk #6 succeeded at 1404 (offset -66 lines). Hunk #7 succeeded at 1441 (offset -66 lines). Hunk #8 succeeded at 1528 (offset -66 lines). Hunk #9 succeeded at 1570 (offset -66 lines). Hunk #10 FAILED at 1908. Hunk #11 FAILED at 2093. 4 out of 11 hunks FAILED -- saving rejects to file mm/mmap.c.rej riel.01 is the mail saved from mutt so it should be fine. Now let's look at the first failing hunk: Mainline has: void validate_mm(struct mm_struct *mm) { int bug = 0; int i = 0; struct vm_area_struct *tmp = mm->mmap; while (tmp) { tmp = tmp->vm_next; i++; } if (i != mm->map_count) printk("map_count %d vm_next %d\n", mm->map_count, i), bug = 1; i = browse_rb(&mm->mm_rb); if (i != mm->map_count) printk("map_count %d rb %d\n", mm->map_count, i), bug = 1; BUG_ON(bug); } -- and your patch has some new ifs in it: @@ -386,12 +398,16 @@ void validate_mm(struct mm_struct *mm) int bug = 0; int i = 0; struct vm_area_struct *tmp = mm->mmap; + unsigned long highest_address = 0; while (tmp) { if (tmp->free_gap != max_free_space(&tmp->vm_rb)) printk("free space %lx, correct %lx\n", tmp->free_gap, max_free_space(&tmp->vm_rb)), bug = 1; ^^^^^^^^^^^^^^ I think this if-statement is the problem. It is not present in mainline but this patch doesn't add it so some patch earlier than that adds it which is probably in your queue? + highest_address = tmp->vm_end; tmp = tmp->vm_next; i++; } + if (highest_address != mm->highest_vma) + printk("mm->highest_vma %lx, found %lx\n", mm->highest_vma, highest_address), bug = 1; if (i != mm->map_count) printk("map_count %d vm_next %d\n", mm->map_count, i), bug = 1; i = browse_rb(&mm->mm_rb); -- I haven't looked at the other failing hunks... Thanks. -- Regards/Gruss, Boris. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code. 2012-06-18 20:37 ` Borislav Petkov @ 2012-06-18 22:03 ` Rik van Riel 0 siblings, 0 replies; 12+ messages in thread From: Rik van Riel @ 2012-06-18 22:03 UTC (permalink / raw) To: Borislav Petkov, Andi Kleen, linux-mm, akpm, aarcange, peterz, minchan, kosaki.motohiro, hnaz, mel, linux-kernel, Rik van Riel On 06/18/2012 04:37 PM, Borislav Petkov wrote: > and your patch has some new ifs in it: > > @@ -386,12 +398,16 @@ void validate_mm(struct mm_struct *mm) > int bug = 0; > int i = 0; > struct vm_area_struct *tmp = mm->mmap; > + unsigned long highest_address = 0; > while (tmp) { > if (tmp->free_gap != max_free_space(&tmp->vm_rb)) > printk("free space %lx, correct %lx\n", tmp->free_gap, max_free_space(&tmp->vm_rb)), bug = 1; > > ^^^^^^^^^^^^^^ > > I think this if-statement is the problem. It is not present in mainline > but this patch doesn't add it so some patch earlier than that adds it > which is probably in your queue? Argh! I see the problem now. guilt-patchbomb sent everything from my second patch onwards, not my first patch :( Let me resend the series properly, I have 7 patches not 6. I am having a bad email day... -- All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-06-18 22:03 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1340029247-6949-1-git-send-email-riel@surriel.com> 2012-06-18 14:20 ` [[PATCH -mm] 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 4/6] mm: remove x86 arch_get_unmapped_area(_topdown) Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 5/6] remove MIPS arch_get_unmapped_area code Rik van Riel 2012-06-18 14:20 ` [[PATCH -mm] 6/6] remove ARM arch_get_unmapped_area functions Rik van Riel 2012-06-18 14:31 [PATCH -mm 0/6] mm: scalable and unified arch_get_unmapped_area Rik van Riel 2012-06-18 14:31 ` [PATCH -mm 3/6] Fix the x86-64 page colouring code to take pgoff into account and use that code as the basis for a generic page colouring code Rik van Riel 2012-06-18 16:30 ` Andi Kleen 2012-06-18 16:45 ` Rik van Riel 2012-06-18 18:16 ` Borislav Petkov 2012-06-18 19:00 ` Rik van Riel 2012-06-18 19:02 ` Rik van Riel 2012-06-18 20:37 ` Borislav Petkov 2012-06-18 22:03 ` Rik van Riel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).