Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1454790pxk; Fri, 25 Sep 2020 15:39:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJywSx6PSMfhKbF1qsgCzPFXlFNmAHvIDn3XNEbMWHS9VGVmkjGhFLdN9KCNqWWJFT+LCIIs X-Received: by 2002:a17:906:915:: with SMTP id i21mr4821405ejd.113.1601073551448; Fri, 25 Sep 2020 15:39:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601073551; cv=none; d=google.com; s=arc-20160816; b=lQv5XjcAl2xKi0r0tIHArvwtsiXERWTSvAx1/AlpjtmIu/Z7+72lDF5weFHMGie20A +b4gC979D6CmmyfjGcw6LcLrHgmGU9jaw8MJBs2iDPP0uxKmCiya+XVclcjtvrON2mfT qYw7y9DVwlg4Mt+V0PvxrAWKOE42mSQ6P1fGP3baYKYxkDGrUmbQK7XZPFrGt3Lha27R i322miq+0GPAEC9vPj9q4I5qaGGEWI3LNFCGC0KvCnRED17A3lwLbU69hXFj1TEKZtRH MpKdvbuc+Jc2y+MH1cL3zMkMHHppSLdOYApw9roM7Y7yLmv4Th2A1N2rl0evx69oc1cF 8+3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:dkim-signature:dkim-signature:from; bh=DhcPDYsymGRYtFB2dmQY+Zy+IpI+TEEnDEihuujzLt0=; b=slk7vmQYxrkVLeCgWVNAxIhxXih2HoliERJS5iKHjJ0DlvDi6KW0LfPf5Y+t6LBDx0 PCURjuWFY39Rhy2jM3vB1/D21YAPcQMEKVUWIiJWD/9yuhVn7rzz0dZEbmxGErbQuMWX b+0srXPBA9U1VSR2sThz6PItCw/InQt5g2uVTCB03f4MYdobsEMPxiRSlqMQ2yNauw4N LqLJA+B+6/EryRb0t8XH1V75UJVE2MnBj6zki8AiO/tMD1mJ8SahMgDruzOhUS7MEFU7 RVd5b4b7Hi+i29dv+CxPeZURq254lzf9tjmoAST2wuRkNTnUfwmgJJ6J5tAu+9UZDQ3v LxWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=KWJ+Oxhw; dkim=neutral (no key) header.i=@linutronix.de header.b=lbZW0QdE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dd18si2743459edb.605.2020.09.25.15.38.48; Fri, 25 Sep 2020 15:39:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=KWJ+Oxhw; dkim=neutral (no key) header.i=@linutronix.de header.b=lbZW0QdE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728896AbgIYWhm (ORCPT + 99 others); Fri, 25 Sep 2020 18:37:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726559AbgIYWhm (ORCPT ); Fri, 25 Sep 2020 18:37:42 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F356C0613CE for ; Fri, 25 Sep 2020 15:37:42 -0700 (PDT) From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1601073458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DhcPDYsymGRYtFB2dmQY+Zy+IpI+TEEnDEihuujzLt0=; b=KWJ+Oxhw3yNSPw6BGgcUmmNNFya46I0LL4TK4TA01jxstORj0LHB6/RVX3d75ud3ne25b0 lwHtPtJTtTHgkNmY1PU+vfFstpNkDkqTPrGi3mFGfR82KOShmzq9a4/2WFk2vG/zcjdXS2 6ZD5FRuNRG6fY95xOPC+kmIxZHQA+T2F6li0eLBdgstUyfrkJx2V+gXXCa976kB6gLlP4q VW7qF3HUBZkoHpzr/grGalvEBLJ8JKK+nxk82av98XwCOeGe8N3/BvbIiPcjFrtfgA7Ygx o8tDoARFrrPb1QltI16KZaxMlOVJqbxE4woozT+jo+4PUh9W6tp4LUS4Z/RGvQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1601073458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DhcPDYsymGRYtFB2dmQY+Zy+IpI+TEEnDEihuujzLt0=; b=lbZW0QdE1qPFRKJ84X3/iPFmINUkK6RRC25re6/DvhIcEKw5iULkeKr1nKb0WDf4JPgXA6 V21FT6ohHKU8zaAA== To: Frederic Weisbecker Cc: qianjun.kernel@gmail.com, peterz@infradead.org, will@kernel.org, luto@kernel.org, linux-kernel@vger.kernel.org, laoar.shao@gmail.com, qais.yousef@arm.com, urezki@gmail.com Subject: Re: [PATCH V7 4/4] softirq: Allow early break the softirq processing loop In-Reply-To: <20200924230811.GC19346@lenoir> References: <20200915115609.85106-1-qianjun.kernel@gmail.com> <20200915115609.85106-5-qianjun.kernel@gmail.com> <878scz89tl.fsf@nanos.tec.linutronix.de> <20200924230811.GC19346@lenoir> Date: Sat, 26 Sep 2020 00:37:37 +0200 Message-ID: <87imc1v5xq.fsf@nanos.tec.linutronix.de> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 25 2020 at 01:08, Frederic Weisbecker wrote: > On Thu, Sep 24, 2020 at 05:37:42PM +0200, Thomas Gleixner wrote: >> Subject: softirq; Prevent starvation of higher softirq vectors >> From: Thomas Gleixner >> Date: Thu, 24 Sep 2020 10:40:24 +0200 >> >> From: Thomas Gleixner >> >> The early termination of the softirq processing loop can lead to starvation >> of the higher numbered soft interrupt vectors because each run starts at >> the lowest bit. If the loop terminates then the already processed bits can >> be raised again before the next loop starts. If these lower bits run into >> the termination again, then a re-raise might starve the higher bits forever. >> >> To prevent this, store the leftovers of the previous run in the upper 16 >> bit of the local softirq_pending storage and ensure that these are >> processed before any newly raised bits are handled. >> >> Signed-off-by: Thomas Gleixner >> --- >> kernel/softirq.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++-------- >> 1 file changed, 50 insertions(+), 8 deletions(-) >> >> --- a/kernel/softirq.c >> +++ b/kernel/softirq.c >> @@ -259,11 +259,23 @@ static inline bool __softirq_needs_break >> return need_resched() || __softirq_timeout(tbreak); >> } >> >> +/* >> + * local_softirq_pending() is split into two 16 bit words. The low word >> + * contains the bits set by raise_softirq(), the high word contains pending >> + * bits which have not been processed in an early terminated run. This is >> + * required to prevent starvation of the higher numbered softirqs. >> + */ >> +#define SIRQ_PREV_SHIFT 16 > > Note that in the case of x86, irq_start.__softirq_pending is a u16. > > The origin is there: 9aee5f8a7e30330d0a8f4c626dc924ca5590aba5 > "x86/irq: Demote irq_cpustat_t::__softirq_pending to u16" Bah, crap. I knew I that and wanted to fix it up but then forgot. Thanks for reminding me of my slowly upcoming alzheimer!