Re: [PATCH 1/2] fbdev: Make deferred I/O work as advertized
"Jaya Kumar" <[EMAIL PROTECTED]> writes: > On Thu, Feb 21, 2008 at 5:43 PM, Markus Armbruster <[EMAIL PROTECTED]> wrote: >> Fix extracted from this linux-fbdev-devel message: > > Hi Markus, > > Yes, this was discussed back in November on linux-mm and hence my > patch. I didn't push for it to be merged by itself because I don't > think it makes sense to merge it separately from the full metronomefb > patch. As far as I can tell, only hecubafb and metronomefb seem to be > the consumers. > > Out of curiosity, are you using defio or planning to use it? I would > love to hear back from people who are using it. > > Thanks, > jaya Converting to fb_defio made xen-fbfront quite a bit simpler and much more maintainable. Excellent match. It took me a bit of time to find your fix, mostly because I assumed my own code was broken, not fb_defio. It's best not to make assumptions about who uses your code; if it's any good, chances are somebody will find a use you never imagined. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] fbdev: Make deferred I/O work as advertized
On Thu, Feb 21, 2008 at 5:43 PM, Markus Armbruster <[EMAIL PROTECTED]> wrote: > Fix extracted from this linux-fbdev-devel message: Hi Markus, Yes, this was discussed back in November on linux-mm and hence my patch. I didn't push for it to be merged by itself because I don't think it makes sense to merge it separately from the full metronomefb patch. As far as I can tell, only hecubafb and metronomefb seem to be the consumers. Out of curiosity, are you using defio or planning to use it? I would love to hear back from people who are using it. Thanks, jaya > > Subject: [PATCH 1/1 2.6.24] fbdev: defio and Metronomefb > From: Jaya Kumar <[EMAIL PROTECTED]> > Date: 2008-02-18 13:41:26 > > Signed-off-by: Jaya Kumar <[EMAIL PROTECTED]> > Signed-off-by: Markus Armbruster <[EMAIL PROTECTED]> > > --- > > drivers/video/fb_defio.c | 22 -- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c > index 0f8cfb9..24843fd 100644 > --- a/drivers/video/fb_defio.c > +++ b/drivers/video/fb_defio.c > @@ -4,7 +4,7 @@ > * Copyright (C) 2006 Jaya Kumar > * > * This file is subject to the terms and conditions of the GNU General Public > - * License. See the file COPYING in the main directory of this archive > + * License. See the file COPYING in the main directory of this archive > * for more details. > */ > > @@ -31,7 +31,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, > unsigned long offset; > struct page *page; > struct fb_info *info = vma->vm_private_data; > - /* info->screen_base is in System RAM */ > + /* info->screen_base is virtual memory */ > void *screen_base = (void __force *) info->screen_base; > > offset = vmf->pgoff << PAGE_SHIFT; > @@ -43,6 +43,15 @@ static int fb_deferred_io_fault(struct vm_area_struct > *vma, > return VM_FAULT_SIGBUS; > > get_page(page); > + > + if (vma->vm_file) > + page->mapping = vma->vm_file->f_mapping; > + else > + printk(KERN_ERR "no mapping available\n"); > + > + BUG_ON(!page->mapping); > + page->index = vmf->pgoff; > + > vmf->page = page; > return 0; > } > @@ -138,11 +147,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init); > > void fb_deferred_io_cleanup(struct fb_info *info) > { > + void *screen_base = (void __force *) info->screen_base; > struct fb_deferred_io *fbdefio = info->fbdefio; > + struct page *page; > + int i; > > BUG_ON(!fbdefio); > cancel_delayed_work(>deferred_work); > flush_scheduled_work(); > + > + /* clear out the mapping that we setup */ > + for (i = 0 ; i < info->fix.smem_len; i += PAGE_SIZE) { > + page = vmalloc_to_page(screen_base + i); > + page->mapping = NULL; > + } > } > EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/2] fbdev: Make deferred I/O work as advertized
Deferred I/O was utterly broken. Reading the mmap()ed framebuffer worked, but writing it made the VM endlessly invoke vm_ops.page_mkwrite(). That happened because we failed to set page->mapping and page->index. The fix is to set them, and clean up properly before the framebuffer gets released. Fix extracted from this linux-fbdev-devel message: Subject: [PATCH 1/1 2.6.24] fbdev: defio and Metronomefb From: Jaya Kumar <[EMAIL PROTECTED]> Date: 2008-02-18 13:41:26 Signed-off-by: Jaya Kumar <[EMAIL PROTECTED]> Signed-off-by: Markus Armbruster <[EMAIL PROTECTED]> --- drivers/video/fb_defio.c | 22 -- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c index 0f8cfb9..24843fd 100644 --- a/drivers/video/fb_defio.c +++ b/drivers/video/fb_defio.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 Jaya Kumar * * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive + * License. See the file COPYING in the main directory of this archive * for more details. */ @@ -31,7 +31,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, unsigned long offset; struct page *page; struct fb_info *info = vma->vm_private_data; - /* info->screen_base is in System RAM */ + /* info->screen_base is virtual memory */ void *screen_base = (void __force *) info->screen_base; offset = vmf->pgoff << PAGE_SHIFT; @@ -43,6 +43,15 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, return VM_FAULT_SIGBUS; get_page(page); + + if (vma->vm_file) + page->mapping = vma->vm_file->f_mapping; + else + printk(KERN_ERR "no mapping available\n"); + + BUG_ON(!page->mapping); + page->index = vmf->pgoff; + vmf->page = page; return 0; } @@ -138,11 +147,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init); void fb_deferred_io_cleanup(struct fb_info *info) { + void *screen_base = (void __force *) info->screen_base; struct fb_deferred_io *fbdefio = info->fbdefio; + struct page *page; + int i; BUG_ON(!fbdefio); cancel_delayed_work(>deferred_work); flush_scheduled_work(); + + /* clear out the mapping that we setup */ + for (i = 0 ; i < info->fix.smem_len; i += PAGE_SIZE) { + page = vmalloc_to_page(screen_base + i); + page->mapping = NULL; + } } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/2] fbdev: Make deferred I/O work as advertized
Deferred I/O was utterly broken. Reading the mmap()ed framebuffer worked, but writing it made the VM endlessly invoke vm_ops.page_mkwrite(). That happened because we failed to set page-mapping and page-index. The fix is to set them, and clean up properly before the framebuffer gets released. Fix extracted from this linux-fbdev-devel message: Subject: [PATCH 1/1 2.6.24] fbdev: defio and Metronomefb From: Jaya Kumar [EMAIL PROTECTED] Date: 2008-02-18 13:41:26 Signed-off-by: Jaya Kumar [EMAIL PROTECTED] Signed-off-by: Markus Armbruster [EMAIL PROTECTED] --- drivers/video/fb_defio.c | 22 -- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c index 0f8cfb9..24843fd 100644 --- a/drivers/video/fb_defio.c +++ b/drivers/video/fb_defio.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 Jaya Kumar * * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive + * License. See the file COPYING in the main directory of this archive * for more details. */ @@ -31,7 +31,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, unsigned long offset; struct page *page; struct fb_info *info = vma-vm_private_data; - /* info-screen_base is in System RAM */ + /* info-screen_base is virtual memory */ void *screen_base = (void __force *) info-screen_base; offset = vmf-pgoff PAGE_SHIFT; @@ -43,6 +43,15 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, return VM_FAULT_SIGBUS; get_page(page); + + if (vma-vm_file) + page-mapping = vma-vm_file-f_mapping; + else + printk(KERN_ERR no mapping available\n); + + BUG_ON(!page-mapping); + page-index = vmf-pgoff; + vmf-page = page; return 0; } @@ -138,11 +147,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init); void fb_deferred_io_cleanup(struct fb_info *info) { + void *screen_base = (void __force *) info-screen_base; struct fb_deferred_io *fbdefio = info-fbdefio; + struct page *page; + int i; BUG_ON(!fbdefio); cancel_delayed_work(info-deferred_work); flush_scheduled_work(); + + /* clear out the mapping that we setup */ + for (i = 0 ; i info-fix.smem_len; i += PAGE_SIZE) { + page = vmalloc_to_page(screen_base + i); + page-mapping = NULL; + } } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] fbdev: Make deferred I/O work as advertized
On Thu, Feb 21, 2008 at 5:43 PM, Markus Armbruster [EMAIL PROTECTED] wrote: Fix extracted from this linux-fbdev-devel message: Hi Markus, Yes, this was discussed back in November on linux-mm and hence my patch. I didn't push for it to be merged by itself because I don't think it makes sense to merge it separately from the full metronomefb patch. As far as I can tell, only hecubafb and metronomefb seem to be the consumers. Out of curiosity, are you using defio or planning to use it? I would love to hear back from people who are using it. Thanks, jaya Subject: [PATCH 1/1 2.6.24] fbdev: defio and Metronomefb From: Jaya Kumar [EMAIL PROTECTED] Date: 2008-02-18 13:41:26 Signed-off-by: Jaya Kumar [EMAIL PROTECTED] Signed-off-by: Markus Armbruster [EMAIL PROTECTED] --- drivers/video/fb_defio.c | 22 -- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c index 0f8cfb9..24843fd 100644 --- a/drivers/video/fb_defio.c +++ b/drivers/video/fb_defio.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 Jaya Kumar * * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive + * License. See the file COPYING in the main directory of this archive * for more details. */ @@ -31,7 +31,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, unsigned long offset; struct page *page; struct fb_info *info = vma-vm_private_data; - /* info-screen_base is in System RAM */ + /* info-screen_base is virtual memory */ void *screen_base = (void __force *) info-screen_base; offset = vmf-pgoff PAGE_SHIFT; @@ -43,6 +43,15 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma, return VM_FAULT_SIGBUS; get_page(page); + + if (vma-vm_file) + page-mapping = vma-vm_file-f_mapping; + else + printk(KERN_ERR no mapping available\n); + + BUG_ON(!page-mapping); + page-index = vmf-pgoff; + vmf-page = page; return 0; } @@ -138,11 +147,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init); void fb_deferred_io_cleanup(struct fb_info *info) { + void *screen_base = (void __force *) info-screen_base; struct fb_deferred_io *fbdefio = info-fbdefio; + struct page *page; + int i; BUG_ON(!fbdefio); cancel_delayed_work(info-deferred_work); flush_scheduled_work(); + + /* clear out the mapping that we setup */ + for (i = 0 ; i info-fix.smem_len; i += PAGE_SIZE) { + page = vmalloc_to_page(screen_base + i); + page-mapping = NULL; + } } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] fbdev: Make deferred I/O work as advertized
Jaya Kumar [EMAIL PROTECTED] writes: On Thu, Feb 21, 2008 at 5:43 PM, Markus Armbruster [EMAIL PROTECTED] wrote: Fix extracted from this linux-fbdev-devel message: Hi Markus, Yes, this was discussed back in November on linux-mm and hence my patch. I didn't push for it to be merged by itself because I don't think it makes sense to merge it separately from the full metronomefb patch. As far as I can tell, only hecubafb and metronomefb seem to be the consumers. Out of curiosity, are you using defio or planning to use it? I would love to hear back from people who are using it. Thanks, jaya Converting to fb_defio made xen-fbfront quite a bit simpler and much more maintainable. Excellent match. It took me a bit of time to find your fix, mostly because I assumed my own code was broken, not fb_defio. It's best not to make assumptions about who uses your code; if it's any good, chances are somebody will find a use you never imagined. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/