| Submitter | Michel Lespinasse |
|---|---|
| Date | Nov. 5, 2012, 10:47 p.m. |
| Message ID | <1352155633-8648-8-git-send-email-walken@google.com> |
| Download | mbox | patch |
| Permalink | /patch/197351/ |
| State | Not Applicable |
| Delegated to: | David Miller |
| Headers | show |
Comments
On Mon, 5 Nov 2012 14:47:04 -0800 Michel Lespinasse <walken@google.com> wrote: > Fix the x86-64 cache alignment code to take pgoff into account. > Use the x86 and MIPS cache alignment code as the basis for a generic > cache alignment function. > > The old x86 code will always align the mmap to aliasing boundaries, > even if the program mmaps the file with a non-zero pgoff. > > If program A mmaps the file with pgoff 0, and program B mmaps the > file with pgoff 1. The old code would align the mmaps, resulting in > misaligned pages: > > A: 0123 > B: 123 > > After this patch, they are aligned so the pages line up: > > A: 0123 > B: 123 We have a bit of a history of fiddling with coloring and finding that the changes made at best no improvement. Or at least, that's my perhaps faulty memory of it. This one needs pretty careful testing, please. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Patch
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c index f00d006d60fd..97ef74b88e0f 100644 --- a/arch/x86/kernel/sys_x86_64.c +++ b/arch/x86/kernel/sys_x86_64.c @@ -136,7 +136,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, info.low_limit = begin; info.high_limit = end; info.align_mask = filp ? get_align_mask() : 0; - info.align_offset = 0; + info.align_offset = pgoff << PAGE_SHIFT; return vm_unmapped_area(&info); } @@ -175,7 +175,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, info.low_limit = PAGE_SIZE; info.high_limit = mm->mmap_base; info.align_mask = filp ? get_align_mask() : 0; - info.align_offset = 0; + info.align_offset = pgoff << PAGE_SHIFT; addr = vm_unmapped_area(&info); if (!(addr & ~PAGE_MASK)) return addr;
Fix the x86-64 cache alignment code to take pgoff into account. Use the x86 and MIPS cache alignment code as the basis for a generic cache alignment function. The old x86 code will always align the mmap to aliasing boundaries, even if the program mmaps the file with a non-zero pgoff. If program A mmaps the file with pgoff 0, and program B mmaps the file with pgoff 1. The old code would align the mmaps, resulting in misaligned pages: A: 0123 B: 123 After this patch, they are aligned so the pages line up: A: 0123 B: 123 Signed-off-by: Michel Lespinasse <walken@google.com> Proposed-by: Rik van Riel <riel@redhat.com> --- arch/x86/kernel/sys_x86_64.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)