[lkml]   [2005]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 1/1 2.6.13] framebuffer: bit_putcs() optimization for 8x* fonts
    This trivial patch gives a performance boost to the framebuffer console

    Constructing the bitmaps that are given to the bitblit functions of the
    drivers is time consuming. Here we avoide a call to the slow
    The patch replaces that call with a simple but much more efficient
    bytewise copy.

    The kernel spends a significant time at this place if you use 8x* fonts.
    pixel displayed on your screen is prepared here.

    Some benchmark results:

    Displaying a file of 2000 lines with 160 characters each takes 889 ms
    time using cyblafb on my system (I´m using a 1280x1024 video mode,
    resulting in a 160x64 character console)

    Displaying the same file with the enclosed patch applied to 2.6.13 only
    760 ms system time, saving 129 ms or 14.5%.

    Font widths other than 8 are not affected.

    The advantage and correctness of this patch should be obvious.

    Signed-off-by: Knut Petersen <>

    diff -uprN -X linux/Documentation/dontdiff -x '*.bak' -x '*.ctx' linuxorig/drivers/video/console/bitblit.c linux/drivers/video/console/bitblit.c
    --- linuxorig/drivers/video/console/bitblit.c 2005-08-29 01:41:01.000000000 +0200
    +++ linux/drivers/video/console/bitblit.c 2005-08-30 17:19:57.000000000 +0200
    @@ -114,7 +114,7 @@ static void bit_putcs(struct vc_data *vc
    unsigned int scan_align = info->pixmap.scan_align - 1;
    unsigned int buf_align = info->pixmap.buf_align - 1;
    unsigned int shift_low = 0, mod = vc->vc_font.width % 8;
    - unsigned int shift_high = 8, pitch, cnt, size, k;
    + unsigned int shift_high = 8, pitch, cnt, size, i, k;
    unsigned int idx = vc->vc_font.width >> 3;
    unsigned int attribute = get_attribute(info, scr_readw(s));
    struct fb_image image;
    @@ -175,7 +175,11 @@ static void bit_putcs(struct vc_data *vc
    src = buf;

    - fb_pad_aligned_buffer(dst, pitch, src, idx, image.height);
    + if (idx == 1)
    + for(i=0; i < image.height; i++)
    + dst[pitch*i] = src[i];
    + else
    + fb_pad_aligned_buffer(dst, pitch, src, idx, image.height);
    dst += width;

    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: 2005-08-30 18:15    [W:0.022 / U:3.372 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site