Skip to content
  • Rasmus Villemoes's avatar
    lib/kobject.c: use kvasprintf_const for formatting ->name · f773f32d
    Rasmus Villemoes authored
    
    
    Sometimes kobject_set_name_vargs is called with a format string conaining
    no %, or a format string of precisely "%s", where the single vararg
    happens to point to .rodata.  kvasprintf_const detects these cases for us
    and returns a copy of that pointer instead of duplicating the string, thus
    saving some run-time memory.  Otherwise, it falls back to kvasprintf.  We
    just need to always deallocate ->name using kfree_const.
    
    Unfortunately, the dance we need to do to perform the '/' -> '!'
    sanitization makes the resulting code rather ugly.
    
    I instrumented kstrdup_const to provide some statistics on the memory
    saved, and for me this gave an additional ~14KB after boot (306KB was
    already saved; this patch bumped that to 320KB).  I have
    KMALLOC_SHIFT_LOW==3, and since 80% of the kvasprintf_const hits were
    satisfied by an 8-byte allocation, the 14K would roughly be quadrupled
    when KMALLOC_SHIFT_LOW==5.  Whether these numbers are sufficient to
    justify the ugliness I'll leave to others to decide.
    
    Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Greg KH <greg@kroah.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f773f32d