diff options
author | Dave Airlie <airlied@linux.ie> | 2005-08-16 12:51:57 +0000 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2005-08-16 12:51:57 +0000 |
commit | 7af0186f4ccef285c2158770781ebfc3a26ddd66 (patch) | |
tree | e38ae798b605e3c433ba5d1a6c153baf0e9c15ce /linux-core/drm_vm.c | |
parent | 8c21b783c3e38aa2c2d16e11ec01cf695f8e7f8a (diff) |
add Egberts 32/64 bit patch (its in kernel already...)
Diffstat (limited to 'linux-core/drm_vm.c')
-rw-r--r-- | linux-core/drm_vm.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c index 227dc663..b253991f 100644 --- a/linux-core/drm_vm.c +++ b/linux-core/drm_vm.c @@ -75,13 +75,13 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma, map = r_list->map; if (!map) continue; - if (map->offset == VM_OFFSET(vma)) + if (r_list->user_token == VM_OFFSET(vma)) break; } if (map && map->type == _DRM_AGP) { unsigned long offset = address - vma->vm_start; - unsigned long baddr = VM_OFFSET(vma) + offset; + unsigned long baddr = map->offset + offset; struct drm_agp_mem *agpmem; struct page *page; @@ -319,7 +319,7 @@ static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma, return NOPAGE_OOM; /* Nothing allocated */ offset = address - vma->vm_start; - map_offset = map->offset - dev->sg->handle; + map_offset = map->offset - (unsigned long)dev->sg->virtual; page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT); page = entry->pagelist[page_offset]; get_page(page); @@ -586,14 +586,12 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma) for performance, even if the list was a bit longer. */ list_for_each(list, &dev->maplist->head) { - unsigned long off; r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if (!map) continue; - off = dev->driver->get_map_ofs(map); - if (off == VM_OFFSET(vma)) + if (r_list->user_token == VM_OFFSET(vma)) break; } @@ -636,7 +634,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma) /* fall through to _DRM_FRAME_BUFFER... */ case _DRM_FRAME_BUFFER: case _DRM_REGISTERS: - if (VM_OFFSET(vma) >= __pa(high_memory)) { + if (map->offset >= __pa(high_memory)) { #if defined(__i386__) || defined(__x86_64__) if (boot_cpu_data.x86 > 3 && map->type != _DRM_AGP) { pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; @@ -659,13 +657,13 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma) #endif offset = dev->driver->get_reg_ofs(dev); #ifdef __sparc__ - if (io_remap_page_range(DRM_RPR_ARG(vma) vma->vm_start, - VM_OFFSET(vma) + offset, + if (io_remap_pfn_range(vma, vma->vm_start, + (map->offset + offset) >>PAGE_SHIFT, vma->vm_end - vma->vm_start, - vma->vm_page_prot, 0)) + vma->vm_page_prot)) #else if (remap_pfn_range(vma, vma->vm_start, - (VM_OFFSET(vma) + offset) >> PAGE_SHIFT, + (map->offset + offset) >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) #endif @@ -673,7 +671,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma) DRM_DEBUG(" Type = %d; start = 0x%lx, end = 0x%lx," " offset = 0x%lx\n", map->type, - vma->vm_start, vma->vm_end, VM_OFFSET(vma) + offset); + vma->vm_start, vma->vm_end, map->offset + offset); vma->vm_ops = &drm_vm_ops; break; case _DRM_SHM: |