Messages in this thread Patch in this message | | | Date | Fri, 29 Oct 1999 14:21:58 -0400 (EDT) | From | Ben LaHaise <> | Subject | [PATCH] Re: 2.3.25-pre1 Compile Fixes |
| |
On Thu, 28 Oct 1999, Jeremy Katz wrote:
> Attached is a diff to fix compilation by changing instances of > vma->vm_offset to vma->pg_off. Also changes instances of page->offset > to pg_offset. Haven't tested all the drivers, but the ones I needed the > fix for have worked since.
Please read the comment in linux/include/linux/mm.h -- the meaning of vm_pgoff is different from vm_offset: it's a PAGE_SIZE offset, not a byte offset. Several place (esp the framebuffers) were wrong in your patch. Here should be the correct fixes (completely untested, but hopefully correct).
-ben
diff -ur clean/2.3.25pre1/arch/sparc/kernel/signal.c 2.3.25pre1/arch/sparc/kernel/signal.c --- clean/2.3.25pre1/arch/sparc/kernel/signal.c Tue Aug 31 14:23:29 1999 +++ 2.3.25pre1/arch/sparc/kernel/signal.c Fri Oct 29 13:43:16 1999 @@ -1050,7 +1050,7 @@ ino = map->vm_file->f_dentry->d_inode->i_ino; line = d_path(map->vm_file->f_dentry, buffer, PAGE_SIZE); } - printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_offset, + printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT, kdevname(dev), ino); if (map->vm_file != NULL) printk("%s\n", line); diff -ur clean/2.3.25pre1/arch/sparc64/kernel/signal.c 2.3.25pre1/arch/sparc64/kernel/signal.c --- clean/2.3.25pre1/arch/sparc64/kernel/signal.c Wed Sep 8 14:14:32 1999 +++ 2.3.25pre1/arch/sparc64/kernel/signal.c Fri Oct 29 13:42:18 1999 @@ -618,7 +618,7 @@ ino = map->vm_file->f_dentry->d_inode->i_ino; line = d_path(map->vm_file->f_dentry, buffer, PAGE_SIZE); } - printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_offset, + printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT, kdevname(dev), ino); if (map->vm_file != NULL) printk("%s\n", line); diff -ur clean/2.3.25pre1/arch/sparc64/kernel/signal32.c 2.3.25pre1/arch/sparc64/kernel/signal32.c --- clean/2.3.25pre1/arch/sparc64/kernel/signal32.c Tue Aug 3 01:07:16 1999 +++ 2.3.25pre1/arch/sparc64/kernel/signal32.c Fri Oct 29 13:41:58 1999 @@ -1226,7 +1226,7 @@ ino = map->vm_file->f_dentry->d_inode->i_ino; line = d_path(map->vm_file->f_dentry, buffer, PAGE_SIZE); } - printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_offset, + printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_pgoff << PAGE_SHIFT, kdevname(dev), ino); if (map->vm_file != NULL) printk("%s\n", line); diff -ur clean/2.3.25pre1/drivers/char/drm/proc.c 2.3.25pre1/drivers/char/drm/proc.c --- clean/2.3.25pre1/drivers/char/drm/proc.c Thu Oct 28 14:09:24 1999 +++ 2.3.25pre1/drivers/char/drm/proc.c Fri Oct 29 13:43:07 1999 @@ -382,7 +382,7 @@ vma->vm_flags & VM_MAYSHARE ? 's' : 'p', vma->vm_flags & VM_LOCKED ? 'l' : '-', vma->vm_flags & VM_IO ? 'i' : '-', - vma->vm_offset ); + vma->vm_pgoff << PAGE_SHIFT ); #if defined(__i386__) pgprot = pgprot_val(vma->vm_page_prot); DRM_PROC_PRINT(" %c%c%c%c%c%c%c%c%c", diff -ur clean/2.3.25pre1/drivers/char/drm/vm.c 2.3.25pre1/drivers/char/drm/vm.c --- clean/2.3.25pre1/drivers/char/drm/vm.c Tue Sep 7 17:51:28 1999 +++ 2.3.25pre1/drivers/char/drm/vm.c Fri Oct 29 14:08:59 1999 @@ -96,7 +96,7 @@ if (address > vma->vm_end) return 0; /* Disallow mremap */ if (!dma->pagelist) return 0; /* Nothing allocated */ - offset = address - vma->vm_start; /* vm_offset should be 0 */ + offset = address - vma->vm_start; /* vm_pgoff should be 0 */ page = offset >> PAGE_SHIFT; physical = dma->pagelist[page] + (offset & (~PAGE_MASK)); atomic_inc(&mem_map[MAP_NR(physical)].count); /* Dec. by kernel */ @@ -169,7 +169,7 @@ unsigned long length = vma->vm_end - vma->vm_start; DRM_DEBUG("start = 0x%lx, end = 0x%lx, offset = 0x%lx\n", - vma->vm_start, vma->vm_end, vma->vm_offset); + vma->vm_start, vma->vm_end, vma->vm_pgoff << PAGE_SHIFT); /* Length must match exact page count */ if ((length >> PAGE_SHIFT) != dma->page_count) return -EINVAL; @@ -192,13 +192,17 @@ drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_map_t *map = NULL; + unsigned long off; int i; DRM_DEBUG("start = 0x%lx, end = 0x%lx, offset = 0x%lx\n", - vma->vm_start, vma->vm_end, vma->vm_offset); + vma->vm_start, vma->vm_end, vma->vm_pgoff); - if (!vma->vm_offset) return drm_mmap_dma(filp, vma); + if (!vma->vm_pgoff) return drm_mmap_dma(filp, vma); + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) + return -EINVAL; + off = vma->vm_pgoff << PAGE_SHIFT; /* A sequential search of a linked list is fine here because: 1) there will only be about 5-10 entries in the list and, 2) a @@ -208,7 +212,7 @@ bit longer. */ for (i = 0; i < dev->map_count; i++) { map = dev->maplist[i]; - if (map->offset == vma->vm_offset) break; + if (map->offset == off) break; } if (i >= dev->map_count) return -EINVAL; @@ -222,7 +226,7 @@ switch (map->type) { case _DRM_FRAME_BUFFER: case _DRM_REGISTERS: - if (vma->vm_offset >= __pa(high_memory)) { + if (off >= __pa(high_memory)) { #if defined(__i386__) if (boot_cpu_data.x86 > 3) { pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; @@ -232,7 +236,7 @@ vma->vm_flags |= VM_IO; /* not in core dump */ } if (remap_page_range(vma->vm_start, - vma->vm_offset, + off, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN; diff -ur clean/2.3.25pre1/drivers/sbus/char/flash.c 2.3.25pre1/drivers/sbus/char/flash.c --- clean/2.3.25pre1/drivers/sbus/char/flash.c Tue Aug 31 14:25:33 1999 +++ 2.3.25pre1/drivers/sbus/char/flash.c Fri Oct 29 13:45:58 1999 @@ -36,9 +36,7 @@ { unsigned long addr; unsigned long size; - - if (vma->vm_offset & ~(PAGE_MASK)) - return -ENXIO; + unsigned long off; if (flash.read_base == flash.write_base) { addr = flash.read_base; @@ -58,12 +56,13 @@ return -ENXIO; } - if (vma->vm_offset > size) + if (vma->vm_pgoff > (size >> PAGE_SHIFT)) return -ENXIO; - addr += vma->vm_offset; + off = vma->vm_pgoff << PAGE_SHIFT; + addr += off; - if (vma->vm_end - (vma->vm_start + vma->vm_offset) > size) - size = vma->vm_end - (vma->vm_start + vma->vm_offset); + if (vma->vm_end - (vma->vm_start + off) > size) + size = vma->vm_end - (vma->vm_start + off); pgprot_val(vma->vm_page_prot) &= ~(_PAGE_CACHE); pgprot_val(vma->vm_page_prot) |= _PAGE_E; diff -ur clean/2.3.25pre1/drivers/sbus/char/vfc_dev.c 2.3.25pre1/drivers/sbus/char/vfc_dev.c --- clean/2.3.25pre1/drivers/sbus/char/vfc_dev.c Wed Jun 9 17:44:25 1999 +++ 2.3.25pre1/drivers/sbus/char/vfc_dev.c Fri Oct 29 13:46:52 1999 @@ -573,7 +573,9 @@ map_size=sizeof(struct vfc_regs); - if(vma->vm_offset & ~PAGE_MASK) return -ENXIO; + if (vma->vm_pgoff) + return -ENXIO; + vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO | VM_MAYREAD | VM_MAYWRITE | VM_MAYSHARE; map_offset=(unsigned int)dev->phys_regs; ret = io_remap_page_range(vma->vm_start,map_offset,map_size, diff -ur clean/2.3.25pre1/drivers/sgi/char/graphics.c 2.3.25pre1/drivers/sgi/char/graphics.c --- clean/2.3.25pre1/drivers/sgi/char/graphics.c Tue Aug 31 14:23:03 1999 +++ 2.3.25pre1/drivers/sgi/char/graphics.c Fri Oct 29 13:47:35 1999 @@ -271,7 +271,7 @@ uint size; size = vma->vm_end - vma->vm_start; - if (vma->vm_offset & ~PAGE_MASK) + if (vma->vm_pgoff) return -ENXIO; /* 1. Set our special graphic virtualizer */ diff -ur clean/2.3.25pre1/drivers/sgi/char/shmiq.c 2.3.25pre1/drivers/sgi/char/shmiq.c --- clean/2.3.25pre1/drivers/sgi/char/shmiq.c Mon Oct 11 13:13:25 1999 +++ 2.3.25pre1/drivers/sgi/char/shmiq.c Fri Oct 29 13:47:45 1999 @@ -318,7 +318,7 @@ if (minor-- == 0) return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; diff -ur clean/2.3.25pre1/drivers/sound/cmpci.c 2.3.25pre1/drivers/sound/cmpci.c --- clean/2.3.25pre1/drivers/sound/cmpci.c Sat Oct 2 10:49:30 1999 +++ 2.3.25pre1/drivers/sound/cmpci.c Fri Oct 29 13:47:58 1999 @@ -1333,7 +1333,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) diff -ur clean/2.3.25pre1/drivers/sound/es1370.c 2.3.25pre1/drivers/sound/es1370.c --- clean/2.3.25pre1/drivers/sound/es1370.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/sound/es1370.c Fri Oct 29 14:09:13 1999 @@ -1316,7 +1316,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) @@ -1840,7 +1840,7 @@ return -EINVAL; if ((ret = prog_dmabuf_dac1(s)) != 0) return ret; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << s->dma_dac1.buforder)) diff -ur clean/2.3.25pre1/drivers/sound/es1371.c 2.3.25pre1/drivers/sound/es1371.c --- clean/2.3.25pre1/drivers/sound/es1371.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/sound/es1371.c Fri Oct 29 14:09:21 1999 @@ -1894,7 +1894,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) @@ -2415,7 +2415,7 @@ return -EINVAL; if ((ret = prog_dmabuf_dac1(s)) != 0) return ret; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << s->dma_dac1.buforder)) diff -ur clean/2.3.25pre1/drivers/sound/esssolo1.c 2.3.25pre1/drivers/sound/esssolo1.c --- clean/2.3.25pre1/drivers/sound/esssolo1.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/sound/esssolo1.c Fri Oct 29 13:48:08 1999 @@ -1199,7 +1199,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) diff -ur clean/2.3.25pre1/drivers/sound/maestro.c 2.3.25pre1/drivers/sound/maestro.c --- clean/2.3.25pre1/drivers/sound/maestro.c Wed Oct 27 02:26:59 1999 +++ 2.3.25pre1/drivers/sound/maestro.c Fri Oct 29 13:48:10 1999 @@ -2339,7 +2339,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) diff -ur clean/2.3.25pre1/drivers/sound/sonicvibes.c 2.3.25pre1/drivers/sound/sonicvibes.c --- clean/2.3.25pre1/drivers/sound/sonicvibes.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/sound/sonicvibes.c Fri Oct 29 13:48:15 1999 @@ -1516,7 +1516,7 @@ db = &s->dma_adc; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) diff -ur clean/2.3.25pre1/drivers/usb/audio.c 2.3.25pre1/drivers/usb/audio.c --- clean/2.3.25pre1/drivers/usb/audio.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/usb/audio.c Fri Oct 29 13:48:17 1999 @@ -2201,7 +2201,7 @@ db = &as->usbin.dma; } else return -EINVAL; - if (vma->vm_offset != 0) + if (vma->vm_pgoff) return -EINVAL; return dmabuf_mmap(db, vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot); } diff -ur clean/2.3.25pre1/drivers/video/atyfb.c 2.3.25pre1/drivers/video/atyfb.c --- clean/2.3.25pre1/drivers/video/atyfb.c Wed Oct 27 02:26:59 1999 +++ 2.3.25pre1/drivers/video/atyfb.c Fri Oct 29 13:53:22 1999 @@ -3048,21 +3048,24 @@ struct fb_info_aty *fb = (struct fb_info_aty *)info; unsigned int size, page, map_size = 0; unsigned long map_offset = 0; + unsigned long off; int i; if (!fb->mmap_map) return -ENXIO; + if (vma->vm_pgoff > (0x80000000 >> PAGE_SHIFT)) + return -EINVAL; + + off = vma->vm_pgoff << PAGE_SHIFT; size = vma->vm_end - vma->vm_start; - if (vma->vm_offset & ~PAGE_MASK) - return -ENXIO; /* To stop the swapper from even considering these pages. */ vma->vm_flags |= (VM_SHM | VM_LOCKED); - if (((vma->vm_offset == 0) && (size == fb->total_vram)) || - ((vma->vm_offset == fb->total_vram) && (size == PAGE_SIZE))) - vma->vm_offset += 0x8000000000000000UL; + if (((vma->vm_pgoff == 0) && (size == fb->total_vram)) || + (((vma->vm_pgoff << PAGE_SHIFT) == fb->total_vram) && (size == PAGE_SIZE))) + vma->vm_pgoff += 0x8000000000000000UL; #ifdef __sparc_v9__ /* Align it as much as desirable */ @@ -3070,9 +3073,9 @@ unsigned long j, align; int max = -1; - map_offset = vma->vm_offset+size; + map_offset = (vma->vm_pgoff << PAGE_SHIFT) + size; for (i = 0; fb->mmap_map[i].size; i++) { - if (fb->mmap_map[i].voff < vma->vm_offset) + if (fb->mmap_map[i].voff < off) continue; if (fb->mmap_map[i].voff >= map_offset) break; @@ -3092,7 +3095,7 @@ j = align; align = j - ((vma->vm_start + fb->mmap_map[max].voff - - vma->vm_offset) & (j - 1)); + - off) & (j - 1)); if (align != j) { struct vm_area_struct *vmm; @@ -3115,7 +3118,7 @@ for (i = 0; fb->mmap_map[i].size; i++) { unsigned long start = fb->mmap_map[i].voff; unsigned long end = start + fb->mmap_map[i].size; - unsigned long offset = vma->vm_offset + page; + unsigned long offset = off + page; if (start > offset) continue; diff -ur clean/2.3.25pre1/drivers/video/fbmem.c 2.3.25pre1/drivers/video/fbmem.c --- clean/2.3.25pre1/drivers/video/fbmem.c Fri Oct 29 13:09:36 1999 +++ 2.3.25pre1/drivers/video/fbmem.c Fri Oct 29 14:12:46 1999 @@ -483,9 +483,12 @@ struct fb_ops *fb = info->fbops; struct fb_fix_screeninfo fix; struct fb_var_screeninfo var; - unsigned long start; + unsigned long start, off; u32 len; + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) + return -EINVAL; + off = vma->vm_pgoff << PAGE_SHIFT; if (!fb) return -ENODEV; if (fb->fb_mmap) @@ -504,10 +507,10 @@ start = fix.smem_start; len = (start & ~PAGE_MASK)+fix.smem_len; start &= PAGE_MASK; - len = (len+~PAGE_MASK) & PAGE_MASK; - if (vma->vm_offset >= len) { + len = (len+~PAGE_MASK) & PAGE_MASK; /* someone's on crack. */ + if (off >= len) { /* memory mapped io */ - vma->vm_offset -= len; + off -= len; fb->fb_get_var(&var, PROC_CONSOLE(info), info); if (var.accel_flags) return -EINVAL; @@ -516,11 +519,10 @@ start &= PAGE_MASK; len = (len+~PAGE_MASK) & PAGE_MASK; } - if ((vma->vm_end - vma->vm_start + vma->vm_offset) > len) + if ((vma->vm_end - vma->vm_start + off) > len) return -EINVAL; - vma->vm_offset += start; - if (vma->vm_offset & ~PAGE_MASK) - return -ENXIO; + off += start; + vma->vm_pgoff = off >> PAGE_CACHE_SHIFT; #if defined(__mc68000__) if (CPU_IS_020_OR_030) pgprot_val(vma->vm_page_prot) |= _PAGE_NOCACHE030; @@ -549,7 +551,7 @@ #else #warning What do we have to do here?? #endif - if (io_remap_page_range(vma->vm_start, vma->vm_offset, + if (io_remap_page_range(vma->vm_start, off, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN; return 0; diff -ur clean/2.3.25pre1/drivers/video/igafb.c 2.3.25pre1/drivers/video/igafb.c --- clean/2.3.25pre1/drivers/video/igafb.c Thu Aug 19 14:01:00 1999 +++ 2.3.25pre1/drivers/video/igafb.c Fri Oct 29 13:59:55 1999 @@ -261,8 +261,6 @@ return -ENXIO; size = vma->vm_end - vma->vm_start; - if (vma->vm_offset & ~PAGE_MASK) - return -ENXIO; /* To stop the swapper from even considering these pages. */ vma->vm_flags |= (VM_SHM | VM_LOCKED); @@ -271,17 +269,17 @@ for (page = 0; page < size; ) { map_size = 0; for (i = 0; fb->mmap_map[i].size; i++) { - unsigned long start = fb->mmap_map[i].voff; - unsigned long end = start + fb->mmap_map[i].size; - unsigned long offset = vma->vm_offset + page; + unsigned long start = (fb->mmap_map[i].voff) >> PAGE_SHIFT; + unsigned long end = start + (fb->mmap_map[i].size) >> PAGE_SHIFT; + unsigned long offset = vma->vm_pgoff + (page >> PAGE_SHIFT); if (start > offset) continue; if (offset >= end) continue; - map_size = fb->mmap_map[i].size - (offset - start); - map_offset = fb->mmap_map[i].poff + (offset - start); + map_size = fb->mmap_map[i].size - ((offset - start) << PAGE_SHIFT); + map_offset = fb->mmap_map[i].poff + ((offset - start) << PAGE_SHIFT); break; } if (!map_size) { diff -ur clean/2.3.25pre1/drivers/video/sbusfb.c 2.3.25pre1/drivers/video/sbusfb.c --- clean/2.3.25pre1/drivers/video/sbusfb.c Mon Oct 11 13:26:52 1999 +++ 2.3.25pre1/drivers/video/sbusfb.c Fri Oct 29 14:05:06 1999 @@ -175,12 +175,15 @@ struct fb_info_sbusfb *fb = sbusfbinfo(info); unsigned int size, page, r, map_size; unsigned long map_offset = 0; + unsigned long off; int i; size = vma->vm_end - vma->vm_start; - if (vma->vm_offset & ~PAGE_MASK) - return -ENXIO; - + if (vma->vm_pgoff >= (~0UL >> PAGE_SHIFT)) + return -EINVAL; + + off = vma->vm_pgoff << PAGE_SHIFT; + /* To stop the swapper from even considering these pages */ vma->vm_flags |= (VM_SHM| VM_LOCKED); @@ -190,9 +193,9 @@ unsigned long j, alignment, s = 0; int max = -1; - map_offset = vma->vm_offset+size; + map_offset = (vma->vm_pgoff << PAGE_SHIFT) + size; for (i = 0; fb->mmap_map[i].size; i++) { - if (fb->mmap_map[i].voff < vma->vm_offset) + if (fb->mmap_map[i].voff < off) continue; if (fb->mmap_map[i].voff >= map_offset) break; @@ -210,7 +213,7 @@ break; if (alignment > PAGE_SIZE) { j = alignment; - alignment = j - ((vma->vm_start + fb->mmap_map[max].voff - vma->vm_offset) & (j - 1)); + alignment = j - ((vma->vm_start + fb->mmap_map[max].voff - off) & (j - 1)); if (alignment != j) { struct vm_area_struct *vmm = find_vma(current->mm, vma->vm_start); if (!vmm || vmm->vm_start >= vma->vm_end + alignment) { @@ -227,7 +230,7 @@ for (page = 0; page < size; ){ map_size = 0; for (i = 0; fb->mmap_map[i].size; i++) - if (fb->mmap_map[i].voff == vma->vm_offset+page) { + if (fb->mmap_map[i].voff == off+page) { map_size = sbusfb_mmapsize(fb,fb->mmap_map[i].size); #ifdef __sparc_v9__ #define POFF_MASK (PAGE_MASK|0x1UL) diff -ur clean/2.3.25pre1/drivers/video/sgivwfb.c 2.3.25pre1/drivers/video/sgivwfb.c --- clean/2.3.25pre1/drivers/video/sgivwfb.c Thu Aug 19 14:01:00 1999 +++ 2.3.25pre1/drivers/video/sgivwfb.c Fri Oct 29 14:07:07 1999 @@ -907,9 +907,12 @@ struct vm_area_struct *vma) { unsigned long size = vma->vm_end - vma->vm_start; - unsigned long offset = sgivwfb_mem_phys + vma->vm_offset; - if (vma->vm_offset+size > sgivwfb_mem_size) + unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) + return -EINVAL; + if (offset+size > sgivwfb_mem_size) return -EINVAL; + offset += sgivwfb_mem_phys; pgprot_val(vma->vm_page_prot) = pgprot_val(vma->vm_page_prot) | _PAGE_PCD; vma->vm_flags |= VM_IO; if (remap_page_range(vma->vm_start, offset, size, vma->vm_page_prot)) diff -ur clean/2.3.25pre1/fs/ncpfs/mmap.c 2.3.25pre1/fs/ncpfs/mmap.c --- clean/2.3.25pre1/fs/ncpfs/mmap.c Fri Jul 2 18:15:51 1999 +++ 2.3.25pre1/fs/ncpfs/mmap.c Fri Oct 29 13:11:31 1999 @@ -46,7 +46,7 @@ if (!page) return page; address &= PAGE_MASK; - pos = address - area->vm_start + area->vm_offset; + pos = address - area->vm_start + (area->vm_pgoff << PAGE_SHIFT); count = PAGE_SIZE; if (address + PAGE_SIZE > area->vm_end) { diff -ur clean/2.3.25pre1/net/packet/af_packet.c 2.3.25pre1/net/packet/af_packet.c --- clean/2.3.25pre1/net/packet/af_packet.c Tue Aug 31 14:23:03 1999 +++ 2.3.25pre1/net/packet/af_packet.c Fri Oct 29 14:07:14 1999 @@ -1698,7 +1698,7 @@ int err = -EINVAL; int i; - if (vma->vm_offset) + if (vma->vm_pgoff) return -EINVAL; size = vma->vm_end - vma->vm_start;
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |