From 900e78fa31be9b165a9fdb66ab8508b70bd713e8 Mon Sep 17 00:00:00 2001 From: "Joel Fernandes (Google)" Date: Mon, 18 Nov 2019 14:08:03 -0500 Subject: [PATCH] FROMLIST: vsprintf: Inline call to ptr_to_hashval There is concern that ptr_to_hashval not being inlined can cause performance issues (unlike before where it was a static branch) with trace_printk being a hot path for it. Just create an inline version called __ptr_to_hashval(), and have the actual ptr_to_hashval() call it. Bug: 145972256 Link: http://lore.kernel.org/r/20191113153816.14b95acd@gandalf.local.home Link: lore.kernel.org/r/20191114164622.GC233237@google.com Suggested-by: Steven Rostedt Change-Id: Ie7133b9f32a8185e244db2634b028b316a3d7ea1 Signed-off-by: Joel Fernandes Signed-off-by: Joel Fernandes (cherry picked from commit 0f2b4ea6e2356687ce78ff23b8556d2138b6fe28) --- lib/vsprintf.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 465c5758d222..294468db3fb3 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -739,7 +739,7 @@ static int __init initialize_ptr_random(void) } early_initcall(initialize_ptr_random); -int ptr_to_hashval(const void *ptr, unsigned long *hashval_out) +static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out) { unsigned long hashval; @@ -760,6 +760,11 @@ int ptr_to_hashval(const void *ptr, unsigned long *hashval_out) return 0; } +int ptr_to_hashval(const void *ptr, unsigned long *hashval_out) +{ + return __ptr_to_hashval(ptr, hashval_out); +} + /* Maps a pointer to a 32 bit unique identifier. */ static char *ptr_to_id(char *buf, char *end, const void *ptr, struct printf_spec spec) @@ -774,7 +779,7 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr, return pointer_string(buf, end, (const void *)hashval, spec); } - ret = ptr_to_hashval(ptr, &hashval); + ret = __ptr_to_hashval(ptr, &hashval); if (ret) { spec.field_width = 2 * sizeof(ptr); /* string length must be less than default_width */