From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932617AbeARRBD convert rfc822-to-8bit (ORCPT ); Thu, 18 Jan 2018 12:01:03 -0500 Received: from mout.gmx.net ([212.227.17.20]:65363 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750948AbeARRBB (ORCPT ); Thu, 18 Jan 2018 12:01:01 -0500 Message-ID: <1516294803.8020.11.camel@gmx.de> Subject: Re: [RFC 4/6] softirq: Run per-group per-cpu ksoftirqd thread From: Mike Galbraith To: Dmitry Safonov , linux-kernel@vger.kernel.org Cc: Andrew Morton , David Miller , Eric Dumazet , Frederic Weisbecker , Hannes Frederic Sowa , Ingo Molnar , "Levin, Alexander (Sasha Levin)" , Linus Torvalds , Mauro Carvalho Chehab , Paolo Abeni , "Paul E. McKenney" , Peter Zijlstra , Radu Rendec , Rik van Riel , Stanislaw Gruszka , Thomas Gleixner , Wanpeng Li Date: Thu, 18 Jan 2018 18:00:03 +0100 In-Reply-To: <20180118161238.13792-5-dima@arista.com> References: <20180118161238.13792-1-dima@arista.com> <20180118161238.13792-5-dima@arista.com> Content-Type: text/plain; charset="ISO-8859-15" X-Mailer: Evolution 3.20.5 Mime-Version: 1.0 Content-Transfer-Encoding: 8BIT X-Provags-ID: V03:K0:rtj9Lb/uR7d9hUFIxD4u3hTzBtezve42XfhNlTxYsHF3268pYUc PNPMo7glDIUw1/b4UwVf7nQsY57kyy9UwaSIZigHUle9FKcoVcpgr/DR73HJ9NC1qsdWD7T MBfNZUX6Hm5STgkndEdx9getLpGMsH0vsqT4J8CceWtqbOSV3bK1stXy5ufKbv6G5Wd13ob 9mJcboOVCKeTURBhSfB8A== X-UI-Out-Filterresults: notjunk:1;V01:K0:Te1aUXnKQW8=:wKKZkveEgXAqiJOFngF1L8 A0gdGBx/WjZmwk2b9pKDlTGUj41rghGufHeIZ4qWsiLLU97dS2ufhkcsA82JqeABanS/d0zHX dwsf5rrsSfvmBaRKzk6uSZLVWCRMEZOwc8pbeIZv6LCwcl84XXaLVXBmS39EL+LYl+9Fd2d8c NucM2sjmJJPsC+FaNT+PtBK/CioB0xkZqjVhImuHAbAzXk/qdfMDiVevzfv9M+jmO2Iis8NtK /p8uaFnvGabuctU72NGtPRGfRkQstpmqidkLVGykr1Pl03nEhTK8x7jmjJUBfufXWoIn+O/6R 4qnFbl1PdDImQxSv7m3tRTSyWzDNkjHFxoODpwOMpNjGlXbLSYw6h1QcrAjqFJpQZs31xxmrB OiWqQNcWST12GDQX0xsarW7aGLo9SbiQkEqdCiPkEA5ovheXFyvP44p9nzBzlI+oebdhcscyY 3uVXJiCjXwRZFVm1BJXZU4fPKAKdFHnm7K5cdlRSF9qWsEgogJYHzrs0FFVxu03bom+4xI4D+ 1n/bIELkyI9TXI0yHGXX0NVUDEumD2oMVn9BwFP/6K+nmC/HlyKcsRWIh+XRAr0Mao6e6FAUg MoO+gkspU0fm0wEYsZuplX/4cNPlJXxPg4NHDS69OkP4v8xVfj0UfhOttc3O6qrFjaXZalaEs vcZ8Km0tuH2qx99cLaxovtR+SAnryqPSP6UsLB89trw5EAgq0pxBJD1VflP/FeJGjYjlHukn5 kuc1h1M+DntX+s9q47Rvme3H7cTjq7hrHpgsBkmQtQFknVgBt8nIN0c5lHNAVhx2OLZpahWNW eb0T7LESREF9oj0QW8KecO+7vWgDpbTKmaRlXoJlP1wpBrXgWY= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2018-01-18 at 16:12 +0000, Dmitry Safonov wrote: > > diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h > index 2ea09896bd6e..17e1a04445fa 100644 > --- a/include/linux/interrupt.h > +++ b/include/linux/interrupt.h > @@ -508,11 +508,21 @@ extern void __raise_softirq_irqoff(unsigned int nr); > extern void raise_softirq_irqoff(unsigned int nr); > extern void raise_softirq(unsigned int nr); > > -DECLARE_PER_CPU(struct task_struct *, ksoftirqd); > +extern struct task_struct *__percpu **ksoftirqd; > +extern unsigned nr_softirq_groups; > > -static inline struct task_struct *this_cpu_ksoftirqd(void) > +extern bool servicing_softirq(unsigned nr); > +static inline bool current_is_ksoftirqd(void) > { > - return this_cpu_read(ksoftirqd); > + unsigned i; > + > + if (!ksoftirqd) > + return false; > + > + for (i = 0; i < nr_softirq_groups; i++) > + if (*this_cpu_ptr(ksoftirqd[i]) == > current) > + return true; > + return false; > } I haven't read all this, but in a quick drive-by this poked me in the eye.  For RT tree fully threaded softirqs, I stole a ->flags bit to identify threads ala PF_KTHREAD (PF_KSOFTIRQD).  In previous versions, I added a bit field to do the same, either is quicker than rummaging. -Mike