• Jani Nikula's avatar
    video: fb_defio: preserve user fb_ops · 12281c8d
    Jani Nikula authored
    Modifying fb_ops directly to override fb_mmap with fb_deferred_io_mmap
    and then resetting it to NULL afterwards causes problems all over the
    place. First, it prevents making the fbops member of struct fb_info a
    const pointer, which means we can't make struct fb_ops const
    anywhere. Second, a few places have to go out of their way to restore
    the original fb_mmap pointer that gets reset to NULL.
    
    Since the only user of the fbops->fb_mmap hook is fb_mmap() in fbmem.c,
    call fb_deferred_io_mmap() directly when deferred IO is enabled, and
    avoid modifying fb_ops altogether.
    
    Simply use info->fbdefio to determine whether deferred IO should be used
    or not. This should be accurate enough for all use cases, although
    perhaps not pedantically correct.
    
    v2: Simplify considerably by calling fb_deferred_io_mmap() directly
        (Daniel, Ville)
    
    Cc: Jaya Kumar <jayalk@intworks.biz>
    Cc: linux-fbdev@vger.kernel.org
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Acked-by: default avatarNoralf Trønnes <noralf@tronnes.org>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/022c82429da15d6450ff9ac1a897322ec3124db4.1575022735.git.jani.nikula@intel.com
    12281c8d
fbmem.c 45.7 KB