linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] lib/vsprintf: Rework header inclusions
@ 2023-08-14 16:33 Andy Shevchenko
  2023-08-14 16:33 ` [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends Andy Shevchenko
  2023-08-14 16:33 ` [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h Andy Shevchenko
  0 siblings, 2 replies; 5+ messages in thread
From: Andy Shevchenko @ 2023-08-14 16:33 UTC (permalink / raw)
  To: Andy Shevchenko, Petr Mladek, Marco Elver, linux-kernel,
	kasan-dev, linux-mm
  Cc: Steven Rostedt, Rasmus Villemoes, Sergey Senozhatsky,
	Alexander Potapenko, Dmitry Vyukov, Andrew Morton

Some patches that reduce the mess with the header inclusions related to
vsprintf.c module. Each patch has its own description, and has no
dependencies to each other, except the collisions over modifications
of the same places. Hence the series.

Changelog v3:
- dropped sorting headers patch (Petr)
- added tag (Marco)

Changelog v2:
- covered test_printf.c in patches 1 & 2
- do not remove likely implict inclusions (Rasmus)
- declare no_hash_pointers in sprintf.h (Marco, Steven, Rasmus)

Andy Shevchenko (2):
  lib/vsprintf: Split out sprintf() and friends
  lib/vsprintf: Declare no_hash_pointers in sprintf.h

 include/linux/kernel.h  | 30 +-----------------------------
 include/linux/sprintf.h | 27 +++++++++++++++++++++++++++
 lib/test_printf.c       |  3 +--
 lib/vsprintf.c          |  1 +
 mm/kfence/report.c      |  3 +--
 5 files changed, 31 insertions(+), 33 deletions(-)
 create mode 100644 include/linux/sprintf.h

-- 
2.40.0.1.gaa8946217a0b



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends
  2023-08-14 16:33 [PATCH v3 0/2] lib/vsprintf: Rework header inclusions Andy Shevchenko
@ 2023-08-14 16:33 ` Andy Shevchenko
  2023-08-15 10:58   ` Petr Mladek
  2023-08-14 16:33 ` [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h Andy Shevchenko
  1 sibling, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2023-08-14 16:33 UTC (permalink / raw)
  To: Andy Shevchenko, Petr Mladek, Marco Elver, linux-kernel,
	kasan-dev, linux-mm
  Cc: Steven Rostedt, Rasmus Villemoes, Sergey Senozhatsky,
	Alexander Potapenko, Dmitry Vyukov, Andrew Morton

kernel.h is being used as a dump for all kinds of stuff for a long time.
sprintf() and friends are used in many drivers without need of the full
kernel.h dependency train with it.

Here is the attempt on cleaning it up by splitting out sprintf() and
friends.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/kernel.h  | 30 +-----------------------------
 include/linux/sprintf.h | 25 +++++++++++++++++++++++++
 lib/test_printf.c       |  1 +
 lib/vsprintf.c          |  1 +
 4 files changed, 28 insertions(+), 29 deletions(-)
 create mode 100644 include/linux/sprintf.h

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index b9e76f717a7e..cee8fe87e9f4 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -29,6 +29,7 @@
 #include <linux/panic.h>
 #include <linux/printk.h>
 #include <linux/build_bug.h>
+#include <linux/sprintf.h>
 #include <linux/static_call_types.h>
 #include <linux/instruction_pointer.h>
 #include <asm/byteorder.h>
@@ -203,35 +204,6 @@ static inline void might_fault(void) { }
 
 void do_exit(long error_code) __noreturn;
 
-extern int num_to_str(char *buf, int size,
-		      unsigned long long num, unsigned int width);
-
-/* lib/printf utilities */
-
-extern __printf(2, 3) int sprintf(char *buf, const char * fmt, ...);
-extern __printf(2, 0) int vsprintf(char *buf, const char *, va_list);
-extern __printf(3, 4)
-int snprintf(char *buf, size_t size, const char *fmt, ...);
-extern __printf(3, 0)
-int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
-extern __printf(3, 4)
-int scnprintf(char *buf, size_t size, const char *fmt, ...);
-extern __printf(3, 0)
-int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
-extern __printf(2, 3) __malloc
-char *kasprintf(gfp_t gfp, const char *fmt, ...);
-extern __printf(2, 0) __malloc
-char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
-extern __printf(2, 0)
-const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list args);
-
-extern __scanf(2, 3)
-int sscanf(const char *, const char *, ...);
-extern __scanf(2, 0)
-int vsscanf(const char *, const char *, va_list);
-
-extern int no_hash_pointers_enable(char *str);
-
 extern int get_option(char **str, int *pint);
 extern char *get_options(const char *str, int nints, int *ints);
 extern unsigned long long memparse(const char *ptr, char **retptr);
diff --git a/include/linux/sprintf.h b/include/linux/sprintf.h
new file mode 100644
index 000000000000..9ca23bcf9f42
--- /dev/null
+++ b/include/linux/sprintf.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_KERNEL_SPRINTF_H_
+#define _LINUX_KERNEL_SPRINTF_H_
+
+#include <linux/compiler_attributes.h>
+#include <linux/types.h>
+
+int num_to_str(char *buf, int size, unsigned long long num, unsigned int width);
+
+__printf(2, 3) int sprintf(char *buf, const char * fmt, ...);
+__printf(2, 0) int vsprintf(char *buf, const char *, va_list);
+__printf(3, 4) int snprintf(char *buf, size_t size, const char *fmt, ...);
+__printf(3, 0) int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
+__printf(3, 4) int scnprintf(char *buf, size_t size, const char *fmt, ...);
+__printf(3, 0) int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
+__printf(2, 3) __malloc char *kasprintf(gfp_t gfp, const char *fmt, ...);
+__printf(2, 0) __malloc char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
+__printf(2, 0) const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list args);
+
+__scanf(2, 3) int sscanf(const char *, const char *, ...);
+__scanf(2, 0) int vsscanf(const char *, const char *, va_list);
+
+int no_hash_pointers_enable(char *str);
+
+#endif	/* _LINUX_KERNEL_SPRINTF_H */
diff --git a/lib/test_printf.c b/lib/test_printf.c
index 7677ebccf3c3..ce749cfac033 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -12,6 +12,7 @@
 #include <linux/random.h>
 #include <linux/rtc.h>
 #include <linux/slab.h>
+#include <linux/sprintf.h>
 #include <linux/string.h>
 
 #include <linux/bitmap.h>
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 40f560959b16..afb88b24fa74 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -34,6 +34,7 @@
 #include <linux/dcache.h>
 #include <linux/cred.h>
 #include <linux/rtc.h>
+#include <linux/sprintf.h>
 #include <linux/time.h>
 #include <linux/uuid.h>
 #include <linux/of.h>
-- 
2.40.0.1.gaa8946217a0b



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h
  2023-08-14 16:33 [PATCH v3 0/2] lib/vsprintf: Rework header inclusions Andy Shevchenko
  2023-08-14 16:33 ` [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends Andy Shevchenko
@ 2023-08-14 16:33 ` Andy Shevchenko
  2023-08-15 10:58   ` Petr Mladek
  1 sibling, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2023-08-14 16:33 UTC (permalink / raw)
  To: Andy Shevchenko, Petr Mladek, Marco Elver, linux-kernel,
	kasan-dev, linux-mm
  Cc: Steven Rostedt, Rasmus Villemoes, Sergey Senozhatsky,
	Alexander Potapenko, Dmitry Vyukov, Andrew Morton

Sparse is not happy to see non-static variable without declaration:
lib/vsprintf.c:61:6: warning: symbol 'no_hash_pointers' was not declared. Should it be static?

Declare respective variable in the sprintf.h. With this, add a comment
to discourage its use if no real need.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Marco Elver <elver@google.com>
---
 include/linux/sprintf.h | 2 ++
 lib/test_printf.c       | 2 --
 mm/kfence/report.c      | 3 +--
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/include/linux/sprintf.h b/include/linux/sprintf.h
index 9ca23bcf9f42..33dcbec71925 100644
--- a/include/linux/sprintf.h
+++ b/include/linux/sprintf.h
@@ -20,6 +20,8 @@ __printf(2, 0) const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list
 __scanf(2, 3) int sscanf(const char *, const char *, ...);
 __scanf(2, 0) int vsscanf(const char *, const char *, va_list);
 
+/* These are for specific cases, do not use without real need */
+extern bool no_hash_pointers;
 int no_hash_pointers_enable(char *str);
 
 #endif	/* _LINUX_KERNEL_SPRINTF_H */
diff --git a/lib/test_printf.c b/lib/test_printf.c
index ce749cfac033..69b6a5e177f2 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -42,8 +42,6 @@ KSTM_MODULE_GLOBALS();
 static char *test_buffer __initdata;
 static char *alloced_buffer __initdata;
 
-extern bool no_hash_pointers;
-
 static int __printf(4, 0) __init
 do_test(int bufsize, const char *expect, int elen,
 	const char *fmt, va_list ap)
diff --git a/mm/kfence/report.c b/mm/kfence/report.c
index 197430a5be4a..c509aed326ce 100644
--- a/mm/kfence/report.c
+++ b/mm/kfence/report.c
@@ -13,6 +13,7 @@
 #include <linux/printk.h>
 #include <linux/sched/debug.h>
 #include <linux/seq_file.h>
+#include <linux/sprintf.h>
 #include <linux/stacktrace.h>
 #include <linux/string.h>
 #include <trace/events/error_report.h>
@@ -26,8 +27,6 @@
 #define ARCH_FUNC_PREFIX ""
 #endif
 
-extern bool no_hash_pointers;
-
 /* Helper function to either print to a seq_file or to console. */
 __printf(2, 3)
 static void seq_con_printf(struct seq_file *seq, const char *fmt, ...)
-- 
2.40.0.1.gaa8946217a0b



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends
  2023-08-14 16:33 ` [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends Andy Shevchenko
@ 2023-08-15 10:58   ` Petr Mladek
  0 siblings, 0 replies; 5+ messages in thread
From: Petr Mladek @ 2023-08-15 10:58 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Marco Elver, linux-kernel, kasan-dev, linux-mm, Steven Rostedt,
	Rasmus Villemoes, Sergey Senozhatsky, Alexander Potapenko,
	Dmitry Vyukov, Andrew Morton

On Mon 2023-08-14 19:33:43, Andy Shevchenko wrote:
> kernel.h is being used as a dump for all kinds of stuff for a long time.
> sprintf() and friends are used in many drivers without need of the full
> kernel.h dependency train with it.
> 
> Here is the attempt on cleaning it up by splitting out sprintf() and
> friends.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Petr Mladek <pmladek@suse.com>

Best Regards,
Petr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h
  2023-08-14 16:33 ` [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h Andy Shevchenko
@ 2023-08-15 10:58   ` Petr Mladek
  0 siblings, 0 replies; 5+ messages in thread
From: Petr Mladek @ 2023-08-15 10:58 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Marco Elver, linux-kernel, kasan-dev, linux-mm, Steven Rostedt,
	Rasmus Villemoes, Sergey Senozhatsky, Alexander Potapenko,
	Dmitry Vyukov, Andrew Morton

On Mon 2023-08-14 19:33:44, Andy Shevchenko wrote:
> Sparse is not happy to see non-static variable without declaration:
> lib/vsprintf.c:61:6: warning: symbol 'no_hash_pointers' was not declared. Should it be static?
> 
> Declare respective variable in the sprintf.h. With this, add a comment
> to discourage its use if no real need.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Acked-by: Marco Elver <elver@google.com>

Reviewed-by: Petr Mladek <pmladek@suse.com>

Best Regards,
Petr


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-08-15 10:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-14 16:33 [PATCH v3 0/2] lib/vsprintf: Rework header inclusions Andy Shevchenko
2023-08-14 16:33 ` [PATCH v3 1/2] lib/vsprintf: Split out sprintf() and friends Andy Shevchenko
2023-08-15 10:58   ` Petr Mladek
2023-08-14 16:33 ` [PATCH v3 2/2] lib/vsprintf: Declare no_hash_pointers in sprintf.h Andy Shevchenko
2023-08-15 10:58   ` Petr Mladek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox