Message ID | 20180311123815.17916-1-ard.biesheuvel@linaro.org (mailing list archive) |
---|---|
Headers | show |
Series | add support for relative references in special sections | expand |
On 11 March 2018 at 12:38, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: ... > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Kees Cook <keescook@chromium.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Thomas Garnier <thgarnie@google.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: "Serge E. Hallyn" <serge@hallyn.com> > Cc: Bjorn Helgaas <bhelgaas@google.com> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Petr Mladek <pmladek@suse.com> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: James Morris <james.l.morris@oracle.com> Note when replying: this ^^^ email address no longer works. > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Nicolas Pitre <nico@linaro.org> > Cc: Josh Poimboeuf <jpoimboe@redhat.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Jessica Yu <jeyu@kernel.org> > > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: x86@kernel.org > ...
On Sun, Mar 11, 2018 at 5:44 AM, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > On 11 March 2018 at 12:38, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> Cc: James Morris <james.l.morris@oracle.com> > > Note when replying: this ^^^ email address no longer works. James updated MAINTAINERS to: James Morris <jmorris@namei.org>
On 11 March 2018 at 12:38, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > This adds support for emitting special sections such as initcall arrays, > PCI fixups and tracepoints as relative references rather than absolute > references. This reduces the size by 50% on 64-bit architectures, but > more importantly, it removes the need for carrying relocation metadata > for these sections in relocatable kernels (e.g., for KASLR) that needs > to be fixed up at boot time. On arm64, this reduces the vmlinux footprint > of such a reference by 8x (8 byte absolute reference + 24 byte RELA entry > vs 4 byte relative reference) > > Patch #3 was sent out before as a single patch. This series supersedes > the previous submission. This version makes relative ksymtab entries > dependent on the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS rather > than trying to infer from kbuild test robot replies for which architectures > it should be blacklisted. > > Patch #1 introduces the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS, > and sets it for the main architectures that are expected to benefit the > most from this feature, i.e., 64-bit architectures or ones that use > runtime relocations. > > Patch #2 add support for #define'ing __DISABLE_EXPORTS to get rid of > ksymtab/kcrctab sections in decompressor and EFI stub objects when > rebuilding existing C files to run in a different context. > > Patches #4 - #6 implement relative references for initcalls, PCI fixups > and tracepoints, respectively, all of which produce sections with order > ~1000 entries on an arm64 defconfig kernel with tracing enabled. This > means we save about 28 KB of vmlinux space for each of these patches. > > [From the v7 series blurb, which included the jump_label patches as well]: > For the arm64 kernel, all patches combined reduce the memory footprint of > vmlinux by about 1.3 MB (using a config copied from Ubuntu that has KASLR > enabled), of which ~1 MB is the size reduction of the RELA section in .init, > and the remaining 300 KB is reduction of .text/.data. > > Branch: > git://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git relative-special-sections-v8 > All, I think this has converged to a mergeable state now (taking the mini-tweak for patch #3 into account I provided in a reply) Are there any objections to this being merged? Andrew, If nobody objects, is this something you would care to pick up for the next cycle? Do I need to respin to incorporate the mini-tweak and apply Nico's ack to patch #2? Thanks, Ard. > Changes since v7: > - dropped the jump_label patches, these will be revisited in a separate series > - reorder __DISABLE_EXPORTS with __KSYM_DEPS__ check in #2 > - use offset_to_ptr() helper function to abstract the relative pointer > conversion [int *off -> (ulong)off + *off] (#3 - #6) > - rebase onto v4.16-rc3 > > Changes since v6: > - drop S390 from patch #1 introducing HAVE_ARCH_PREL32_RELOCATIONS: kbuild > robot threw me some s390 curveballs, and given that s390 does not define > CONFIG_RELOCATABLE in the first place, it does not benefit as much from > relative references as arm64, x86 and power do > - add patch to allow symbol exports to be disabled at compilation unit > granularity (#2) > - get rid of arm64 vmlinux.lds.S hunk to ensure code generated by __ADDRESSABLE > gets discarded from the EFI stub - it is no longer needed after adding #2 (#1) > - change _ADDRESSABLE() to emit a data reference, not a code reference - this > is another simplification made possible by patch #2 (#3) > - add Steven's ack to #6 > - split x86 jump_label patch into two (#9, #10) > > Changes since v5: > - add missing jump_label prototypes to s390 jump_label.h (#6) > - fix inverted condition in call to jump_entry_is_module_init() (#6) > > Changes since v4: > - add patches to convert x86 and arm64 to use relative references for jump > tables (#6 - #8) > - rename PCI patch and add Bjorn's ack (#4) > - rebase onto v4.15-rc5 > > Changes since v3: > - fix module unload issue in patch #5 reported by Jessica, by reusing the > updated routine for_each_tracepoint_range() for the quiescent check at > module unload time; this requires this routine to be moved before > tracepoint_module_going() in kernel/tracepoint.c > - add Jessica's ack to #2 > - rebase onto v4.14-rc1 > > Changes since v2: > - Revert my slightly misguided attempt to appease checkpatch, which resulted > in needless churn and worse code. This v3 is based on v1 with a few tweaks > that were actually reasonable checkpatch warnings: unnecessary braces (as > pointed out by Ingo) and other minor whitespace misdemeanors. > > Changes since v1: > - Remove checkpatch errors to the extent feasible: in some cases, this > involves moving extern declarations into C files, and switching to > struct definitions rather than typedefs. Some errors are impossible > to fix: please find the remaining ones after the diffstat. > - Used 'int' instead if 'signed int' for the various offset fields: there > is no ambiguity between architectures regarding its signedness (unlike > 'char') > - Refactor the different patches to be more uniform in the way they define > the section entry type and accessors in the .h file, and avoid the need to > add #ifdefs to the C code. > > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Kees Cook <keescook@chromium.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Thomas Garnier <thgarnie@google.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: "Serge E. Hallyn" <serge@hallyn.com> > Cc: Bjorn Helgaas <bhelgaas@google.com> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Petr Mladek <pmladek@suse.com> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: James Morris <james.l.morris@oracle.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Nicolas Pitre <nico@linaro.org> > Cc: Josh Poimboeuf <jpoimboe@redhat.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Jessica Yu <jeyu@kernel.org> > > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: x86@kernel.org > > Ard Biesheuvel (6): > arch: enable relative relocations for arm64, power and x86 > module: allow symbol exports to be disabled > module: use relative references for __ksymtab entries > init: allow initcall tables to be emitted using relative references > PCI: Add support for relative addressing in quirk tables > kernel: tracepoints: add support for relative references > > arch/Kconfig | 10 ++++ > arch/arm64/Kconfig | 1 + > arch/powerpc/Kconfig | 1 + > arch/x86/Kconfig | 1 + > arch/x86/boot/compressed/kaslr.c | 5 +- > arch/x86/include/asm/Kbuild | 1 + > arch/x86/include/asm/export.h | 5 -- > drivers/firmware/efi/libstub/Makefile | 3 +- > drivers/pci/quirks.c | 12 +++-- > include/asm-generic/export.h | 12 ++++- > include/linux/compiler.h | 19 +++++++ > include/linux/export.h | 57 +++++++++++++++----- > include/linux/init.h | 44 +++++++++++---- > include/linux/pci.h | 20 +++++++ > include/linux/tracepoint.h | 19 +++++-- > init/main.c | 32 +++++------ > kernel/module.c | 32 ++++++++--- > kernel/printk/printk.c | 4 +- > kernel/tracepoint.c | 49 +++++++++-------- > security/security.c | 4 +- > 20 files changed, 240 insertions(+), 91 deletions(-) > delete mode 100644 arch/x86/include/asm/export.h > > -- > 2.15.1 >