OSDN Git Service

video: fb_defio: preserve user fb_ops
authorJani Nikula <jani.nikula@intel.com>
Fri, 29 Nov 2019 10:29:31 +0000 (12:29 +0200)
committerJani Nikula <jani.nikula@intel.com>
Tue, 3 Dec 2019 09:10:19 +0000 (11:10 +0200)
commit12281c8dda5a3b47008bd6a6db6645995234b4e1
treeeb66e99d2a1b53c2ff31b364e9b50643c867c115
parentdc190678534ee0f9042a65db1613ab1e59582bff
video: fb_defio: preserve user fb_ops

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: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/022c82429da15d6450ff9ac1a897322ec3124db4.1575022735.git.jani.nikula@intel.com
drivers/video/fbdev/core/fb_defio.c
drivers/video/fbdev/core/fbmem.c