Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp1028296ybi; Thu, 30 May 2019 10:23:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqwu0htJhVt2jUaKuhMa0lNWX49yPyDhGzA10hV2yh94eKZ7FenukCh+bddyMX2oNxsQoNq1 X-Received: by 2002:a63:eb0a:: with SMTP id t10mr4174927pgh.99.1559236993969; Thu, 30 May 2019 10:23:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559236993; cv=none; d=google.com; s=arc-20160816; b=lQgeOuxK/DoP60Ww4C6x8msRj5to69taRAUZxPmst4UbCK2Ua/rWxVUdMLJAbeMMF5 ZqdWdn5YlVVRFBy1hB4tyzO0PC3T0T30bY9yUj7hZ6dOXhzZPDdGoqKcGF/2y0C4GAqW qsj3F56B0n0esCFCgV4HS3CK8sofURkgjVAGKIFN2B9TnFpOZF9ANkz6mdZ3113q8ux6 mYc+q8cUQAVOhekDBI2VJPS8XEJObF+z8bLQg+khnlbR0fdHNhWkndNKb4jUbSXEyLeV p+5MC3dKySsQPodHKGv+15V2dftlTnXxl9NwwSnHU6SH3CbjOhsizLubvYHo2UisiypU O2yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature; bh=ImDPwL3I+w8BoRqnd5eRM3+R8I/eXEMLrLJdrRnJGP8=; b=t4HYRqDvsIkPA6FCiKlA+VqPqZKKbfb8S5snHtwex1z0HhFeJJP1evNzFwx4OhRbZk kRNDezIOXB4PNgdp7WnX2zhaB/frSxNCgCBgziFnLP/aaFMPaJfbh1vSwg8kPaZRvp12 4CySnJN+TKPw3PaAV1oSvQYMpPqVcuMPL8s4XWH5LK6qCYT64Bype1MGINxwfXkE8UMT vtbdfaAB5masUACxTHFs9yfJGdKKH8unKua6OIL2DmlkDsUG2at696Zw0ZQKMlX21IzU C4Uh2NQOwC7Jif3gwicb9GuO1xZiq3pBDsHCOIN3asGqrpT9tur7/1ixwiGmDqCn8PbQ MKGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=rvyah85P; 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 a22si2606642pjo.18.2019.05.30.10.22.57; Thu, 30 May 2019 10:23:13 -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=rvyah85P; 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 S1726749AbfE3RVY (ORCPT + 99 others); Thu, 30 May 2019 13:21:24 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:46358 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725961AbfE3RVY (ORCPT ); Thu, 30 May 2019 13:21:24 -0400 Received: by mail-pf1-f194.google.com with SMTP id y11so4347809pfm.13; Thu, 30 May 2019 10:21:23 -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:mime-version :content-disposition:user-agent; bh=ImDPwL3I+w8BoRqnd5eRM3+R8I/eXEMLrLJdrRnJGP8=; b=rvyah85PBMMF6fSehi9wvZfJvOlEiwurKCDdHwrZ2f5fh8OIO5nuTy4ApgBznEv7xq ZVJbTGAiTAc4HnxcdFtHuUUrYjIlVKkiDnPsXqxtLTowv9VDw6l8yufrilq9B+S0XuMA +WDbzrxSaCSzRb3AJJF1Bjc4VSvEL+U6TaYnPIen5MLG2H6wsyuBzTHu73TJ9HG4/34v dPX14My1cnc8XywDE3mC64bL4U1xivYIip1qqG0Y93iuuzcme4oyH/a8hnSvcNdYfClw 3khKWCCfS6qdwK/wCe4IdIQFkb476hULgTr1d3MwwnsAlJloHVOMubOJeR8DbEMaq+Kj OhNA== 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 :mime-version:content-disposition:user-agent; bh=ImDPwL3I+w8BoRqnd5eRM3+R8I/eXEMLrLJdrRnJGP8=; b=FPODyWB5pOcAG6M4ZVOLJcmvPagk7/VV2+QcmKkzMk0QuuUjtJdtx7eoC5hhN4unFd /9RbAYc+WBLBAwjJ14DAg8H9ccC6UpKBjvpkV96++WAZZJqki9OiInGjquEPUgSlsp1A Ct8Fc5aDd0uPNgC+2RXdu8dJm3noqKKpVvychz2ek/x2rgv+vG4Xr5jJ/IlyjGrGjx+D 5ym7wlxN8vltM9m3Rb9wS3bEUBkDYKUrhuAkcY9K2umlQLeH06ptoJVuyBkEZlSscMyu yfW711LnD2qlDXiQVSEx3U1sfz+FrgV+WCQR8xGVBQjGWtDdE4e7AnKiGEGBorbNFSwd m8gA== X-Gm-Message-State: APjAAAXS4cznpEj3tISBZZLfbSxyI3iitGtD4fUPboYbePH1GxBWPMi2 U5JGWTsaLOT9TXoZzNIzyAo= X-Received: by 2002:a63:cb:: with SMTP id 194mr4561175pga.395.1559236883517; Thu, 30 May 2019 10:21:23 -0700 (PDT) Received: from localhost ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id i7sm3660624pfo.19.2019.05.30.10.21.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 May 2019 10:21:22 -0700 (PDT) Date: Thu, 30 May 2019 10:21:20 -0700 From: Guenter Roeck To: "Adamski, Krzysztof (Nokia - PL/Wroclaw)" Cc: Jean Delvare , "linux-hwmon@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] hwmon: pmbus: protect read-modify-write with lock Message-ID: <20190530172120.GA22145@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 Hi, On Thu, May 30, 2019 at 06:45:48AM +0000, Adamski, Krzysztof (Nokia - PL/Wroclaw) wrote: > The operation done in the pmbus_update_fan() function is a > read-modify-write operation but it lacks any kind of lock protection > which may cause problems if run more than once simultaneously. This > patch uses an existing update_lock mutex to fix this problem. > > Signed-off-by: Krzysztof Adamski > --- > > I'm resending this patch to proper recipients this time. Sorry if the > previous submission confused anybody. > > drivers/hwmon/pmbus/pmbus_core.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c > index ef7ee90ee785..94adbede7912 100644 > --- a/drivers/hwmon/pmbus/pmbus_core.c > +++ b/drivers/hwmon/pmbus/pmbus_core.c > @@ -268,6 +268,7 @@ int pmbus_update_fan(struct i2c_client *client, int page, int id, > int rv; > u8 to; > > + mutex_lock(&data->update_lock); > from = pmbus_read_byte_data(client, page, > pmbus_fan_config_registers[id]); > if (from < 0) > @@ -278,11 +279,15 @@ int pmbus_update_fan(struct i2c_client *client, int page, int id, > rv = pmbus_write_byte_data(client, page, > pmbus_fan_config_registers[id], to); > if (rv < 0) > - return rv; > + goto out; > } > > - return _pmbus_write_word_data(client, page, > - pmbus_fan_command_registers[id], command); > + rv = _pmbus_write_word_data(client, page, > + pmbus_fan_command_registers[id], command); > + > +out: > + mutex_lock(&data->update_lock); Should be mutex_unlock(), meaning you have not tested this ;-). Either case, I think this is unnecessary. The function is (or should be) always called with the lock already taken (ie with pmbus_set_sensor() in the call path). If not, we would need a locked and an unlocked version of this function to avoid lock recursion. Thanks, Guenter > + return rv; > } > EXPORT_SYMBOL_GPL(pmbus_update_fan); > > -- > 2.20.1 >