Skip to content

Commit

Permalink
fb: fsync() method for deferred I/O flush.
Browse files Browse the repository at this point in the history
There are cases when we do not want to wait on the delay for automatically
updating the "real" framebuffer, this implements a simple ->fsync() hook
for explicitly flushing the deferred I/O work.  The ->page_mkwrite()
handler will rearm the work queue normally.

(akpm: nuke unneeded ifdefs, forward-delcare struct dentry)

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Cc: Jaya Kumar <jayakumar.lkml@gmail.com>
Acked-by: Antonino Daplas <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Paul Mundt authored and Linus Torvalds committed May 8, 2007
1 parent 7bf1ea3 commit 5e841b8
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
12 changes: 12 additions & 0 deletions drivers/video/fb_defio.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,18 @@ static struct page* fb_deferred_io_nopage(struct vm_area_struct *vma,
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 */
static int fb_deferred_io_mkwrite(struct vm_area_struct *vma,
struct page *page)
Expand Down
3 changes: 3 additions & 0 deletions drivers/video/fbmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -1266,6 +1266,9 @@ static const struct file_operations fb_fops = {
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
.get_unmapped_area = get_fb_unmapped_area,
#endif
#ifdef CONFIG_FB_DEFERRED_IO
.fsync = fb_deferred_io_fsync,
#endif
};

struct class *fb_class;
Expand Down
6 changes: 4 additions & 2 deletions include/linux/fb.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include <asm/types.h>
#include <linux/i2c.h>

struct dentry;

/* Definitions of frame buffers */

#define FB_MAJOR 29
Expand Down Expand Up @@ -927,11 +929,11 @@ static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
}
}

#ifdef CONFIG_FB_DEFERRED_IO
/* drivers/video/fb_defio.c */
extern void fb_deferred_io_init(struct fb_info *info);
extern void fb_deferred_io_cleanup(struct fb_info *info);
#endif
extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry,
int datasync);

/* drivers/video/fbsysfs.c */
extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
Expand Down

0 comments on commit 5e841b8

Please sign in to comment.