Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965500AbbLOPkL (ORCPT ); Tue, 15 Dec 2015 10:40:11 -0500 Received: from mail-sn1nam02on0087.outbound.protection.outlook.com ([104.47.36.87]:47726 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S965298AbbLOPkH (ORCPT ); Tue, 15 Dec 2015 10:40:07 -0500 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; ettus.com; dkim=none (message not signed) header.d=none;ettus.com; dmarc=bestguesspass action=none header.from=xilinx.com; Date: Tue, 15 Dec 2015 07:41:36 -0800 From: =?utf-8?B?U8O2cmVu?= Brinkmann To: Peter Hurley CC: Greg Kroah-Hartman , Jiri Slaby , Michal Simek , , , , Moritz Fischer Subject: Re: [PATCH LINUX v4 06/13] tty: xuartps: Move request_irq to after setting up the HW Message-ID: <20151215154136.GU3358@xsjsorenbubuntu> References: <1449376769-13369-1-git-send-email-soren.brinkmann@xilinx.com> <1449376769-13369-7-git-send-email-soren.brinkmann@xilinx.com> <5669F172.6020503@hurleysoftware.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <5669F172.6020503@hurleysoftware.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22002.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:149.199.60.100;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(24454002)(479174004)(377454003)(199003)(377424004)(189002)(85182001)(86362001)(5001960100002)(5008740100001)(19580405001)(11100500001)(76506005)(77096005)(57986006)(2950100001)(47776003)(19580395003)(63266004)(83506001)(85202003)(50466002)(81156007)(54356999)(1076002)(4001150100001)(1220700001)(33716001)(189998001)(106466001)(87936001)(586003)(4001350100001)(1096002)(76176999)(23676002)(92566002)(110136002)(33656002)(36386004)(6806005)(50986999)(107986001)(5001870100001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1NAM02HT022;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com;A:1;MX:1;LANG:en; X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501001);SRVR:SN1NAM02HT022; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(10201501046)(3002001);SRVR:SN1NAM02HT022;BCL:0;PCL:0;RULEID:;SRVR:SN1NAM02HT022; X-Forefront-PRVS: 07915F544A X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Dec 2015 15:40:04.6918 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1NAM02HT022 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2957 Lines: 84 On Thu, 2015-12-10 at 01:41PM -0800, Peter Hurley wrote: > On 12/05/2015 08:39 PM, Soren Brinkmann wrote: > > Request_irq() should be _after_ h/w programming, otherwise an > > interrupt could be triggered and in-progress before the h/w has been > > setup. > > Slight misunderstanding. My fault; I should have been more explicit. > > 1. Any setup necessary for the isr not to be confused and misdirect spurious > interrupts (or hang) should be before installing the isr with request_irq() > None of this code should trigger an interrupt. > 2. Clear pending interrupts > 3. Install the isr with request_irq() > 4. Enable interrupts Isn't that what the startup function is doing now - more or less. I think 3 and 4 are swapped to release the lock and then do the request_irq, but I believe that should be OK. The startup function configures the HW. Clears the ISR. Enables the intended IRQs and then does the request_irq call. > > For extra safety, first disable interrupts before starting h/w programming. It's done within spin_lock_irqsave, which gives us at least locally disabled IRQs. I guess we could add a disabling all IRQs in the UART core, but it should not really be necessary. > > I would do the v5 series in the same order as the v3 series only up to > what I reviewed. Then do another series with the remainder plus new changes, ok? Sure. Sören > > Regards, > Peter Hurley > > > Reported-by: Peter Hurley > > Signed-off-by: Soren Brinkmann > > --- > > v4: > > - this patch has been added. Thanks to Peter for pointing it out and providing > > commit message > > --- > > drivers/tty/serial/xilinx_uartps.c | 9 ++------- > > 1 file changed, 2 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c > > index 6ffd3bbe3e18..1e9053656610 100644 > > --- a/drivers/tty/serial/xilinx_uartps.c > > +++ b/drivers/tty/serial/xilinx_uartps.c > > @@ -759,12 +759,7 @@ static void cdns_uart_set_termios(struct uart_port *port, > > static int cdns_uart_startup(struct uart_port *port) > > { > > unsigned long flags; > > - unsigned int retval = 0, status = 0; > > - > > - retval = request_irq(port->irq, cdns_uart_isr, 0, CDNS_UART_NAME, > > - (void *)port); > > - if (retval) > > - return retval; > > + unsigned int status = 0; > > > > spin_lock_irqsave(&port->lock, flags); > > > > @@ -818,7 +813,7 @@ static int cdns_uart_startup(struct uart_port *port) > > > > spin_unlock_irqrestore(&port->lock, flags); > > > > - return retval; > > + return request_irq(port->irq, cdns_uart_isr, 0, CDNS_UART_NAME, port); > > } > > > > /** > > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/