Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp4722555imm; Tue, 11 Sep 2018 17:00:32 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYuTZZ86bT+nmtuY8UZjQdtLM5/8D4MXjH5A/c+jIQcMHlZ7Of6JrTS/W5F+IK1BrRSxMuo X-Received: by 2002:a63:5706:: with SMTP id l6-v6mr31620896pgb.118.1536710431983; Tue, 11 Sep 2018 17:00:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536710431; cv=none; d=google.com; s=arc-20160816; b=UGiIkDB00AWVvs+a504vCLKYYYYp+KOsw8S8tNEhBLzg4Sa6sfb98OznqenNlb21lm 1m5kYp1+ZcnUylqx0Ut6jhADtuDdopz7vdoVAjwMZYOIzZOnF8mgiqLfGeMC0vEx9f9y 5QYqt8h2UUa+KnGAbW+opx9ecB3p1ywU3eAnH9H4NlCyW0wc6yQp/kN3HDI88Famr6ir +R4h5FQ3PCJYPDVKCeyQHcBpsjlgNlMtG96ffFm5MiGJXsGOyHrYDboM3Zu6V6MQCVZN 8s2kgj8UWMFo33qmgHBnFWEMTUNfkwNeLlS5nBVY3lN6CWOHhZ3Q1jdQ2Wv6CQ+ncV72 b7VQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=U8YbOH5C495MM2PTu72KmcSmd51tX4+eLajmcjx75iw=; b=PXtHHOQ7lI2aBv5Ow5N5a8SFE2KuMGR+msph0wiOf90I7GaM8Ao/FMjuXkav1bv685 7/fYDctTYIpBM3Xy6uw+txG2LqcAcRGDWSv4Slny/WEveO80R18Ae0blKouB2cfmZKab bRt+9u/7HD/YzWnYoiUntRNhzMlj+D/vQT9e/awjdHweMxrJkjjjejQIWvbVZMc0EKPn JEasEO8PDMtm4s9B2FMQnuTdtw6nMvmYSqIL97oA6UNLJTkb0/fsiknxQ8fsd9Dix15d 1ZZtrh8EOwDWopMIVUVu5ykuo4bFlaKexYhEovOH2QTStb5AxM85CD5JVRoj+Qz7NmQj d/7w== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x66-v6si22268502pfx.129.2018.09.11.17.00.15; Tue, 11 Sep 2018 17:00:31 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728038AbeILFAZ (ORCPT + 99 others); Wed, 12 Sep 2018 01:00:25 -0400 Received: from mga09.intel.com ([134.134.136.24]:65090 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726980AbeILFAZ (ORCPT ); Wed, 12 Sep 2018 01:00:25 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Sep 2018 16:58:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,362,1531810800"; d="scan'208";a="82726370" Received: from yoojae-mobl1.amr.corp.intel.com (HELO [10.7.153.143]) ([10.7.153.143]) by orsmga003.jf.intel.com with ESMTP; 11 Sep 2018 16:58:44 -0700 Subject: Re: [PATCH i2c-next v6] i2c: aspeed: Handle master/slave combined irq events properly To: Guenter Roeck , Joel Stanley Cc: 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, =?UTF-8?Q?C=c3=a9dric_Le_Goater?= , Linux ARM , James Feist 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> From: Jae Hyun Yoo Message-ID: <5698ca34-14c9-8d05-c4e6-5acf85ff9d14@linux.intel.com> Date: Tue, 11 Sep 2018 16:58:44 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180911233302.GA18799@roeck-us.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 condition as you pointed out. I tested your code change and checked that it works well. Let me take more sufficient test on real H/W. Will share the test result. Thanks a lot! Jae