direct-io.hg
changeset 4164:18bf863204fb
bitkeeper revision 1.1159.258.57 (42372654d-IcZSg1-hScBU0TITRVfg)
Define new io_remap_pfn_range() for mapping device space into user
applications. Patch drivers to use this instead of remap_pfn_range()
where appropriate. This patch should be pushed upstream to the kernel
maintainers.
Signed-off-by: Keir Fraser <keir@xensource.com>
Define new io_remap_pfn_range() for mapping device space into user
applications. Patch drivers to use this instead of remap_pfn_range()
where appropriate. This patch should be pushed upstream to the kernel
maintainers.
Signed-off-by: Keir Fraser <keir@xensource.com>
author | kaf24@firebug.cl.cam.ac.uk |
---|---|
date | Tue Mar 15 18:15:48 2005 +0000 (2005-03-15) |
parents | 6fea1828365e |
children | d8941e2abcf0 ff79f78b4fb4 |
files | .rootkeys linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h patches/linux-2.6.11/iomap.patch |
line diff
1.1 --- a/.rootkeys Tue Mar 15 14:27:36 2005 +0000 1.2 +++ b/.rootkeys Tue Mar 15 18:15:48 2005 +0000 1.3 @@ -294,6 +294,7 @@ 422e4430vKaHLOOGS7X-SUUe3EBCgw netbsd-2. 1.4 422e4430-gOD358H8nGGnNWes08Nng netbsd-2.0-xen-sparse/sys/miscfs/kernfs/kernfs_vnops.c 1.5 413cb3b53nyOv1OIeDSsCXhBFDXvJA netbsd-2.0-xen-sparse/sys/nfs/files.nfs 1.6 413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.11/agpgart.patch 1.7 +42372652KCUP-IOH9RN19YQmGhs4aA patches/linux-2.6.11/iomap.patch 1.8 418abc69J3F638vPO9MYoDGeYilxoQ patches/linux-2.6.11/nettel.patch 1.9 3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile 1.10 40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Rules.mk
2.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h Tue Mar 15 14:27:36 2005 +0000 2.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h Tue Mar 15 18:15:48 2005 +0000 2.3 @@ -485,7 +485,10 @@ int __direct_remap_area_pages(struct mm_ 2.4 mmu_update_t *v); 2.5 2.6 #define io_remap_page_range(vma,from,phys,size,prot) \ 2.7 - direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO) 2.8 +direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO) 2.9 + 2.10 +#define io_remap_pfn_range(vma,from,pfn,size,prot) \ 2.11 +direct_remap_area_pages(vma->vm_mm,from,pfn<<PAGE_SHIFT,size,prot,DOMID_IO) 2.12 2.13 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG 2.14 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/patches/linux-2.6.11/iomap.patch Tue Mar 15 18:15:48 2005 +0000 3.3 @@ -0,0 +1,120 @@ 3.4 +diff -ur linux-2.6.11/drivers/char/agp/frontend.c linux-2.6.11-io/drivers/char/agp/frontend.c 3.5 +--- linux-2.6.11/drivers/char/agp/frontend.c 2005-03-02 07:37:49.000000000 +0000 3.6 ++++ linux-2.6.11-io/drivers/char/agp/frontend.c 2005-03-15 17:38:30.000000000 +0000 3.7 +@@ -627,7 +627,7 @@ 3.8 + DBG("client vm_ops=%p", kerninfo.vm_ops); 3.9 + if (kerninfo.vm_ops) { 3.10 + vma->vm_ops = kerninfo.vm_ops; 3.11 +- } else if (remap_pfn_range(vma, vma->vm_start, 3.12 ++ } else if (io_remap_pfn_range(vma, vma->vm_start, 3.13 + (kerninfo.aper_base + offset) >> PAGE_SHIFT, 3.14 + size, vma->vm_page_prot)) { 3.15 + goto out_again; 3.16 +@@ -643,7 +643,7 @@ 3.17 + DBG("controller vm_ops=%p", kerninfo.vm_ops); 3.18 + if (kerninfo.vm_ops) { 3.19 + vma->vm_ops = kerninfo.vm_ops; 3.20 +- } else if (remap_pfn_range(vma, vma->vm_start, 3.21 ++ } else if (io_remap_pfn_range(vma, vma->vm_start, 3.22 + kerninfo.aper_base >> PAGE_SHIFT, 3.23 + size, vma->vm_page_prot)) { 3.24 + goto out_again; 3.25 +diff -ur linux-2.6.11/drivers/char/drm/drm_vm.c linux-2.6.11-io/drivers/char/drm/drm_vm.c 3.26 +--- linux-2.6.11/drivers/char/drm/drm_vm.c 2005-03-02 07:38:33.000000000 +0000 3.27 ++++ linux-2.6.11-io/drivers/char/drm/drm_vm.c 2005-03-15 17:43:26.000000000 +0000 3.28 +@@ -630,7 +630,7 @@ 3.29 + vma->vm_end - vma->vm_start, 3.30 + vma->vm_page_prot, 0)) 3.31 + #else 3.32 +- if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start, 3.33 ++ if (io_remap_pfn_range(vma, vma->vm_start, 3.34 + (VM_OFFSET(vma) + offset) >> PAGE_SHIFT, 3.35 + vma->vm_end - vma->vm_start, 3.36 + vma->vm_page_prot)) 3.37 +diff -ur linux-2.6.11/drivers/char/drm/i810_dma.c linux-2.6.11-io/drivers/char/drm/i810_dma.c 3.38 +--- linux-2.6.11/drivers/char/drm/i810_dma.c 2005-03-02 07:37:55.000000000 +0000 3.39 ++++ linux-2.6.11-io/drivers/char/drm/i810_dma.c 2005-03-15 17:53:36.000000000 +0000 3.40 +@@ -139,7 +139,7 @@ 3.41 + buf_priv->currently_mapped = I810_BUF_MAPPED; 3.42 + unlock_kernel(); 3.43 + 3.44 +- if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start, 3.45 ++ if (io_remap_pfn_range(vma, vma->vm_start, 3.46 + VM_OFFSET(vma) >> PAGE_SHIFT, 3.47 + vma->vm_end - vma->vm_start, 3.48 + vma->vm_page_prot)) return -EAGAIN; 3.49 +diff -ur linux-2.6.11/drivers/char/drm/i830_dma.c linux-2.6.11-io/drivers/char/drm/i830_dma.c 3.50 +--- linux-2.6.11/drivers/char/drm/i830_dma.c 2005-03-02 07:37:48.000000000 +0000 3.51 ++++ linux-2.6.11-io/drivers/char/drm/i830_dma.c 2005-03-15 17:53:46.000000000 +0000 3.52 +@@ -157,7 +157,7 @@ 3.53 + buf_priv->currently_mapped = I830_BUF_MAPPED; 3.54 + unlock_kernel(); 3.55 + 3.56 +- if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start, 3.57 ++ if (io_remap_pfn_range(vma, vma->vm_start, 3.58 + VM_OFFSET(vma) >> PAGE_SHIFT, 3.59 + vma->vm_end - vma->vm_start, 3.60 + vma->vm_page_prot)) return -EAGAIN; 3.61 +diff -ur linux-2.6.11/drivers/char/hpet.c linux-2.6.11-io/drivers/char/hpet.c 3.62 +--- linux-2.6.11/drivers/char/hpet.c 2005-03-02 07:38:10.000000000 +0000 3.63 ++++ linux-2.6.11-io/drivers/char/hpet.c 2005-03-15 17:37:22.000000000 +0000 3.64 +@@ -76,6 +76,7 @@ 3.65 + struct hpets { 3.66 + struct hpets *hp_next; 3.67 + struct hpet __iomem *hp_hpet; 3.68 ++ unsigned long hp_hpet_phys; 3.69 + struct time_interpolator *hp_interpolator; 3.70 + unsigned long hp_period; 3.71 + unsigned long hp_delta; 3.72 +@@ -265,7 +266,7 @@ 3.73 + return -EINVAL; 3.74 + 3.75 + devp = file->private_data; 3.76 +- addr = (unsigned long)devp->hd_hpet; 3.77 ++ addr = devp->hd_hpets->hp_hpet_phys; 3.78 + 3.79 + if (addr & (PAGE_SIZE - 1)) 3.80 + return -ENOSYS; 3.81 +@@ -274,7 +275,7 @@ 3.82 + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 3.83 + addr = __pa(addr); 3.84 + 3.85 +- if (remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, 3.86 ++ if (io_remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, 3.87 + PAGE_SIZE, vma->vm_page_prot)) { 3.88 + printk(KERN_ERR "remap_pfn_range failed in hpet.c\n"); 3.89 + return -EAGAIN; 3.90 +@@ -795,6 +796,7 @@ 3.91 + 3.92 + hpetp->hp_which = hpet_nhpet++; 3.93 + hpetp->hp_hpet = hdp->hd_address; 3.94 ++ hpetp->hp_hpet_phys = hdp->hd_phys_address; 3.95 + 3.96 + hpetp->hp_ntimer = hdp->hd_nirqs; 3.97 + 3.98 +diff -ur linux-2.6.11/drivers/sbus/char/flash.c linux-2.6.11-io/drivers/sbus/char/flash.c 3.99 +--- linux-2.6.11/drivers/sbus/char/flash.c 2005-03-02 07:38:10.000000000 +0000 3.100 ++++ linux-2.6.11-io/drivers/sbus/char/flash.c 2005-03-15 17:20:22.000000000 +0000 3.101 +@@ -75,7 +75,7 @@ 3.102 + pgprot_val(vma->vm_page_prot) |= _PAGE_E; 3.103 + vma->vm_flags |= (VM_SHM | VM_LOCKED); 3.104 + 3.105 +- if (remap_pfn_range(vma, vma->vm_start, addr, size, vma->vm_page_prot)) 3.106 ++ if (io_remap_pfn_range(vma, vma->vm_start, addr, size, vma->vm_page_prot)) 3.107 + return -EAGAIN; 3.108 + 3.109 + return 0; 3.110 +diff -ur linux-2.6.11/include/linux/mm.h linux-2.6.11-io/include/linux/mm.h 3.111 +--- linux-2.6.11/include/linux/mm.h 2005-03-02 07:37:47.000000000 +0000 3.112 ++++ linux-2.6.11-io/include/linux/mm.h 2005-03-15 17:03:46.000000000 +0000 3.113 +@@ -815,6 +815,10 @@ 3.114 + extern int check_user_page_readable(struct mm_struct *mm, unsigned long address); 3.115 + int remap_pfn_range(struct vm_area_struct *, unsigned long, 3.116 + unsigned long, unsigned long, pgprot_t); 3.117 ++/* Allow arch override for mapping of device and I/O (non-RAM) pages. */ 3.118 ++#ifndef io_remap_pfn_range 3.119 ++#define io_remap_pfn_range remap_pfn_range 3.120 ++#endif 3.121 + 3.122 + #ifdef CONFIG_PROC_FS 3.123 + void __vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);