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
| ||
|
Date: Fri, 7 Jul 2017 11:32:49 +0200 From: Ingo Molnar <mingo@...nel.org> To: Peter Zijlstra <peterz@...radead.org> Cc: David Laight <David.Laight@...LAB.COM>, "'paulmck@...ux.vnet.ibm.com'" <paulmck@...ux.vnet.ibm.com>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "netfilter-devel@...r.kernel.org" <netfilter-devel@...r.kernel.org>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "oleg@...hat.com" <oleg@...hat.com>, "akpm@...ux-foundation.org" <akpm@...ux-foundation.org>, "mingo@...hat.com" <mingo@...hat.com>, "dave@...olabs.net" <dave@...olabs.net>, "manfred@...orfullife.com" <manfred@...orfullife.com>, "tj@...nel.org" <tj@...nel.org>, "arnd@...db.de" <arnd@...db.de>, "linux-arch@...r.kernel.org" <linux-arch@...r.kernel.org>, "will.deacon@....com" <will.deacon@....com>, "stern@...land.harvard.edu" <stern@...land.harvard.edu>, "parri.andrea@...il.com" <parri.andrea@...il.com>, "torvalds@...ux-foundation.org" <torvalds@...ux-foundation.org> Subject: Re: [PATCH v2 0/9] Remove spin_unlock_wait() * Ingo Molnar <mingo@...nel.org> wrote: > > * Peter Zijlstra <peterz@...radead.org> wrote: > > > > It might even be that this is the defined semantics of spin_unlock_wait(). > > > > As is, spin_unlock_wait() is somewhat ill defined. IIRC it grew from an > > optimization by Oleg and subsequently got used elsewhere. And it being the > > subtle bugger it is, there were bugs. > > I believe the historical, original spin_unlock_wait() came from early SMP > optimizations of the networking code - and then spread elsewhere, step by step. > All but one of the networking uses went away since then - so I don't think there's > any original usecase left. No - the original usecase was task teardown: I still remembered that but didn't find the commit - but it's there in very old Linux kernel patches, done by DaveM originally in v2.1.36 (!): --- a/kernel/exit.c +++ b/kernel/exit.c @@ -136,6 +136,12 @@ void release(struct task_struct * p) } for (i=1 ; i<NR_TASKS ; i++) if (task[i] == p) { +#ifdef __SMP__ + /* FIXME! Cheesy, but kills the window... -DaveM */ + while(p->processor != NO_PROC_ID) + barrier(); + spin_unlock_wait(&scheduler_lock); +#endif Other code learned to use spin_unlock_wait(): the original version of [hard]irq_enter() was the second user, net_family_read_lock() was the third user, followed by more uses in networking. All but one of those are not present in the current upstream kernel anymore. This task-teardown FIXME was fixed in v2.1.114 (was replaced by an open coded poll loop), but the spin_unlock_wait() primitive remained. The rest is history! ;-) Thanks, Ingo
Powered by blists - more mailing lists