• Matthew Wilcox's avatar
    lib/string.c: add multibyte memset functions · 3b3c4bab
    Matthew Wilcox authored
    Patch series "Multibyte memset variations", v4.
    
    A relatively common idiom we're missing is a function to fill an area of
    memory with a pattern which is larger than a single byte.  I first
    noticed this with a zram patch which wanted to fill a page with an
    'unsigned long' value.  There turn out to be quite a few places in the
    kernel which can benefit from using an optimised function rather than a
    loop; sometimes text size, sometimes speed, and sometimes both.  The
    optimised PowerPC version (not included here) improves performance by
    about 30% on POWER8 on just the raw memset_l().
    
    Most of the extra lines of code come from the three testcases I added.
    
    This patch (of 8):
    
    memset16(), memset32() and memset64() are like memset(), but allow the
    caller to fill the destination with a value larger than a single byte.
    memset_l() and memset_p() allow the caller to use unsigned long and
    pointer values respectively.
    
    Link: http://lkml.kernel.org/r/20170720184539.31609-2-willy@infradead.orgSigned-off-by: default avatarMatthew Wilcox <mawilcox@microsoft.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com>
    Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
    Cc: David Miller <davem@davemloft.net>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    Cc: Matt Turner <mattst88@gmail.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Richard Henderson <rth@twiddle.net>
    Cc: Russell King <rmk+kernel@armlinux.org.uk>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3b3c4bab
string.c 22.3 KB