In 2.6.17 sparc64 kernels, X11 runs _extremely_ slowly with frequent lock-up like behaviour on my Ultra5 (ATI Mach64). I finally managed to trace the cause to this change in 2.6.16-git6: diff --git a/arch/sparc64/mm/generic.c b/arch/sparc64/mm/generic.c index 580b63d..8cb0620 100644 --- a/arch/sparc64/mm/generic.c +++ b/arch/sparc64/mm/generic.c @@ -144,7 +140,6 @@ int io_remap_pfn_range(struct vm_area_st vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; vma->vm_pgoff = phys_base >> PAGE_SHIFT; - prot = __pgprot(pg_iobits); offset -= from; dir = pgd_offset(mm, from); flush_cache_range(vma, beg, end); Reverting this patch fixes my X11 problems. Adding a debug printk and a dump_stack there, plus a hack to sys_mmap() to store away its parameters, shows: io_remap_pfn_range: prot 0x8000000000000788, pg_iobits 0x8000000000000f8a, mmap() in 1961(X), prot 0x3, flags 0x1 Call Trace: [00000000004eb9a0] proc_bus_pci_mmap+0x38/0x54 [000000000047122c] do_mmap_pgoff+0x474/0x674 [000000000041f02c] sys_mmap+0x178/0x1b0 [00000000004069d4] linux_sparc_syscall32+0x34/0x40 [0000000000072b78] 0x72b78 I.e., X did a simple PROT_READ|PROT_WRITE MAP_SHARED mmap() of something PCI-related, presumably the ATI card. The protection bits passed into io_remap_pfn_range() are 0x80...0788, while pg_iobits are 0x80...0f8a. Current kernels obey the prot bits, which, if I read things correctly, means that _PAGE_W_4U and _PAGE_MODIFIED_4U don't get set any more. I guess something else in the kernel should have set those bits before they got to io_remap_pfn_range()? /Mikael - To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html