unsigned long offset;
struct page *page;
struct fb_info *info = vma->vm_private_data;
+ /* info->screen_base is in System RAM */
+ void *screen_base = (void __force *) info->screen_base;
offset = (vaddr - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT);
if (offset >= info->fix.smem_len)
return NOPAGE_SIGBUS;
- page = vmalloc_to_page(info->screen_base + offset);
+ page = vmalloc_to_page(screen_base + offset);
if (!page)
return NOPAGE_OOM;
return page;
}
+int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, int datasync)
+{
+ struct fb_info *info = file->private_data;
+
+ /* Kill off the delayed work */
+ cancel_rearming_delayed_work(&info->deferred_work);
+
+ /* Run it immediately */
+ return schedule_delayed_work(&info->deferred_work, 0);
+}
+EXPORT_SYMBOL_GPL(fb_deferred_io_fsync);
+
/* vm_ops->page_mkwrite handler */
-int fb_deferred_io_mkwrite(struct vm_area_struct *vma,
- struct page *page)
+static int fb_deferred_io_mkwrite(struct vm_area_struct *vma,
+ struct page *page)
{
struct fb_info *info = vma->vm_private_data;
struct fb_deferred_io *fbdefio = info->fbdefio;