[lkml]   [2006]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] fbdev: Fix usage of blank value passed to fb_blank
    The fb_blank() hook accepts 5 blanking levels which include 1 level designed
    for console use only. Userspace is only aware of 4 levels. Thus, it's
    possible for userspace to request VESA_VSYNC_SUSPEND which, in turn, is
    interpreted by the fb driver as a request for FB_BLANK_NORMAL. A few drivers
    return -EINVAL for this, confusing userspace apps that the driver may not
    have VESA blanking support.

    Fix by incrementing the blank value by one if the request originated from

    Signed-off-by: Antonino Daplas <>

    Ingo Oeser wrote:
    > > May I suggest to hide this implementation detail?
    > >

    Yes. The change will be invisible to drivers.

    Unfortunately, this may cause some userland breakage. X should work.
    However, some apps may have been developed that uses the FB_BLANK constants
    (DirectFB?). In these cases, they'll get a deeper blank level instead, so it
    probably won't affect them significantly. A follow up patch that hides the
    FB_BLANK constants may be worthwhile.

    drivers/video/fbmem.c | 13 +++++++++++++
    1 files changed, 13 insertions(+), 0 deletions(-)

    diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
    index d2dede6..5bed0fb 100644
    --- a/drivers/video/fbmem.c
    +++ b/drivers/video/fbmem.c
    @@ -843,6 +843,19 @@ fb_blank(struct fb_info *info, int blank
    int ret = -EINVAL;

    + /*
    + * The framebuffer core supports 5 blanking levels (FB_BLANK), whereas
    + * VESA defined only 4. The extra level, FB_BLANK_NORMAL, is a
    + * console invention and is not related to power management.
    + * Unfortunately, fb_blank callers, especially X, pass VESA constants
    + * leading to undefined behavior.
    + *
    + * To avoid confusion, fb_blank will assume VESA constants if coming
    + * from userspace, and FB_BLANK constants if coming from the kernel.
    + */
    + if (info->flags & FBINFO_MISC_USEREVENT && blank)
    + blank++;
    if (blank > FB_BLANK_POWERDOWN)

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2006-01-29 03:22    [W:0.022 / U:2.116 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site