From ed875ea1fcc6c34ea232610c3041d0978e327bbe Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 15 Aug 2017 07:01:08 +0930 Subject: [PATCH 1/3] MAINTAINERS: Remove from module & paravirt maintenance It's been 20 years since I became a kernel maintainer, so despite how much I'm loving my new career, this patch elicits deep feelings[0]. I went to 1997 USENIX, my first conference. I remember[1] standing around with Alan Cox, Linus, Ted Ts'o and David Miller as they wrote the code for the BKL on a napkin. I listened in awe as this homeless-looking guy described porting Linux to the Ultrasparc, and then described how he then proceeded to beat Solaris on *every single* lmbench microbenchmark.[2] A lot of it I didn't understand, but I got home knowing that I had to work with this random bunch of hackers. I had some firewalling hacks which I turned into ipchains, and sent it to DaveM with a config option to switch between the old ipfwadm code and my new code. He liked it so much he replaced ipfwadm entirely, and I woke up one day as kernel firewall maintainer[3]. I found someone to fund my work the next year, and suddenly I was doing my dream job full time. I flew myself around Australia visiting every LUG to convince them to come to the first Australian Linux conference. And of course, DaveM was top of my list for speakers. There was so much work to do on the kernel; everywhere you'd look there was code which could be simplified, improved. I read the module code and was so horrified at its complexity that I rewrote it, not realizing how epic that would be. Of course I broke lots of things; halfway through the patch series I broke SCSI, so Linus applied up to that point and we had half a module subsystem for a while; I was literally in the airport in Tokyo on my way to Spain when he applied it, too. Every arch maintainer woke up to find they had to implement a whack of complex relocation code, and I got a lot of grumbling.[5] But one person disagreed with my approach so much and so continuously that I developed a dread of reading my mail every morning: eventually I wrote a filter to send their mail to a separate mbox, which I've still never read and don't intend to. But mainly, it was a huge amount of fun. I got to hack, and geek out with hackers all around the world. When I flew into San Jose for the first time, DaveM offered to pick me up: turns out he had a two seater so I rode squashed under the rear glass on the overside parcel shelf to see the sights (Sun campus, Berkeley). Back home, I moved to Canberra to join the legendary group of hackers at OzLabs. The mailing list changed: I gradually learned not to be an asshole (unless, y'know, it was *really* funny, and eventually not even then). Most of my peers trended the same way. The kernel itself became more formal, more complex, and giant overarching changes became far, far fewer. There are still horrible APIs (the return value of copy_to/from_user, using the same type for list heads and elements, to name two[7]), but the modern calculus of disruptive changes means sometimes we simply step over the broken paving stones instead of repairing them. I built a team around netfilter, then handed maintenence off to Harald Welte and ceased contributing: I wanted him to own it entirely. I was more nervous handing module maintenance over to someone I've never even met or spoken to, but it's clear now that with Jessica Yu I have scored 2 for 2. I'm as proud of choosing them as of any individual piece of kernel code[8]. To my fellow maintainers: stay harsh on code and don't be afraid to say "No" or "Why?"; there really are more bad ideas than good ones, and complexity is such a bright candle for us hacker-moths. But be gentle, kind and forgiving of your peers: respect from people you respect is really the only reward that sticks[9]. Farewell all, and I look forward to crossing your paths again! Rusty. [0] Which means I'm now going maudle for NINE paragraphs! And no TLDR, bwahaha! [1] OK, I remember this. Reality may differ. [2] There's no recording of this talk, but it was the best technical talk anyone has ever given on anything[1]. [3] On the internet, nobody knows you barely passed Computer Networking![4] [4] OTOH I topped COBOL/Database programming, so I have no idea what happened. [5] Except DaveM. I'd written test reloc code for sparc/spac64, but he didn't know that so he just cheerfully reimplemented it.[6] [6] Those reading this post closely may suspect that I have a massive hackercrush on David S. Miller. Those reading the code closely, of course, already feel that way themselves. [7] But set_bit finally takes a long! Seriously... [8] Though the ARRAY_SIZE macro and the poetry in lguest are a close second. [9] Actually, bitcoin is a nice reward too; it's like crystalized machine sweat! Signed-off-by: Rusty Russell Signed-off-by: Jessica Yu --- MAINTAINERS | 2 -- 1 file changed, 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index a6e86e20761e..80984be0166a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9168,7 +9168,6 @@ F: drivers/media/dvb-frontends/mn88473* MODULE SUPPORT M: Jessica Yu -M: Rusty Russell T: git git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git modules-next S: Maintained F: include/linux/module.h @@ -10283,7 +10282,6 @@ F: Documentation/parport*.txt PARAVIRT_OPS INTERFACE M: Juergen Gross M: Alok Kataria -M: Rusty Russell L: virtualization@lists.linux-foundation.org S: Supported F: Documentation/virtual/paravirt_ops.txt From 1323eac7fd6560c809aa0ea6081904a5dfa581a9 Mon Sep 17 00:00:00 2001 From: Namit Gupta Date: Mon, 8 Jan 2018 10:41:21 +0530 Subject: [PATCH 2/3] ftrace/module: Move ftrace_release_mod() to ddebug_cleanup label ftrace_module_init happen after dynamic_debug_setup, it is desired that cleanup should be called after this label however in current implementation it is called in free module label,ie:even though ftrace in not initialized, from so many fail case ftrace_release_mod() will be called and unnecessary traverse the whole list. In below patch we moved ftrace_release_mod() from free_module label to ddebug_cleanup label. that is the best possible location, other solution is to make new label to ftrace_release_mod() but since ftrace_module_init() is not return with minimum changes it should be in ddebug_cleanup label. Signed-off-by: Namit Gupta Reviewed-by: Steven Rostedt (VMware) Signed-off-by: Jessica Yu --- kernel/module.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/kernel/module.c b/kernel/module.c index dea01ac9cb74..10c3c03091d9 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3789,6 +3789,7 @@ static int load_module(struct load_info *info, const char __user *uargs, module_disable_nx(mod); ddebug_cleanup: + ftrace_release_mod(mod); dynamic_debug_remove(mod, info->debug); synchronize_sched(); kfree(mod->args); @@ -3808,12 +3809,6 @@ static int load_module(struct load_info *info, const char __user *uargs, synchronize_sched(); mutex_unlock(&module_mutex); free_module: - /* - * Ftrace needs to clean up what it initialized. - * This does nothing if ftrace_module_init() wasn't called, - * but it must be called outside of module_mutex. - */ - ftrace_release_mod(mod); /* Free lock-classes; relies on the preceding sync_rcu() */ lockdep_free_key_range(mod->core_layout.base, mod->core_layout.size); From 0cad61d7a3d51e0237a7e421c75b04ebbb5062d0 Mon Sep 17 00:00:00 2001 From: Luis de Bethencourt Date: Tue, 16 Jan 2018 13:21:29 +0000 Subject: [PATCH 3/3] modpost: Remove trailing semicolon The trailing semicolon is an empty statement that does no operation. Removing it since it doesn't do anything. Signed-off-by: Luis de Bethencourt Signed-off-by: Jessica Yu --- scripts/mod/modpost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index f51cf977c65b..49dfcd556c78 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1685,7 +1685,7 @@ static void extable_mismatch_handler(const char* modname, struct elf_info *elf, static void check_section_mismatch(const char *modname, struct elf_info *elf, Elf_Rela *r, Elf_Sym *sym, const char *fromsec) { - const char *tosec = sec_name(elf, get_secindex(elf, sym));; + const char *tosec = sec_name(elf, get_secindex(elf, sym)); const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec); if (mismatch) {