Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2130943yba; Mon, 15 Apr 2019 05:41:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqyQ1iKYJxliUa1ym4W1YgwVFk6J4u2Irftw72iMZ522jOkoc/iqTfUW5gev6isFVV2p+h8m X-Received: by 2002:a65:424b:: with SMTP id d11mr69860507pgq.205.1555332092920; Mon, 15 Apr 2019 05:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555332092; cv=none; d=google.com; s=arc-20160816; b=Dq0ohRp2eOsvblHnPkaPcwVQGfSl5+qX/5vZipSfMyGi/GQXGMzjdQwxwGTtATcMIW gR6QVa9LQhrwUS+dU13AeZc8Zy1A5qaPeTiwqV4JuHSRxhbH+N78o99ttuAuhX1aA5wi M8lpH4KUnd+rEb9l9V+5GLLYF3kfA0/A5ShBwnkGeVnNgDi8khV7FTf4zhwOCacKJEeJ wrPO0YzzNnjCfQ8C3BcF4/zrixBSrPNyr77ehiv4YAOHqvtN9CZzlpBfCwUDguHGLDTM ann/t1X4zrnJQh33GSJumZHGnj0oeS6t7/f9E/mwJSwgldhDtLm8kAfMWX+falIBb9M6 fzCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=fYO1rIghbgKhztOG84RTNsXjVm4pflx9mXpppRrl+9Q=; b=hzmdFZpDQE57GmMWgpAH0FYtaCfy65n+EVEbE0ZD5FHhdxkzz+Gjy+L5lvfDWjAhpJ bbIfL02/HGQ58hCYNmHPEoST03gziS7Q+X9Fe/Xg6fS8Rzc/12U9ZNTiubMaRdmDeVDl fxPncnBh0a+U5FOcWuSRFsEMMWAHScapHNpBhMIjNi2A0LM1eUgUczREMvgZs6wRTRj3 S/HFwKWQozC+VJ4TxvQBwou4P6z21uQlFff/R3uLcPwgS345KXDJHMflGyWryTgAze1/ 7J1A8ui9eZIdhWLQR6q65VdYvxpLCOBsg3KOtdYw3ho/w11Z8cruKy/TEI4DO+pnm7Q0 hogg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=PlYg36wO; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r10si42521514pgp.30.2019.04.15.05.41.16; Mon, 15 Apr 2019 05:41:32 -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=pass header.i=@gmail.com header.s=20161025 header.b=PlYg36wO; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727579AbfDOMjp (ORCPT + 99 others); Mon, 15 Apr 2019 08:39:45 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:44526 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726298AbfDOMjS (ORCPT ); Mon, 15 Apr 2019 08:39:18 -0400 Received: by mail-pg1-f196.google.com with SMTP id i2so8510213pgj.11; Mon, 15 Apr 2019 05:39:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fYO1rIghbgKhztOG84RTNsXjVm4pflx9mXpppRrl+9Q=; b=PlYg36wOexW54J1RtiLMiIPf+i6CzvhLQlZVSGvZrbITJv26n1hGOxYZKpDtr7XV+2 pLKFCtSPT3QC3FZIR4j9TVBimDzC/ojfc8NghGgRPSnHFR5qKjfHWDTHkPQgpBRVrwFK Qef63l/vSFs48fe2bVjT3XvDOHBprm/jmLg3DyzUkQ3H9JeNOSU4UbECZqhMd+tyuT4v 1g7EED+CwCHu4vkCm0gmmwLML0Ya5EXRcBRpFaQBcgq2Q+666ZgmSqxeD1vuMBW44Pr/ pRXb/D97QcAu36v9FVefs/JmM+hKZaFPVx8xacfIejYz/clzwCP6g4ucGXtzBzp1XxOF WdIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fYO1rIghbgKhztOG84RTNsXjVm4pflx9mXpppRrl+9Q=; b=IzkZmL8KMCOs71nmhCudAWYqoJLQA7WX/gNOESx/CDOfhk7BfWfkGON5My4LAtXkA9 7LUna3LZy676zixq2FaLbClpmLUvRNo/kW3kQYZbIztuB4E2h9/xpoFISMO6iNcpUdKb e0jjE2hyy8epJgcLOWDmR7eBkT3HQ4zZP5pwLHcNqR2YnphAF/FRrWJSiW3MbIZpQP7y +CyZbXKbOqV3Ptl1FXKPPGDEsrctBAZcSFepwEM6Ofjqy88hnJoSyRIYEZA5WZsOw2GU 91EDYz9tOnRJ1H1jic6ZfMrU9qSn/ORWtUV2+uQ+mi+seSEgj+oCHSbDT6WCNy+xW4ry 3kXA== X-Gm-Message-State: APjAAAURVP+Hgn61xyzgHTL/2/UDAC+aRidOwz8PU0NXUFfRuodJyLeq ZSG9g7RhP3/BDWBNRI6XHBTAY4/FeOSwufBZas8= X-Received: by 2002:a65:4302:: with SMTP id j2mr66543604pgq.291.1555331958137; Mon, 15 Apr 2019 05:39:18 -0700 (PDT) MIME-Version: 1.0 References: <20190403124019.8947-1-wsa+renesas@sang-engineering.com> <20190403124019.8947-3-wsa+renesas@sang-engineering.com> In-Reply-To: <20190403124019.8947-3-wsa+renesas@sang-engineering.com> From: Andy Shevchenko Date: Mon, 15 Apr 2019 15:39:07 +0300 Message-ID: Subject: Re: [PATCH 02/12] i2c: core: use I2C locking behaviour also for SMBUS To: Wolfram Sang Cc: linux-i2c , Linux-Renesas , Linux Kernel Mailing List , linux-arm Mailing List , Peter Rosin , Stefan Lengfeld , Linux OMAP Mailing List , linux-tegra@vger.kernel.org, Linus Walleij , Andy Shevchenko Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 3, 2019 at 3:43 PM Wolfram Sang wrote: > > If I2C transfers are executed in atomic contexts, trylock is used > instead of lock. This behaviour was missing for SMBUS, although a lot of > transfers are of SMBUS type, either emulated or direct. So, factor out > the locking routine into a helper and use it for I2C and SMBUS. > Reviewed-by Andy Shevchenko > Signed-off-by: Wolfram Sang > --- > drivers/i2c/i2c-core-base.c | 11 +++-------- > drivers/i2c/i2c-core-smbus.c | 7 ++++++- > drivers/i2c/i2c-core.h | 12 ++++++++++++ > 3 files changed, 21 insertions(+), 9 deletions(-) > > diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c > index f8502064cd6b..ad14f38a67e4 100644 > --- a/drivers/i2c/i2c-core-base.c > +++ b/drivers/i2c/i2c-core-base.c > @@ -1946,14 +1946,9 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) > * one (discarding status on the second message) or errno > * (discarding status on the first one). > */ > - if (i2c_in_atomic_xfer_mode()) { > - ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT); > - if (!ret) > - /* I2C activity is ongoing. */ > - return -EAGAIN; > - } else { > - i2c_lock_bus(adap, I2C_LOCK_SEGMENT); > - } > + ret = __i2c_lock_bus_helper(adap); > + if (ret) > + return ret; > > ret = __i2c_transfer(adap, msgs, num); > i2c_unlock_bus(adap, I2C_LOCK_SEGMENT); > diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c > index 132119112596..357e083e8f45 100644 > --- a/drivers/i2c/i2c-core-smbus.c > +++ b/drivers/i2c/i2c-core-smbus.c > @@ -20,6 +20,8 @@ > #include > #include > > +#include "i2c-core.h" > + > #define CREATE_TRACE_POINTS > #include > > @@ -530,7 +532,10 @@ s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, > { > s32 res; > > - i2c_lock_bus(adapter, I2C_LOCK_SEGMENT); > + res = __i2c_lock_bus_helper(adapter); > + if (res) > + return res; > + > res = __i2c_smbus_xfer(adapter, addr, flags, read_write, > command, protocol, data); > i2c_unlock_bus(adapter, I2C_LOCK_SEGMENT); > diff --git a/drivers/i2c/i2c-core.h b/drivers/i2c/i2c-core.h > index 9d8526415b26..deea47c576e5 100644 > --- a/drivers/i2c/i2c-core.h > +++ b/drivers/i2c/i2c-core.h > @@ -39,6 +39,18 @@ static inline bool i2c_in_atomic_xfer_mode(void) > return system_state > SYSTEM_RUNNING && irqs_disabled(); > } > > +static inline int __i2c_lock_bus_helper(struct i2c_adapter *adap) > +{ > + int ret = 0; > + > + if (i2c_in_atomic_xfer_mode()) > + ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT) ? 0 : -EAGAIN; > + else > + i2c_lock_bus(adap, I2C_LOCK_SEGMENT); > + > + return ret; > +} > + > #ifdef CONFIG_ACPI > const struct acpi_device_id * > i2c_acpi_match_device(const struct acpi_device_id *matches, > -- > 2.11.0 > -- With Best Regards, Andy Shevchenko