From mboxrd@z Thu Jan 1 00:00:00 1970 From: Magnus Damm Subject: [PATCH 05/05] video: deferred io sys helpers - xen V2 Date: Wed, 24 Dec 2008 17:30:26 +0900 Message-ID: <20081224083026.1848.92193.sendpatchset@rx1.opensource.se> References: <20081224082946.1848.46644.sendpatchset@rx1.opensource.se> Return-path: In-Reply-To: <20081224082946.1848.46644.sendpatchset@rx1.opensource.se> Sender: linux-sh-owner@vger.kernel.org List-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-fbdev-devel@lists.sourceforge.net Cc: aliguori@us.ibm.com, adaplas@gmail.com, linux-sh@vger.kernel.org, armbru@redhat.com, lethal@linux-sh.org, Magnus Damm , jayakumar.lkml@gmail.com From: Magnus Damm Change the xen driver to use the new shared sys helpers. This allows us to remove some duplicated code. The use of the new shared sys helpers will change the behavior of this driver from syncing all operations directly to using the deferred io delay. Signed-off-by: Magnus Damm --- Changes since V1: - Only cosmetic drivers/video/Kconfig | 4 --- drivers/video/xen-fbfront.c | 51 +++++++++---------------------------------- 2 files changed, 11 insertions(+), 44 deletions(-) --- 0005/drivers/video/Kconfig +++ work/drivers/video/Kconfig 2008-12-24 16:42:47.000000000 +0900 @@ -2057,10 +2057,6 @@ config FB_VIRTUAL config XEN_FBDEV_FRONTEND tristate "Xen virtual frame buffer support" depends on FB && XEN - select FB_SYS_FILLRECT - select FB_SYS_COPYAREA - select FB_SYS_IMAGEBLIT - select FB_SYS_FOPS select FB_DEFERRED_IO default y help --- 0001/drivers/video/xen-fbfront.c +++ work/drivers/video/xen-fbfront.c 2008-12-24 16:44:19.000000000 +0900 @@ -177,11 +177,17 @@ static void xenfb_refresh(struct xenfb_i static void xenfb_deferred_io(struct fb_info *fb_info, struct list_head *pagelist) { + struct fb_deferred_io *fbdefio = fb_info->fbdefio; struct xenfb_info *info = fb_info->par; struct page *page; unsigned long beg, end; int y1, y2, miny, maxy; + if (fbdefio->dx != -1) + xenfb_refresh(info, fbdefio->dx, fbdefio->dy, + min_t(int, info->page->width, fbdefio->width), + min_t(int, info->page->height, fbdefio->height)); + miny = INT_MAX; maxy = 0; list_for_each_entry(page, pagelist, lru) { @@ -235,41 +241,6 @@ static int xenfb_setcolreg(unsigned regn return 0; } -static void xenfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect) -{ - struct xenfb_info *info = p->par; - - sys_fillrect(p, rect); - xenfb_refresh(info, rect->dx, rect->dy, rect->width, rect->height); -} - -static void xenfb_imageblit(struct fb_info *p, const struct fb_image *image) -{ - struct xenfb_info *info = p->par; - - sys_imageblit(p, image); - xenfb_refresh(info, image->dx, image->dy, image->width, image->height); -} - -static void xenfb_copyarea(struct fb_info *p, const struct fb_copyarea *area) -{ - struct xenfb_info *info = p->par; - - sys_copyarea(p, area); - xenfb_refresh(info, area->dx, area->dy, area->width, area->height); -} - -static ssize_t xenfb_write(struct fb_info *p, const char __user *buf, - size_t count, loff_t *ppos) -{ - struct xenfb_info *info = p->par; - ssize_t res; - - res = fb_sys_write(p, buf, count, ppos); - xenfb_refresh(info, 0, 0, info->page->width, info->page->height); - return res; -} - static int xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) { @@ -323,12 +294,12 @@ static int xenfb_set_par(struct fb_info static struct fb_ops xenfb_fb_ops = { .owner = THIS_MODULE, - .fb_read = fb_sys_read, - .fb_write = xenfb_write, + .fb_read = fb_deferred_io_read, + .fb_write = fb_deferred_io_write, + .fb_fillrect = fb_deferred_io_fillrect, + .fb_copyarea = fb_deferred_io_copyarea, + .fb_imageblit = fb_deferred_io_imageblit, .fb_setcolreg = xenfb_setcolreg, - .fb_fillrect = xenfb_fillrect, - .fb_copyarea = xenfb_copyarea, - .fb_imageblit = xenfb_imageblit, .fb_check_var = xenfb_check_var, .fb_set_par = xenfb_set_par, };