Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp854003imm; Fri, 22 Jun 2018 06:28:15 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJk5nw2+p8NaMmP0OvOwH+pcEHsdN+zTH8TLpb7UyAFI6dnix4fS92S8fR+Q5X7J6tCGrPK X-Received: by 2002:a17:902:8d8b:: with SMTP id v11-v6mr1770717plo.20.1529674095698; Fri, 22 Jun 2018 06:28:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529674095; cv=none; d=google.com; s=arc-20160816; b=N1Xfdwn8WUR2+SPYtFNu+yEEmz9Rte3y4yVvJ7fHIf4DA05PcUXPTHWK6KSjZLyxHk zJrw9mtnlMQKt+tMkfRkfDjBuv7EAx+P+2t8KE6yedK7LAwZOcbE9lTt5wLjuAjH0Gmj PknypeD68QCZVQwRu5oCG0Tk5TQZb98PxDBAoinNtVATwtWIR16ZnaumRZcpMMx1WUbX UoyhwWYe5vEh5zud3ST8olWfwBbyyASATYSm7+uQTE4mRLwv6C37bxpoNEk/ncoRm/lN x1r0z/IMOhOR8+t8mva/n9cNVjWAeAKJ4Bg8ujwJEE9UZ34E4rfZCp048/Zv5ytaMKpi N1Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:user-agent:in-reply-to :content-disposition:mime-version:references:reply-to:subject:cc:to :from:date:arc-authentication-results; bh=qUEcEeQcwaMSxESHzGkEOKrkHxh7Mdrncu+QIW/yrOs=; b=Cd4eLE+iutv5GjxKdEO3YiePmTUbYTalzlCWnFeAvLgkagvPphHkvAxRIsSOcVpAQv 1Q8H1sJgSOvB2mxMpeGCXuczZXzlKBSf0K0qdmDyzey+Hon3sxTtzYBKYqhWth7bogPO LLX86HwlqyKk27FPWD/JKAqdISHUUB3EDzSDwYVMTEJeHPaqDj8d7UImlKCZRb+g2ueV 7/ffi9wh55iMltgG2qg98D5ieaQHR0Zz5ermAHkgOk/3vsaDB/3DyFRBenv4TZLaCDiQ yCIe77523+eN9iKU7/3XgCB7MWbLfrT9HvGySBersJA3/LMq1hkr7k7jYCA9JfMwdDog n0jA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b101-v6si312124pli.427.2018.06.22.06.28.01; Fri, 22 Jun 2018 06:28:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933133AbeFVN0t (ORCPT + 99 others); Fri, 22 Jun 2018 09:26:49 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:51392 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751389AbeFVN0q (ORCPT ); Fri, 22 Jun 2018 09:26:46 -0400 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w5MDOLu5047788 for ; Fri, 22 Jun 2018 09:26:46 -0400 Received: from e15.ny.us.ibm.com (e15.ny.us.ibm.com [129.33.205.205]) by mx0b-001b2d01.pphosted.com with ESMTP id 2jrx6mtbc2-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 22 Jun 2018 09:26:46 -0400 Received: from localhost by e15.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 22 Jun 2018 09:26:45 -0400 Received: from b01cxnp23033.gho.pok.ibm.com (9.57.198.28) by e15.ny.us.ibm.com (146.89.104.202) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 22 Jun 2018 09:26:41 -0400 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp23033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w5MDQfjf14025020 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 22 Jun 2018 13:26:41 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 95C1DB2064; Fri, 22 Jun 2018 09:26:40 -0400 (EDT) Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5B01CB2065; Fri, 22 Jun 2018 09:26:40 -0400 (EDT) Received: from paulmck-ThinkPad-W541 (unknown [9.80.197.125]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP; Fri, 22 Jun 2018 09:26:40 -0400 (EDT) Received: by paulmck-ThinkPad-W541 (Postfix, from userid 1000) id 354E616C9E49; Fri, 22 Jun 2018 06:28:43 -0700 (PDT) Date: Fri, 22 Jun 2018 06:28:43 -0700 From: "Paul E. McKenney" To: Joel Fernandes Cc: Byungchul Park , Byungchul Park , jiangshanlai@gmail.com, josh@joshtriplett.org, Steven Rostedt , Mathieu Desnoyers , linux-kernel@vger.kernel.org, kernel-team@lge.com, luto@kernel.org Subject: Re: [RFC 2/2] rcu: Remove ->dynticks_nmi_nesting from struct rcu_dynticks Reply-To: paulmck@linux.vnet.ibm.com References: <1529484440-20634-1-git-send-email-byungchul.park@lge.com> <1529484440-20634-2-git-send-email-byungchul.park@lge.com> <20180620145814.GQ3593@linux.vnet.ibm.com> <20180620164902.GW3593@linux.vnet.ibm.com> <20180622055659.GA255098@joelaf.mtv.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180622055659.GA255098@joelaf.mtv.corp.google.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 18062213-0068-0000-0000-0000030CD513 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009238; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000265; SDB=6.01050684; UDB=6.00538475; IPR=6.00829654; MB=3.00021805; MTD=3.00000008; XFM=3.00000015; UTC=2018-06-22 13:26:45 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18062213-0069-0000-0000-000044C5BFEB Message-Id: <20180622132843.GN3593@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-06-22_03:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1806210000 definitions=main-1806220150 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 21, 2018 at 10:56:59PM -0700, Joel Fernandes wrote: > Hi Paul, > > On Wed, Jun 20, 2018 at 09:49:02AM -0700, Paul E. McKenney wrote: > > On Thu, Jun 21, 2018 at 01:05:22AM +0900, Byungchul Park wrote: > > > On Wed, Jun 20, 2018 at 11:58 PM, Paul E. McKenney > > > wrote: > > > > On Wed, Jun 20, 2018 at 05:47:20PM +0900, Byungchul Park wrote: > > > >> Hello folks, > > > >> > > > >> I'm careful in saying that ->dynticks_nmi_nesting can be removed but I > > > >> think it's possible since the only thing we are interested in with > > > >> regard to ->dynticks_nesting or ->dynticks_nmi_nesting is whether rcu is > > > >> idle or not. > > > > > > > > Please keep in mind that NMIs cannot be masked, which means that the > > > > rcu_nmi_enter() and rcu_nmi_exit() pair can be invoked at any point in > > > > the process, between any consecutive pair of instructions. The saving > > > > And yes, I should have looked at this patch more closely before replying. > > But please see below. > > > > > I believe I understand what NMI is and why you introduced > > > ->dynticks_nmi_nesting. Or am I missing something? > > > > Perhaps the fact that there are architectures that can enter interrupt > > handlers and never leave them when the CPU is non-idle. One example of > > this is the usermode upcalls in the comment that you removed. > > I spent some time tonight and last night trying to understand this concept of > never leaving an interrupt, I hope you don't mind me asking this dumb > question... perhaps I will learn something : Could you let me know how is it > possible that an interrupt never exits? > > Typically an interrupt never exiting sounds like a hard-lockup. This is how > hardlock detector works: Since regular interrupts in linux can't nest, the > hardlockup detector checks if hrtimer interrupts are being handled and if > not, then it throws a splat, panics the kernel etc. So I am a bit troubled by > this interrupt never exiting concept.. > > Further since an interrupt is an atomic context, it cannot sleep or schedule > into usermode so how are these upcalls handled from the interrupt? It has been some years since I traced the code flow, but what happened back then is that it switches itself from an interrupt handler to not without actually returning from the interrupt. This can only happen when interrupting a non-idle process, thankfully, and RCU's dyntick-idle code relies on this restriction. If I remember correctly, the code ends up executing in the context of the interrupted process, but it has been some years, so please apply appropriate skepticism. Please take a look at the "Interrupts and NMIs" section of the file Documentation/RCU/Design/Requirements/Requirements.html for a bit more information. > Lastly, can you point me to an example how the rcu_nmi_enter/exit() pair can go > out sync? That is they aren't paired and nested properly? In my mind they > always should be but I may be missing the usecase. I'm happy to try and > reproduce and trace this if you can let me know how to so that I can study > it better. I have never seen NMIs be unpaired or improperly nested. However, given that rcu_irq_enter() invokes rcu_nmi_enter() and rcu_irq_exit() invokes rcu_nmi_exit(), it is definitely the case that rcu_nmi_enter() and rcu_nmi_exit() need to deal with unpaired and improperly nested invocations. So why this function-call structure? Well, you see, NMI handlers can take what appear to RCU to be normal interrupts... (And I just added that fun fact to Requirements.html.) > Thanks a lot Paul for your help, Please feel free to take a look at Requirements.html. There are a lot more surprising RCU facts of life recorded there. ;-) Thanx, Paul