Message ID | 20201029101428.4058311-1-daniel.vetter@ffwll.ch (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] fbcon: Disable accelerated scrolling | expand |
Hi Daniel,
I love your patch! Perhaps something to improve:
[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master drm/drm-next v5.10-rc1 next-20201028]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Daniel-Vetter/fbcon-Disable-accelerated-scrolling/20201029-181618
base: git://anongit.freedesktop.org/drm-intel for-linux-next
config: sparc64-randconfig-r005-20201029 (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/b457f0ea024ca7202fa63f5a94f9d5abf65529f8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Daniel-Vetter/fbcon-Disable-accelerated-scrolling/20201029-181618
git checkout b457f0ea024ca7202fa63f5a94f9d5abf65529f8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/video/fbdev/core/fbcon.c: In function 'fbcon_init':
>> drivers/video/fbdev/core/fbcon.c:1089:6: warning: variable 'cap' set but not used [-Wunused-but-set-variable]
1089 | int cap, ret;
| ^~~
drivers/video/fbdev/core/fbcon.c: In function 'fbcon_exit':
drivers/video/fbdev/core/fbcon.c:3646:7: warning: variable 'pending' set but not used [-Wunused-but-set-variable]
3646 | int pending = 0;
| ^~~~~~~
vim +/cap +1089 drivers/video/fbdev/core/fbcon.c
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1080
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1081 static void fbcon_init(struct vc_data *vc, int init)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1082 {
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1083 struct fb_info *info;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1084 struct fbcon_ops *ops;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1085 struct vc_data **default_mode = vc->vc_display_fg;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1086 struct vc_data *svc = *default_mode;
50233393f0cf9b drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1087 struct fbcon_display *t, *p = &fb_display[vc->vc_num];
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1088 int logo = 1, new_rows, new_cols, rows, cols, charcnt = 256;
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 @1089 int cap, ret;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1090
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1091 if (WARN_ON(info_idx == -1))
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1092 return;
306958e8e8d150 drivers/video/console/fbcon.c Adrian Bunk 2005-05-01 1093
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1094 if (con2fb_map[vc->vc_num] == -1)
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1095 con2fb_map[vc->vc_num] = info_idx;
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1096
1f4ed2fb01f80f drivers/video/fbdev/core/fbcon.c Daniel Vetter 2019-05-28 1097 info = registered_fb[con2fb_map[vc->vc_num]];
306958e8e8d150 drivers/video/console/fbcon.c Adrian Bunk 2005-05-01 1098 cap = info->flags;
306958e8e8d150 drivers/video/console/fbcon.c Adrian Bunk 2005-05-01 1099
3c5a1b111373e6 drivers/video/fbdev/core/fbcon.c Andreas Schwab 2019-05-06 1100 if (logo_shown < 0 && console_loglevel <= CONSOLE_LOGLEVEL_QUIET)
10993504d64735 drivers/video/fbdev/core/fbcon.c Prarit Bhargava 2019-02-08 1101 logo_shown = FBCON_LOGO_DONTSHOW;
10993504d64735 drivers/video/fbdev/core/fbcon.c Prarit Bhargava 2019-02-08 1102
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1103 if (vc != svc || logo_shown == FBCON_LOGO_DONTSHOW ||
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1104 (info->fix.type == FB_TYPE_TEXT))
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1105 logo = 0;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1106
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1107 if (var_to_display(p, &info->var, info))
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1108 return;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1109
d1baa4ffa677bf drivers/video/console/fbcon.c Antonino A. Daplas 2007-07-17 1110 if (!info->fbcon_par)
d1baa4ffa677bf drivers/video/console/fbcon.c Antonino A. Daplas 2007-07-17 1111 con2fb_acquire_newinfo(vc, info, vc->vc_num, -1);
d1baa4ffa677bf drivers/video/console/fbcon.c Antonino A. Daplas 2007-07-17 1112
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1113 /* If we are not the first console on this
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1114 fb, copy the font from that console */
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1115 t = &fb_display[fg_console];
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1116 if (!p->fontdata) {
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1117 if (t->fontdata) {
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1118 struct vc_data *fvc = vc_cons[fg_console].d;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1119
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1120 vc->vc_font.data = (void *)(p->fontdata =
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1121 fvc->vc_font.data);
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1122 vc->vc_font.width = fvc->vc_font.width;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1123 vc->vc_font.height = fvc->vc_font.height;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1124 p->userfont = t->userfont;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1125
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1126 if (p->userfont)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1127 REFCOUNT(p->fontdata)++;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1128 } else {
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1129 const struct font_desc *font = NULL;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1130
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1131 if (!fontname[0] || !(font = find_font(fontname)))
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1132 font = get_default_font(info->var.xres,
2d2699d9849248 drivers/video/console/fbcon.c Antonino A. Daplas 2007-05-08 1133 info->var.yres,
2d2699d9849248 drivers/video/console/fbcon.c Antonino A. Daplas 2007-05-08 1134 info->pixmap.blit_x,
2d2699d9849248 drivers/video/console/fbcon.c Antonino A. Daplas 2007-05-08 1135 info->pixmap.blit_y);
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1136 vc->vc_font.width = font->width;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1137 vc->vc_font.height = font->height;
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1138 vc->vc_font.data = (void *)(p->fontdata = font->data);
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1139 vc->vc_font.charcount = 256; /* FIXME Need to
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1140 support more fonts */
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1141 }
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1142 }
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1143
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1144 if (p->userfont)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1145 charcnt = FNTCHARCNT(p->fontdata);
e614b18dcedb24 drivers/video/console/fbcon.c Antonino A. Daplas 2006-06-26 1146
b8c909454f046b drivers/video/console/fbcon.c Antonino A. Daplas 2005-09-09 1147 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1);
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1148 vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1149 if (charcnt == 256) {
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1150 vc->vc_hi_font_mask = 0;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1151 } else {
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1152 vc->vc_hi_font_mask = 0x100;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1153 if (vc->vc_can_do_color)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1154 vc->vc_complement_mask <<= 1;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1155 }
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1156
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1157 if (!*svc->vc_uni_pagedir_loc)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1158 con_set_default_unimap(svc);
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1159 if (!*vc->vc_uni_pagedir_loc)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1160 con_copy_unimap(vc, svc);
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1161
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1162 ops = info->fbcon_par;
f235f664a8afab drivers/video/console/fbcon.c Scot Doyle 2015-10-09 1163 ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
c9e6a36492504e drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1164
2428e59b530928 drivers/video/console/fbcon.c Marcin Slusarz 2008-02-06 1165 p->con_rotate = initial_rotation;
c9e6a36492504e drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1166 if (p->con_rotate == -1)
c9e6a36492504e drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1167 p->con_rotate = info->fbcon_rotate_hint;
c9e6a36492504e drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1168 if (p->con_rotate == -1)
f2f4946b0adfd6 drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1169 p->con_rotate = FB_ROTATE_UR;
c9e6a36492504e drivers/video/fbdev/core/fbcon.c Hans de Goede 2017-11-25 1170
b73deed32d0874 drivers/video/console/fbcon.c Antonino A. Daplas 2006-01-09 1171 set_blitting_type(vc, info);
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1172
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1173 cols = vc->vc_cols;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1174 rows = vc->vc_rows;
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1175 new_cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres);
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1176 new_rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres);
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1177 new_cols /= vc->vc_font.width;
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1178 new_rows /= vc->vc_font.height;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1179
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1180 /*
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1181 * We must always set the mode. The mode of the previous console
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1182 * driver could be in the same resolution but we are using different
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1183 * hardware so we have to initialize the hardware.
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1184 *
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1185 * We need to do it in fbcon_init() to prevent screen corruption.
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1186 */
6ca8dfd78187d8 drivers/video/console/fbcon.c Jiri Slaby 2016-06-23 1187 if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) {
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1188 if (info->fbops->fb_set_par &&
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1189 !(ops->flags & FBCON_FLAGS_INIT)) {
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1190 ret = info->fbops->fb_set_par(info);
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1191
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1192 if (ret)
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1193 printk(KERN_ERR "fbcon_init: detected "
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1194 "unhandled fb_set_par error, "
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1195 "error code %d\n", ret);
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1196 }
0fcf6ada2b8eb4 drivers/video/console/fbcon.c Florian Tobias Schandinat 2009-09-22 1197
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1198 ops->flags |= FBCON_FLAGS_INIT;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1199 }
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1200
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1201 ops->graphics = 0;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1202
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1203 /*
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1204 * No more hw acceleration for fbcon.
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1205 *
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1206 * FIXME: Garbage collect all the now dead code after sufficient time
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1207 * has passed.
b457f0ea024ca7 drivers/video/fbdev/core/fbcon.c Daniel Vetter 2020-10-29 1208 */
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1209 p->scrollmode = SCROLL_REDRAW;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1210
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1211 /*
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1212 * ++guenther: console.c:vc_allocate() relies on initializing
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1213 * vc_{cols,rows}, but we must not set those if we are only
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1214 * resizing the console.
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1215 */
0035fe00f77d2b drivers/video/console/fbcon.c Johannes Weiner 2009-08-06 1216 if (init) {
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1217 vc->vc_cols = new_cols;
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1218 vc->vc_rows = new_rows;
0035fe00f77d2b drivers/video/console/fbcon.c Johannes Weiner 2009-08-06 1219 } else
0035fe00f77d2b drivers/video/console/fbcon.c Johannes Weiner 2009-08-06 1220 vc_resize(vc, new_cols, new_rows);
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1221
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1222 if (logo)
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1223 fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows);
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1224
4d9c5b6eb42d9e drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-07 1225 if (vc == svc && softback_buf)
4d9c5b6eb42d9e drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-07 1226 fbcon_update_softback(vc);
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1227
b73deed32d0874 drivers/video/console/fbcon.c Antonino A. Daplas 2006-01-09 1228 if (ops->rotate_font && ops->rotate_font(info, vc)) {
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1229 ops->rotate = FB_ROTATE_UR;
b73deed32d0874 drivers/video/console/fbcon.c Antonino A. Daplas 2006-01-09 1230 set_blitting_type(vc, info);
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1231 }
e4fc27618b7523 drivers/video/console/fbcon.c Antonino A. Daplas 2005-11-08 1232
1a37d5f51020b9 drivers/video/console/fbcon.c Antonino A. Daplas 2006-03-31 1233 ops->p = &fb_display[fg_console];
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1234 }
^1da177e4c3f41 drivers/video/console/fbcon.c Linus Torvalds 2005-04-16 1235
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Am 29.10.20 um 11:14 schrieb Daniel Vetter: > So ever since syzbot discovered fbcon, we have solid proof that it's > full of bugs. And often the solution is to just delete code and remove > features, e.g. 50145474f6ef ("fbcon: remove soft scrollback code"). > > Now the problem is that most modern-ish drivers really only treat > fbcon as an dumb kernel console until userspace takes over, and Oops > printer for some emergencies. Looking at drm drivers and the basic > vesa/efi fbdev drivers shows that only 3 drivers support any kind of > acceleration: > > - nouveau, seems to be enabled by default > - omapdrm, when a DMM remapper exists using remapper rewriting for > y/xpanning > - gma500, but that is getting deleted now for the GTT remapper trick, > and the accelerated copyarea never set the FBINFO_HWACCEL_COPYAREA > flag, so unused (and could be deleted already I think). > > No other driver supportes accelerated fbcon. And fbcon is the only > user of this accel code (it's not exposed as uapi through ioctls), > which means we could garbage collect fairly enormous amounts of code > if we kill this. > > Plus because syzbot only runs on virtual hardware, and none of the > drivers for that have acceleration, we'd remove a huge gap in testing. > And there's no other even remotely comprehensive testing aside from > syzbot. > > This patch here just disables the acceleration code by always > redrawing when scrolling. The plan is that once this has been merged > for well over a year in released kernels, we can start to go around > and delete a lot of code. > > v2: > - Drop a few more unused local variables, somehow I missed the > compiler warnings (Sam) > - Fix typo in comment (Jiri) > - add a todo entry for the cleanup (Thomas) Thanks :) > > Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> > Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Acked-by: Sam Ravnborg <sam@ravnborg.org> > Cc: Jiri Slaby <jirislaby@kernel.org> > Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Ben Skeggs <bskeggs@redhat.com> > Cc: nouveau@lists.freedesktop.org > Cc: Tomi Valkeinen <tomi.valkeinen@ti.com> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: Jiri Slaby <jirislaby@kernel.org> > Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org> > Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> > Cc: Peilin Ye <yepeilin.cs@gmail.com> > Cc: George Kennedy <george.kennedy@oracle.com> > Cc: Nathan Chancellor <natechancellor@gmail.com> > Cc: Peter Rosin <peda@axentia.se> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> > --- > Documentation/gpu/todo.rst | 18 ++++++++++++++ > drivers/video/fbdev/core/fbcon.c | 42 ++++++-------------------------- > 2 files changed, 25 insertions(+), 35 deletions(-) > > diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst > index 6b224ef14455..bec99341a904 100644 > --- a/Documentation/gpu/todo.rst > +++ b/Documentation/gpu/todo.rst > @@ -277,6 +277,24 @@ Contact: Daniel Vetter, Noralf Tronnes > > Level: Advanced > > +Garbage collect fbdev scrolling acceleration > +-------------------------------------------- > + > +Scroll acceleration is disabled in fbcon by hard-wiring p->scrollmode = > +SCROLL_REDRAW. There's a ton of code this will allow us to remove: > +- lots of code in fbcon.c > +- a bunch of the hooks in fbcon_ops, maybe the remaining hooks could be called > + directly instead of the function table (with a switch on p->rotate) > +- fb_copyarea is unused after this, and can be deleted from all drivers > + > +Note that not all acceleration code can be deleted, since clearing and cursor > +support is still accelerated, which might be good candidates for further > +deletion projects. > + > +Contact: Daniel Vetter > + > +Level: Intermediate > + > idr_init_base() > --------------- > > diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c > index cef437817b0d..a68253485244 100644 > --- a/drivers/video/fbdev/core/fbcon.c > +++ b/drivers/video/fbdev/core/fbcon.c > @@ -1147,11 +1147,13 @@ static void fbcon_init(struct vc_data *vc, int init) > > ops->graphics = 0; > > - if ((cap & FBINFO_HWACCEL_COPYAREA) && > - !(cap & FBINFO_HWACCEL_DISABLED)) > - p->scrollmode = SCROLL_MOVE; > - else /* default to something safe */ > - p->scrollmode = SCROLL_REDRAW; > + /* > + * No more hw acceleration for fbcon. > + * > + * FIXME: Garbage collect all the now dead code after sufficient time > + * has passed. > + */ > + p->scrollmode = SCROLL_REDRAW; > > /* > * ++guenther: console.c:vc_allocate() relies on initializing > @@ -1961,45 +1963,15 @@ static void updatescrollmode(struct fbcon_display *p, > { > struct fbcon_ops *ops = info->fbcon_par; > int fh = vc->vc_font.height; > - 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 good_pan = (cap & FBINFO_HWACCEL_YPAN) && > - divides(ypan, vc->vc_font.height) && vyres > yres; > - int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) && > - divides(ywrap, vc->vc_font.height) && > - divides(vc->vc_font.height, vyres) && > - divides(vc->vc_font.height, yres); > - int reading_fast = cap & FBINFO_READS_FAST; > - int fast_copyarea = (cap & FBINFO_HWACCEL_COPYAREA) && > - !(cap & FBINFO_HWACCEL_DISABLED); > - int fast_imageblit = (cap & FBINFO_HWACCEL_IMAGEBLIT) && > - !(cap & FBINFO_HWACCEL_DISABLED); > > p->vrows = vyres/fh; > if (yres > (fh * (vc->vc_rows + 1))) > p->vrows -= (yres - (fh * vc->vc_rows)) / fh; > if ((yres % fh) && (vyres % fh < yres % fh)) > p->vrows--; > - > - if (good_wrap || good_pan) { > - if (reading_fast || fast_copyarea) > - p->scrollmode = good_wrap ? > - SCROLL_WRAP_MOVE : SCROLL_PAN_MOVE; > - else > - p->scrollmode = good_wrap ? SCROLL_REDRAW : > - SCROLL_PAN_REDRAW; > - } else { > - if (reading_fast || (fast_copyarea && !fast_imageblit)) > - p->scrollmode = SCROLL_MOVE; > - else > - p->scrollmode = SCROLL_REDRAW; > - } > } > > #define PITCH(w) (((w) + 7) >> 3) >
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index 6b224ef14455..bec99341a904 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -277,6 +277,24 @@ Contact: Daniel Vetter, Noralf Tronnes Level: Advanced +Garbage collect fbdev scrolling acceleration +-------------------------------------------- + +Scroll acceleration is disabled in fbcon by hard-wiring p->scrollmode = +SCROLL_REDRAW. There's a ton of code this will allow us to remove: +- lots of code in fbcon.c +- a bunch of the hooks in fbcon_ops, maybe the remaining hooks could be called + directly instead of the function table (with a switch on p->rotate) +- fb_copyarea is unused after this, and can be deleted from all drivers + +Note that not all acceleration code can be deleted, since clearing and cursor +support is still accelerated, which might be good candidates for further +deletion projects. + +Contact: Daniel Vetter + +Level: Intermediate + idr_init_base() --------------- diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index cef437817b0d..a68253485244 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -1147,11 +1147,13 @@ static void fbcon_init(struct vc_data *vc, int init) ops->graphics = 0; - if ((cap & FBINFO_HWACCEL_COPYAREA) && - !(cap & FBINFO_HWACCEL_DISABLED)) - p->scrollmode = SCROLL_MOVE; - else /* default to something safe */ - p->scrollmode = SCROLL_REDRAW; + /* + * No more hw acceleration for fbcon. + * + * FIXME: Garbage collect all the now dead code after sufficient time + * has passed. + */ + p->scrollmode = SCROLL_REDRAW; /* * ++guenther: console.c:vc_allocate() relies on initializing @@ -1961,45 +1963,15 @@ static void updatescrollmode(struct fbcon_display *p, { struct fbcon_ops *ops = info->fbcon_par; int fh = vc->vc_font.height; - 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 good_pan = (cap & FBINFO_HWACCEL_YPAN) && - divides(ypan, vc->vc_font.height) && vyres > yres; - int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) && - divides(ywrap, vc->vc_font.height) && - divides(vc->vc_font.height, vyres) && - divides(vc->vc_font.height, yres); - int reading_fast = cap & FBINFO_READS_FAST; - int fast_copyarea = (cap & FBINFO_HWACCEL_COPYAREA) && - !(cap & FBINFO_HWACCEL_DISABLED); - int fast_imageblit = (cap & FBINFO_HWACCEL_IMAGEBLIT) && - !(cap & FBINFO_HWACCEL_DISABLED); p->vrows = vyres/fh; if (yres > (fh * (vc->vc_rows + 1))) p->vrows -= (yres - (fh * vc->vc_rows)) / fh; if ((yres % fh) && (vyres % fh < yres % fh)) p->vrows--; - - if (good_wrap || good_pan) { - if (reading_fast || fast_copyarea) - p->scrollmode = good_wrap ? - SCROLL_WRAP_MOVE : SCROLL_PAN_MOVE; - else - p->scrollmode = good_wrap ? SCROLL_REDRAW : - SCROLL_PAN_REDRAW; - } else { - if (reading_fast || (fast_copyarea && !fast_imageblit)) - p->scrollmode = SCROLL_MOVE; - else - p->scrollmode = SCROLL_REDRAW; - } } #define PITCH(w) (((w) + 7) >> 3)