Dave McCracken wrote on Tuesday, August 30, 2005 3:13 PM > This patch implements page table sharing for all shared memory regions that > span an entire page table page. It supports sharing at multiple page > levels, depending on the architecture. > > > This version of the patch supports i386 and x86_64. I have additional > patches to support ppc64, but they are not quite ready for public > consumption. > > .... > + prio_tree_iter_init(&iter, &mapping->i_mmap, > + vma->vm_start, vma->vm_end);
I think this is a bug. The radix priority tree for address_space-> i_mmap is keyed on vma->vm_pgoff. Your patch uses the vma virtual address to find a shareable range, Which will always fail a match even though there is one. The following is a quick hack I did to make it work. - Ken --- linux-2.6.13/mm/ptshare.c.orig 2005-09-01 18:58:12.299321918 -0700 +++ linux-2.6.13/mm/ptshare.c 2005-09-01 18:58:39.846196580 -0700 @@ -26,6 +26,11 @@ #include <asm/pgtable.h> #include <asm/pgalloc.h> +#define RADIX_INDEX(vma) ((vma)->vm_pgoff) +#define VMA_SIZE(vma) (((vma)->vm_end - (vma)->vm_start) >> PAGE_SHIFT) +/* avoid overflow */ +#define HEAP_INDEX(vma) ((vma)->vm_pgoff + (VMA_SIZE(vma) - 1)) + #undef PT_DEBUG #ifndef __PAGETABLE_PMD_FOLDED @@ -173,7 +178,7 @@ pt_share_pte(struct vm_area_struct *vma, address); #endif prio_tree_iter_init(&iter, &mapping->i_mmap, - vma->vm_start, vma->vm_end); + RADIX_INDEX(vma), HEAP_INDEX(vma)); while ((svma = next_shareable_vma(vma, svma, &iter))) { spgd = pgd_offset(svma->vm_mm, address); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/