On Wed, Oct 28, 2020 at 8:02 PM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > > Hi > > Am 28.10.20 um 17:06 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. > > Why wait a year? I'd say delete early, delete often. ;) > > > > > Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@xxxxxxxxxxx> > > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > > Cc: Ben Skeggs <bskeggs@xxxxxxxxxx> > > Cc: nouveau@xxxxxxxxxxxxxxxxxxxxx > > Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > > Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> > > Cc: Jiri Slaby <jirislaby@xxxxxxxxxx> > > Cc: "Gustavo A. R. Silva" <gustavoars@xxxxxxxxxx> > > Cc: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> > > Cc: Peilin Ye <yepeilin.cs@xxxxxxxxx> > > Cc: George Kennedy <george.kennedy@xxxxxxxxxx> > > Cc: Nathan Chancellor <natechancellor@xxxxxxxxx> > > Cc: Peter Rosin <peda@xxxxxxxxxx> > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > > --- > > drivers/video/fbdev/core/fbcon.c | 38 ++++++-------------------------- > > 1 file changed, 7 insertions(+), 31 deletions(-) > > > > diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c > > index cef437817b0d..d74ccbbb29bb 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: Garabge collect all the now dead code after sufficient time > > + * has passed. > > + */ > > + p->scrollmode = SCROLL_REDRAW; > > I just grepped for scrollmode and there aren't many places that use it. > Could you remove it as well? Removing scrollmode will start the delete feast. In fbcon alone I think we can drop half the code. -Daniel > > In any case > > Reviewed-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > > Best regards > Thomas > > > > > /* > > * ++guenther: console.c:vc_allocate() relies on initializing > > @@ -1961,7 +1963,6 @@ 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); > > @@ -1969,37 +1970,12 @@ static void updatescrollmode(struct fbcon_display *p, > > 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) > > > > -- > Thomas Zimmermann > Graphics Driver Developer > SUSE Software Solutions Germany GmbH > Maxfeldstr. 5, 90409 Nürnberg, Germany > (HRB 36809, AG Nürnberg) > Geschäftsführer: Felix Imendörffer -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel