Re: [PATCH] video: arch specific page protection support for deferred io
From: Magnus Damm <magnus.damm@gmail.com>
Date: 2009-06-25 06:06:16
Also in:
linux-mm
On Thu, Jun 25, 2009 at 11:56 AM, Andrew Morton[off-list ref] wrote:
On Wed, 24 Jun 2009 19:54:13 +0900 Magnus Damm [off-list ref] wrote:quoted
From: Magnus Damm <redacted> This patch adds arch specific page protection support to deferred io. Instead of overwriting the info->fbops->mmap pointer with the deferred io specific mmap callback, modify fb_mmap() to include a #ifdef wrapped call to fb_deferred_io_mmap(). The function fb_deferred_io_mmap() is extended to call fb_pgprotect() in the case of non-vmalloc() frame buffers. With this patch uncached deferred io can be used together with the sh_mobile_lcdcfb driver. Without this patch arch specific page protection code in fb_pgprotect() never gets invoked with deferred io. Signed-off-by: Magnus Damm <redacted> --- For proper runtime operation with uncached vmas make sure "[PATCH][RFC] mm: uncached vma support with writenotify" is applied. There are no merge order dependencies.So this is dependent upon a patch which is in your tree, which is in linux-next?
I tried to say that there were _no_ dependencies merge wise. =) There are 3 levels of dependencies: 1: pgprot_noncached() patches from Arnd 2: mm: uncached vma support with writenotify 3: video: arch specfic page protection support for deferred io 2 depends on 1 to compile, but 3 (this one) is disconnected from 2 and 1. So this patch can be merged independently.
quoted
drivers/video/fb_defio.c | 10 +++++++--- drivers/video/fbmem.c | 6 ++++++ include/linux/fb.h | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-)--- 0001/drivers/video/fb_defio.c +++ work/drivers/video/fb_defio.c 2009-06-24 19:07:11.000000000 +0900@@ -19,6 +19,7 @@#include <linux/interrupt.h> #include <linux/fb.h> #include <linux/list.h> +#include <asm/fb.h>Microblaze doesn't have an asm/fb.h.
Right, but fbmem.c includes asm/fb.h as well (for fb_pgprotect()), so framebuffer isn't supported on Microblaze. So I think this is a separate issue.
quoted
/* to support deferred IO */ #include <linux/rmap.h>@@ -141,11 +142,16 @@ static const struct address_space_operat.set_page_dirty = fb_deferred_io_set_page_dirty, }; -static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) +int fb_deferred_io_mmap(struct file *file, struct fb_info *info, + struct vm_area_struct *vma, unsigned long off) { vma->vm_ops = &fb_deferred_io_vm_ops; vma->vm_flags |= ( VM_IO | VM_RESERVED | VM_DONTEXPAND ); vma->vm_private_data = info; + + if (!is_vmalloc_addr(info->screen_base)) + fb_pgprotect(file, vma, off);Add a comment explaining what's going on here?
Good idea!
quoted
@@ -1325,6 +1325,12 @@ __releases(&info->lock)off = vma->vm_pgoff << PAGE_SHIFT; if (!fb) return -ENODEV; + +#ifdef CONFIG_FB_DEFERRED_IO + if (info->fbdefio) + return fb_deferred_io_mmap(file, info, vma, off); +#endifWe can remove the ifdefs here...quoted
+extern int fb_deferred_io_mmap(struct file *file, struct fb_info *info, + struct vm_area_struct *vma, unsigned long off);if we do #else /* CONFIG_FB_DEFERRED_IO */ static inline int fb_deferred_io_mmap(struct file *file, struct fb_info *info, struct vm_area_struct *vma, unsigned long off) { return 0; } #endif /* CONFIG_FB_DEFERRED_IO */ here.
The code is fbmem.c is currently filled with #ifdefs today, want me create inline versions for fb_deferred_io_open() and fb_deferred_io_fsync() as well? Thanks for your comments! / magnus -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>