vsprintf: Use non-atomic bitmap API when applicable
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 27 Nov 2021 14:27:35 +0000 (15:27 +0100)
committerPetr Mladek <pmladek@suse.com>
Mon, 6 Dec 2021 12:35:28 +0000 (13:35 +0100)
The 'set' bitmap is local to this function. No concurrent access to it is
possible.
So prefer the non-atomic '__[set|clear]_bit()' function to save a few
cycles.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/1abf81a5e509d372393bd22041eed4ebc07ef9f7.1638023178.git.christophe.jaillet@wanadoo.fr
lib/vsprintf.c

index 58d5e567f836831b94ca20c534a105d56158d1ce..53d6081f9e8b9bc4da356979e56e9cce7302f788 100644 (file)
@@ -3564,7 +3564,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
                                ++fmt;
 
                        for ( ; *fmt && *fmt != ']'; ++fmt, ++len)
-                               set_bit((u8)*fmt, set);
+                               __set_bit((u8)*fmt, set);
 
                        /* no ']' or no character set found */
                        if (!*fmt || !len)
@@ -3574,7 +3574,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
                        if (negate) {
                                bitmap_complement(set, set, 256);
                                /* exclude null '\0' byte */
-                               clear_bit(0, set);
+                               __clear_bit(0, set);
                        }
 
                        /* match must be non-empty */