lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20171127213423.27218-15-andi@firstfloor.org>
Date:   Mon, 27 Nov 2017 13:34:16 -0800
From:   Andi Kleen <andi@...stfloor.org>
To:     linux-kernel@...r.kernel.org
Cc:     x86@...nel.org, samitolvanen@...gle.com, alxmtvv@...il.com,
        linux-kbuild@...r.kernel.org, yamada.masahiro@...ionext.com,
        akpm@...ux-foundation.org, Andi Kleen <ak@...ux.intel.com>,
        viro@...iv.linux.org.uk
Subject: [PATCH 14/21] lto, fs: Avoid static variable in linux/fs.h

From: Andi Kleen <ak@...ux.intel.com>

linux/fs.h has a initialized static variable kernel_read_file_str. It doesn't
make much sense to have a static variable in a frequently included
header file. With LTO -fno-toplevel-reorder gcc is unable to eliminate
it, which leads to a lot of unnecessary duplicated copies.

Move the static into the scope of the only inline that uses it,
this tells the compiler enough to not duplicate it. Right now
the inline is only called from one place, so that is ok. If it was
called from more places would need to move it somewhere else
to avoid unnecessary copies.

With LTO this avoids ~100k unnecessary data segment for a x86 defconfig
build. Even without LTO it doesn't make any sense.

Cc: viro@...iv.linux.org.uk
Signed-off-by: Andi Kleen <ak@...ux.intel.com>
---
 include/linux/fs.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 2995a271ec46..2f02f1c991c9 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2821,12 +2821,12 @@ enum kernel_read_file_id {
 	__kernel_read_file_id(__fid_enumify)
 };
 
-static const char * const kernel_read_file_str[] = {
-	__kernel_read_file_id(__fid_stringify)
-};
-
 static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id)
 {
+	static const char * const kernel_read_file_str[] = {
+		__kernel_read_file_id(__fid_stringify)
+	};
+
 	if ((unsigned)id >= READING_MAX_ID)
 		return kernel_read_file_str[READING_UNKNOWN];
 
-- 
2.13.6

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ