From: Sasha Levin Date: Sun, 22 Feb 2026 10:22:29 +0000 (-0500) Subject: drop fbcon patches from some queues X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a2b7003dcbbca381109d36859d76b9f47fd2f88d;p=thirdparty%2Fkernel%2Fstable-queue.git drop fbcon patches from some queues Signed-off-by: Sasha Levin --- diff --git a/queue-6.12/fbcon-fbcon_cursor_noblink-fbcon_cursor_blink.patch b/queue-6.12/fbcon-fbcon_cursor_noblink-fbcon_cursor_blink.patch deleted file mode 100644 index 13c8b839cf..0000000000 --- a/queue-6.12/fbcon-fbcon_cursor_noblink-fbcon_cursor_blink.patch +++ /dev/null @@ -1,63 +0,0 @@ -From a47bd9ea62a9f78a8a6f9cc3b5bc00b8443eda74 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 23 Sep 2024 23:48:53 +0300 -Subject: fbcon: fbcon_cursor_noblink -> fbcon_cursor_blink -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Ville Syrjälä - -[ Upstream commit 91a256467eed9e4449969163e3c93bc4bd990145 ] - -Invert fbcon_cursor_noblink into fbcon_cursor_blink so that: -- it matches the sysfs attribute exactly -- avoids having to do these NOT operations all over the place -- use bool instead of int - -Signed-off-by: Ville Syrjälä -Signed-off-by: Helge Deller -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/fbcon.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index e681066736dea..f8ea11b988090 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -174,7 +174,7 @@ static const struct consw fb_con; - - #define advance_row(p, delta) (unsigned short *)((unsigned long)(p) + (delta) * vc->vc_size_row) - --static int fbcon_cursor_noblink; -+static bool fbcon_cursor_blink = true; - - #define divides(a, b) ((!(a) || (b)%(a)) ? 0 : 1) - -@@ -409,7 +409,7 @@ static void fbcon_add_cursor_work(struct fb_info *info) - { - struct fbcon_ops *ops = info->fbcon_par; - -- if (!fbcon_cursor_noblink) -+ if (fbcon_cursor_blink) - queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, - ops->cur_blink_jiffies); - } -@@ -3310,10 +3310,10 @@ static ssize_t store_cursor_blink(struct device *device, - blink = simple_strtoul(buf, last, 0); - - if (blink) { -- fbcon_cursor_noblink = 0; -+ fbcon_cursor_blink = true; - fbcon_add_cursor_work(info); - } else { -- fbcon_cursor_noblink = 1; -+ fbcon_cursor_blink = false; - fbcon_del_cursor_work(info); - } - --- -2.51.0 - diff --git a/queue-6.12/fbcon-fbcon_is_inactive-fbcon_is_active.patch b/queue-6.12/fbcon-fbcon_is_inactive-fbcon_is_active.patch deleted file mode 100644 index 9755edb0ca..0000000000 --- a/queue-6.12/fbcon-fbcon_is_inactive-fbcon_is_active.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 56bec22b9e384402ccf77349a0041fcb1bf92a48 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 23 Sep 2024 18:57:47 +0300 -Subject: fbcon: fbcon_is_inactive() -> fbcon_is_active() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Ville Syrjälä - -[ Upstream commit ffc825a27f5503136196cb38f41641b58bf2df31 ] - -Invert fbcon_is_inactive() into fbcon_is_active(). Much easier -on the poor brain when you don't have to do dobule negations -all over the place. - -Signed-off-by: Ville Syrjälä -Acked-by: Helge Deller -Reviewed-by: Thomas Zimmermann -Signed-off-by: Helge Deller -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/fbcon.c | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index f8ea11b988090..800c9e1724f16 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -291,12 +291,12 @@ static bool fbcon_skip_panic(struct fb_info *info) - #endif - } - --static inline int fbcon_is_inactive(struct vc_data *vc, struct fb_info *info) -+static inline int fbcon_is_active(struct vc_data *vc, struct fb_info *info) - { - struct fbcon_ops *ops = info->fbcon_par; - -- return (info->state != FBINFO_STATE_RUNNING || -- vc->vc_mode != KD_TEXT || ops->graphics || fbcon_skip_panic(info)); -+ return info->state == FBINFO_STATE_RUNNING && -+ vc->vc_mode == KD_TEXT && !ops->graphics && !fbcon_skip_panic(info); - } - - static int get_color(struct vc_data *vc, struct fb_info *info, -@@ -1270,7 +1270,7 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - struct fbcon_display *p = &fb_display[vc->vc_num]; - u_int y_break; - -- if (fbcon_is_inactive(vc, info)) -+ if (!fbcon_is_active(vc, info)) - return; - - if (!height || !width) -@@ -1314,7 +1314,7 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fbcon_ops *ops = info->fbcon_par; - -- if (!fbcon_is_inactive(vc, info)) -+ if (fbcon_is_active(vc, info)) - ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, - get_color(vc, info, scr_readw(s), 1), - get_color(vc, info, scr_readw(s), 0)); -@@ -1325,7 +1325,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_ops *ops = info->fbcon_par; - -- if (!fbcon_is_inactive(vc, info)) -+ if (fbcon_is_active(vc, info)) - ops->clear_margins(vc, info, margin_color, bottom_only); - } - -@@ -1337,7 +1337,7 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - - ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - -- if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) -+ if (!fbcon_is_active(vc, info) || vc->vc_deccm != 1) - return; - - if (vc->vc_cursor_type & CUR_SW) -@@ -1743,7 +1743,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; - -- if (fbcon_is_inactive(vc, info)) -+ if (!fbcon_is_active(vc, info)) - return; - - if (!width || !height) -@@ -1767,7 +1767,7 @@ static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b, - struct fbcon_display *p = &fb_display[vc->vc_num]; - int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK; - -- if (fbcon_is_inactive(vc, info)) -+ if (!fbcon_is_active(vc, info)) - return true; - - fbcon_cursor(vc, false); -@@ -2151,7 +2151,7 @@ static bool fbcon_switch(struct vc_data *vc) - fbcon_del_cursor_work(old_info); - } - -- if (fbcon_is_inactive(vc, info) || -+ if (!fbcon_is_active(vc, info) || - ops->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else -@@ -2191,7 +2191,7 @@ static bool fbcon_switch(struct vc_data *vc) - scrollback_max = 0; - scrollback_current = 0; - -- if (!fbcon_is_inactive(vc, info)) { -+ if (fbcon_is_active(vc, info)) { - ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; - ops->update_start(info); - } -@@ -2247,7 +2247,7 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - } - } - -- if (!fbcon_is_inactive(vc, info)) { -+ if (fbcon_is_active(vc, info)) { - if (ops->blank_state != blank) { - ops->blank_state = blank; - fbcon_cursor(vc, !blank); -@@ -2261,7 +2261,7 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - update_screen(vc); - } - -- if (mode_switch || fbcon_is_inactive(vc, info) || -+ if (mode_switch || !fbcon_is_active(vc, info) || - ops->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else -@@ -2598,7 +2598,7 @@ static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table) - int i, j, k, depth; - u8 val; - -- if (fbcon_is_inactive(vc, info)) -+ if (!fbcon_is_active(vc, info)) - return; - - if (!con_is_visible(vc)) -@@ -2698,7 +2698,7 @@ static void fbcon_modechanged(struct fb_info *info) - scrollback_max = 0; - scrollback_current = 0; - -- if (!fbcon_is_inactive(vc, info)) { -+ if (fbcon_is_active(vc, info)) { - ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; - ops->update_start(info); - } --- -2.51.0 - diff --git a/queue-6.12/fbcon-introduce-get_-fg-bg-_color.patch b/queue-6.12/fbcon-introduce-get_-fg-bg-_color.patch deleted file mode 100644 index 5318a714fd..0000000000 --- a/queue-6.12/fbcon-introduce-get_-fg-bg-_color.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 5b78f9e637bdacf8b66b09cd4b230be8fa24aa7f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 23 Sep 2024 18:57:48 +0300 -Subject: fbcon: Introduce get_{fg,bg}_color() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Ville Syrjälä - -[ Upstream commit 311b07842fb0bb69b5b266b3dfd6037260a3ec2a ] - -Make the code more legible by adding get_{fg,bg}_color() -which hide the obscure 'is_fg' parameter of get_color() -from the caller. - -Signed-off-by: Ville Syrjälä -Acked-by: Helge Deller -Reviewed-by: Thomas Zimmermann -Signed-off-by: Helge Deller -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/fbcon.c | 24 ++++++++++++++++++------ - 1 file changed, 18 insertions(+), 6 deletions(-) - -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 800c9e1724f16..890c6f79f24f6 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -366,6 +366,16 @@ static int get_color(struct vc_data *vc, struct fb_info *info, - return color; - } - -+static int get_fg_color(struct vc_data *vc, struct fb_info *info, u16 c) -+{ -+ return get_color(vc, info, c, 1); -+} -+ -+static int get_bg_color(struct vc_data *vc, struct fb_info *info, u16 c) -+{ -+ return get_color(vc, info, c, 0); -+} -+ - static void fb_flashcursor(struct work_struct *work) - { - struct fbcon_ops *ops = container_of(work, struct fbcon_ops, cursor_work.work); -@@ -397,8 +407,9 @@ static void fb_flashcursor(struct work_struct *work) - - c = scr_readw((u16 *) vc->vc_pos); - enable = ops->cursor_flash && !ops->cursor_state.enable; -- ops->cursor(vc, info, enable, get_color(vc, info, c, 1), -- get_color(vc, info, c, 0)); -+ ops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - console_unlock(); - - queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, -@@ -1316,8 +1327,8 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - - if (fbcon_is_active(vc, info)) - ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, -- get_color(vc, info, scr_readw(s), 1), -- get_color(vc, info, scr_readw(s), 0)); -+ get_fg_color(vc, info, scr_readw(s)), -+ get_bg_color(vc, info, scr_readw(s))); - } - - static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) -@@ -1350,8 +1361,9 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - if (!ops->cursor) - return; - -- ops->cursor(vc, info, enable, get_color(vc, info, c, 1), -- get_color(vc, info, c, 0)); -+ ops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - } - - static int scrollback_phys_max = 0; --- -2.51.0 - diff --git a/queue-6.12/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch b/queue-6.12/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch deleted file mode 100644 index f747e5a87b..0000000000 --- a/queue-6.12/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch +++ /dev/null @@ -1,432 +0,0 @@ -From fbf85f230d07d459c01a529a1cd5ce7fc4cdb10b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:44 +0200 -Subject: fbcon: Move fbcon callbacks into struct fbcon_bitops - -From: Thomas Zimmermann - -[ Upstream commit 217cb07be424d127293dc0b32dbd077ad37c24f6 ] - -Depending on rotation settings, fbcon sets different callback -functions in struct fbcon_par from within fbcon_set_bitops(). Declare -the callback functions in the new type struct fbcon_bitops. Then -only replace the single bitops pointer in struct fbcon_par. - -Keeping callbacks in constant instances of struct fbcon_bitops -makes it harder to exploit the callbacks. Also makes the code slightly -easier to maintain. - -For tile-based consoles, there's a separate instance of the bitops -structure. - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-5-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/bitblit.c | 17 ++++--- - drivers/video/fbdev/core/fbcon.c | 67 +++++++++++++++------------- - drivers/video/fbdev/core/fbcon.h | 7 ++- - drivers/video/fbdev/core/fbcon_ccw.c | 18 +++++--- - drivers/video/fbdev/core/fbcon_cw.c | 18 +++++--- - drivers/video/fbdev/core/fbcon_ud.c | 18 +++++--- - drivers/video/fbdev/core/tileblit.c | 16 ++++--- - 7 files changed, 94 insertions(+), 67 deletions(-) - -diff --git a/drivers/video/fbdev/core/bitblit.c b/drivers/video/fbdev/core/bitblit.c -index bed8ba18222b9..8b5819877469e 100644 ---- a/drivers/video/fbdev/core/bitblit.c -+++ b/drivers/video/fbdev/core/bitblit.c -@@ -409,15 +409,18 @@ static int bit_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops bit_fbcon_bitops = { -+ .bmove = bit_bmove, -+ .clear = bit_clear, -+ .putcs = bit_putcs, -+ .clear_margins = bit_clear_margins, -+ .cursor = bit_cursor, -+ .update_start = bit_update_start, -+}; -+ - void fbcon_set_bitops(struct fbcon_par *par) - { -- par->bmove = bit_bmove; -- par->clear = bit_clear; -- par->putcs = bit_putcs; -- par->clear_margins = bit_clear_margins; -- par->cursor = bit_cursor; -- par->update_start = bit_update_start; -- par->rotate_font = NULL; -+ par->bitops = &bit_fbcon_bitops; - - if (par->rotate) - fbcon_set_rotate(par); -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 665c400a2d3a9..3cc68324f297b 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -407,9 +407,9 @@ static void fb_flashcursor(struct work_struct *work) - - c = scr_readw((u16 *) vc->vc_pos); - enable = par->cursor_flash && !par->cursor_state.enable; -- par->cursor(vc, info, enable, -- get_fg_color(vc, info, c), -- get_bg_color(vc, info, c)); -+ par->bitops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - console_unlock(); - - queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -@@ -1164,7 +1164,7 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (logo) - fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); - -- if (par->rotate_font && par->rotate_font(info, vc)) { -+ if (par->bitops->rotate_font && par->bitops->rotate_font(info, vc)) { - par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } -@@ -1305,10 +1305,11 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - y_break = p->vrows - p->yscroll; - if (sy < y_break && sy + height - 1 >= y_break) { - u_int b = y_break - sy; -- par->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -- par->clear(vc, info, real_y(p, sy + b), sx, height - b, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy + b), sx, height - b, -+ width, fg, bg); - } else -- par->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); - } - - static void fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, -@@ -1325,9 +1326,9 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- par->putcs(vc, info, s, count, real_y(p, ypos), xpos, -- get_fg_color(vc, info, scr_readw(s)), -- get_bg_color(vc, info, scr_readw(s))); -+ par->bitops->putcs(vc, info, s, count, real_y(p, ypos), xpos, -+ get_fg_color(vc, info, scr_readw(s)), -+ get_bg_color(vc, info, scr_readw(s))); - } - - static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) -@@ -1336,7 +1337,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) - struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- par->clear_margins(vc, info, margin_color, bottom_only); -+ par->bitops->clear_margins(vc, info, margin_color, bottom_only); - } - - static void fbcon_cursor(struct vc_data *vc, bool enable) -@@ -1357,12 +1358,12 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - - par->cursor_flash = enable; - -- if (!par->cursor) -+ if (!par->bitops->cursor) - return; - -- par->cursor(vc, info, enable, -- get_fg_color(vc, info, c), -- get_bg_color(vc, info, c)); -+ par->bitops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - } - - static int scrollback_phys_max = 0; -@@ -1446,7 +1447,7 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode |= FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) - scrollback_max = scrollback_phys_max; -@@ -1465,7 +1466,7 @@ static __inline__ void ywrap_down(struct vc_data *vc, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode |= FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - scrollback_max -= count; - if (scrollback_max < 0) - scrollback_max = 0; -@@ -1480,15 +1481,15 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - - p->yscroll += count; - if (p->yscroll > p->vrows - vc->vc_rows) { -- par->bmove(vc, info, p->vrows - vc->vc_rows, -- 0, 0, 0, vc->vc_rows, vc->vc_cols); -+ par->bitops->bmove(vc, info, p->vrows - vc->vc_rows, -+ 0, 0, 0, vc->vc_rows, vc->vc_cols); - p->yscroll -= p->vrows - vc->vc_rows; - } - - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1512,7 +1513,7 @@ static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1528,15 +1529,15 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - - p->yscroll -= count; - if (p->yscroll < 0) { -- par->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -- 0, vc->vc_rows, vc->vc_cols); -+ par->bitops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -+ 0, vc->vc_rows, vc->vc_cols); - p->yscroll += p->vrows - vc->vc_rows; - } - - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1560,7 +1561,7 @@ static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1622,8 +1623,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - - if (c == scr_readw(d)) { - if (s > start) { -- par->bmove(vc, info, line + ycount, x, -- line, x, 1, s - start); -+ par->bitops->bmove(vc, info, line + ycount, x, -+ line, x, 1, s - start); - x += s - start + 1; - start = s + 1; - } else { -@@ -1638,7 +1639,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - d++; - } while (s < le); - if (s > start) -- par->bmove(vc, info, line + ycount, x, line, x, 1, s - start); -+ par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, -+ s - start); - console_conditional_schedule(); - if (ycount > 0) - line++; -@@ -1743,7 +1745,8 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - } - return; - } -- par->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, height, width); -+ par->bitops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, -+ height, width); - } - - static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, -@@ -2163,7 +2166,7 @@ static bool fbcon_switch(struct vc_data *vc) - set_blitting_type(vc, info); - par->cursor_reset = 1; - -- if (par->rotate_font && par->rotate_font(info, vc)) { -+ if (par->bitops->rotate_font && par->bitops->rotate_font(info, vc)) { - par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } -@@ -2196,7 +2199,7 @@ static bool fbcon_switch(struct vc_data *vc) - - if (fbcon_is_active(vc, info)) { - par->var.xoffset = par->var.yoffset = p->yscroll = 0; -- par->update_start(info); -+ par->bitops->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2702,7 +2705,7 @@ static void fbcon_modechanged(struct fb_info *info) - - if (fbcon_is_active(vc, info)) { - par->var.xoffset = par->var.yoffset = p->yscroll = 0; -- par->update_start(info); -+ par->bitops->update_start(info); - } - - fbcon_set_palette(vc, color_table); -diff --git a/drivers/video/fbdev/core/fbcon.h b/drivers/video/fbdev/core/fbcon.h -index 31ee2d5912219..69ae6b965a103 100644 ---- a/drivers/video/fbdev/core/fbcon.h -+++ b/drivers/video/fbdev/core/fbcon.h -@@ -51,7 +51,7 @@ struct fbcon_display { - const struct fb_videomode *mode; - }; - --struct fbcon_par { -+struct fbcon_bitops { - void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width); - void (*clear)(struct vc_data *vc, struct fb_info *info, int sy, -@@ -65,6 +65,9 @@ struct fbcon_par { - bool enable, int fg, int bg); - int (*update_start)(struct fb_info *info); - int (*rotate_font)(struct fb_info *info, struct vc_data *vc); -+}; -+ -+struct fbcon_par { - struct fb_var_screeninfo var; /* copy of the current fb_var_screeninfo */ - struct delayed_work cursor_work; /* Cursor timer */ - struct fb_cursor cursor_state; -@@ -86,6 +89,8 @@ struct fbcon_par { - u8 *cursor_src; - u32 cursor_size; - u32 fd_size; -+ -+ const struct fbcon_bitops *bitops; - }; - /* - * Attribute Decoding -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index ba744b67a4fd9..4721f4b5e29a5 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -390,13 +390,17 @@ static int ccw_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops ccw_fbcon_bitops = { -+ .bmove = ccw_bmove, -+ .clear = ccw_clear, -+ .putcs = ccw_putcs, -+ .clear_margins = ccw_clear_margins, -+ .cursor = ccw_cursor, -+ .update_start = ccw_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_ccw(struct fbcon_par *par) - { -- par->bmove = ccw_bmove; -- par->clear = ccw_clear; -- par->putcs = ccw_putcs; -- par->clear_margins = ccw_clear_margins; -- par->cursor = ccw_cursor; -- par->update_start = ccw_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &ccw_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index 974bd9d9b7702..2771924d0fb72 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -373,13 +373,17 @@ static int cw_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops cw_fbcon_bitops = { -+ .bmove = cw_bmove, -+ .clear = cw_clear, -+ .putcs = cw_putcs, -+ .clear_margins = cw_clear_margins, -+ .cursor = cw_cursor, -+ .update_start = cw_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_cw(struct fbcon_par *par) - { -- par->bmove = cw_bmove; -- par->clear = cw_clear; -- par->putcs = cw_putcs; -- par->clear_margins = cw_clear_margins; -- par->cursor = cw_cursor; -- par->update_start = cw_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &cw_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 1a214a4d538fb..148ca9b539d19 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -417,13 +417,17 @@ static int ud_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops ud_fbcon_bitops = { -+ .bmove = ud_bmove, -+ .clear = ud_clear, -+ .putcs = ud_putcs, -+ .clear_margins = ud_clear_margins, -+ .cursor = ud_cursor, -+ .update_start = ud_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_ud(struct fbcon_par *par) - { -- par->bmove = ud_bmove; -- par->clear = ud_clear; -- par->putcs = ud_putcs; -- par->clear_margins = ud_clear_margins; -- par->cursor = ud_cursor; -- par->update_start = ud_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &ud_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/tileblit.c b/drivers/video/fbdev/core/tileblit.c -index 4428f2bcd3f8c..a9db668caf727 100644 ---- a/drivers/video/fbdev/core/tileblit.c -+++ b/drivers/video/fbdev/core/tileblit.c -@@ -161,17 +161,21 @@ static int tile_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops tile_fbcon_bitops = { -+ .bmove = tile_bmove, -+ .clear = tile_clear, -+ .putcs = tile_putcs, -+ .clear_margins = tile_clear_margins, -+ .cursor = tile_cursor, -+ .update_start = tile_update_start, -+}; -+ - void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) - { - struct fb_tilemap map; - struct fbcon_par *par = info->fbcon_par; - -- par->bmove = tile_bmove; -- par->clear = tile_clear; -- par->putcs = tile_putcs; -- par->clear_margins = tile_clear_margins; -- par->cursor = tile_cursor; -- par->update_start = tile_update_start; -+ par->bitops = &tile_fbcon_bitops; - - if (par->p) { - map.width = vc->vc_font.width; --- -2.51.0 - diff --git a/queue-6.12/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch b/queue-6.12/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch deleted file mode 100644 index 474c9573d8..0000000000 --- a/queue-6.12/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch +++ /dev/null @@ -1,2478 +0,0 @@ -From fd6811ebe8165d0d74eabf975e3744b6a308634b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:42 +0200 -Subject: fbcon: Rename struct fbcon_ops to struct fbcon_par - -From: Thomas Zimmermann - -[ Upstream commit a6adbbc4c32a016146e117b1e9e5242724a75e10 ] - -The type struct fbcon_ops contains fbcon state and callbacks. As the -callbacks will be removed from struct fbcon_ops, rename the data type -to struct fbcon_par. Also rename the variables from ops to par. - -The _par postfix ("private access registers") is used throughout the -fbdev subsystem for per-driver state. The fbcon pointer within struct -fb_info is also named fbcon_par. Hence, the new naming fits existing -practice. - -v2: -- rename struct fbcon_ops to struct fbcon_par -- fix build for CONFIG_FB_TILEBITTING=n (kernel test robot) -- fix indention - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-3-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/bitblit.c | 122 +++---- - drivers/video/fbdev/core/fbcon.c | 419 ++++++++++++------------ - drivers/video/fbdev/core/fbcon.h | 6 +- - drivers/video/fbdev/core/fbcon_ccw.c | 146 ++++----- - drivers/video/fbdev/core/fbcon_cw.c | 146 ++++----- - drivers/video/fbdev/core/fbcon_rotate.c | 40 +-- - drivers/video/fbdev/core/fbcon_rotate.h | 6 +- - drivers/video/fbdev/core/fbcon_ud.c | 162 ++++----- - drivers/video/fbdev/core/softcursor.c | 18 +- - drivers/video/fbdev/core/tileblit.c | 28 +- - 10 files changed, 541 insertions(+), 552 deletions(-) - -diff --git a/drivers/video/fbdev/core/bitblit.c b/drivers/video/fbdev/core/bitblit.c -index dc5ad3fcc7be4..bed8ba18222b9 100644 ---- a/drivers/video/fbdev/core/bitblit.c -+++ b/drivers/video/fbdev/core/bitblit.c -@@ -261,10 +261,10 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = DIV_ROUND_UP(vc->vc_font.width, 8), c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1; - char *src; -@@ -278,10 +278,10 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - attribute = get_attribute(info, c); - src = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -290,46 +290,46 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if ((ops->cursor_state.image.dx != (vc->vc_font.width * vc->state.x)) || -- (ops->cursor_state.image.dy != (vc->vc_font.height * y)) || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = vc->vc_font.width * vc->state.x; -- ops->cursor_state.image.dy = vc->vc_font.height * y; -+ if ((par->cursor_state.image.dx != (vc->vc_font.width * vc->state.x)) || -+ (par->cursor_state.image.dy != (vc->vc_font.height * y)) || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = vc->vc_font.width * vc->state.x; -+ par->cursor_state.image.dy = vc->vc_font.height * y; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.image.height != vc->vc_font.height || -- ops->cursor_state.image.width != vc->vc_font.width || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.height; -- ops->cursor_state.image.width = vc->vc_font.width; -+ if (par->cursor_state.image.height != vc->vc_font.height || -+ par->cursor_state.image.width != vc->vc_font.width || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.height; -+ par->cursor_state.image.width = vc->vc_font.width; - cursor.set |= FB_CUR_SETSIZE; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *mask = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - int cur_height, size, i = 0; - u8 msk = 0xff; -@@ -337,13 +337,13 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (!mask) - return; - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -372,19 +372,19 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - mask[i++] = msk; - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -394,31 +394,31 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int bit_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int err; - -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_set_bitops(struct fbcon_ops *ops) -+void fbcon_set_bitops(struct fbcon_par *par) - { -- ops->bmove = bit_bmove; -- ops->clear = bit_clear; -- ops->putcs = bit_putcs; -- ops->clear_margins = bit_clear_margins; -- ops->cursor = bit_cursor; -- ops->update_start = bit_update_start; -- ops->rotate_font = NULL; -- -- if (ops->rotate) -- fbcon_set_rotate(ops); -+ par->bmove = bit_bmove; -+ par->clear = bit_clear; -+ par->putcs = bit_putcs; -+ par->clear_margins = bit_clear_margins; -+ par->cursor = bit_cursor; -+ par->update_start = bit_update_start; -+ par->rotate_font = NULL; -+ -+ if (par->rotate) -+ fbcon_set_rotate(par); - } -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 890c6f79f24f6..665c400a2d3a9 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -200,27 +200,27 @@ static struct device *fbcon_device; - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION - static inline void fbcon_set_rotation(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (!(info->flags & FBINFO_MISC_TILEBLITTING) && -- ops->p->con_rotate < 4) -- ops->rotate = ops->p->con_rotate; -+ par->p->con_rotate < 4) -+ par->rotate = par->p->con_rotate; - else -- ops->rotate = 0; -+ par->rotate = 0; - } - - static void fbcon_rotate(struct fb_info *info, u32 rotate) - { -- struct fbcon_ops *ops= info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_info *fb_info; - -- if (!ops || ops->currcon == -1) -+ if (!par || par->currcon == -1) - return; - -- fb_info = fbcon_info_from_console(ops->currcon); -+ fb_info = fbcon_info_from_console(par->currcon); - - if (info == fb_info) { -- struct fbcon_display *p = &fb_display[ops->currcon]; -+ struct fbcon_display *p = &fb_display[par->currcon]; - - if (rotate < 4) - p->con_rotate = rotate; -@@ -233,12 +233,12 @@ static void fbcon_rotate(struct fb_info *info, u32 rotate) - - static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int i; - -- if (!ops || ops->currcon < 0 || rotate > 3) -+ if (!par || par->currcon < 0 || rotate > 3) - return; - - for (i = first_fb_vc; i <= last_fb_vc; i++) { -@@ -256,9 +256,9 @@ static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - #else - static inline void fbcon_set_rotation(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->rotate = FB_ROTATE_UR; -+ par->rotate = FB_ROTATE_UR; - } - - static void fbcon_rotate(struct fb_info *info, u32 rotate) -@@ -274,9 +274,9 @@ static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - - static int fbcon_get_rotate(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- return (ops) ? ops->rotate : 0; -+ return (par) ? par->rotate : 0; - } - - static bool fbcon_skip_panic(struct fb_info *info) -@@ -293,10 +293,10 @@ static bool fbcon_skip_panic(struct fb_info *info) - - static inline int fbcon_is_active(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - return info->state == FBINFO_STATE_RUNNING && -- vc->vc_mode == KD_TEXT && !ops->graphics && !fbcon_skip_panic(info); -+ vc->vc_mode == KD_TEXT && !par->graphics && !fbcon_skip_panic(info); - } - - static int get_color(struct vc_data *vc, struct fb_info *info, -@@ -378,7 +378,7 @@ static int get_bg_color(struct vc_data *vc, struct fb_info *info, u16 c) - - static void fb_flashcursor(struct work_struct *work) - { -- struct fbcon_ops *ops = container_of(work, struct fbcon_ops, cursor_work.work); -+ struct fbcon_par *par = container_of(work, struct fbcon_par, cursor_work.work); - struct fb_info *info; - struct vc_data *vc = NULL; - int c; -@@ -393,10 +393,10 @@ static void fb_flashcursor(struct work_struct *work) - return; - - /* protected by console_lock */ -- info = ops->info; -+ info = par->info; - -- if (ops->currcon != -1) -- vc = vc_cons[ops->currcon].d; -+ if (par->currcon != -1) -+ vc = vc_cons[par->currcon].d; - - if (!vc || !con_is_visible(vc) || - fbcon_info_from_console(vc->vc_num) != info || -@@ -406,30 +406,30 @@ static void fb_flashcursor(struct work_struct *work) - } - - c = scr_readw((u16 *) vc->vc_pos); -- enable = ops->cursor_flash && !ops->cursor_state.enable; -- ops->cursor(vc, info, enable, -+ enable = par->cursor_flash && !par->cursor_state.enable; -+ par->cursor(vc, info, enable, - get_fg_color(vc, info, c), - get_bg_color(vc, info, c)); - console_unlock(); - -- queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, -- ops->cur_blink_jiffies); -+ queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -+ par->cur_blink_jiffies); - } - - static void fbcon_add_cursor_work(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_cursor_blink) -- queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, -- ops->cur_blink_jiffies); -+ queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -+ par->cur_blink_jiffies); - } - - static void fbcon_del_cursor_work(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- cancel_delayed_work_sync(&ops->cursor_work); -+ cancel_delayed_work_sync(&par->cursor_work); - } - - #ifndef MODULE -@@ -589,7 +589,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - int cols, int rows, int new_cols, int new_rows) - { - /* Need to make room for the logo */ -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int cnt, erase = vc->vc_video_erase_char, step; - unsigned short *save = NULL, *r, *q; - int logo_height; -@@ -605,7 +605,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - */ - if (fb_get_color_depth(&info->var, &info->fix) == 1) - erase &= ~0x400; -- logo_height = fb_prepare_logo(info, ops->rotate); -+ logo_height = fb_prepare_logo(info, par->rotate); - logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height); - q = (unsigned short *) (vc->vc_origin + - vc->vc_size_row * rows); -@@ -677,15 +677,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - #ifdef CONFIG_FB_TILEBLITTING - static void set_blitting_type(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->p = &fb_display[vc->vc_num]; -+ par->p = &fb_display[vc->vc_num]; - - if ((info->flags & FBINFO_MISC_TILEBLITTING)) - fbcon_set_tileops(vc, info); - else { - fbcon_set_rotation(info); -- fbcon_set_bitops(ops); -+ fbcon_set_bitops(par); - } - } - -@@ -702,12 +702,12 @@ static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) - #else - static void set_blitting_type(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - info->flags &= ~FBINFO_MISC_TILEBLITTING; -- ops->p = &fb_display[vc->vc_num]; -+ par->p = &fb_display[vc->vc_num]; - fbcon_set_rotation(info); -- fbcon_set_bitops(ops); -+ fbcon_set_bitops(par); - } - - static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) -@@ -727,13 +727,13 @@ static void fbcon_release(struct fb_info *info) - module_put(info->fbops->owner); - - if (info->fbcon_par) { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - fbcon_del_cursor_work(info); -- kfree(ops->cursor_state.mask); -- kfree(ops->cursor_data); -- kfree(ops->cursor_src); -- kfree(ops->fontbuffer); -+ kfree(par->cursor_state.mask); -+ kfree(par->cursor_data); -+ kfree(par->cursor_src); -+ kfree(par->fontbuffer); - kfree(info->fbcon_par); - info->fbcon_par = NULL; - } -@@ -741,7 +741,7 @@ static void fbcon_release(struct fb_info *info) - - static int fbcon_open(struct fb_info *info) - { -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - - if (!try_module_get(info->fbops->owner)) - return -ENODEV; -@@ -755,16 +755,16 @@ static int fbcon_open(struct fb_info *info) - } - unlock_fb_info(info); - -- ops = kzalloc(sizeof(struct fbcon_ops), GFP_KERNEL); -- if (!ops) { -+ par = kzalloc(sizeof(*par), GFP_KERNEL); -+ if (!par) { - fbcon_release(info); - return -ENOMEM; - } - -- INIT_DELAYED_WORK(&ops->cursor_work, fb_flashcursor); -- ops->info = info; -- info->fbcon_par = ops; -- ops->cur_blink_jiffies = HZ / 5; -+ INIT_DELAYED_WORK(&par->cursor_work, fb_flashcursor); -+ par->info = info; -+ info->fbcon_par = par; -+ par->cur_blink_jiffies = HZ / 5; - - return 0; - } -@@ -811,12 +811,12 @@ static void con2fb_release_oldinfo(struct vc_data *vc, struct fb_info *oldinfo, - static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, - int unit, int show_logo) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int ret; - -- ops->currcon = fg_console; -+ par->currcon = fg_console; - -- if (info->fbops->fb_set_par && !ops->initialized) { -+ if (info->fbops->fb_set_par && !par->initialized) { - ret = info->fbops->fb_set_par(info); - - if (ret) -@@ -825,8 +825,8 @@ static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, - "error code %d\n", ret); - } - -- ops->initialized = true; -- ops->graphics = 0; -+ par->initialized = true; -+ par->graphics = 0; - fbcon_set_disp(info, &info->var, unit); - - if (show_logo) { -@@ -963,7 +963,7 @@ static const char *fbcon_startup(void) - struct vc_data *vc = vc_cons[fg_console].d; - const struct font_desc *font = NULL; - struct fb_info *info = NULL; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int rows, cols; - - /* -@@ -983,10 +983,10 @@ static const char *fbcon_startup(void) - if (fbcon_open(info)) - return NULL; - -- ops = info->fbcon_par; -- ops->currcon = -1; -- ops->graphics = 1; -- ops->cur_rotate = -1; -+ par = info->fbcon_par; -+ par->currcon = -1; -+ par->graphics = 1; -+ par->cur_rotate = -1; - - p->con_rotate = initial_rotation; - if (p->con_rotate == -1) -@@ -1009,8 +1009,8 @@ static const char *fbcon_startup(void) - vc->vc_font.charcount = font->charcount; - } - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -1028,7 +1028,7 @@ static const char *fbcon_startup(void) - static void fbcon_init(struct vc_data *vc, bool init) - { - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - struct vc_data **default_mode = vc->vc_display_fg; - struct vc_data *svc = *default_mode; - struct fbcon_display *t, *p = &fb_display[vc->vc_num]; -@@ -1102,8 +1102,8 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (!*vc->uni_pagedict_loc) - con_copy_unimap(vc, svc); - -- ops = info->fbcon_par; -- ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); -+ par = info->fbcon_par; -+ par->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - - p->con_rotate = initial_rotation; - if (p->con_rotate == -1) -@@ -1115,8 +1115,8 @@ static void fbcon_init(struct vc_data *vc, bool init) - - cols = vc->vc_cols; - rows = vc->vc_rows; -- new_cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- new_rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ new_cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ new_rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - new_cols /= vc->vc_font.width; - new_rows /= vc->vc_font.height; - -@@ -1128,7 +1128,7 @@ static void fbcon_init(struct vc_data *vc, bool init) - * We need to do it in fbcon_init() to prevent screen corruption. - */ - if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) { -- if (info->fbops->fb_set_par && !ops->initialized) { -+ if (info->fbops->fb_set_par && !par->initialized) { - ret = info->fbops->fb_set_par(info); - - if (ret) -@@ -1137,10 +1137,10 @@ static void fbcon_init(struct vc_data *vc, bool init) - "error code %d\n", ret); - } - -- ops->initialized = true; -+ par->initialized = true; - } - -- ops->graphics = 0; -+ par->graphics = 0; - - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION - if ((info->flags & FBINFO_HWACCEL_COPYAREA) && -@@ -1164,12 +1164,12 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (logo) - fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); - -- if (ops->rotate_font && ops->rotate_font(info, vc)) { -- ops->rotate = FB_ROTATE_UR; -+ if (par->rotate_font && par->rotate_font(info, vc)) { -+ par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } - -- ops->p = &fb_display[fg_console]; -+ par->p = &fb_display[fg_console]; - } - - static void fbcon_free_font(struct fbcon_display *p) -@@ -1207,7 +1207,7 @@ static void fbcon_deinit(struct vc_data *vc) - { - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int idx; - - fbcon_free_font(p); -@@ -1221,15 +1221,15 @@ static void fbcon_deinit(struct vc_data *vc) - if (!info) - goto finished; - -- ops = info->fbcon_par; -+ par = info->fbcon_par; - -- if (!ops) -+ if (!par) - goto finished; - - if (con_is_visible(vc)) - fbcon_del_cursor_work(info); - -- ops->initialized = false; -+ par->initialized = false; - finished: - - fbcon_free_font(p); -@@ -1276,7 +1276,7 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - unsigned int height, unsigned int width) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int fg, bg; - struct fbcon_display *p = &fb_display[vc->vc_num]; - u_int y_break; -@@ -1291,7 +1291,7 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - vc->vc_top = 0; - /* - * If the font dimensions are not an integral of the display -- * dimensions then the ops->clear below won't end up clearing -+ * dimensions then the par->clear below won't end up clearing - * the margins. Call clear_margins here in case the logo - * bitmap stretched into the margin area. - */ -@@ -1305,11 +1305,10 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - y_break = p->vrows - p->yscroll; - if (sy < y_break && sy + height - 1 >= y_break) { - u_int b = y_break - sy; -- ops->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -- ops->clear(vc, info, real_y(p, sy + b), sx, height - b, -- width, fg, bg); -+ par->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -+ par->clear(vc, info, real_y(p, sy + b), sx, height - b, width, fg, bg); - } else -- ops->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); -+ par->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); - } - - static void fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, -@@ -1323,10 +1322,10 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, -+ par->putcs(vc, info, s, count, real_y(p, ypos), xpos, - get_fg_color(vc, info, scr_readw(s)), - get_bg_color(vc, info, scr_readw(s))); - } -@@ -1334,19 +1333,19 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- ops->clear_margins(vc, info, margin_color, bottom_only); -+ par->clear_margins(vc, info, margin_color, bottom_only); - } - - static void fbcon_cursor(struct vc_data *vc, bool enable) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int c = scr_readw((u16 *) vc->vc_pos); - -- ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); -+ par->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - - if (!fbcon_is_active(vc, info) || vc->vc_deccm != 1) - return; -@@ -1356,12 +1355,12 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - else - fbcon_add_cursor_work(info); - -- ops->cursor_flash = enable; -+ par->cursor_flash = enable; - -- if (!ops->cursor) -+ if (!par->cursor) - return; - -- ops->cursor(vc, info, enable, -+ par->cursor(vc, info, enable, - get_fg_color(vc, info, c), - get_bg_color(vc, info, c)); - } -@@ -1376,7 +1375,7 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - struct fbcon_display *p, *t; - struct vc_data **default_mode, *vc; - struct vc_data *svc; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int rows, cols; - unsigned long ret = 0; - -@@ -1409,7 +1408,7 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - var->yoffset = info->var.yoffset; - var->xoffset = info->var.xoffset; - fb_set_var(info, var); -- ops->var = info->var; -+ par->var = info->var; - vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); - vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; - if (vc->vc_font.charcount == 256) { -@@ -1425,8 +1424,8 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - if (!*vc->uni_pagedict_loc) - con_copy_unimap(vc, svc); - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - ret = vc_resize(vc, cols, rows); -@@ -1438,16 +1437,16 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - static __inline__ void ywrap_up(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll += count; - if (p->yscroll >= p->vrows) /* Deal with wrap */ - p->yscroll -= p->vrows; -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode |= FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode |= FB_VMODE_YWRAP; -+ par->update_start(info); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) - scrollback_max = scrollback_phys_max; -@@ -1457,16 +1456,16 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) - static __inline__ void ywrap_down(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll -= count; - if (p->yscroll < 0) /* Deal with wrap */ - p->yscroll += p->vrows; -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode |= FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode |= FB_VMODE_YWRAP; -+ par->update_start(info); - scrollback_max -= count; - if (scrollback_max < 0) - scrollback_max = 0; -@@ -1477,19 +1476,19 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - p->yscroll += count; - if (p->yscroll > p->vrows - vc->vc_rows) { -- ops->bmove(vc, info, p->vrows - vc->vc_rows, -+ par->bmove(vc, info, p->vrows - vc->vc_rows, - 0, 0, 0, vc->vc_rows, vc->vc_cols); - p->yscroll -= p->vrows - vc->vc_rows; - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1500,7 +1499,7 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll += count; -@@ -1510,10 +1509,10 @@ static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - fbcon_redraw_move(vc, p, t + count, vc->vc_rows - count, t); - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1525,19 +1524,19 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - p->yscroll -= count; - if (p->yscroll < 0) { -- ops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -+ par->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, - 0, vc->vc_rows, vc->vc_cols); - p->yscroll += p->vrows - vc->vc_rows; - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1548,7 +1547,7 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll -= count; -@@ -1558,10 +1557,10 @@ static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - fbcon_redraw_move(vc, p, t, vc->vc_rows - count, t + count); - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1610,7 +1609,7 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - unsigned short *d = (unsigned short *) - (vc->vc_origin + vc->vc_size_row * line); - unsigned short *s = d + offset; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - while (count--) { - unsigned short *start = s; -@@ -1623,8 +1622,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - - if (c == scr_readw(d)) { - if (s > start) { -- ops->bmove(vc, info, line + ycount, x, -- line, x, 1, s-start); -+ par->bmove(vc, info, line + ycount, x, -+ line, x, 1, s - start); - x += s - start + 1; - start = s + 1; - } else { -@@ -1639,8 +1638,7 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - d++; - } while (s < le); - if (s > start) -- ops->bmove(vc, info, line + ycount, x, line, x, 1, -- s-start); -+ par->bmove(vc, info, line + ycount, x, line, x, 1, s - start); - console_conditional_schedule(); - if (ycount > 0) - line++; -@@ -1711,7 +1709,7 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - int dy, int dx, int height, int width, u_int y_break) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u_int b; - - if (sy < y_break && sy + height > y_break) { -@@ -1745,8 +1743,7 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - } - return; - } -- ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, -- height, width); -+ par->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, height, width); - } - - static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, -@@ -1973,15 +1970,13 @@ static void updatescrollmode_accel(struct fbcon_display *p, - struct vc_data *vc) - { - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int cap = info->flags; - u16 t = 0; -- int ypan = FBCON_SWAP(ops->rotate, info->fix.ypanstep, -- info->fix.xpanstep); -- int ywrap = FBCON_SWAP(ops->rotate, info->fix.ywrapstep, t); -- int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -- int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, -- info->var.xres_virtual); -+ int ypan = FBCON_SWAP(par->rotate, info->fix.ypanstep, info->fix.xpanstep); -+ int ywrap = FBCON_SWAP(par->rotate, info->fix.ywrapstep, t); -+ int yres = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); -+ int vyres = FBCON_SWAP(par->rotate, info->var.yres_virtual, info->var.xres_virtual); - int good_pan = (cap & FBINFO_HWACCEL_YPAN) && - divides(ypan, vc->vc_font.height) && vyres > yres; - int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) && -@@ -2014,11 +2009,10 @@ static void updatescrollmode(struct fbcon_display *p, - struct fb_info *info, - struct vc_data *vc) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int fh = vc->vc_font.height; -- int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -- int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, -- info->var.xres_virtual); -+ int yres = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); -+ int vyres = FBCON_SWAP(par->rotate, info->var.yres_virtual, info->var.xres_virtual); - - p->vrows = vyres/fh; - if (yres > (fh * (vc->vc_rows + 1))) -@@ -2037,7 +2031,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - unsigned int height, bool from_user) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_var_screeninfo var = info->var; - int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh; -@@ -2060,12 +2054,10 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - return -EINVAL; - } - -- virt_w = FBCON_SWAP(ops->rotate, width, height); -- virt_h = FBCON_SWAP(ops->rotate, height, width); -- virt_fw = FBCON_SWAP(ops->rotate, vc->vc_font.width, -- vc->vc_font.height); -- virt_fh = FBCON_SWAP(ops->rotate, vc->vc_font.height, -- vc->vc_font.width); -+ virt_w = FBCON_SWAP(par->rotate, width, height); -+ virt_h = FBCON_SWAP(par->rotate, height, width); -+ virt_fw = FBCON_SWAP(par->rotate, vc->vc_font.width, vc->vc_font.height); -+ virt_fh = FBCON_SWAP(par->rotate, vc->vc_font.height, vc->vc_font.width); - var.xres = virt_w * virt_fw; - var.yres = virt_h * virt_fh; - x_diff = info->var.xres - var.xres; -@@ -2091,7 +2083,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - fb_set_var(info, &var); - } - var_to_display(p, &info->var, info); -- ops->var = info->var; -+ par->var = info->var; - } - updatescrollmode(p, info, vc); - return 0; -@@ -2100,13 +2092,13 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - static bool fbcon_switch(struct vc_data *vc) - { - struct fb_info *info, *old_info = NULL; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_var_screeninfo var; - int i, ret, prev_console; - - info = fbcon_info_from_console(vc->vc_num); -- ops = info->fbcon_par; -+ par = info->fbcon_par; - - if (logo_shown >= 0) { - struct vc_data *conp2 = vc_cons[logo_shown].d; -@@ -2117,7 +2109,7 @@ static bool fbcon_switch(struct vc_data *vc) - logo_shown = FBCON_LOGO_CANSHOW; - } - -- prev_console = ops->currcon; -+ prev_console = par->currcon; - if (prev_console != -1) - old_info = fbcon_info_from_console(prev_console); - /* -@@ -2130,9 +2122,9 @@ static bool fbcon_switch(struct vc_data *vc) - */ - fbcon_for_each_registered_fb(i) { - if (fbcon_registered_fb[i]->fbcon_par) { -- struct fbcon_ops *o = fbcon_registered_fb[i]->fbcon_par; -+ struct fbcon_par *par = fbcon_registered_fb[i]->fbcon_par; - -- o->currcon = vc->vc_num; -+ par->currcon = vc->vc_num; - } - } - memset(&var, 0, sizeof(struct fb_var_screeninfo)); -@@ -2146,7 +2138,7 @@ static bool fbcon_switch(struct vc_data *vc) - info->var.activate = var.activate; - var.vmode |= info->var.vmode & ~FB_VMODE_MASK; - fb_set_var(info, &var); -- ops->var = info->var; -+ par->var = info->var; - - if (old_info != NULL && (old_info != info || - info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { -@@ -2163,17 +2155,16 @@ static bool fbcon_switch(struct vc_data *vc) - fbcon_del_cursor_work(old_info); - } - -- if (!fbcon_is_active(vc, info) || -- ops->blank_state != FB_BLANK_UNBLANK) -+ if (!fbcon_is_active(vc, info) || par->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else - fbcon_add_cursor_work(info); - - set_blitting_type(vc, info); -- ops->cursor_reset = 1; -+ par->cursor_reset = 1; - -- if (ops->rotate_font && ops->rotate_font(info, vc)) { -- ops->rotate = FB_ROTATE_UR; -+ if (par->rotate_font && par->rotate_font(info, vc)) { -+ par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } - -@@ -2204,8 +2195,8 @@ static bool fbcon_switch(struct vc_data *vc) - scrollback_current = 0; - - if (fbcon_is_active(vc, info)) { -- ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; -- ops->update_start(info); -+ par->var.xoffset = par->var.yoffset = p->yscroll = 0; -+ par->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2214,7 +2205,7 @@ static bool fbcon_switch(struct vc_data *vc) - if (logo_shown == FBCON_LOGO_DRAW) { - - logo_shown = fg_console; -- fb_show_logo(info, ops->rotate); -+ fb_show_logo(info, par->rotate); - update_region(vc, - vc->vc_origin + vc->vc_size_row * vc->vc_top, - vc->vc_size_row * (vc->vc_bottom - -@@ -2243,27 +2234,27 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - bool mode_switch) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (mode_switch) { - struct fb_var_screeninfo var = info->var; - -- ops->graphics = 1; -+ par->graphics = 1; - - if (!blank) { - var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE | - FB_ACTIVATE_KD_TEXT; - fb_set_var(info, &var); -- ops->graphics = 0; -- ops->var = info->var; -+ par->graphics = 0; -+ par->var = info->var; - } - } - - if (fbcon_is_active(vc, info)) { -- if (ops->blank_state != blank) { -- ops->blank_state = blank; -+ if (par->blank_state != blank) { -+ par->blank_state = blank; - fbcon_cursor(vc, !blank); -- ops->cursor_flash = (!blank); -+ par->cursor_flash = (!blank); - - if (fb_blank(info, blank)) - fbcon_generic_blank(vc, info, blank); -@@ -2273,8 +2264,7 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - update_screen(vc); - } - -- if (mode_switch || !fbcon_is_active(vc, info) || -- ops->blank_state != FB_BLANK_UNBLANK) -+ if (mode_switch || !fbcon_is_active(vc, info) || par->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else - fbcon_add_cursor_work(info); -@@ -2285,10 +2275,10 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - static void fbcon_debug_enter(struct vc_data *vc) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->save_graphics = ops->graphics; -- ops->graphics = 0; -+ par->save_graphics = par->graphics; -+ par->graphics = 0; - if (info->fbops->fb_debug_enter) - info->fbops->fb_debug_enter(info); - fbcon_set_palette(vc, color_table); -@@ -2297,9 +2287,9 @@ static void fbcon_debug_enter(struct vc_data *vc) - static void fbcon_debug_leave(struct vc_data *vc) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->graphics = ops->save_graphics; -+ par->graphics = par->save_graphics; - if (info->fbops->fb_debug_leave) - info->fbops->fb_debug_leave(info); - } -@@ -2434,7 +2424,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount, - const u8 * data, int userfont) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - int resize, ret, old_userfont, old_width, old_height, old_charcount; - u8 *old_data = vc->vc_font.data; -@@ -2460,8 +2450,8 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount, - if (resize) { - int cols, rows; - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= w; - rows /= h; - ret = vc_resize(vc, cols, rows); -@@ -2660,11 +2650,11 @@ static void fbcon_invert_region(struct vc_data *vc, u16 * p, int cnt) - void fbcon_suspended(struct fb_info *info) - { - struct vc_data *vc = NULL; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - - /* Clear cursor, restore saved data */ - fbcon_cursor(vc, false); -@@ -2673,27 +2663,27 @@ void fbcon_suspended(struct fb_info *info) - void fbcon_resumed(struct fb_info *info) - { - struct vc_data *vc; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - - update_screen(vc); - } - - static void fbcon_modechanged(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int rows, cols; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - if (vc->vc_mode != KD_TEXT || -- fbcon_info_from_console(ops->currcon) != info) -+ fbcon_info_from_console(par->currcon) != info) - return; - - p = &fb_display[vc->vc_num]; -@@ -2701,8 +2691,8 @@ static void fbcon_modechanged(struct fb_info *info) - - if (con_is_visible(vc)) { - var_to_display(p, &info->var, info); -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -2711,8 +2701,8 @@ static void fbcon_modechanged(struct fb_info *info) - scrollback_current = 0; - - if (fbcon_is_active(vc, info)) { -- ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; -- ops->update_start(info); -+ par->var.xoffset = par->var.yoffset = p->yscroll = 0; -+ par->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2722,12 +2712,12 @@ static void fbcon_modechanged(struct fb_info *info) - - static void fbcon_set_all_vcs(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int i, rows, cols, fg = -1; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; - - for (i = first_fb_vc; i <= last_fb_vc; i++) { -@@ -2744,8 +2734,8 @@ static void fbcon_set_all_vcs(struct fb_info *info) - p = &fb_display[vc->vc_num]; - set_blitting_type(vc, info); - var_to_display(p, &info->var, info); -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -2768,13 +2758,13 @@ EXPORT_SYMBOL(fbcon_update_vcs); - /* let fbcon check if it supports a new screen resolution */ - int fbcon_modechange_possible(struct fb_info *info, struct fb_var_screeninfo *var) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - unsigned int i; - - WARN_CONSOLE_UNLOCKED(); - -- if (!ops) -+ if (!par) - return 0; - - /* prevent setting a screen size which is smaller than font size */ -@@ -3072,15 +3062,14 @@ int fbcon_fb_registered(struct fb_info *info) - - void fbcon_fb_blanked(struct fb_info *info, int blank) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; - -- vc = vc_cons[ops->currcon].d; -- if (vc->vc_mode != KD_TEXT || -- fbcon_info_from_console(ops->currcon) != info) -+ vc = vc_cons[par->currcon].d; -+ if (vc->vc_mode != KD_TEXT || fbcon_info_from_console(par->currcon) != info) - return; - - if (con_is_visible(vc)) { -@@ -3089,7 +3078,7 @@ void fbcon_fb_blanked(struct fb_info *info, int blank) - else - do_unblank_screen(0); - } -- ops->blank_state = blank; -+ par->blank_state = blank; - } - - void fbcon_new_modelist(struct fb_info *info) -@@ -3279,7 +3268,7 @@ static ssize_t show_cursor_blink(struct device *device, - struct device_attribute *attr, char *buf) - { - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int idx, blink = -1; - - console_lock(); -@@ -3289,12 +3278,12 @@ static ssize_t show_cursor_blink(struct device *device, - goto err; - - info = fbcon_registered_fb[idx]; -- ops = info->fbcon_par; -+ par = info->fbcon_par; - -- if (!ops) -+ if (!par) - goto err; - -- blink = delayed_work_pending(&ops->cursor_work); -+ blink = delayed_work_pending(&par->cursor_work); - err: - console_unlock(); - return sysfs_emit(buf, "%d\n", blink); -diff --git a/drivers/video/fbdev/core/fbcon.h b/drivers/video/fbdev/core/fbcon.h -index 4d97e6d8a16a2..31ee2d5912219 100644 ---- a/drivers/video/fbdev/core/fbcon.h -+++ b/drivers/video/fbdev/core/fbcon.h -@@ -51,7 +51,7 @@ struct fbcon_display { - const struct fb_videomode *mode; - }; - --struct fbcon_ops { -+struct fbcon_par { - void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width); - void (*clear)(struct vc_data *vc, struct fb_info *info, int sy, -@@ -186,7 +186,7 @@ static inline u_short fb_scrollmode(struct fbcon_display *fb) - #ifdef CONFIG_FB_TILEBLITTING - extern void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info); - #endif --extern void fbcon_set_bitops(struct fbcon_ops *ops); -+extern void fbcon_set_bitops(struct fbcon_par *par); - extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); - - #define FBCON_ATTRIBUTE_UNDERLINE 1 -@@ -225,7 +225,7 @@ static inline int get_attribute(struct fb_info *info, u16 c) - (i == FB_ROTATE_UR || i == FB_ROTATE_UD) ? _r : _v; }) - - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION --extern void fbcon_set_rotate(struct fbcon_ops *ops); -+extern void fbcon_set_rotate(struct fbcon_par *par); - #else - #define fbcon_set_rotate(x) do {} while(0) - #endif /* CONFIG_FRAMEBUFFER_CONSOLE_ROTATION */ -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index 89ef4ba7e8672..2ba8ec4c3e2bc 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -63,9 +63,9 @@ static void ccw_update_attr(u8 *dst, u8 *src, int attribute, - static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - - area.sx = sy * vc->vc_font.height; - area.sy = vyres - ((sx + width) * vc->vc_font.width); -@@ -80,9 +80,9 @@ static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - - region.color = bg; - region.dx = sy * vc->vc_font.height; -@@ -99,13 +99,13 @@ static inline void ccw_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = (vc->vc_font.height + 7) >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ccw_update_attr(buf, src, attr, vc); -@@ -130,7 +130,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.height + 7)/8; - u32 cellsize = width * vc->vc_font.width; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -139,9 +139,9 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, - u32 cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -221,28 +221,28 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.height + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -251,49 +251,49 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.width, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - ccw_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.width || -- ops->cursor_state.image.width != vc->vc_font.height || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.width; -- ops->cursor_state.image.width = vc->vc_font.height; -+ if (par->cursor_state.image.height != vc->vc_font.width || -+ par->cursor_state.image.width != vc->vc_font.height || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.width; -+ par->cursor_state.image.width = vc->vc_font.height; - cursor.set |= FB_CUR_SETSIZE; - } - - dx = y * vc->vc_font.height; - dy = vyres - ((vc->state.x + 1) * vc->vc_font.width); - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *tmp, *mask = kmalloc_array(w, vc->vc_font.width, - GFP_ATOMIC); - int cur_height, size, i = 0; -@@ -309,13 +309,13 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - return; - } - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -348,19 +348,19 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - kfree(tmp); - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -370,32 +370,32 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int ccw_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 yoffset; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - int err; - -- yoffset = (vyres - info->var.yres) - ops->var.xoffset; -- ops->var.xoffset = ops->var.yoffset; -- ops->var.yoffset = yoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ yoffset = (vyres - info->var.yres) - par->var.xoffset; -+ par->var.xoffset = par->var.yoffset; -+ par->var.yoffset = yoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_ccw(struct fbcon_ops *ops) -+void fbcon_rotate_ccw(struct fbcon_par *par) - { -- ops->bmove = ccw_bmove; -- ops->clear = ccw_clear; -- ops->putcs = ccw_putcs; -- ops->clear_margins = ccw_clear_margins; -- ops->cursor = ccw_cursor; -- ops->update_start = ccw_update_start; -+ par->bmove = ccw_bmove; -+ par->clear = ccw_clear; -+ par->putcs = ccw_putcs; -+ par->clear_margins = ccw_clear_margins; -+ par->cursor = ccw_cursor; -+ par->update_start = ccw_update_start; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index b9dac7940fb77..4bd22d5ee5f41 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -48,9 +48,9 @@ static void cw_update_attr(u8 *dst, u8 *src, int attribute, - static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - area.sx = vxres - ((sy + height) * vc->vc_font.height); - area.sy = sx * vc->vc_font.width; -@@ -65,9 +65,9 @@ static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - region.color = bg; - region.dx = vxres - ((sy + height) * vc->vc_font.height); -@@ -84,13 +84,13 @@ static inline void cw_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = (vc->vc_font.height + 7) >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s++) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s++) & charmask) * cellsize; - - if (attr) { - cw_update_attr(buf, src, attr, vc); -@@ -115,7 +115,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.height + 7)/8; - u32 cellsize = width * vc->vc_font.width; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -124,9 +124,9 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, - u32 cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -204,28 +204,28 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.height + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -234,49 +234,49 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.width, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - cw_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.width || -- ops->cursor_state.image.width != vc->vc_font.height || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.width; -- ops->cursor_state.image.width = vc->vc_font.height; -+ if (par->cursor_state.image.height != vc->vc_font.width || -+ par->cursor_state.image.width != vc->vc_font.height || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.width; -+ par->cursor_state.image.width = vc->vc_font.height; - cursor.set |= FB_CUR_SETSIZE; - } - - dx = vxres - ((y * vc->vc_font.height) + vc->vc_font.height); - dy = vc->state.x * vc->vc_font.width; - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *tmp, *mask = kmalloc_array(w, vc->vc_font.width, - GFP_ATOMIC); - int cur_height, size, i = 0; -@@ -292,13 +292,13 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - return; - } - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -331,19 +331,19 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - kfree(tmp); - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -353,32 +353,32 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int cw_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -- u32 vxres = GETVXRES(ops->p, info); -+ struct fbcon_par *par = info->fbcon_par; -+ u32 vxres = GETVXRES(par->p, info); - u32 xoffset; - int err; - -- xoffset = vxres - (info->var.xres + ops->var.yoffset); -- ops->var.yoffset = ops->var.xoffset; -- ops->var.xoffset = xoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ xoffset = vxres - (info->var.xres + par->var.yoffset); -+ par->var.yoffset = par->var.xoffset; -+ par->var.xoffset = xoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_cw(struct fbcon_ops *ops) -+void fbcon_rotate_cw(struct fbcon_par *par) - { -- ops->bmove = cw_bmove; -- ops->clear = cw_clear; -- ops->putcs = cw_putcs; -- ops->clear_margins = cw_clear_margins; -- ops->cursor = cw_cursor; -- ops->update_start = cw_update_start; -+ par->bmove = cw_bmove; -+ par->clear = cw_clear; -+ par->putcs = cw_putcs; -+ par->clear_margins = cw_clear_margins; -+ par->cursor = cw_cursor; -+ par->update_start = cw_update_start; - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c -index ec3c883400f7b..380b2746451a1 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.c -+++ b/drivers/video/fbdev/core/fbcon_rotate.c -@@ -20,32 +20,32 @@ - - static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int len, err = 0; - int s_cellsize, d_cellsize, i; - const u8 *src; - u8 *dst; - -- if (vc->vc_font.data == ops->fontdata && -- ops->p->con_rotate == ops->cur_rotate) -+ if (vc->vc_font.data == par->fontdata && -+ par->p->con_rotate == par->cur_rotate) - goto finished; - -- src = ops->fontdata = vc->vc_font.data; -- ops->cur_rotate = ops->p->con_rotate; -+ src = par->fontdata = vc->vc_font.data; -+ par->cur_rotate = par->p->con_rotate; - len = vc->vc_font.charcount; - s_cellsize = ((vc->vc_font.width + 7)/8) * - vc->vc_font.height; - d_cellsize = s_cellsize; - -- if (ops->rotate == FB_ROTATE_CW || -- ops->rotate == FB_ROTATE_CCW) -+ if (par->rotate == FB_ROTATE_CW || -+ par->rotate == FB_ROTATE_CCW) - d_cellsize = ((vc->vc_font.height + 7)/8) * - vc->vc_font.width; - - if (info->fbops->fb_sync) - info->fbops->fb_sync(info); - -- if (ops->fd_size < d_cellsize * len) { -+ if (par->fd_size < d_cellsize * len) { - dst = kmalloc_array(len, d_cellsize, GFP_KERNEL); - - if (dst == NULL) { -@@ -53,15 +53,15 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - goto finished; - } - -- ops->fd_size = d_cellsize * len; -- kfree(ops->fontbuffer); -- ops->fontbuffer = dst; -+ par->fd_size = d_cellsize * len; -+ kfree(par->fontbuffer); -+ par->fontbuffer = dst; - } - -- dst = ops->fontbuffer; -- memset(dst, 0, ops->fd_size); -+ dst = par->fontbuffer; -+ memset(dst, 0, par->fd_size); - -- switch (ops->rotate) { -+ switch (par->rotate) { - case FB_ROTATE_UD: - for (i = len; i--; ) { - rotate_ud(src, dst, vc->vc_font.width, -@@ -93,19 +93,19 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - return err; - } - --void fbcon_set_rotate(struct fbcon_ops *ops) -+void fbcon_set_rotate(struct fbcon_par *par) - { -- ops->rotate_font = fbcon_rotate_font; -+ par->rotate_font = fbcon_rotate_font; - -- switch(ops->rotate) { -+ switch (par->rotate) { - case FB_ROTATE_CW: -- fbcon_rotate_cw(ops); -+ fbcon_rotate_cw(par); - break; - case FB_ROTATE_UD: -- fbcon_rotate_ud(ops); -+ fbcon_rotate_ud(par); - break; - case FB_ROTATE_CCW: -- fbcon_rotate_ccw(ops); -+ fbcon_rotate_ccw(par); - break; - } - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.h b/drivers/video/fbdev/core/fbcon_rotate.h -index 01cbe303b8a29..48305e1a07631 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.h -+++ b/drivers/video/fbdev/core/fbcon_rotate.h -@@ -90,7 +90,7 @@ static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height) - } - } - --extern void fbcon_rotate_cw(struct fbcon_ops *ops); --extern void fbcon_rotate_ud(struct fbcon_ops *ops); --extern void fbcon_rotate_ccw(struct fbcon_ops *ops); -+extern void fbcon_rotate_cw(struct fbcon_par *par); -+extern void fbcon_rotate_ud(struct fbcon_par *par); -+extern void fbcon_rotate_ccw(struct fbcon_par *par); - #endif -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 0af7913a2abdc..14b40e2bf323f 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -48,10 +48,10 @@ static void ud_update_attr(u8 *dst, u8 *src, int attribute, - static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - area.sy = vyres - ((sy + height) * vc->vc_font.height); - area.sx = vxres - ((sx + width) * vc->vc_font.width); -@@ -66,10 +66,10 @@ static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - region.color = bg; - region.dy = vyres - ((sy + height) * vc->vc_font.height); -@@ -86,13 +86,13 @@ static inline void ud_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = vc->vc_font.width >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ud_update_attr(buf, src, attr, vc); -@@ -119,7 +119,7 @@ static inline void ud_putcs_unaligned(struct vc_data *vc, - struct fb_image *image, u8 *buf, - u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 shift_low = 0, mod = vc->vc_font.width % 8; - u32 shift_high = 8; -@@ -127,7 +127,7 @@ static inline void ud_putcs_unaligned(struct vc_data *vc, - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ud_update_attr(buf, src, attr, vc); -@@ -152,7 +152,7 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.width + 7)/8; - u32 cellsize = width * vc->vc_font.height; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -161,10 +161,10 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, - u32 mod = vc->vc_font.width % 8, cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -251,29 +251,29 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.width + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.height)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.height)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -282,49 +282,49 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - ud_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.height || -- ops->cursor_state.image.width != vc->vc_font.width || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.height; -- ops->cursor_state.image.width = vc->vc_font.width; -+ if (par->cursor_state.image.height != vc->vc_font.height || -+ par->cursor_state.image.width != vc->vc_font.width || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.height; -+ par->cursor_state.image.width = vc->vc_font.width; - cursor.set |= FB_CUR_SETSIZE; - } - - dy = vyres - ((y * vc->vc_font.height) + vc->vc_font.height); - dx = vxres - ((vc->state.x * vc->vc_font.width) + vc->vc_font.width); - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *mask = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - int cur_height, size, i = 0; - u8 msk = 0xff; -@@ -332,13 +332,13 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (!mask) - return; - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -371,19 +371,19 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - mask[i++] = ~msk; - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -393,36 +393,36 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int ud_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int xoffset, yoffset; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - int err; - -- xoffset = vxres - info->var.xres - ops->var.xoffset; -- yoffset = vyres - info->var.yres - ops->var.yoffset; -+ xoffset = vxres - info->var.xres - par->var.xoffset; -+ yoffset = vyres - info->var.yres - par->var.yoffset; - if (yoffset < 0) - yoffset += vyres; -- ops->var.xoffset = xoffset; -- ops->var.yoffset = yoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ par->var.xoffset = xoffset; -+ par->var.yoffset = yoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_ud(struct fbcon_ops *ops) -+void fbcon_rotate_ud(struct fbcon_par *par) - { -- ops->bmove = ud_bmove; -- ops->clear = ud_clear; -- ops->putcs = ud_putcs; -- ops->clear_margins = ud_clear_margins; -- ops->cursor = ud_cursor; -- ops->update_start = ud_update_start; -+ par->bmove = ud_bmove; -+ par->clear = ud_clear; -+ par->putcs = ud_putcs; -+ par->clear_margins = ud_clear_margins; -+ par->cursor = ud_cursor; -+ par->update_start = ud_update_start; - } -diff --git a/drivers/video/fbdev/core/softcursor.c b/drivers/video/fbdev/core/softcursor.c -index 29e5b21cf373e..900788c059153 100644 ---- a/drivers/video/fbdev/core/softcursor.c -+++ b/drivers/video/fbdev/core/softcursor.c -@@ -21,7 +21,7 @@ - - int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned int scan_align = info->pixmap.scan_align - 1; - unsigned int buf_align = info->pixmap.buf_align - 1; - unsigned int i, size, dsize, s_pitch, d_pitch; -@@ -34,19 +34,19 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) - s_pitch = (cursor->image.width + 7) >> 3; - dsize = s_pitch * cursor->image.height; - -- if (dsize + sizeof(struct fb_image) != ops->cursor_size) { -- kfree(ops->cursor_src); -- ops->cursor_size = dsize + sizeof(struct fb_image); -+ if (dsize + sizeof(struct fb_image) != par->cursor_size) { -+ kfree(par->cursor_src); -+ par->cursor_size = dsize + sizeof(struct fb_image); - -- ops->cursor_src = kmalloc(ops->cursor_size, GFP_ATOMIC); -- if (!ops->cursor_src) { -- ops->cursor_size = 0; -+ par->cursor_src = kmalloc(par->cursor_size, GFP_ATOMIC); -+ if (!par->cursor_src) { -+ par->cursor_size = 0; - return -ENOMEM; - } - } - -- src = ops->cursor_src + sizeof(struct fb_image); -- image = (struct fb_image *)ops->cursor_src; -+ src = par->cursor_src + sizeof(struct fb_image); -+ image = (struct fb_image *)par->cursor_src; - *image = cursor->image; - d_pitch = (s_pitch + scan_align) & ~scan_align; - -diff --git a/drivers/video/fbdev/core/tileblit.c b/drivers/video/fbdev/core/tileblit.c -index d342b90c42b7f..4428f2bcd3f8c 100644 ---- a/drivers/video/fbdev/core/tileblit.c -+++ b/drivers/video/fbdev/core/tileblit.c -@@ -151,34 +151,34 @@ static void tile_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - - static int tile_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int err; - -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - - void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) - { - struct fb_tilemap map; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->bmove = tile_bmove; -- ops->clear = tile_clear; -- ops->putcs = tile_putcs; -- ops->clear_margins = tile_clear_margins; -- ops->cursor = tile_cursor; -- ops->update_start = tile_update_start; -+ par->bmove = tile_bmove; -+ par->clear = tile_clear; -+ par->putcs = tile_putcs; -+ par->clear_margins = tile_clear_margins; -+ par->cursor = tile_cursor; -+ par->update_start = tile_update_start; - -- if (ops->p) { -+ if (par->p) { - map.width = vc->vc_font.width; - map.height = vc->vc_font.height; - map.depth = 1; - map.length = vc->vc_font.charcount; -- map.data = ops->p->fontdata; -+ map.data = par->p->fontdata; - info->tileops->fb_settile(info, &map); - } - } --- -2.51.0 - diff --git a/queue-6.12/fbcon-set-rotate_font-callback-with-related-callback.patch b/queue-6.12/fbcon-set-rotate_font-callback-with-related-callback.patch deleted file mode 100644 index 147698910c..0000000000 --- a/queue-6.12/fbcon-set-rotate_font-callback-with-related-callback.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 2fe21df6ac0e5f7e1b1c9238912478c1f262c32c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:43 +0200 -Subject: fbcon: Set rotate_font callback with related callbacks - -From: Thomas Zimmermann - -[ Upstream commit 9cfd09402eb45f1b14b60668fd7c628445efdd8d ] - -The field struct fbcon_par.rotate_font points to fbcon_rotate_font() if -the console is rotated. Set the callback in the same place as the other -callbacks. Prepares for declaring all fbcon callbacks in a dedicated -struct type. - -If not rotated, fbcon_set_bitops() still clears the callback to NULL. - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-4-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/fbcon_ccw.c | 1 + - drivers/video/fbdev/core/fbcon_cw.c | 1 + - drivers/video/fbdev/core/fbcon_rotate.c | 4 +--- - drivers/video/fbdev/core/fbcon_rotate.h | 3 +++ - drivers/video/fbdev/core/fbcon_ud.c | 1 + - 5 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index 2ba8ec4c3e2bc..ba744b67a4fd9 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -398,4 +398,5 @@ void fbcon_rotate_ccw(struct fbcon_par *par) - par->clear_margins = ccw_clear_margins; - par->cursor = ccw_cursor; - par->update_start = ccw_update_start; -+ par->rotate_font = fbcon_rotate_font; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index 4bd22d5ee5f41..974bd9d9b7702 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -381,4 +381,5 @@ void fbcon_rotate_cw(struct fbcon_par *par) - par->clear_margins = cw_clear_margins; - par->cursor = cw_cursor; - par->update_start = cw_update_start; -+ par->rotate_font = fbcon_rotate_font; - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c -index 380b2746451a1..0c7cac71a9c21 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.c -+++ b/drivers/video/fbdev/core/fbcon_rotate.c -@@ -18,7 +18,7 @@ - #include "fbcon.h" - #include "fbcon_rotate.h" - --static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) -+int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - { - struct fbcon_par *par = info->fbcon_par; - int len, err = 0; -@@ -95,8 +95,6 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - - void fbcon_set_rotate(struct fbcon_par *par) - { -- par->rotate_font = fbcon_rotate_font; -- - switch (par->rotate) { - case FB_ROTATE_CW: - fbcon_rotate_cw(par); -diff --git a/drivers/video/fbdev/core/fbcon_rotate.h b/drivers/video/fbdev/core/fbcon_rotate.h -index 48305e1a07631..784f3231a958f 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.h -+++ b/drivers/video/fbdev/core/fbcon_rotate.h -@@ -90,7 +90,10 @@ static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height) - } - } - -+int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc); -+ - extern void fbcon_rotate_cw(struct fbcon_par *par); - extern void fbcon_rotate_ud(struct fbcon_par *par); - extern void fbcon_rotate_ccw(struct fbcon_par *par); -+ - #endif -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 14b40e2bf323f..1a214a4d538fb 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -425,4 +425,5 @@ void fbcon_rotate_ud(struct fbcon_par *par) - par->clear_margins = ud_clear_margins; - par->cursor = ud_cursor; - par->update_start = ud_update_start; -+ par->rotate_font = fbcon_rotate_font; - } --- -2.51.0 - diff --git a/queue-6.12/printk-vt-fbcon-remove-console_conditional_schedule.patch b/queue-6.12/printk-vt-fbcon-remove-console_conditional_schedule.patch deleted file mode 100644 index 2a880d8120..0000000000 --- a/queue-6.12/printk-vt-fbcon-remove-console_conditional_schedule.patch +++ /dev/null @@ -1,176 +0,0 @@ -From 1a2e9dd9b43f1731d59e6f4a3f66207623db5f48 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jan 2026 19:08:36 +0100 -Subject: printk, vt, fbcon: Remove console_conditional_schedule() - -From: Sebastian Andrzej Siewior - -[ Upstream commit 8e9bf8b9e8c0a3e1ef16dd48260a113f65ed01d2 ] - -do_con_write(), fbcon_redraw.*() invoke console_conditional_schedule() -which is a conditional scheduling point based on printk's internal -variables console_may_schedule. It may only be used if the console lock -is acquired for instance via console_lock() or console_trylock(). - -Prinkt sets the internal variable to 1 (and allows to schedule) -if the console lock has been acquired via console_lock(). The trylock -does not allow it. - -The console_conditional_schedule() invocation in do_con_write() is -invoked shortly before console_unlock(). -The console_conditional_schedule() invocation in fbcon_redraw.*() -original from fbcon_scroll() / vt's con_scroll() which originate from a -line feed. - -In console_unlock() the variable is set to 0 (forbids to schedule) and -it tries to schedule while making progress printing. This is brand new -compared to when console_conditional_schedule() was added in v2.4.9.11. - -In v2.6.38-rc3, console_unlock() (started its existence) iterated over -all consoles and flushed them with disabled interrupts. A scheduling -attempt here was not possible, it relied that a long print scheduled -before console_unlock(). - -Since commit 8d91f8b15361d ("printk: do cond_resched() between lines -while outputting to consoles"), which appeared in v4.5-rc1, -console_unlock() attempts to schedule if it was allowed to schedule -while during console_lock(). Each record is idealy one line so after -every line feed. - -This console_conditional_schedule() is also only relevant on -PREEMPT_NONE and PREEMPT_VOLUNTARY builds. In other configurations -cond_resched() becomes a nop and has no impact. - -I'm bringing this all up just proof that it is not required anymore. It -becomes a problem on a PREEMPT_RT build with debug code enabled because -that might_sleep() in cond_resched() remains and triggers a warnings. -This is due to - - legacy_kthread_func-> console_flush_one_record -> vt_console_print-> lf - -> con_scroll -> fbcon_scroll - -and vt_console_print() acquires a spinlock_t which does not allow a -voluntary schedule. There is no need to fb_scroll() to schedule since -console_flush_one_record() attempts to schedule after each line. -!PREEMPT_RT is not affected because the legacy printing thread is only -enabled on PREEMPT_RT builds. - -Therefore I suggest to remove console_conditional_schedule(). - -Cc: Simona Vetter -Cc: Helge Deller -Cc: linux-fbdev@vger.kernel.org -Cc: dri-devel@lists.freedesktop.org -Fixes: 5f53ca3ff83b4 ("printk: Implement legacy printer kthread for PREEMPT_RT") -Signed-off-by: Sebastian Andrzej Siewior -Acked-by: Greg Kroah-Hartman -Acked-by: Petr Mladek # from printk() POV -Signed-off-by: Helge Deller -Signed-off-by: Sasha Levin ---- - drivers/tty/vt/vt.c | 1 - - drivers/video/fbdev/core/fbcon.c | 6 ------ - include/linux/console.h | 1 - - kernel/printk/printk.c | 16 ---------------- - 4 files changed, 24 deletions(-) - -diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c -index 5b09ce71345b6..b5dff1344a441 100644 ---- a/drivers/tty/vt/vt.c -+++ b/drivers/tty/vt/vt.c -@@ -3100,7 +3100,6 @@ static int do_con_write(struct tty_struct *tty, const u8 *buf, int count) - goto rescan_last_byte; - } - con_flush(vc, &draw); -- console_conditional_schedule(); - notify_update(vc); - console_unlock(); - return n; -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 3cc68324f297b..350c4d80b745d 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -1593,12 +1593,10 @@ static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p, - start = s; - } - } -- console_conditional_schedule(); - s++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, dy, x); -- console_conditional_schedule(); - dy++; - } - } -@@ -1634,14 +1632,12 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - } - - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, - s - start); -- console_conditional_schedule(); - if (ycount > 0) - line++; - else { -@@ -1689,13 +1685,11 @@ static void fbcon_redraw(struct vc_data *vc, int line, int count, int offset) - } - } - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, line, x); -- console_conditional_schedule(); - if (offset > 0) - line++; - else { -diff --git a/include/linux/console.h b/include/linux/console.h -index eba367bf605da..409bfd5ac88a1 100644 ---- a/include/linux/console.h -+++ b/include/linux/console.h -@@ -629,7 +629,6 @@ extern int unregister_console(struct console *); - extern void console_lock(void); - extern int console_trylock(void); - extern void console_unlock(void); --extern void console_conditional_schedule(void); - extern void console_unblank(void); - extern void console_flush_on_panic(enum con_flush_mode mode); - extern struct tty_driver *console_device(int *); -diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index 3a91b739e8f30..95f49feeb29fe 100644 ---- a/kernel/printk/printk.c -+++ b/kernel/printk/printk.c -@@ -3280,22 +3280,6 @@ void console_unlock(void) - } - EXPORT_SYMBOL(console_unlock); - --/** -- * console_conditional_schedule - yield the CPU if required -- * -- * If the console code is currently allowed to sleep, and -- * if this CPU should yield the CPU to another task, do -- * so here. -- * -- * Must be called within console_lock();. -- */ --void __sched console_conditional_schedule(void) --{ -- if (console_may_schedule) -- cond_resched(); --} --EXPORT_SYMBOL(console_conditional_schedule); -- - void console_unblank(void) - { - bool found_unblank = false; --- -2.51.0 - diff --git a/queue-6.12/series b/queue-6.12/series index 1b3cf0c74d..27c0e89b6f 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -296,13 +296,6 @@ nvdimm-virtio_pmem-serialize-flush-requests.patch fs-nfs-fix-readdir-slow-start-regression.patch tracing-properly-process-error-handling-in-event_his.patch tracing-remove-duplicate-enable_event_str-and-disabl.patch -fbcon-fbcon_cursor_noblink-fbcon_cursor_blink.patch -fbcon-fbcon_is_inactive-fbcon_is_active.patch -fbcon-introduce-get_-fg-bg-_color.patch -fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch -fbcon-set-rotate_font-callback-with-related-callback.patch -fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch -printk-vt-fbcon-remove-console_conditional_schedule.patch fbdev-of_display_timing-fix-device-node-reference-le.patch fbdev-au1200fb-fix-a-memory-leak-in-au1200fb_drv_pro.patch clk-qcom-gcc-sm8550-use-floor-ops-for-sdcc-rcgs.patch diff --git a/queue-6.18/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch b/queue-6.18/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch deleted file mode 100644 index ad31011519..0000000000 --- a/queue-6.18/fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch +++ /dev/null @@ -1,432 +0,0 @@ -From 16e324db5edd1aec01b4629613209c8a2d936a91 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:44 +0200 -Subject: fbcon: Move fbcon callbacks into struct fbcon_bitops - -From: Thomas Zimmermann - -[ Upstream commit 217cb07be424d127293dc0b32dbd077ad37c24f6 ] - -Depending on rotation settings, fbcon sets different callback -functions in struct fbcon_par from within fbcon_set_bitops(). Declare -the callback functions in the new type struct fbcon_bitops. Then -only replace the single bitops pointer in struct fbcon_par. - -Keeping callbacks in constant instances of struct fbcon_bitops -makes it harder to exploit the callbacks. Also makes the code slightly -easier to maintain. - -For tile-based consoles, there's a separate instance of the bitops -structure. - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-5-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/bitblit.c | 17 ++++--- - drivers/video/fbdev/core/fbcon.c | 67 +++++++++++++++------------- - drivers/video/fbdev/core/fbcon.h | 7 ++- - drivers/video/fbdev/core/fbcon_ccw.c | 18 +++++--- - drivers/video/fbdev/core/fbcon_cw.c | 18 +++++--- - drivers/video/fbdev/core/fbcon_ud.c | 18 +++++--- - drivers/video/fbdev/core/tileblit.c | 16 ++++--- - 7 files changed, 94 insertions(+), 67 deletions(-) - -diff --git a/drivers/video/fbdev/core/bitblit.c b/drivers/video/fbdev/core/bitblit.c -index bed8ba18222b9..8b5819877469e 100644 ---- a/drivers/video/fbdev/core/bitblit.c -+++ b/drivers/video/fbdev/core/bitblit.c -@@ -409,15 +409,18 @@ static int bit_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops bit_fbcon_bitops = { -+ .bmove = bit_bmove, -+ .clear = bit_clear, -+ .putcs = bit_putcs, -+ .clear_margins = bit_clear_margins, -+ .cursor = bit_cursor, -+ .update_start = bit_update_start, -+}; -+ - void fbcon_set_bitops(struct fbcon_par *par) - { -- par->bmove = bit_bmove; -- par->clear = bit_clear; -- par->putcs = bit_putcs; -- par->clear_margins = bit_clear_margins; -- par->cursor = bit_cursor; -- par->update_start = bit_update_start; -- par->rotate_font = NULL; -+ par->bitops = &bit_fbcon_bitops; - - if (par->rotate) - fbcon_set_rotate(par); -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 2523d8b223dc1..413aa46228549 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -400,9 +400,9 @@ static void fb_flashcursor(struct work_struct *work) - - c = scr_readw((u16 *) vc->vc_pos); - enable = par->cursor_flash && !par->cursor_state.enable; -- par->cursor(vc, info, enable, -- get_fg_color(vc, info, c), -- get_bg_color(vc, info, c)); -+ par->bitops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - console_unlock(); - - queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -@@ -1157,7 +1157,7 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (logo) - fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); - -- if (par->rotate_font && par->rotate_font(info, vc)) { -+ if (par->bitops->rotate_font && par->bitops->rotate_font(info, vc)) { - par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } -@@ -1298,10 +1298,11 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - y_break = p->vrows - p->yscroll; - if (sy < y_break && sy + height - 1 >= y_break) { - u_int b = y_break - sy; -- par->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -- par->clear(vc, info, real_y(p, sy + b), sx, height - b, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy + b), sx, height - b, -+ width, fg, bg); - } else -- par->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); -+ par->bitops->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); - } - - static void fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, -@@ -1318,9 +1319,9 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- par->putcs(vc, info, s, count, real_y(p, ypos), xpos, -- get_fg_color(vc, info, scr_readw(s)), -- get_bg_color(vc, info, scr_readw(s))); -+ par->bitops->putcs(vc, info, s, count, real_y(p, ypos), xpos, -+ get_fg_color(vc, info, scr_readw(s)), -+ get_bg_color(vc, info, scr_readw(s))); - } - - static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) -@@ -1329,7 +1330,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) - struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- par->clear_margins(vc, info, margin_color, bottom_only); -+ par->bitops->clear_margins(vc, info, margin_color, bottom_only); - } - - static void fbcon_cursor(struct vc_data *vc, bool enable) -@@ -1350,12 +1351,12 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - - par->cursor_flash = enable; - -- if (!par->cursor) -+ if (!par->bitops->cursor) - return; - -- par->cursor(vc, info, enable, -- get_fg_color(vc, info, c), -- get_bg_color(vc, info, c)); -+ par->bitops->cursor(vc, info, enable, -+ get_fg_color(vc, info, c), -+ get_bg_color(vc, info, c)); - } - - static int scrollback_phys_max = 0; -@@ -1439,7 +1440,7 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode |= FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) - scrollback_max = scrollback_phys_max; -@@ -1458,7 +1459,7 @@ static __inline__ void ywrap_down(struct vc_data *vc, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode |= FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - scrollback_max -= count; - if (scrollback_max < 0) - scrollback_max = 0; -@@ -1473,15 +1474,15 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - - p->yscroll += count; - if (p->yscroll > p->vrows - vc->vc_rows) { -- par->bmove(vc, info, p->vrows - vc->vc_rows, -- 0, 0, 0, vc->vc_rows, vc->vc_cols); -+ par->bitops->bmove(vc, info, p->vrows - vc->vc_rows, -+ 0, 0, 0, vc->vc_rows, vc->vc_cols); - p->yscroll -= p->vrows - vc->vc_rows; - } - - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1505,7 +1506,7 @@ static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1521,15 +1522,15 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - - p->yscroll -= count; - if (p->yscroll < 0) { -- par->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -- 0, vc->vc_rows, vc->vc_cols); -+ par->bitops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -+ 0, vc->vc_rows, vc->vc_cols); - p->yscroll += p->vrows - vc->vc_rows; - } - - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1553,7 +1554,7 @@ static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - par->var.xoffset = 0; - par->var.yoffset = p->yscroll * vc->vc_font.height; - par->var.vmode &= ~FB_VMODE_YWRAP; -- par->update_start(info); -+ par->bitops->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1615,8 +1616,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - - if (c == scr_readw(d)) { - if (s > start) { -- par->bmove(vc, info, line + ycount, x, -- line, x, 1, s - start); -+ par->bitops->bmove(vc, info, line + ycount, x, -+ line, x, 1, s - start); - x += s - start + 1; - start = s + 1; - } else { -@@ -1631,7 +1632,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - d++; - } while (s < le); - if (s > start) -- par->bmove(vc, info, line + ycount, x, line, x, 1, s - start); -+ par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, -+ s - start); - console_conditional_schedule(); - if (ycount > 0) - line++; -@@ -1736,7 +1738,8 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - } - return; - } -- par->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, height, width); -+ par->bitops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, -+ height, width); - } - - static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, -@@ -2156,7 +2159,7 @@ static bool fbcon_switch(struct vc_data *vc) - set_blitting_type(vc, info); - par->cursor_reset = 1; - -- if (par->rotate_font && par->rotate_font(info, vc)) { -+ if (par->bitops->rotate_font && par->bitops->rotate_font(info, vc)) { - par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } -@@ -2189,7 +2192,7 @@ static bool fbcon_switch(struct vc_data *vc) - - if (fbcon_is_active(vc, info)) { - par->var.xoffset = par->var.yoffset = p->yscroll = 0; -- par->update_start(info); -+ par->bitops->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2695,7 +2698,7 @@ static void fbcon_modechanged(struct fb_info *info) - - if (fbcon_is_active(vc, info)) { - par->var.xoffset = par->var.yoffset = p->yscroll = 0; -- par->update_start(info); -+ par->bitops->update_start(info); - } - - fbcon_set_palette(vc, color_table); -diff --git a/drivers/video/fbdev/core/fbcon.h b/drivers/video/fbdev/core/fbcon.h -index 31ee2d5912219..69ae6b965a103 100644 ---- a/drivers/video/fbdev/core/fbcon.h -+++ b/drivers/video/fbdev/core/fbcon.h -@@ -51,7 +51,7 @@ struct fbcon_display { - const struct fb_videomode *mode; - }; - --struct fbcon_par { -+struct fbcon_bitops { - void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width); - void (*clear)(struct vc_data *vc, struct fb_info *info, int sy, -@@ -65,6 +65,9 @@ struct fbcon_par { - bool enable, int fg, int bg); - int (*update_start)(struct fb_info *info); - int (*rotate_font)(struct fb_info *info, struct vc_data *vc); -+}; -+ -+struct fbcon_par { - struct fb_var_screeninfo var; /* copy of the current fb_var_screeninfo */ - struct delayed_work cursor_work; /* Cursor timer */ - struct fb_cursor cursor_state; -@@ -86,6 +89,8 @@ struct fbcon_par { - u8 *cursor_src; - u32 cursor_size; - u32 fd_size; -+ -+ const struct fbcon_bitops *bitops; - }; - /* - * Attribute Decoding -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index ba744b67a4fd9..4721f4b5e29a5 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -390,13 +390,17 @@ static int ccw_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops ccw_fbcon_bitops = { -+ .bmove = ccw_bmove, -+ .clear = ccw_clear, -+ .putcs = ccw_putcs, -+ .clear_margins = ccw_clear_margins, -+ .cursor = ccw_cursor, -+ .update_start = ccw_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_ccw(struct fbcon_par *par) - { -- par->bmove = ccw_bmove; -- par->clear = ccw_clear; -- par->putcs = ccw_putcs; -- par->clear_margins = ccw_clear_margins; -- par->cursor = ccw_cursor; -- par->update_start = ccw_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &ccw_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index 974bd9d9b7702..2771924d0fb72 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -373,13 +373,17 @@ static int cw_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops cw_fbcon_bitops = { -+ .bmove = cw_bmove, -+ .clear = cw_clear, -+ .putcs = cw_putcs, -+ .clear_margins = cw_clear_margins, -+ .cursor = cw_cursor, -+ .update_start = cw_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_cw(struct fbcon_par *par) - { -- par->bmove = cw_bmove; -- par->clear = cw_clear; -- par->putcs = cw_putcs; -- par->clear_margins = cw_clear_margins; -- par->cursor = cw_cursor; -- par->update_start = cw_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &cw_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 1a214a4d538fb..148ca9b539d19 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -417,13 +417,17 @@ static int ud_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops ud_fbcon_bitops = { -+ .bmove = ud_bmove, -+ .clear = ud_clear, -+ .putcs = ud_putcs, -+ .clear_margins = ud_clear_margins, -+ .cursor = ud_cursor, -+ .update_start = ud_update_start, -+ .rotate_font = fbcon_rotate_font, -+}; -+ - void fbcon_rotate_ud(struct fbcon_par *par) - { -- par->bmove = ud_bmove; -- par->clear = ud_clear; -- par->putcs = ud_putcs; -- par->clear_margins = ud_clear_margins; -- par->cursor = ud_cursor; -- par->update_start = ud_update_start; -- par->rotate_font = fbcon_rotate_font; -+ par->bitops = &ud_fbcon_bitops; - } -diff --git a/drivers/video/fbdev/core/tileblit.c b/drivers/video/fbdev/core/tileblit.c -index 4428f2bcd3f8c..a9db668caf727 100644 ---- a/drivers/video/fbdev/core/tileblit.c -+++ b/drivers/video/fbdev/core/tileblit.c -@@ -161,17 +161,21 @@ static int tile_update_start(struct fb_info *info) - return err; - } - -+static const struct fbcon_bitops tile_fbcon_bitops = { -+ .bmove = tile_bmove, -+ .clear = tile_clear, -+ .putcs = tile_putcs, -+ .clear_margins = tile_clear_margins, -+ .cursor = tile_cursor, -+ .update_start = tile_update_start, -+}; -+ - void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) - { - struct fb_tilemap map; - struct fbcon_par *par = info->fbcon_par; - -- par->bmove = tile_bmove; -- par->clear = tile_clear; -- par->putcs = tile_putcs; -- par->clear_margins = tile_clear_margins; -- par->cursor = tile_cursor; -- par->update_start = tile_update_start; -+ par->bitops = &tile_fbcon_bitops; - - if (par->p) { - map.width = vc->vc_font.width; --- -2.51.0 - diff --git a/queue-6.18/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch b/queue-6.18/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch deleted file mode 100644 index e07a4eacfa..0000000000 --- a/queue-6.18/fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch +++ /dev/null @@ -1,2478 +0,0 @@ -From 8eb0675c5584d375993a6a03ff6fc8ecb5ef5ceb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:42 +0200 -Subject: fbcon: Rename struct fbcon_ops to struct fbcon_par - -From: Thomas Zimmermann - -[ Upstream commit a6adbbc4c32a016146e117b1e9e5242724a75e10 ] - -The type struct fbcon_ops contains fbcon state and callbacks. As the -callbacks will be removed from struct fbcon_ops, rename the data type -to struct fbcon_par. Also rename the variables from ops to par. - -The _par postfix ("private access registers") is used throughout the -fbdev subsystem for per-driver state. The fbcon pointer within struct -fb_info is also named fbcon_par. Hence, the new naming fits existing -practice. - -v2: -- rename struct fbcon_ops to struct fbcon_par -- fix build for CONFIG_FB_TILEBITTING=n (kernel test robot) -- fix indention - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-3-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/bitblit.c | 122 +++---- - drivers/video/fbdev/core/fbcon.c | 419 ++++++++++++------------ - drivers/video/fbdev/core/fbcon.h | 6 +- - drivers/video/fbdev/core/fbcon_ccw.c | 146 ++++----- - drivers/video/fbdev/core/fbcon_cw.c | 146 ++++----- - drivers/video/fbdev/core/fbcon_rotate.c | 40 +-- - drivers/video/fbdev/core/fbcon_rotate.h | 6 +- - drivers/video/fbdev/core/fbcon_ud.c | 162 ++++----- - drivers/video/fbdev/core/softcursor.c | 18 +- - drivers/video/fbdev/core/tileblit.c | 28 +- - 10 files changed, 541 insertions(+), 552 deletions(-) - -diff --git a/drivers/video/fbdev/core/bitblit.c b/drivers/video/fbdev/core/bitblit.c -index dc5ad3fcc7be4..bed8ba18222b9 100644 ---- a/drivers/video/fbdev/core/bitblit.c -+++ b/drivers/video/fbdev/core/bitblit.c -@@ -261,10 +261,10 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = DIV_ROUND_UP(vc->vc_font.width, 8), c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1; - char *src; -@@ -278,10 +278,10 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - attribute = get_attribute(info, c); - src = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -290,46 +290,46 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if ((ops->cursor_state.image.dx != (vc->vc_font.width * vc->state.x)) || -- (ops->cursor_state.image.dy != (vc->vc_font.height * y)) || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = vc->vc_font.width * vc->state.x; -- ops->cursor_state.image.dy = vc->vc_font.height * y; -+ if ((par->cursor_state.image.dx != (vc->vc_font.width * vc->state.x)) || -+ (par->cursor_state.image.dy != (vc->vc_font.height * y)) || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = vc->vc_font.width * vc->state.x; -+ par->cursor_state.image.dy = vc->vc_font.height * y; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.image.height != vc->vc_font.height || -- ops->cursor_state.image.width != vc->vc_font.width || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.height; -- ops->cursor_state.image.width = vc->vc_font.width; -+ if (par->cursor_state.image.height != vc->vc_font.height || -+ par->cursor_state.image.width != vc->vc_font.width || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.height; -+ par->cursor_state.image.width = vc->vc_font.width; - cursor.set |= FB_CUR_SETSIZE; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *mask = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - int cur_height, size, i = 0; - u8 msk = 0xff; -@@ -337,13 +337,13 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (!mask) - return; - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -372,19 +372,19 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - mask[i++] = msk; - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -394,31 +394,31 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int bit_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int err; - -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_set_bitops(struct fbcon_ops *ops) -+void fbcon_set_bitops(struct fbcon_par *par) - { -- ops->bmove = bit_bmove; -- ops->clear = bit_clear; -- ops->putcs = bit_putcs; -- ops->clear_margins = bit_clear_margins; -- ops->cursor = bit_cursor; -- ops->update_start = bit_update_start; -- ops->rotate_font = NULL; -- -- if (ops->rotate) -- fbcon_set_rotate(ops); -+ par->bmove = bit_bmove; -+ par->clear = bit_clear; -+ par->putcs = bit_putcs; -+ par->clear_margins = bit_clear_margins; -+ par->cursor = bit_cursor; -+ par->update_start = bit_update_start; -+ par->rotate_font = NULL; -+ -+ if (par->rotate) -+ fbcon_set_rotate(par); - } -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index e7e07eb2142eb..2523d8b223dc1 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -200,27 +200,27 @@ static struct device *fbcon_device; - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION - static inline void fbcon_set_rotation(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (!(info->flags & FBINFO_MISC_TILEBLITTING) && -- ops->p->con_rotate < 4) -- ops->rotate = ops->p->con_rotate; -+ par->p->con_rotate < 4) -+ par->rotate = par->p->con_rotate; - else -- ops->rotate = 0; -+ par->rotate = 0; - } - - static void fbcon_rotate(struct fb_info *info, u32 rotate) - { -- struct fbcon_ops *ops= info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_info *fb_info; - -- if (!ops || ops->currcon == -1) -+ if (!par || par->currcon == -1) - return; - -- fb_info = fbcon_info_from_console(ops->currcon); -+ fb_info = fbcon_info_from_console(par->currcon); - - if (info == fb_info) { -- struct fbcon_display *p = &fb_display[ops->currcon]; -+ struct fbcon_display *p = &fb_display[par->currcon]; - - if (rotate < 4) - p->con_rotate = rotate; -@@ -233,12 +233,12 @@ static void fbcon_rotate(struct fb_info *info, u32 rotate) - - static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int i; - -- if (!ops || ops->currcon < 0 || rotate > 3) -+ if (!par || par->currcon < 0 || rotate > 3) - return; - - for (i = first_fb_vc; i <= last_fb_vc; i++) { -@@ -256,9 +256,9 @@ static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - #else - static inline void fbcon_set_rotation(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->rotate = FB_ROTATE_UR; -+ par->rotate = FB_ROTATE_UR; - } - - static void fbcon_rotate(struct fb_info *info, u32 rotate) -@@ -274,9 +274,9 @@ static void fbcon_rotate_all(struct fb_info *info, u32 rotate) - - static int fbcon_get_rotate(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- return (ops) ? ops->rotate : 0; -+ return (par) ? par->rotate : 0; - } - - static bool fbcon_skip_panic(struct fb_info *info) -@@ -286,10 +286,10 @@ static bool fbcon_skip_panic(struct fb_info *info) - - static inline bool fbcon_is_active(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - return info->state == FBINFO_STATE_RUNNING && -- vc->vc_mode == KD_TEXT && !ops->graphics && !fbcon_skip_panic(info); -+ vc->vc_mode == KD_TEXT && !par->graphics && !fbcon_skip_panic(info); - } - - static int get_color(struct vc_data *vc, struct fb_info *info, -@@ -371,7 +371,7 @@ static int get_bg_color(struct vc_data *vc, struct fb_info *info, u16 c) - - static void fb_flashcursor(struct work_struct *work) - { -- struct fbcon_ops *ops = container_of(work, struct fbcon_ops, cursor_work.work); -+ struct fbcon_par *par = container_of(work, struct fbcon_par, cursor_work.work); - struct fb_info *info; - struct vc_data *vc = NULL; - int c; -@@ -386,10 +386,10 @@ static void fb_flashcursor(struct work_struct *work) - return; - - /* protected by console_lock */ -- info = ops->info; -+ info = par->info; - -- if (ops->currcon != -1) -- vc = vc_cons[ops->currcon].d; -+ if (par->currcon != -1) -+ vc = vc_cons[par->currcon].d; - - if (!vc || !con_is_visible(vc) || - fbcon_info_from_console(vc->vc_num) != info || -@@ -399,30 +399,30 @@ static void fb_flashcursor(struct work_struct *work) - } - - c = scr_readw((u16 *) vc->vc_pos); -- enable = ops->cursor_flash && !ops->cursor_state.enable; -- ops->cursor(vc, info, enable, -+ enable = par->cursor_flash && !par->cursor_state.enable; -+ par->cursor(vc, info, enable, - get_fg_color(vc, info, c), - get_bg_color(vc, info, c)); - console_unlock(); - -- queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, -- ops->cur_blink_jiffies); -+ queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -+ par->cur_blink_jiffies); - } - - static void fbcon_add_cursor_work(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_cursor_blink) -- queue_delayed_work(system_power_efficient_wq, &ops->cursor_work, -- ops->cur_blink_jiffies); -+ queue_delayed_work(system_power_efficient_wq, &par->cursor_work, -+ par->cur_blink_jiffies); - } - - static void fbcon_del_cursor_work(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- cancel_delayed_work_sync(&ops->cursor_work); -+ cancel_delayed_work_sync(&par->cursor_work); - } - - #ifndef MODULE -@@ -582,7 +582,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - int cols, int rows, int new_cols, int new_rows) - { - /* Need to make room for the logo */ -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int cnt, erase = vc->vc_video_erase_char, step; - unsigned short *save = NULL, *r, *q; - int logo_height; -@@ -598,7 +598,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - */ - if (fb_get_color_depth(&info->var, &info->fix) == 1) - erase &= ~0x400; -- logo_height = fb_prepare_logo(info, ops->rotate); -+ logo_height = fb_prepare_logo(info, par->rotate); - logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height); - q = (unsigned short *) (vc->vc_origin + - vc->vc_size_row * rows); -@@ -670,15 +670,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, - #ifdef CONFIG_FB_TILEBLITTING - static void set_blitting_type(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->p = &fb_display[vc->vc_num]; -+ par->p = &fb_display[vc->vc_num]; - - if ((info->flags & FBINFO_MISC_TILEBLITTING)) - fbcon_set_tileops(vc, info); - else { - fbcon_set_rotation(info); -- fbcon_set_bitops(ops); -+ fbcon_set_bitops(par); - } - } - -@@ -695,12 +695,12 @@ static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) - #else - static void set_blitting_type(struct vc_data *vc, struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - info->flags &= ~FBINFO_MISC_TILEBLITTING; -- ops->p = &fb_display[vc->vc_num]; -+ par->p = &fb_display[vc->vc_num]; - fbcon_set_rotation(info); -- fbcon_set_bitops(ops); -+ fbcon_set_bitops(par); - } - - static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) -@@ -720,13 +720,13 @@ static void fbcon_release(struct fb_info *info) - module_put(info->fbops->owner); - - if (info->fbcon_par) { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - fbcon_del_cursor_work(info); -- kfree(ops->cursor_state.mask); -- kfree(ops->cursor_data); -- kfree(ops->cursor_src); -- kfree(ops->fontbuffer); -+ kfree(par->cursor_state.mask); -+ kfree(par->cursor_data); -+ kfree(par->cursor_src); -+ kfree(par->fontbuffer); - kfree(info->fbcon_par); - info->fbcon_par = NULL; - } -@@ -734,7 +734,7 @@ static void fbcon_release(struct fb_info *info) - - static int fbcon_open(struct fb_info *info) - { -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - - if (!try_module_get(info->fbops->owner)) - return -ENODEV; -@@ -748,16 +748,16 @@ static int fbcon_open(struct fb_info *info) - } - unlock_fb_info(info); - -- ops = kzalloc(sizeof(struct fbcon_ops), GFP_KERNEL); -- if (!ops) { -+ par = kzalloc(sizeof(*par), GFP_KERNEL); -+ if (!par) { - fbcon_release(info); - return -ENOMEM; - } - -- INIT_DELAYED_WORK(&ops->cursor_work, fb_flashcursor); -- ops->info = info; -- info->fbcon_par = ops; -- ops->cur_blink_jiffies = HZ / 5; -+ INIT_DELAYED_WORK(&par->cursor_work, fb_flashcursor); -+ par->info = info; -+ info->fbcon_par = par; -+ par->cur_blink_jiffies = HZ / 5; - - return 0; - } -@@ -804,12 +804,12 @@ static void con2fb_release_oldinfo(struct vc_data *vc, struct fb_info *oldinfo, - static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, - int unit, int show_logo) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int ret; - -- ops->currcon = fg_console; -+ par->currcon = fg_console; - -- if (info->fbops->fb_set_par && !ops->initialized) { -+ if (info->fbops->fb_set_par && !par->initialized) { - ret = info->fbops->fb_set_par(info); - - if (ret) -@@ -818,8 +818,8 @@ static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, - "error code %d\n", ret); - } - -- ops->initialized = true; -- ops->graphics = 0; -+ par->initialized = true; -+ par->graphics = 0; - fbcon_set_disp(info, &info->var, unit); - - if (show_logo) { -@@ -956,7 +956,7 @@ static const char *fbcon_startup(void) - struct vc_data *vc = vc_cons[fg_console].d; - const struct font_desc *font = NULL; - struct fb_info *info = NULL; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int rows, cols; - - /* -@@ -976,10 +976,10 @@ static const char *fbcon_startup(void) - if (fbcon_open(info)) - return NULL; - -- ops = info->fbcon_par; -- ops->currcon = -1; -- ops->graphics = 1; -- ops->cur_rotate = -1; -+ par = info->fbcon_par; -+ par->currcon = -1; -+ par->graphics = 1; -+ par->cur_rotate = -1; - - p->con_rotate = initial_rotation; - if (p->con_rotate == -1) -@@ -1002,8 +1002,8 @@ static const char *fbcon_startup(void) - vc->vc_font.charcount = font->charcount; - } - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -1021,7 +1021,7 @@ static const char *fbcon_startup(void) - static void fbcon_init(struct vc_data *vc, bool init) - { - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - struct vc_data **default_mode = vc->vc_display_fg; - struct vc_data *svc = *default_mode; - struct fbcon_display *t, *p = &fb_display[vc->vc_num]; -@@ -1095,8 +1095,8 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (!*vc->uni_pagedict_loc) - con_copy_unimap(vc, svc); - -- ops = info->fbcon_par; -- ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); -+ par = info->fbcon_par; -+ par->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - - p->con_rotate = initial_rotation; - if (p->con_rotate == -1) -@@ -1108,8 +1108,8 @@ static void fbcon_init(struct vc_data *vc, bool init) - - cols = vc->vc_cols; - rows = vc->vc_rows; -- new_cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- new_rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ new_cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ new_rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - new_cols /= vc->vc_font.width; - new_rows /= vc->vc_font.height; - -@@ -1121,7 +1121,7 @@ static void fbcon_init(struct vc_data *vc, bool init) - * We need to do it in fbcon_init() to prevent screen corruption. - */ - if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) { -- if (info->fbops->fb_set_par && !ops->initialized) { -+ if (info->fbops->fb_set_par && !par->initialized) { - ret = info->fbops->fb_set_par(info); - - if (ret) -@@ -1130,10 +1130,10 @@ static void fbcon_init(struct vc_data *vc, bool init) - "error code %d\n", ret); - } - -- ops->initialized = true; -+ par->initialized = true; - } - -- ops->graphics = 0; -+ par->graphics = 0; - - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION - if ((info->flags & FBINFO_HWACCEL_COPYAREA) && -@@ -1157,12 +1157,12 @@ static void fbcon_init(struct vc_data *vc, bool init) - if (logo) - fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); - -- if (ops->rotate_font && ops->rotate_font(info, vc)) { -- ops->rotate = FB_ROTATE_UR; -+ if (par->rotate_font && par->rotate_font(info, vc)) { -+ par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } - -- ops->p = &fb_display[fg_console]; -+ par->p = &fb_display[fg_console]; - } - - static void fbcon_free_font(struct fbcon_display *p) -@@ -1200,7 +1200,7 @@ static void fbcon_deinit(struct vc_data *vc) - { - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int idx; - - fbcon_free_font(p); -@@ -1214,15 +1214,15 @@ static void fbcon_deinit(struct vc_data *vc) - if (!info) - goto finished; - -- ops = info->fbcon_par; -+ par = info->fbcon_par; - -- if (!ops) -+ if (!par) - goto finished; - - if (con_is_visible(vc)) - fbcon_del_cursor_work(info); - -- ops->initialized = false; -+ par->initialized = false; - finished: - - fbcon_free_font(p); -@@ -1269,7 +1269,7 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - unsigned int height, unsigned int width) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int fg, bg; - struct fbcon_display *p = &fb_display[vc->vc_num]; - u_int y_break; -@@ -1284,7 +1284,7 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - vc->vc_top = 0; - /* - * If the font dimensions are not an integral of the display -- * dimensions then the ops->clear below won't end up clearing -+ * dimensions then the par->clear below won't end up clearing - * the margins. Call clear_margins here in case the logo - * bitmap stretched into the margin area. - */ -@@ -1298,11 +1298,10 @@ static void __fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, - y_break = p->vrows - p->yscroll; - if (sy < y_break && sy + height - 1 >= y_break) { - u_int b = y_break - sy; -- ops->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -- ops->clear(vc, info, real_y(p, sy + b), sx, height - b, -- width, fg, bg); -+ par->clear(vc, info, real_y(p, sy), sx, b, width, fg, bg); -+ par->clear(vc, info, real_y(p, sy + b), sx, height - b, width, fg, bg); - } else -- ops->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); -+ par->clear(vc, info, real_y(p, sy), sx, height, width, fg, bg); - } - - static void fbcon_clear(struct vc_data *vc, unsigned int sy, unsigned int sx, -@@ -1316,10 +1315,10 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, -+ par->putcs(vc, info, s, count, real_y(p, ypos), xpos, - get_fg_color(vc, info, scr_readw(s)), - get_bg_color(vc, info, scr_readw(s))); - } -@@ -1327,19 +1326,19 @@ static void fbcon_putcs(struct vc_data *vc, const u16 *s, unsigned int count, - static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (fbcon_is_active(vc, info)) -- ops->clear_margins(vc, info, margin_color, bottom_only); -+ par->clear_margins(vc, info, margin_color, bottom_only); - } - - static void fbcon_cursor(struct vc_data *vc, bool enable) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int c = scr_readw((u16 *) vc->vc_pos); - -- ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); -+ par->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); - - if (!fbcon_is_active(vc, info) || vc->vc_deccm != 1) - return; -@@ -1349,12 +1348,12 @@ static void fbcon_cursor(struct vc_data *vc, bool enable) - else - fbcon_add_cursor_work(info); - -- ops->cursor_flash = enable; -+ par->cursor_flash = enable; - -- if (!ops->cursor) -+ if (!par->cursor) - return; - -- ops->cursor(vc, info, enable, -+ par->cursor(vc, info, enable, - get_fg_color(vc, info, c), - get_bg_color(vc, info, c)); - } -@@ -1369,7 +1368,7 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - struct fbcon_display *p, *t; - struct vc_data **default_mode, *vc; - struct vc_data *svc; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int rows, cols; - unsigned long ret = 0; - -@@ -1402,7 +1401,7 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - var->yoffset = info->var.yoffset; - var->xoffset = info->var.xoffset; - fb_set_var(info, var); -- ops->var = info->var; -+ par->var = info->var; - vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); - vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; - if (vc->vc_font.charcount == 256) { -@@ -1418,8 +1417,8 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - if (!*vc->uni_pagedict_loc) - con_copy_unimap(vc, svc); - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - ret = vc_resize(vc, cols, rows); -@@ -1431,16 +1430,16 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, - static __inline__ void ywrap_up(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll += count; - if (p->yscroll >= p->vrows) /* Deal with wrap */ - p->yscroll -= p->vrows; -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode |= FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode |= FB_VMODE_YWRAP; -+ par->update_start(info); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) - scrollback_max = scrollback_phys_max; -@@ -1450,16 +1449,16 @@ static __inline__ void ywrap_up(struct vc_data *vc, int count) - static __inline__ void ywrap_down(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll -= count; - if (p->yscroll < 0) /* Deal with wrap */ - p->yscroll += p->vrows; -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode |= FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode |= FB_VMODE_YWRAP; -+ par->update_start(info); - scrollback_max -= count; - if (scrollback_max < 0) - scrollback_max = 0; -@@ -1470,19 +1469,19 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - p->yscroll += count; - if (p->yscroll > p->vrows - vc->vc_rows) { -- ops->bmove(vc, info, p->vrows - vc->vc_rows, -+ par->bmove(vc, info, p->vrows - vc->vc_rows, - 0, 0, 0, vc->vc_rows, vc->vc_cols); - p->yscroll -= p->vrows - vc->vc_rows; - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1493,7 +1492,7 @@ static __inline__ void ypan_up(struct vc_data *vc, int count) - static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll += count; -@@ -1503,10 +1502,10 @@ static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) - fbcon_redraw_move(vc, p, t + count, vc->vc_rows - count, t); - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max += count; - if (scrollback_max > scrollback_phys_max) -@@ -1518,19 +1517,19 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); - struct fbcon_display *p = &fb_display[vc->vc_num]; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - p->yscroll -= count; - if (p->yscroll < 0) { -- ops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, -+ par->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, - 0, vc->vc_rows, vc->vc_cols); - p->yscroll += p->vrows - vc->vc_rows; - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1541,7 +1540,7 @@ static __inline__ void ypan_down(struct vc_data *vc, int count) - static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - - p->yscroll -= count; -@@ -1551,10 +1550,10 @@ static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) - fbcon_redraw_move(vc, p, t, vc->vc_rows - count, t + count); - } - -- ops->var.xoffset = 0; -- ops->var.yoffset = p->yscroll * vc->vc_font.height; -- ops->var.vmode &= ~FB_VMODE_YWRAP; -- ops->update_start(info); -+ par->var.xoffset = 0; -+ par->var.yoffset = p->yscroll * vc->vc_font.height; -+ par->var.vmode &= ~FB_VMODE_YWRAP; -+ par->update_start(info); - fbcon_clear_margins(vc, 1); - scrollback_max -= count; - if (scrollback_max < 0) -@@ -1603,7 +1602,7 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - unsigned short *d = (unsigned short *) - (vc->vc_origin + vc->vc_size_row * line); - unsigned short *s = d + offset; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - while (count--) { - unsigned short *start = s; -@@ -1616,8 +1615,8 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - - if (c == scr_readw(d)) { - if (s > start) { -- ops->bmove(vc, info, line + ycount, x, -- line, x, 1, s-start); -+ par->bmove(vc, info, line + ycount, x, -+ line, x, 1, s - start); - x += s - start + 1; - start = s + 1; - } else { -@@ -1632,8 +1631,7 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - d++; - } while (s < le); - if (s > start) -- ops->bmove(vc, info, line + ycount, x, line, x, 1, -- s-start); -+ par->bmove(vc, info, line + ycount, x, line, x, 1, s - start); - console_conditional_schedule(); - if (ycount > 0) - line++; -@@ -1704,7 +1702,7 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - int dy, int dx, int height, int width, u_int y_break) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u_int b; - - if (sy < y_break && sy + height > y_break) { -@@ -1738,8 +1736,7 @@ static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, - } - return; - } -- ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, -- height, width); -+ par->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, height, width); - } - - static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, -@@ -1966,15 +1963,13 @@ static void updatescrollmode_accel(struct fbcon_display *p, - struct vc_data *vc) - { - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int cap = info->flags; - u16 t = 0; -- int ypan = FBCON_SWAP(ops->rotate, info->fix.ypanstep, -- info->fix.xpanstep); -- int ywrap = FBCON_SWAP(ops->rotate, info->fix.ywrapstep, t); -- int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -- int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, -- info->var.xres_virtual); -+ int ypan = FBCON_SWAP(par->rotate, info->fix.ypanstep, info->fix.xpanstep); -+ int ywrap = FBCON_SWAP(par->rotate, info->fix.ywrapstep, t); -+ int yres = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); -+ int vyres = FBCON_SWAP(par->rotate, info->var.yres_virtual, info->var.xres_virtual); - int good_pan = (cap & FBINFO_HWACCEL_YPAN) && - divides(ypan, vc->vc_font.height) && vyres > yres; - int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) && -@@ -2007,11 +2002,10 @@ static void updatescrollmode(struct fbcon_display *p, - struct fb_info *info, - struct vc_data *vc) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int fh = vc->vc_font.height; -- int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -- int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, -- info->var.xres_virtual); -+ int yres = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); -+ int vyres = FBCON_SWAP(par->rotate, info->var.yres_virtual, info->var.xres_virtual); - - p->vrows = vyres/fh; - if (yres > (fh * (vc->vc_rows + 1))) -@@ -2030,7 +2024,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - unsigned int height, bool from_user) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_var_screeninfo var = info->var; - int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh; -@@ -2053,12 +2047,10 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - return -EINVAL; - } - -- virt_w = FBCON_SWAP(ops->rotate, width, height); -- virt_h = FBCON_SWAP(ops->rotate, height, width); -- virt_fw = FBCON_SWAP(ops->rotate, vc->vc_font.width, -- vc->vc_font.height); -- virt_fh = FBCON_SWAP(ops->rotate, vc->vc_font.height, -- vc->vc_font.width); -+ virt_w = FBCON_SWAP(par->rotate, width, height); -+ virt_h = FBCON_SWAP(par->rotate, height, width); -+ virt_fw = FBCON_SWAP(par->rotate, vc->vc_font.width, vc->vc_font.height); -+ virt_fh = FBCON_SWAP(par->rotate, vc->vc_font.height, vc->vc_font.width); - var.xres = virt_w * virt_fw; - var.yres = virt_h * virt_fh; - x_diff = info->var.xres - var.xres; -@@ -2084,7 +2076,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - fb_set_var(info, &var); - } - var_to_display(p, &info->var, info); -- ops->var = info->var; -+ par->var = info->var; - } - updatescrollmode(p, info, vc); - return 0; -@@ -2093,13 +2085,13 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, - static bool fbcon_switch(struct vc_data *vc) - { - struct fb_info *info, *old_info = NULL; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - struct fb_var_screeninfo var; - int i, ret, prev_console; - - info = fbcon_info_from_console(vc->vc_num); -- ops = info->fbcon_par; -+ par = info->fbcon_par; - - if (logo_shown >= 0) { - struct vc_data *conp2 = vc_cons[logo_shown].d; -@@ -2110,7 +2102,7 @@ static bool fbcon_switch(struct vc_data *vc) - logo_shown = FBCON_LOGO_CANSHOW; - } - -- prev_console = ops->currcon; -+ prev_console = par->currcon; - if (prev_console != -1) - old_info = fbcon_info_from_console(prev_console); - /* -@@ -2123,9 +2115,9 @@ static bool fbcon_switch(struct vc_data *vc) - */ - fbcon_for_each_registered_fb(i) { - if (fbcon_registered_fb[i]->fbcon_par) { -- struct fbcon_ops *o = fbcon_registered_fb[i]->fbcon_par; -+ struct fbcon_par *par = fbcon_registered_fb[i]->fbcon_par; - -- o->currcon = vc->vc_num; -+ par->currcon = vc->vc_num; - } - } - memset(&var, 0, sizeof(struct fb_var_screeninfo)); -@@ -2139,7 +2131,7 @@ static bool fbcon_switch(struct vc_data *vc) - info->var.activate = var.activate; - var.vmode |= info->var.vmode & ~FB_VMODE_MASK; - fb_set_var(info, &var); -- ops->var = info->var; -+ par->var = info->var; - - if (old_info != NULL && (old_info != info || - info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { -@@ -2156,17 +2148,16 @@ static bool fbcon_switch(struct vc_data *vc) - fbcon_del_cursor_work(old_info); - } - -- if (!fbcon_is_active(vc, info) || -- ops->blank_state != FB_BLANK_UNBLANK) -+ if (!fbcon_is_active(vc, info) || par->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else - fbcon_add_cursor_work(info); - - set_blitting_type(vc, info); -- ops->cursor_reset = 1; -+ par->cursor_reset = 1; - -- if (ops->rotate_font && ops->rotate_font(info, vc)) { -- ops->rotate = FB_ROTATE_UR; -+ if (par->rotate_font && par->rotate_font(info, vc)) { -+ par->rotate = FB_ROTATE_UR; - set_blitting_type(vc, info); - } - -@@ -2197,8 +2188,8 @@ static bool fbcon_switch(struct vc_data *vc) - scrollback_current = 0; - - if (fbcon_is_active(vc, info)) { -- ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; -- ops->update_start(info); -+ par->var.xoffset = par->var.yoffset = p->yscroll = 0; -+ par->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2207,7 +2198,7 @@ static bool fbcon_switch(struct vc_data *vc) - if (logo_shown == FBCON_LOGO_DRAW) { - - logo_shown = fg_console; -- fb_show_logo(info, ops->rotate); -+ fb_show_logo(info, par->rotate); - update_region(vc, - vc->vc_origin + vc->vc_size_row * vc->vc_top, - vc->vc_size_row * (vc->vc_bottom - -@@ -2236,27 +2227,27 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - bool mode_switch) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - - if (mode_switch) { - struct fb_var_screeninfo var = info->var; - -- ops->graphics = 1; -+ par->graphics = 1; - - if (!blank) { - var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE | - FB_ACTIVATE_KD_TEXT; - fb_set_var(info, &var); -- ops->graphics = 0; -- ops->var = info->var; -+ par->graphics = 0; -+ par->var = info->var; - } - } - - if (fbcon_is_active(vc, info)) { -- if (ops->blank_state != blank) { -- ops->blank_state = blank; -+ if (par->blank_state != blank) { -+ par->blank_state = blank; - fbcon_cursor(vc, !blank); -- ops->cursor_flash = (!blank); -+ par->cursor_flash = (!blank); - - if (fb_blank(info, blank)) - fbcon_generic_blank(vc, info, blank); -@@ -2266,8 +2257,7 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - update_screen(vc); - } - -- if (mode_switch || !fbcon_is_active(vc, info) || -- ops->blank_state != FB_BLANK_UNBLANK) -+ if (mode_switch || !fbcon_is_active(vc, info) || par->blank_state != FB_BLANK_UNBLANK) - fbcon_del_cursor_work(info); - else - fbcon_add_cursor_work(info); -@@ -2278,10 +2268,10 @@ static bool fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank, - static void fbcon_debug_enter(struct vc_data *vc) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->save_graphics = ops->graphics; -- ops->graphics = 0; -+ par->save_graphics = par->graphics; -+ par->graphics = 0; - if (info->fbops->fb_debug_enter) - info->fbops->fb_debug_enter(info); - fbcon_set_palette(vc, color_table); -@@ -2290,9 +2280,9 @@ static void fbcon_debug_enter(struct vc_data *vc) - static void fbcon_debug_leave(struct vc_data *vc) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->graphics = ops->save_graphics; -+ par->graphics = par->save_graphics; - if (info->fbops->fb_debug_leave) - info->fbops->fb_debug_leave(info); - } -@@ -2427,7 +2417,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount, - const u8 * data, int userfont) - { - struct fb_info *info = fbcon_info_from_console(vc->vc_num); -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fbcon_display *p = &fb_display[vc->vc_num]; - int resize, ret, old_userfont, old_width, old_height, old_charcount; - u8 *old_data = vc->vc_font.data; -@@ -2453,8 +2443,8 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount, - if (resize) { - int cols, rows; - -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= w; - rows /= h; - ret = vc_resize(vc, cols, rows); -@@ -2653,11 +2643,11 @@ static void fbcon_invert_region(struct vc_data *vc, u16 * p, int cnt) - void fbcon_suspended(struct fb_info *info) - { - struct vc_data *vc = NULL; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - - /* Clear cursor, restore saved data */ - fbcon_cursor(vc, false); -@@ -2666,27 +2656,27 @@ void fbcon_suspended(struct fb_info *info) - void fbcon_resumed(struct fb_info *info) - { - struct vc_data *vc; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - - update_screen(vc); - } - - static void fbcon_modechanged(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int rows, cols; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; -- vc = vc_cons[ops->currcon].d; -+ vc = vc_cons[par->currcon].d; - if (vc->vc_mode != KD_TEXT || -- fbcon_info_from_console(ops->currcon) != info) -+ fbcon_info_from_console(par->currcon) != info) - return; - - p = &fb_display[vc->vc_num]; -@@ -2694,8 +2684,8 @@ static void fbcon_modechanged(struct fb_info *info) - - if (con_is_visible(vc)) { - var_to_display(p, &info->var, info); -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -2704,8 +2694,8 @@ static void fbcon_modechanged(struct fb_info *info) - scrollback_current = 0; - - if (fbcon_is_active(vc, info)) { -- ops->var.xoffset = ops->var.yoffset = p->yscroll = 0; -- ops->update_start(info); -+ par->var.xoffset = par->var.yoffset = p->yscroll = 0; -+ par->update_start(info); - } - - fbcon_set_palette(vc, color_table); -@@ -2715,12 +2705,12 @@ static void fbcon_modechanged(struct fb_info *info) - - static void fbcon_set_all_vcs(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - struct fbcon_display *p; - int i, rows, cols, fg = -1; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; - - for (i = first_fb_vc; i <= last_fb_vc; i++) { -@@ -2737,8 +2727,8 @@ static void fbcon_set_all_vcs(struct fb_info *info) - p = &fb_display[vc->vc_num]; - set_blitting_type(vc, info); - var_to_display(p, &info->var, info); -- cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); -- rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); -+ cols = FBCON_SWAP(par->rotate, info->var.xres, info->var.yres); -+ rows = FBCON_SWAP(par->rotate, info->var.yres, info->var.xres); - cols /= vc->vc_font.width; - rows /= vc->vc_font.height; - vc_resize(vc, cols, rows); -@@ -2761,13 +2751,13 @@ EXPORT_SYMBOL(fbcon_update_vcs); - /* let fbcon check if it supports a new screen resolution */ - int fbcon_modechange_possible(struct fb_info *info, struct fb_var_screeninfo *var) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - unsigned int i; - - WARN_CONSOLE_UNLOCKED(); - -- if (!ops) -+ if (!par) - return 0; - - /* prevent setting a screen size which is smaller than font size */ -@@ -3065,15 +3055,14 @@ int fbcon_fb_registered(struct fb_info *info) - - void fbcon_fb_blanked(struct fb_info *info, int blank) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct vc_data *vc; - -- if (!ops || ops->currcon < 0) -+ if (!par || par->currcon < 0) - return; - -- vc = vc_cons[ops->currcon].d; -- if (vc->vc_mode != KD_TEXT || -- fbcon_info_from_console(ops->currcon) != info) -+ vc = vc_cons[par->currcon].d; -+ if (vc->vc_mode != KD_TEXT || fbcon_info_from_console(par->currcon) != info) - return; - - if (con_is_visible(vc)) { -@@ -3082,7 +3071,7 @@ void fbcon_fb_blanked(struct fb_info *info, int blank) - else - do_unblank_screen(0); - } -- ops->blank_state = blank; -+ par->blank_state = blank; - } - - void fbcon_new_modelist(struct fb_info *info) -@@ -3272,7 +3261,7 @@ static ssize_t cursor_blink_show(struct device *device, - struct device_attribute *attr, char *buf) - { - struct fb_info *info; -- struct fbcon_ops *ops; -+ struct fbcon_par *par; - int idx, blink = -1; - - console_lock(); -@@ -3282,12 +3271,12 @@ static ssize_t cursor_blink_show(struct device *device, - goto err; - - info = fbcon_registered_fb[idx]; -- ops = info->fbcon_par; -+ par = info->fbcon_par; - -- if (!ops) -+ if (!par) - goto err; - -- blink = delayed_work_pending(&ops->cursor_work); -+ blink = delayed_work_pending(&par->cursor_work); - err: - console_unlock(); - return sysfs_emit(buf, "%d\n", blink); -diff --git a/drivers/video/fbdev/core/fbcon.h b/drivers/video/fbdev/core/fbcon.h -index 4d97e6d8a16a2..31ee2d5912219 100644 ---- a/drivers/video/fbdev/core/fbcon.h -+++ b/drivers/video/fbdev/core/fbcon.h -@@ -51,7 +51,7 @@ struct fbcon_display { - const struct fb_videomode *mode; - }; - --struct fbcon_ops { -+struct fbcon_par { - void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width); - void (*clear)(struct vc_data *vc, struct fb_info *info, int sy, -@@ -186,7 +186,7 @@ static inline u_short fb_scrollmode(struct fbcon_display *fb) - #ifdef CONFIG_FB_TILEBLITTING - extern void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info); - #endif --extern void fbcon_set_bitops(struct fbcon_ops *ops); -+extern void fbcon_set_bitops(struct fbcon_par *par); - extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); - - #define FBCON_ATTRIBUTE_UNDERLINE 1 -@@ -225,7 +225,7 @@ static inline int get_attribute(struct fb_info *info, u16 c) - (i == FB_ROTATE_UR || i == FB_ROTATE_UD) ? _r : _v; }) - - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION --extern void fbcon_set_rotate(struct fbcon_ops *ops); -+extern void fbcon_set_rotate(struct fbcon_par *par); - #else - #define fbcon_set_rotate(x) do {} while(0) - #endif /* CONFIG_FRAMEBUFFER_CONSOLE_ROTATION */ -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index 89ef4ba7e8672..2ba8ec4c3e2bc 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -63,9 +63,9 @@ static void ccw_update_attr(u8 *dst, u8 *src, int attribute, - static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - - area.sx = sy * vc->vc_font.height; - area.sy = vyres - ((sx + width) * vc->vc_font.width); -@@ -80,9 +80,9 @@ static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - - region.color = bg; - region.dx = sy * vc->vc_font.height; -@@ -99,13 +99,13 @@ static inline void ccw_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = (vc->vc_font.height + 7) >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ccw_update_attr(buf, src, attr, vc); -@@ -130,7 +130,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.height + 7)/8; - u32 cellsize = width * vc->vc_font.width; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -139,9 +139,9 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, - u32 cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -221,28 +221,28 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.height + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -251,49 +251,49 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.width, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - ccw_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.width || -- ops->cursor_state.image.width != vc->vc_font.height || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.width; -- ops->cursor_state.image.width = vc->vc_font.height; -+ if (par->cursor_state.image.height != vc->vc_font.width || -+ par->cursor_state.image.width != vc->vc_font.height || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.width; -+ par->cursor_state.image.width = vc->vc_font.height; - cursor.set |= FB_CUR_SETSIZE; - } - - dx = y * vc->vc_font.height; - dy = vyres - ((vc->state.x + 1) * vc->vc_font.width); - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *tmp, *mask = kmalloc_array(w, vc->vc_font.width, - GFP_ATOMIC); - int cur_height, size, i = 0; -@@ -309,13 +309,13 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - return; - } - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -348,19 +348,19 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - kfree(tmp); - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -370,32 +370,32 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int ccw_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 yoffset; -- u32 vyres = GETVYRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); - int err; - -- yoffset = (vyres - info->var.yres) - ops->var.xoffset; -- ops->var.xoffset = ops->var.yoffset; -- ops->var.yoffset = yoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ yoffset = (vyres - info->var.yres) - par->var.xoffset; -+ par->var.xoffset = par->var.yoffset; -+ par->var.yoffset = yoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_ccw(struct fbcon_ops *ops) -+void fbcon_rotate_ccw(struct fbcon_par *par) - { -- ops->bmove = ccw_bmove; -- ops->clear = ccw_clear; -- ops->putcs = ccw_putcs; -- ops->clear_margins = ccw_clear_margins; -- ops->cursor = ccw_cursor; -- ops->update_start = ccw_update_start; -+ par->bmove = ccw_bmove; -+ par->clear = ccw_clear; -+ par->putcs = ccw_putcs; -+ par->clear_margins = ccw_clear_margins; -+ par->cursor = ccw_cursor; -+ par->update_start = ccw_update_start; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index b9dac7940fb77..4bd22d5ee5f41 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -48,9 +48,9 @@ static void cw_update_attr(u8 *dst, u8 *src, int attribute, - static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - area.sx = vxres - ((sy + height) * vc->vc_font.height); - area.sy = sx * vc->vc_font.width; -@@ -65,9 +65,9 @@ static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - region.color = bg; - region.dx = vxres - ((sy + height) * vc->vc_font.height); -@@ -84,13 +84,13 @@ static inline void cw_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = (vc->vc_font.height + 7) >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s++) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s++) & charmask) * cellsize; - - if (attr) { - cw_update_attr(buf, src, attr, vc); -@@ -115,7 +115,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.height + 7)/8; - u32 cellsize = width * vc->vc_font.width; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -124,9 +124,9 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, - u32 cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -204,28 +204,28 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.height + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.width)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -234,49 +234,49 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.width, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - cw_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.width || -- ops->cursor_state.image.width != vc->vc_font.height || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.width; -- ops->cursor_state.image.width = vc->vc_font.height; -+ if (par->cursor_state.image.height != vc->vc_font.width || -+ par->cursor_state.image.width != vc->vc_font.height || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.width; -+ par->cursor_state.image.width = vc->vc_font.height; - cursor.set |= FB_CUR_SETSIZE; - } - - dx = vxres - ((y * vc->vc_font.height) + vc->vc_font.height); - dy = vc->state.x * vc->vc_font.width; - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *tmp, *mask = kmalloc_array(w, vc->vc_font.width, - GFP_ATOMIC); - int cur_height, size, i = 0; -@@ -292,13 +292,13 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - return; - } - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -331,19 +331,19 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - kfree(tmp); - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -353,32 +353,32 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int cw_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -- u32 vxres = GETVXRES(ops->p, info); -+ struct fbcon_par *par = info->fbcon_par; -+ u32 vxres = GETVXRES(par->p, info); - u32 xoffset; - int err; - -- xoffset = vxres - (info->var.xres + ops->var.yoffset); -- ops->var.yoffset = ops->var.xoffset; -- ops->var.xoffset = xoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ xoffset = vxres - (info->var.xres + par->var.yoffset); -+ par->var.yoffset = par->var.xoffset; -+ par->var.xoffset = xoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_cw(struct fbcon_ops *ops) -+void fbcon_rotate_cw(struct fbcon_par *par) - { -- ops->bmove = cw_bmove; -- ops->clear = cw_clear; -- ops->putcs = cw_putcs; -- ops->clear_margins = cw_clear_margins; -- ops->cursor = cw_cursor; -- ops->update_start = cw_update_start; -+ par->bmove = cw_bmove; -+ par->clear = cw_clear; -+ par->putcs = cw_putcs; -+ par->clear_margins = cw_clear_margins; -+ par->cursor = cw_cursor; -+ par->update_start = cw_update_start; - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c -index ec3c883400f7b..380b2746451a1 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.c -+++ b/drivers/video/fbdev/core/fbcon_rotate.c -@@ -20,32 +20,32 @@ - - static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int len, err = 0; - int s_cellsize, d_cellsize, i; - const u8 *src; - u8 *dst; - -- if (vc->vc_font.data == ops->fontdata && -- ops->p->con_rotate == ops->cur_rotate) -+ if (vc->vc_font.data == par->fontdata && -+ par->p->con_rotate == par->cur_rotate) - goto finished; - -- src = ops->fontdata = vc->vc_font.data; -- ops->cur_rotate = ops->p->con_rotate; -+ src = par->fontdata = vc->vc_font.data; -+ par->cur_rotate = par->p->con_rotate; - len = vc->vc_font.charcount; - s_cellsize = ((vc->vc_font.width + 7)/8) * - vc->vc_font.height; - d_cellsize = s_cellsize; - -- if (ops->rotate == FB_ROTATE_CW || -- ops->rotate == FB_ROTATE_CCW) -+ if (par->rotate == FB_ROTATE_CW || -+ par->rotate == FB_ROTATE_CCW) - d_cellsize = ((vc->vc_font.height + 7)/8) * - vc->vc_font.width; - - if (info->fbops->fb_sync) - info->fbops->fb_sync(info); - -- if (ops->fd_size < d_cellsize * len) { -+ if (par->fd_size < d_cellsize * len) { - dst = kmalloc_array(len, d_cellsize, GFP_KERNEL); - - if (dst == NULL) { -@@ -53,15 +53,15 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - goto finished; - } - -- ops->fd_size = d_cellsize * len; -- kfree(ops->fontbuffer); -- ops->fontbuffer = dst; -+ par->fd_size = d_cellsize * len; -+ kfree(par->fontbuffer); -+ par->fontbuffer = dst; - } - -- dst = ops->fontbuffer; -- memset(dst, 0, ops->fd_size); -+ dst = par->fontbuffer; -+ memset(dst, 0, par->fd_size); - -- switch (ops->rotate) { -+ switch (par->rotate) { - case FB_ROTATE_UD: - for (i = len; i--; ) { - rotate_ud(src, dst, vc->vc_font.width, -@@ -93,19 +93,19 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - return err; - } - --void fbcon_set_rotate(struct fbcon_ops *ops) -+void fbcon_set_rotate(struct fbcon_par *par) - { -- ops->rotate_font = fbcon_rotate_font; -+ par->rotate_font = fbcon_rotate_font; - -- switch(ops->rotate) { -+ switch (par->rotate) { - case FB_ROTATE_CW: -- fbcon_rotate_cw(ops); -+ fbcon_rotate_cw(par); - break; - case FB_ROTATE_UD: -- fbcon_rotate_ud(ops); -+ fbcon_rotate_ud(par); - break; - case FB_ROTATE_CCW: -- fbcon_rotate_ccw(ops); -+ fbcon_rotate_ccw(par); - break; - } - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.h b/drivers/video/fbdev/core/fbcon_rotate.h -index 01cbe303b8a29..48305e1a07631 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.h -+++ b/drivers/video/fbdev/core/fbcon_rotate.h -@@ -90,7 +90,7 @@ static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height) - } - } - --extern void fbcon_rotate_cw(struct fbcon_ops *ops); --extern void fbcon_rotate_ud(struct fbcon_ops *ops); --extern void fbcon_rotate_ccw(struct fbcon_ops *ops); -+extern void fbcon_rotate_cw(struct fbcon_par *par); -+extern void fbcon_rotate_ud(struct fbcon_par *par); -+extern void fbcon_rotate_ccw(struct fbcon_par *par); - #endif -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 0af7913a2abdc..14b40e2bf323f 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -48,10 +48,10 @@ static void ud_update_attr(u8 *dst, u8 *src, int attribute, - static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int dy, int dx, int height, int width) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_copyarea area; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - area.sy = vyres - ((sy + height) * vc->vc_font.height); - area.sx = vxres - ((sx + width) * vc->vc_font.width); -@@ -66,10 +66,10 @@ static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, - static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy, - int sx, int height, int width, int fg, int bg) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - struct fb_fillrect region; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - - region.color = bg; - region.dy = vyres - ((sy + height) * vc->vc_font.height); -@@ -86,13 +86,13 @@ static inline void ud_putcs_aligned(struct vc_data *vc, struct fb_info *info, - u32 d_pitch, u32 s_pitch, u32 cellsize, - struct fb_image *image, u8 *buf, u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 idx = vc->vc_font.width >> 3; - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ud_update_attr(buf, src, attr, vc); -@@ -119,7 +119,7 @@ static inline void ud_putcs_unaligned(struct vc_data *vc, - struct fb_image *image, u8 *buf, - u8 *dst) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u16 charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - u32 shift_low = 0, mod = vc->vc_font.width % 8; - u32 shift_high = 8; -@@ -127,7 +127,7 @@ static inline void ud_putcs_unaligned(struct vc_data *vc, - u8 *src; - - while (cnt--) { -- src = ops->fontbuffer + (scr_readw(s--) & charmask)*cellsize; -+ src = par->fontbuffer + (scr_readw(s--) & charmask) * cellsize; - - if (attr) { - ud_update_attr(buf, src, attr, vc); -@@ -152,7 +152,7 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, - int fg, int bg) - { - struct fb_image image; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - u32 width = (vc->vc_font.width + 7)/8; - u32 cellsize = width * vc->vc_font.height; - u32 maxcnt = info->pixmap.size/cellsize; -@@ -161,10 +161,10 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, - u32 mod = vc->vc_font.width % 8, cnt, pitch, size; - u32 attribute = get_attribute(info, scr_readw(s)); - u8 *dst, *buf = NULL; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - image.fg_color = fg; -@@ -251,29 +251,29 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - int fg, int bg) - { - struct fb_cursor cursor; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; - int w = (vc->vc_font.width + 7) >> 3, c; -- int y = real_y(ops->p, vc->state.y); -+ int y = real_y(par->p, vc->state.y); - int attribute, use_sw = vc->vc_cursor_type & CUR_SW; - int err = 1, dx, dy; - char *src; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - -- if (!ops->fontbuffer) -+ if (!par->fontbuffer) - return; - - cursor.set = 0; - - c = scr_readw((u16 *) vc->vc_pos); - attribute = get_attribute(info, c); -- src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.height)); -+ src = par->fontbuffer + ((c & charmask) * (w * vc->vc_font.height)); - -- if (ops->cursor_state.image.data != src || -- ops->cursor_reset) { -- ops->cursor_state.image.data = src; -- cursor.set |= FB_CUR_SETIMAGE; -+ if (par->cursor_state.image.data != src || -+ par->cursor_reset) { -+ par->cursor_state.image.data = src; -+ cursor.set |= FB_CUR_SETIMAGE; - } - - if (attribute) { -@@ -282,49 +282,49 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - dst = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - if (!dst) - return; -- kfree(ops->cursor_data); -- ops->cursor_data = dst; -+ kfree(par->cursor_data); -+ par->cursor_data = dst; - ud_update_attr(dst, src, attribute, vc); - src = dst; - } - -- if (ops->cursor_state.image.fg_color != fg || -- ops->cursor_state.image.bg_color != bg || -- ops->cursor_reset) { -- ops->cursor_state.image.fg_color = fg; -- ops->cursor_state.image.bg_color = bg; -+ if (par->cursor_state.image.fg_color != fg || -+ par->cursor_state.image.bg_color != bg || -+ par->cursor_reset) { -+ par->cursor_state.image.fg_color = fg; -+ par->cursor_state.image.bg_color = bg; - cursor.set |= FB_CUR_SETCMAP; - } - -- if (ops->cursor_state.image.height != vc->vc_font.height || -- ops->cursor_state.image.width != vc->vc_font.width || -- ops->cursor_reset) { -- ops->cursor_state.image.height = vc->vc_font.height; -- ops->cursor_state.image.width = vc->vc_font.width; -+ if (par->cursor_state.image.height != vc->vc_font.height || -+ par->cursor_state.image.width != vc->vc_font.width || -+ par->cursor_reset) { -+ par->cursor_state.image.height = vc->vc_font.height; -+ par->cursor_state.image.width = vc->vc_font.width; - cursor.set |= FB_CUR_SETSIZE; - } - - dy = vyres - ((y * vc->vc_font.height) + vc->vc_font.height); - dx = vxres - ((vc->state.x * vc->vc_font.width) + vc->vc_font.width); - -- if (ops->cursor_state.image.dx != dx || -- ops->cursor_state.image.dy != dy || -- ops->cursor_reset) { -- ops->cursor_state.image.dx = dx; -- ops->cursor_state.image.dy = dy; -+ if (par->cursor_state.image.dx != dx || -+ par->cursor_state.image.dy != dy || -+ par->cursor_reset) { -+ par->cursor_state.image.dx = dx; -+ par->cursor_state.image.dy = dy; - cursor.set |= FB_CUR_SETPOS; - } - -- if (ops->cursor_state.hot.x || ops->cursor_state.hot.y || -- ops->cursor_reset) { -- ops->cursor_state.hot.x = cursor.hot.y = 0; -+ if (par->cursor_state.hot.x || par->cursor_state.hot.y || -+ par->cursor_reset) { -+ par->cursor_state.hot.x = cursor.hot.y = 0; - cursor.set |= FB_CUR_SETHOT; - } - - if (cursor.set & FB_CUR_SETSIZE || -- vc->vc_cursor_type != ops->p->cursor_shape || -- ops->cursor_state.mask == NULL || -- ops->cursor_reset) { -+ vc->vc_cursor_type != par->p->cursor_shape || -+ par->cursor_state.mask == NULL || -+ par->cursor_reset) { - char *mask = kmalloc_array(w, vc->vc_font.height, GFP_ATOMIC); - int cur_height, size, i = 0; - u8 msk = 0xff; -@@ -332,13 +332,13 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (!mask) - return; - -- kfree(ops->cursor_state.mask); -- ops->cursor_state.mask = mask; -+ kfree(par->cursor_state.mask); -+ par->cursor_state.mask = mask; - -- ops->p->cursor_shape = vc->vc_cursor_type; -+ par->p->cursor_shape = vc->vc_cursor_type; - cursor.set |= FB_CUR_SETSHAPE; - -- switch (CUR_SIZE(ops->p->cursor_shape)) { -+ switch (CUR_SIZE(par->p->cursor_shape)) { - case CUR_NONE: - cur_height = 0; - break; -@@ -371,19 +371,19 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - mask[i++] = ~msk; - } - -- ops->cursor_state.enable = enable && !use_sw; -+ par->cursor_state.enable = enable && !use_sw; - - cursor.image.data = src; -- cursor.image.fg_color = ops->cursor_state.image.fg_color; -- cursor.image.bg_color = ops->cursor_state.image.bg_color; -- cursor.image.dx = ops->cursor_state.image.dx; -- cursor.image.dy = ops->cursor_state.image.dy; -- cursor.image.height = ops->cursor_state.image.height; -- cursor.image.width = ops->cursor_state.image.width; -- cursor.hot.x = ops->cursor_state.hot.x; -- cursor.hot.y = ops->cursor_state.hot.y; -- cursor.mask = ops->cursor_state.mask; -- cursor.enable = ops->cursor_state.enable; -+ cursor.image.fg_color = par->cursor_state.image.fg_color; -+ cursor.image.bg_color = par->cursor_state.image.bg_color; -+ cursor.image.dx = par->cursor_state.image.dx; -+ cursor.image.dy = par->cursor_state.image.dy; -+ cursor.image.height = par->cursor_state.image.height; -+ cursor.image.width = par->cursor_state.image.width; -+ cursor.hot.x = par->cursor_state.hot.x; -+ cursor.hot.y = par->cursor_state.hot.y; -+ cursor.mask = par->cursor_state.mask; -+ cursor.enable = par->cursor_state.enable; - cursor.image.depth = 1; - cursor.rop = ROP_XOR; - -@@ -393,36 +393,36 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - if (err) - soft_cursor(info, &cursor); - -- ops->cursor_reset = 0; -+ par->cursor_reset = 0; - } - - static int ud_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int xoffset, yoffset; -- u32 vyres = GETVYRES(ops->p, info); -- u32 vxres = GETVXRES(ops->p, info); -+ u32 vyres = GETVYRES(par->p, info); -+ u32 vxres = GETVXRES(par->p, info); - int err; - -- xoffset = vxres - info->var.xres - ops->var.xoffset; -- yoffset = vyres - info->var.yres - ops->var.yoffset; -+ xoffset = vxres - info->var.xres - par->var.xoffset; -+ yoffset = vyres - info->var.yres - par->var.yoffset; - if (yoffset < 0) - yoffset += vyres; -- ops->var.xoffset = xoffset; -- ops->var.yoffset = yoffset; -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ par->var.xoffset = xoffset; -+ par->var.yoffset = yoffset; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - --void fbcon_rotate_ud(struct fbcon_ops *ops) -+void fbcon_rotate_ud(struct fbcon_par *par) - { -- ops->bmove = ud_bmove; -- ops->clear = ud_clear; -- ops->putcs = ud_putcs; -- ops->clear_margins = ud_clear_margins; -- ops->cursor = ud_cursor; -- ops->update_start = ud_update_start; -+ par->bmove = ud_bmove; -+ par->clear = ud_clear; -+ par->putcs = ud_putcs; -+ par->clear_margins = ud_clear_margins; -+ par->cursor = ud_cursor; -+ par->update_start = ud_update_start; - } -diff --git a/drivers/video/fbdev/core/softcursor.c b/drivers/video/fbdev/core/softcursor.c -index 29e5b21cf373e..900788c059153 100644 ---- a/drivers/video/fbdev/core/softcursor.c -+++ b/drivers/video/fbdev/core/softcursor.c -@@ -21,7 +21,7 @@ - - int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - unsigned int scan_align = info->pixmap.scan_align - 1; - unsigned int buf_align = info->pixmap.buf_align - 1; - unsigned int i, size, dsize, s_pitch, d_pitch; -@@ -34,19 +34,19 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) - s_pitch = (cursor->image.width + 7) >> 3; - dsize = s_pitch * cursor->image.height; - -- if (dsize + sizeof(struct fb_image) != ops->cursor_size) { -- kfree(ops->cursor_src); -- ops->cursor_size = dsize + sizeof(struct fb_image); -+ if (dsize + sizeof(struct fb_image) != par->cursor_size) { -+ kfree(par->cursor_src); -+ par->cursor_size = dsize + sizeof(struct fb_image); - -- ops->cursor_src = kmalloc(ops->cursor_size, GFP_ATOMIC); -- if (!ops->cursor_src) { -- ops->cursor_size = 0; -+ par->cursor_src = kmalloc(par->cursor_size, GFP_ATOMIC); -+ if (!par->cursor_src) { -+ par->cursor_size = 0; - return -ENOMEM; - } - } - -- src = ops->cursor_src + sizeof(struct fb_image); -- image = (struct fb_image *)ops->cursor_src; -+ src = par->cursor_src + sizeof(struct fb_image); -+ image = (struct fb_image *)par->cursor_src; - *image = cursor->image; - d_pitch = (s_pitch + scan_align) & ~scan_align; - -diff --git a/drivers/video/fbdev/core/tileblit.c b/drivers/video/fbdev/core/tileblit.c -index d342b90c42b7f..4428f2bcd3f8c 100644 ---- a/drivers/video/fbdev/core/tileblit.c -+++ b/drivers/video/fbdev/core/tileblit.c -@@ -151,34 +151,34 @@ static void tile_cursor(struct vc_data *vc, struct fb_info *info, bool enable, - - static int tile_update_start(struct fb_info *info) - { -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - int err; - -- err = fb_pan_display(info, &ops->var); -- ops->var.xoffset = info->var.xoffset; -- ops->var.yoffset = info->var.yoffset; -- ops->var.vmode = info->var.vmode; -+ err = fb_pan_display(info, &par->var); -+ par->var.xoffset = info->var.xoffset; -+ par->var.yoffset = info->var.yoffset; -+ par->var.vmode = info->var.vmode; - return err; - } - - void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) - { - struct fb_tilemap map; -- struct fbcon_ops *ops = info->fbcon_par; -+ struct fbcon_par *par = info->fbcon_par; - -- ops->bmove = tile_bmove; -- ops->clear = tile_clear; -- ops->putcs = tile_putcs; -- ops->clear_margins = tile_clear_margins; -- ops->cursor = tile_cursor; -- ops->update_start = tile_update_start; -+ par->bmove = tile_bmove; -+ par->clear = tile_clear; -+ par->putcs = tile_putcs; -+ par->clear_margins = tile_clear_margins; -+ par->cursor = tile_cursor; -+ par->update_start = tile_update_start; - -- if (ops->p) { -+ if (par->p) { - map.width = vc->vc_font.width; - map.height = vc->vc_font.height; - map.depth = 1; - map.length = vc->vc_font.charcount; -- map.data = ops->p->fontdata; -+ map.data = par->p->fontdata; - info->tileops->fb_settile(info, &map); - } - } --- -2.51.0 - diff --git a/queue-6.18/fbcon-set-rotate_font-callback-with-related-callback.patch b/queue-6.18/fbcon-set-rotate_font-callback-with-related-callback.patch deleted file mode 100644 index 3273c258c8..0000000000 --- a/queue-6.18/fbcon-set-rotate_font-callback-with-related-callback.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 53f6b5ab9bc90847781c94b71d1a86e526200d3e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 9 Sep 2025 14:44:43 +0200 -Subject: fbcon: Set rotate_font callback with related callbacks - -From: Thomas Zimmermann - -[ Upstream commit 9cfd09402eb45f1b14b60668fd7c628445efdd8d ] - -The field struct fbcon_par.rotate_font points to fbcon_rotate_font() if -the console is rotated. Set the callback in the same place as the other -callbacks. Prepares for declaring all fbcon callbacks in a dedicated -struct type. - -If not rotated, fbcon_set_bitops() still clears the callback to NULL. - -Signed-off-by: Thomas Zimmermann -Reviewed-by: Sam Ravnborg -Link: https://lore.kernel.org/r/20250909124616.143365-4-tzimmermann@suse.de -Stable-dep-of: 8e9bf8b9e8c0 ("printk, vt, fbcon: Remove console_conditional_schedule()") -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/core/fbcon_ccw.c | 1 + - drivers/video/fbdev/core/fbcon_cw.c | 1 + - drivers/video/fbdev/core/fbcon_rotate.c | 4 +--- - drivers/video/fbdev/core/fbcon_rotate.h | 3 +++ - drivers/video/fbdev/core/fbcon_ud.c | 1 + - 5 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/drivers/video/fbdev/core/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c -index 2ba8ec4c3e2bc..ba744b67a4fd9 100644 ---- a/drivers/video/fbdev/core/fbcon_ccw.c -+++ b/drivers/video/fbdev/core/fbcon_ccw.c -@@ -398,4 +398,5 @@ void fbcon_rotate_ccw(struct fbcon_par *par) - par->clear_margins = ccw_clear_margins; - par->cursor = ccw_cursor; - par->update_start = ccw_update_start; -+ par->rotate_font = fbcon_rotate_font; - } -diff --git a/drivers/video/fbdev/core/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c -index 4bd22d5ee5f41..974bd9d9b7702 100644 ---- a/drivers/video/fbdev/core/fbcon_cw.c -+++ b/drivers/video/fbdev/core/fbcon_cw.c -@@ -381,4 +381,5 @@ void fbcon_rotate_cw(struct fbcon_par *par) - par->clear_margins = cw_clear_margins; - par->cursor = cw_cursor; - par->update_start = cw_update_start; -+ par->rotate_font = fbcon_rotate_font; - } -diff --git a/drivers/video/fbdev/core/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c -index 380b2746451a1..0c7cac71a9c21 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.c -+++ b/drivers/video/fbdev/core/fbcon_rotate.c -@@ -18,7 +18,7 @@ - #include "fbcon.h" - #include "fbcon_rotate.h" - --static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) -+int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - { - struct fbcon_par *par = info->fbcon_par; - int len, err = 0; -@@ -95,8 +95,6 @@ static int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc) - - void fbcon_set_rotate(struct fbcon_par *par) - { -- par->rotate_font = fbcon_rotate_font; -- - switch (par->rotate) { - case FB_ROTATE_CW: - fbcon_rotate_cw(par); -diff --git a/drivers/video/fbdev/core/fbcon_rotate.h b/drivers/video/fbdev/core/fbcon_rotate.h -index 48305e1a07631..784f3231a958f 100644 ---- a/drivers/video/fbdev/core/fbcon_rotate.h -+++ b/drivers/video/fbdev/core/fbcon_rotate.h -@@ -90,7 +90,10 @@ static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height) - } - } - -+int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc); -+ - extern void fbcon_rotate_cw(struct fbcon_par *par); - extern void fbcon_rotate_ud(struct fbcon_par *par); - extern void fbcon_rotate_ccw(struct fbcon_par *par); -+ - #endif -diff --git a/drivers/video/fbdev/core/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c -index 14b40e2bf323f..1a214a4d538fb 100644 ---- a/drivers/video/fbdev/core/fbcon_ud.c -+++ b/drivers/video/fbdev/core/fbcon_ud.c -@@ -425,4 +425,5 @@ void fbcon_rotate_ud(struct fbcon_par *par) - par->clear_margins = ud_clear_margins; - par->cursor = ud_cursor; - par->update_start = ud_update_start; -+ par->rotate_font = fbcon_rotate_font; - } --- -2.51.0 - diff --git a/queue-6.18/printk-vt-fbcon-remove-console_conditional_schedule.patch b/queue-6.18/printk-vt-fbcon-remove-console_conditional_schedule.patch deleted file mode 100644 index d07055a4a2..0000000000 --- a/queue-6.18/printk-vt-fbcon-remove-console_conditional_schedule.patch +++ /dev/null @@ -1,176 +0,0 @@ -From 8582538229755cef300ddccabe133abdb11aca9a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jan 2026 19:08:36 +0100 -Subject: printk, vt, fbcon: Remove console_conditional_schedule() - -From: Sebastian Andrzej Siewior - -[ Upstream commit 8e9bf8b9e8c0a3e1ef16dd48260a113f65ed01d2 ] - -do_con_write(), fbcon_redraw.*() invoke console_conditional_schedule() -which is a conditional scheduling point based on printk's internal -variables console_may_schedule. It may only be used if the console lock -is acquired for instance via console_lock() or console_trylock(). - -Prinkt sets the internal variable to 1 (and allows to schedule) -if the console lock has been acquired via console_lock(). The trylock -does not allow it. - -The console_conditional_schedule() invocation in do_con_write() is -invoked shortly before console_unlock(). -The console_conditional_schedule() invocation in fbcon_redraw.*() -original from fbcon_scroll() / vt's con_scroll() which originate from a -line feed. - -In console_unlock() the variable is set to 0 (forbids to schedule) and -it tries to schedule while making progress printing. This is brand new -compared to when console_conditional_schedule() was added in v2.4.9.11. - -In v2.6.38-rc3, console_unlock() (started its existence) iterated over -all consoles and flushed them with disabled interrupts. A scheduling -attempt here was not possible, it relied that a long print scheduled -before console_unlock(). - -Since commit 8d91f8b15361d ("printk: do cond_resched() between lines -while outputting to consoles"), which appeared in v4.5-rc1, -console_unlock() attempts to schedule if it was allowed to schedule -while during console_lock(). Each record is idealy one line so after -every line feed. - -This console_conditional_schedule() is also only relevant on -PREEMPT_NONE and PREEMPT_VOLUNTARY builds. In other configurations -cond_resched() becomes a nop and has no impact. - -I'm bringing this all up just proof that it is not required anymore. It -becomes a problem on a PREEMPT_RT build with debug code enabled because -that might_sleep() in cond_resched() remains and triggers a warnings. -This is due to - - legacy_kthread_func-> console_flush_one_record -> vt_console_print-> lf - -> con_scroll -> fbcon_scroll - -and vt_console_print() acquires a spinlock_t which does not allow a -voluntary schedule. There is no need to fb_scroll() to schedule since -console_flush_one_record() attempts to schedule after each line. -!PREEMPT_RT is not affected because the legacy printing thread is only -enabled on PREEMPT_RT builds. - -Therefore I suggest to remove console_conditional_schedule(). - -Cc: Simona Vetter -Cc: Helge Deller -Cc: linux-fbdev@vger.kernel.org -Cc: dri-devel@lists.freedesktop.org -Fixes: 5f53ca3ff83b4 ("printk: Implement legacy printer kthread for PREEMPT_RT") -Signed-off-by: Sebastian Andrzej Siewior -Acked-by: Greg Kroah-Hartman -Acked-by: Petr Mladek # from printk() POV -Signed-off-by: Helge Deller -Signed-off-by: Sasha Levin ---- - drivers/tty/vt/vt.c | 1 - - drivers/video/fbdev/core/fbcon.c | 6 ------ - include/linux/console.h | 1 - - kernel/printk/printk.c | 16 ---------------- - 4 files changed, 24 deletions(-) - -diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c -index 6e0089b85c270..53dffb6e00a91 100644 ---- a/drivers/tty/vt/vt.c -+++ b/drivers/tty/vt/vt.c -@@ -3236,7 +3236,6 @@ static int do_con_write(struct tty_struct *tty, const u8 *buf, int count) - goto rescan_last_byte; - } - con_flush(vc, &draw); -- console_conditional_schedule(); - notify_update(vc); - - return n; -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 413aa46228549..19469c60ce45f 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -1586,12 +1586,10 @@ static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p, - start = s; - } - } -- console_conditional_schedule(); - s++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, dy, x); -- console_conditional_schedule(); - dy++; - } - } -@@ -1627,14 +1625,12 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - } - - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, - s - start); -- console_conditional_schedule(); - if (ycount > 0) - line++; - else { -@@ -1682,13 +1678,11 @@ static void fbcon_redraw(struct vc_data *vc, int line, int count, int offset) - } - } - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, line, x); -- console_conditional_schedule(); - if (offset > 0) - line++; - else { -diff --git a/include/linux/console.h b/include/linux/console.h -index 031a58dc2b911..a307f89c5e687 100644 ---- a/include/linux/console.h -+++ b/include/linux/console.h -@@ -629,7 +629,6 @@ extern int unregister_console(struct console *); - extern void console_lock(void); - extern int console_trylock(void); - extern void console_unlock(void); --extern void console_conditional_schedule(void); - extern void console_unblank(void); - extern void console_flush_on_panic(enum con_flush_mode mode); - extern struct tty_driver *console_device(int *); -diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index c27fc7fc64eb5..0c26491f732c2 100644 ---- a/kernel/printk/printk.c -+++ b/kernel/printk/printk.c -@@ -3322,22 +3322,6 @@ void console_unlock(void) - } - EXPORT_SYMBOL(console_unlock); - --/** -- * console_conditional_schedule - yield the CPU if required -- * -- * If the console code is currently allowed to sleep, and -- * if this CPU should yield the CPU to another task, do -- * so here. -- * -- * Must be called within console_lock();. -- */ --void __sched console_conditional_schedule(void) --{ -- if (console_may_schedule) -- cond_resched(); --} --EXPORT_SYMBOL(console_conditional_schedule); -- - void console_unblank(void) - { - bool found_unblank = false; --- -2.51.0 - diff --git a/queue-6.18/series b/queue-6.18/series index 092fe9a9ba..e3ab7275e7 100644 --- a/queue-6.18/series +++ b/queue-6.18/series @@ -398,10 +398,6 @@ tracing-properly-process-error-handling-in-event_his.patch tracing-remove-duplicate-enable_event_str-and-disabl.patch remoteproc-imx_dsp_rproc-only-reset-carveout-memory-.patch revert-mailbox-pcc-support-mailbox-management-of-the.patch -fbcon-rename-struct-fbcon_ops-to-struct-fbcon_par.patch -fbcon-set-rotate_font-callback-with-related-callback.patch -fbcon-move-fbcon-callbacks-into-struct-fbcon_bitops.patch -printk-vt-fbcon-remove-console_conditional_schedule.patch fbdev-of_display_timing-fix-device-node-reference-le.patch fbdev-au1200fb-fix-a-memory-leak-in-au1200fb_drv_pro.patch clk-thead-th1520-ap-poll-for-pll-lock-and-wait-for-s.patch diff --git a/queue-6.19/printk-vt-fbcon-remove-console_conditional_schedule.patch b/queue-6.19/printk-vt-fbcon-remove-console_conditional_schedule.patch deleted file mode 100644 index 44c0ce15a5..0000000000 --- a/queue-6.19/printk-vt-fbcon-remove-console_conditional_schedule.patch +++ /dev/null @@ -1,176 +0,0 @@ -From fa53eabe488d48c2752e37735ff6db38d4e9956f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jan 2026 19:08:36 +0100 -Subject: printk, vt, fbcon: Remove console_conditional_schedule() - -From: Sebastian Andrzej Siewior - -[ Upstream commit 8e9bf8b9e8c0a3e1ef16dd48260a113f65ed01d2 ] - -do_con_write(), fbcon_redraw.*() invoke console_conditional_schedule() -which is a conditional scheduling point based on printk's internal -variables console_may_schedule. It may only be used if the console lock -is acquired for instance via console_lock() or console_trylock(). - -Prinkt sets the internal variable to 1 (and allows to schedule) -if the console lock has been acquired via console_lock(). The trylock -does not allow it. - -The console_conditional_schedule() invocation in do_con_write() is -invoked shortly before console_unlock(). -The console_conditional_schedule() invocation in fbcon_redraw.*() -original from fbcon_scroll() / vt's con_scroll() which originate from a -line feed. - -In console_unlock() the variable is set to 0 (forbids to schedule) and -it tries to schedule while making progress printing. This is brand new -compared to when console_conditional_schedule() was added in v2.4.9.11. - -In v2.6.38-rc3, console_unlock() (started its existence) iterated over -all consoles and flushed them with disabled interrupts. A scheduling -attempt here was not possible, it relied that a long print scheduled -before console_unlock(). - -Since commit 8d91f8b15361d ("printk: do cond_resched() between lines -while outputting to consoles"), which appeared in v4.5-rc1, -console_unlock() attempts to schedule if it was allowed to schedule -while during console_lock(). Each record is idealy one line so after -every line feed. - -This console_conditional_schedule() is also only relevant on -PREEMPT_NONE and PREEMPT_VOLUNTARY builds. In other configurations -cond_resched() becomes a nop and has no impact. - -I'm bringing this all up just proof that it is not required anymore. It -becomes a problem on a PREEMPT_RT build with debug code enabled because -that might_sleep() in cond_resched() remains and triggers a warnings. -This is due to - - legacy_kthread_func-> console_flush_one_record -> vt_console_print-> lf - -> con_scroll -> fbcon_scroll - -and vt_console_print() acquires a spinlock_t which does not allow a -voluntary schedule. There is no need to fb_scroll() to schedule since -console_flush_one_record() attempts to schedule after each line. -!PREEMPT_RT is not affected because the legacy printing thread is only -enabled on PREEMPT_RT builds. - -Therefore I suggest to remove console_conditional_schedule(). - -Cc: Simona Vetter -Cc: Helge Deller -Cc: linux-fbdev@vger.kernel.org -Cc: dri-devel@lists.freedesktop.org -Fixes: 5f53ca3ff83b4 ("printk: Implement legacy printer kthread for PREEMPT_RT") -Signed-off-by: Sebastian Andrzej Siewior -Acked-by: Greg Kroah-Hartman -Acked-by: Petr Mladek # from printk() POV -Signed-off-by: Helge Deller -Signed-off-by: Sasha Levin ---- - drivers/tty/vt/vt.c | 1 - - drivers/video/fbdev/core/fbcon.c | 6 ------ - include/linux/console.h | 1 - - kernel/printk/printk.c | 16 ---------------- - 4 files changed, 24 deletions(-) - -diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c -index 59b4b5e126ba1..53daf7614b1af 100644 ---- a/drivers/tty/vt/vt.c -+++ b/drivers/tty/vt/vt.c -@@ -3236,7 +3236,6 @@ static int do_con_write(struct tty_struct *tty, const u8 *buf, int count) - goto rescan_last_byte; - } - con_flush(vc, &draw); -- console_conditional_schedule(); - notify_update(vc); - - return n; -diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c -index 7be9e865325d9..36dd9d4a46ae0 100644 ---- a/drivers/video/fbdev/core/fbcon.c -+++ b/drivers/video/fbdev/core/fbcon.c -@@ -1607,12 +1607,10 @@ static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p, - start = s; - } - } -- console_conditional_schedule(); - s++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, dy, x); -- console_conditional_schedule(); - dy++; - } - } -@@ -1648,14 +1646,12 @@ static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, - } - - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, - s - start); -- console_conditional_schedule(); - if (ycount > 0) - line++; - else { -@@ -1703,13 +1699,11 @@ static void fbcon_redraw(struct vc_data *vc, int line, int count, int offset) - } - } - scr_writew(c, d); -- console_conditional_schedule(); - s++; - d++; - } while (s < le); - if (s > start) - fbcon_putcs(vc, start, s - start, line, x); -- console_conditional_schedule(); - if (offset > 0) - line++; - else { -diff --git a/include/linux/console.h b/include/linux/console.h -index fc9f5c5c1b04c..ec506d3501965 100644 ---- a/include/linux/console.h -+++ b/include/linux/console.h -@@ -697,7 +697,6 @@ extern int unregister_console(struct console *); - extern void console_lock(void); - extern int console_trylock(void); - extern void console_unlock(void); --extern void console_conditional_schedule(void); - extern void console_unblank(void); - extern void console_flush_on_panic(enum con_flush_mode mode); - extern struct tty_driver *console_device(int *); -diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index 1d765ad242b82..9296bf41aa49d 100644 ---- a/kernel/printk/printk.c -+++ b/kernel/printk/printk.c -@@ -3362,22 +3362,6 @@ void console_unlock(void) - } - EXPORT_SYMBOL(console_unlock); - --/** -- * console_conditional_schedule - yield the CPU if required -- * -- * If the console code is currently allowed to sleep, and -- * if this CPU should yield the CPU to another task, do -- * so here. -- * -- * Must be called within console_lock();. -- */ --void __sched console_conditional_schedule(void) --{ -- if (console_may_schedule) -- cond_resched(); --} --EXPORT_SYMBOL(console_conditional_schedule); -- - void console_unblank(void) - { - bool found_unblank = false; --- -2.51.0 - diff --git a/queue-6.19/series b/queue-6.19/series index 7d3cfa9a1e..0d4d0dc905 100644 --- a/queue-6.19/series +++ b/queue-6.19/series @@ -507,7 +507,6 @@ remoteproc-imx_rproc-use-strstarts-for-rsc-table-che.patch remoteproc-imx_dsp_rproc-fix-multiple-start-stop-ope.patch remoteproc-imx_dsp_rproc-only-reset-carveout-memory-.patch revert-mailbox-pcc-support-mailbox-management-of-the.patch -printk-vt-fbcon-remove-console_conditional_schedule.patch fbdev-of_display_timing-fix-device-node-reference-le.patch fbdev-au1200fb-fix-a-memory-leak-in-au1200fb_drv_pro.patch clk-thead-th1520-ap-poll-for-pll-lock-and-wait-for-s.patch