Message ID | 1271432507-4280-1-git-send-email-agust@denx.de |
---|---|
State | Superseded, archived |
Headers | show |
On Fri, 2010-04-16 at 17:41 +0200, Anatolij Gustschin wrote: > Signed-off-by: Anatolij Gustschin <agust@denx.de> > --- > drivers/mtd/mtdchar.c | 29 ++++++++++++++++++++++++++++- > 1 files changed, 28 insertions(+), 1 deletions(-) > Taken this to l2-mtd-2.6.git / dunno
On Wed, 2010-04-28 at 16:25 +0300, Artem Bityutskiy wrote: > On Fri, 2010-04-16 at 17:41 +0200, Anatolij Gustschin wrote: > > Signed-off-by: Anatolij Gustschin <agust@denx.de> > > --- > > drivers/mtd/mtdchar.c | 29 ++++++++++++++++++++++++++++- > > 1 files changed, 28 insertions(+), 1 deletions(-) > > > > Taken this to l2-mtd-2.6.git / dunno Removed, because it breaks compilation on my x86_64: [dedekind@sauron l2-mtd-2.6]\$ make -j8 CHK include/linux/version.h CHK include/generated/utsrelease.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h CC [M] drivers/mtd/mtdchar.o CHK include/linux/version.h make[2]: `scripts/unifdef' is up to date. Building modules, stage 2. Kernel: arch/x86/boot/bzImage is ready (#3) MODPOST 1635 modules ERROR: "phys_mem_access_prot" [drivers/mtd/mtdchar.ko] undefined! WARNING: modpost: Found 11 section mismatch(es). To see full details build your kernel with: 'make CONFIG_DEBUG_SECTION_MISMATCH=y' make[1]: *** [__modpost] Error 1 make: *** [modules] Error 2 [dedekind@sauron l2-mtd-2.6]\$ git
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index c355491..416f6eb 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c @@ -17,6 +17,7 @@ #include <linux/compat.h> #include <linux/mtd/mtd.h> +#include <linux/mtd/map.h> #include <linux/mtd/compatmac.h> #include <asm/uaccess.h> @@ -925,9 +926,35 @@ static int mtd_mmap(struct file *file, struct vm_area_struct *vma) #ifdef CONFIG_MMU struct mtd_file_info *mfi = file->private_data; struct mtd_info *mtd = mfi->mtd; + struct map_info *map = mtd->priv; + unsigned long start; + unsigned long off; + u32 len; + + if (mtd->type == MTD_RAM || mtd->type == MTD_ROM) { + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) + return -EINVAL; + off = vma->vm_pgoff << PAGE_SHIFT; + start = map->phys; + len = PAGE_ALIGN((start & ~PAGE_MASK) + map->size); + start &= PAGE_MASK; + if ((vma->vm_end - vma->vm_start + off) > len) + return -EINVAL; + + off += start; + vma->vm_pgoff = off >> PAGE_SHIFT; + vma->vm_flags |= VM_IO | VM_RESERVED; + vma->vm_page_prot = + phys_mem_access_prot(file, off >> PAGE_SHIFT, + vma->vm_end - vma->vm_start, + vma->vm_page_prot); + if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT, + vma->vm_end - vma->vm_start, + vma->vm_page_prot)) + return -EAGAIN; - if (mtd->type == MTD_RAM || mtd->type == MTD_ROM) return 0; + } return -ENOSYS; #else return vma->vm_flags & VM_SHARED ? 0 : -ENOSYS;
Signed-off-by: Anatolij Gustschin <agust@denx.de> --- drivers/mtd/mtdchar.c | 29 ++++++++++++++++++++++++++++- 1 files changed, 28 insertions(+), 1 deletions(-)