Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp4799107imm; Tue, 11 Sep 2018 18:35:16 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZxF0TYq78eWF73GwmWIPm4rP/5Euxojx2fDwIeTY9uWvhUjdnpeydR48NT7BSo7aZWC/w+ X-Received: by 2002:a62:64ca:: with SMTP id y193-v6mr31938407pfb.250.1536716116014; Tue, 11 Sep 2018 18:35:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536716115; cv=none; d=google.com; s=arc-20160816; b=fcc3ylOKIQ6K0hBz+RS8a9/AJlmAo0LJxk2y1Itn/IcH0RGZ4bNvHEpkzwA3Ybqqb1 hk8bEOd0u50Twb9RYgkvX4yT9MHQulJqPj2xsTn1sEpVeed5gf4cBr+LQtIOB87c41Xy 4qNe7r6eX4ZhSivm1OY+7bSwtQhs39Jakn5xBqnSHD/fBLP1Ko/4Xw2OBbhMNv2NIukL cMMaP1p1G9dxWlKPEyF5tQCF3NR8LRnqqwNpArugdKAtTliY2ah9MJQk/JUARyX8UXZR C8F/+0/pXQOp8I61dJVH+w24+MP12gxissVGeTnYhja6OEdAIQwBxMQM6W+prJ9tn7Mo AiRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=1+iGQQaC2LkrZ1xdmEQSqnSrhnZyuykv1+AdPUMbPYo=; b=LLgbME9rxszIUIpVf+6DMnYsQN7XDqF6MN5qlQkJJN+NtifA0COdp9SDH+CC4SkSKO kqjfpqIe3UxEvvoGY6cPIqH5vdNxrDBd9uRCjUJWYSWn8ZONcDJvVPw92UIsovOWNwWD FuxtdUIktOdcr2ahW5Ytx2R4VLOH+l+t/IV8LkYiHGLptXXxc5uD0V2dHW24P67hBVEB UK3mQg8x5NUSbzSYFX2Lw0lZv1TQ5sPzS2Djxlwwe397p87kfCCXCXvbiE1jraRS/2zl IuFhLHBsIRLa4MvKG6Ho6HHg93S6Zrf4ZQYJ2ixWrQoJJrYHwMJ16AQ8O6iCGWtxOACQ t94Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Dwd5qKD6; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n68-v6si22868927pga.662.2018.09.11.18.34.58; Tue, 11 Sep 2018 18:35: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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Dwd5qKD6; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727876AbeILGgy (ORCPT + 99 others); Wed, 12 Sep 2018 02:36:54 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:38192 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727413AbeILGgx (ORCPT ); Wed, 12 Sep 2018 02:36:53 -0400 Received: by mail-pl1-f193.google.com with SMTP id u11-v6so144876plq.5; Tue, 11 Sep 2018 18:34:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=1+iGQQaC2LkrZ1xdmEQSqnSrhnZyuykv1+AdPUMbPYo=; b=Dwd5qKD6SyE4y1va8wixKGqNMVYdV2dzutsGnAmZpa5Km4H7nodmizUF+ho9rKw6qC OSKxvojxKvip4eqYScvG1oPeskHkljhIlW+wnKjJaBGhl84DXRkfzEoNYeJUFRlLta28 EMZxM07EE4+Kp0ApT0aibedavdIUbc8D0L5wSULXrVa8v2jbCOaBFakPOWvKMcSYqeKp busxFq+D/qmWDsWSyi9sNc0EVKTjYDwGerKuyyZsgn6QRcKjSj2q8nwEyNo9GeuoxMdN WLNdxQ2oojWoN3ZS71gxOZ+RfecF5km/pfb0UUO9djE4QEuhC+62kH8KrhnO8n26MnNC AvmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=1+iGQQaC2LkrZ1xdmEQSqnSrhnZyuykv1+AdPUMbPYo=; b=hS1TFsRfhBuDcHexnsoA5FCBjz/7NmflL9P1+oXmDrVKrJdfnj+y91yAwn5UH3y//C vzAdmcn5BCFaXNH1DmDT52B5vY7tgaYp0NqduFohFyqHCLogCHYkTBMnx19qNoz9ZX0h K9JvVW9hjywdbgyUsr6tU0xpl6T5ClUrxl3jo24vG4ePUx+gVIoinC0hoQTsp+gqxtkz ny00vDE4oXzGUgqG3nsC5ot7ICO1nVR83BE5ehmG6qGdWADpptByL4bp5zDUjaW1QHSy qzq+lUo/k/7mhDpCvCRJIfiaYuy240aAFOqT2A1aKqrXp4ZZ6GUVyQgFNvunCQxmeANZ F2/A== X-Gm-Message-State: APzg51BaeHSh7WhGR89fn+VgMIaN3vk3NL2/XjiEreoVSCCemuTeHKaN lWQDm36LZAkh4YxUdKL8opswEL8X X-Received: by 2002:a17:902:7e09:: with SMTP id b9-v6mr29796214plm.221.1536716092430; Tue, 11 Sep 2018 18:34:52 -0700 (PDT) Received: from localhost (108-223-40-66.lightspeed.sntcca.sbcglobal.net. [108.223.40.66]) by smtp.gmail.com with ESMTPSA id w12-v6sm30860976pfd.110.2018.09.11.18.34.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Sep 2018 18:34:51 -0700 (PDT) Date: Tue, 11 Sep 2018 18:34:49 -0700 From: Guenter Roeck To: Jae Hyun Yoo Cc: Joel Stanley , linux-aspeed@lists.ozlabs.org, Vernon Mauery , OpenBMC Maillist , Brendan Higgins , Linux Kernel Mailing List , linux-i2c@vger.kernel.org, jarkko.nikula@linux.intel.com, =?iso-8859-1?Q?C=E9dric?= Le Goater , Linux ARM , James Feist Subject: Re: [PATCH i2c-next v6] i2c: aspeed: Handle master/slave combined irq events properly Message-ID: <20180912013449.GA12612@roeck-us.net> References: <20180823225731.19063-1-jae.hyun.yoo@linux.intel.com> <20180911183734.GA21976@roeck-us.net> <1f34fe8c-69ef-5f2d-25dc-d5f6037cc558@linux.intel.com> <20180911204107.GA26017@roeck-us.net> <20180911233302.GA18799@roeck-us.net> <5698ca34-14c9-8d05-c4e6-5acf85ff9d14@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5698ca34-14c9-8d05-c4e6-5acf85ff9d14@linux.intel.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 11, 2018 at 04:58:44PM -0700, Jae Hyun Yoo wrote: > On 9/11/2018 4:33 PM, Guenter Roeck wrote: > >Looking into the patch, clearing the interrupt status at the end of an > >interrupt handler is always suspicious and tends to result in race > >conditions (because additional interrupts may have arrived while handling > >the existing interrupts, or because interrupt handling itself may trigger > >another interrupt). With that in mind, the following patch fixes the > >problem for me. > > > >Guenter > > > >--- > > > >diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c > >index c258c4d9a4c0..c488e6950b7c 100644 > >--- a/drivers/i2c/busses/i2c-aspeed.c > >+++ b/drivers/i2c/busses/i2c-aspeed.c > >@@ -552,6 +552,8 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id) > > spin_lock(&bus->lock); > > irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG); > >+ /* Ack all interrupt bits. */ > >+ writel(irq_received, bus->base + ASPEED_I2C_INTR_STS_REG); > > irq_remaining = irq_received; > > #if IS_ENABLED(CONFIG_I2C_SLAVE) > >@@ -584,8 +586,6 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id) > > "irq handled != irq. expected 0x%08x, but was 0x%08x\n", > > irq_received, irq_handled); > >- /* Ack all interrupt bits. */ > >- writel(irq_received, bus->base + ASPEED_I2C_INTR_STS_REG); > > spin_unlock(&bus->lock); > > return irq_remaining ? IRQ_NONE : IRQ_HANDLED; > > } > > > > My intention of putting the code at the end of interrupt handler was, > to reduce possibility of combined irq calls which is explained in this > patch. But YES, I agree with you. It could make a potential race Hmm, yes, but that doesn't explain why it would make sense to acknowledge the interrupt late. The interrupt ack only means "I am going to handle these interrupts". If additional interrupts arrive while the interrupt handler is active, those will have to be acknowledged separately. Sure, there is a risk that an interrupt arrives while the handler is running, and that it is handled but not acknowledged. That can happen with pretty much all interrupt handlers, and there are mitigations to limit the impact (for example, read the interrupt status register in a loop until no more interrupts are pending). But acknowledging an interrupt that was possibly not handled is always bad idea. Thanks, Guenter