Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1586622ybh; Sun, 15 Mar 2020 06:23:44 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtrz///cS4noBl9vwaQt/Lv3lLVJm1nSMqUuqdj29AeFCELk5dDIjHbheVc2oTX61GurRuU X-Received: by 2002:a05:6830:451:: with SMTP id d17mr18486985otc.184.1584278624638; Sun, 15 Mar 2020 06:23:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584278624; cv=none; d=google.com; s=arc-20160816; b=HfmFttuemGmWcrKw60/+pAI8Z+AfRiyA45s2kMMoBGbTeybPOj0piVM+efh47/FO6v nir/iGGa+UZ97NoMu88O7pFXSaxsAtoc1sngbt/59XAzQRKQ7jYA9vSDEifszPvMQ6NK q3bfofPFpN0y0+dBA+vUeEETMeb23ICr/5MCG+XaAkwOxqMqW4pcTJNuhL+p5FdfGStK Ii9sB9A30jALDVOYTEYB6KLTI2Al0Zq+w8i+bxIuaYHcbx3WHtdfJmYpx/SBJXNwhg/0 oyC/Mj2MmwVre9/u3tQ3D4wOavP9Hj12A/I4gO++IoaL9C5DmFL2lVOaG4QbGHyj6yOS +Z5Q== 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:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=MchTDRR/1v07eYW/MswTmilMICqZ+oalPShgksQKP44=; b=XO/zyx+mJ8AJKUsqhzxXp+zlbmAvsNm45k+IUpquIjglmgL22jfPaRR07ud3zwrb+G nnI41BaNcWrGVcqO/1jwNYwchx+5Phec2C3INZ7tjKC2jkBd/d5RF7UVVqt9f/ulKmoQ WxSldsWZkBhN77jM4Sd+1DdOsPi2zCZmoXRmOXqOSwWzDX6xXTxbfXsNgQrP8115Wiut 1VkpOMqW7u2rskdY2QayWDe48pTKBsQ+r8w1evh/c9oLy3M5CQQLyerIKhFD9jh4U195 SgYl2qZf/JKtfCJQAdZ6CeU54jxcCEOaAT+KcHYdidWxHLqXD4uoUcowxVuIvxfH26eC qLfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iDlRGhr0; 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=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y2si8575813oto.123.2020.03.15.06.23.32; Sun, 15 Mar 2020 06:23:44 -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=@kernel.org header.s=default header.b=iDlRGhr0; 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=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728596AbgCONXK (ORCPT + 99 others); Sun, 15 Mar 2020 09:23:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:49250 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728581AbgCONXK (ORCPT ); Sun, 15 Mar 2020 09:23:10 -0400 Received: from archlinux (cpc149474-cmbg20-2-0-cust94.5-4.cable.virginm.net [82.4.196.95]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3C295205ED; Sun, 15 Mar 2020 13:23:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1584278590; bh=avyqNFrlDVb+8P/ewKX+hQdQSyf11iJpQKuc/Kcpsy8=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=iDlRGhr0QfYgpXHhauGw3ctwA3vgnaMBt1MmePRTvwBSKxsC3sZS/QUYWMVoUH2wo ONTAWFSgXA5NgX4IB+tAH5PaqQZKGpOq1QfRov2VZ0fEPCrEzMy/cPr5BHNzYv3/nk IGJAGowpJuUlPRZCvMZ2RdQ/QmzeW8DYrXqG9+cw= Date: Sun, 15 Mar 2020 13:23:05 +0000 From: Jonathan Cameron To: Rohit Sarkar Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, matt.ranostay@konsulko.com Subject: Re: [PATCH] iio: health: max30100: remove mlock usage Message-ID: <20200315132305.6f69d09b@archlinux> In-Reply-To: <5e6e0a19.1c69fb81.432d5.f12c@mx.google.com> References: <5e668b89.1c69fb81.d7e4f.0f61@mx.google.com> <20200315094604.62dc96be@archlinux> <5e6e0a19.1c69fb81.432d5.f12c@mx.google.com> X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 15 Mar 2020 16:27:24 +0530 Rohit Sarkar wrote: > On Sun, Mar 15, 2020 at 09:46:04AM +0000, Jonathan Cameron wrote: > > On Tue, 10 Mar 2020 00:01:28 +0530 > > Rohit Sarkar wrote: > > > > > Use local lock instead of indio_dev's mlock. > > > The mlock was being used to protect local driver state thus using the > > > local lock is a better option here. > > > > > > Signed-off-by: Rohit Sarkar > > > > Matt. Definitely need your input on this. > > > > > --- > > > drivers/iio/health/max30100.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/iio/health/max30100.c b/drivers/iio/health/max30100.c > > > index 84010501762d..8ddc4649547d 100644 > > > --- a/drivers/iio/health/max30100.c > > > +++ b/drivers/iio/health/max30100.c > > > @@ -388,7 +388,7 @@ static int max30100_read_raw(struct iio_dev *indio_dev, > > > * Temperature reading can only be acquired while engine > > > * is running > > > */ > > > - mutex_lock(&indio_dev->mlock); > > > + mutex_lock(&data->lock); > > > > Hmm.. It's another complex one. What is actually being protected here is > > the buffer state, but not to take it exclusively like claim_direct does. > > So just to check if I understand correctly, let's say we did not use any > lock in this case. If an execution thread reached the > iio_buffer_enabled() check and found the buffer to be enabled, but > the buffer got disabled simultaneously, the temperature readings that we > get will be corrupted. Does this make sense? Yes, any time after that check the buffer could be disabled and we'd potentially get a garbage result. > > > Here we need the inverse, we want to ensure we are 'not' in the direct > > mode because this hardware requires the buffer to be running to read the > > temperature. > > > > That is the sort of interface that is going to get userspace very > > confused. > Agreed > > > Matt, normally what I'd suggest here is that the temperature read should: > > > > 1) Claim direct mode, if it fails then do the dance you have here > > (with more comments to explain why you are taking an internal lock) > > 2) Start up capture as if we were in buffered mode > > 3) Grab that temp > > 4) stop capture to return to non buffered mode. > > 5) Release direct mode. > > > > I guess we decided it wasn't worth the hassle. > > > > So Rohit. This one probably needs a comment rather than any change. > The code already mentions that the "Temperature can only be acquired > while engine is running.", should I add something like "mlock is > acquired to protect the buffer state..." to the same comment. I'd wait for Matt to come back with whether he'd like to enable the more complex solution to allow the buffer to be enabled on demand. > > > We 'could' add a 'hold_buffered_mode' function that takes the mlock, > > verifies we are in buffered mode and continues to hold the lock > > until the 'release_buffered_mode'. However, I'm not sure any other > > drivers do this particular dance, so clear commenting in the driver > > might be enough. Should we ever change how mlock is used in the > > core, we'd have to fix this driver up as well. > Understood. > > > Hmm. This is really hammering home that perhaps all the remaining > > mlock cases are 'hard'. > A nice sideffect of me investigating these is that I am getting some > good insight into how iio works. I will see if I can investigate a > couple more cases Cool. Jonathan > > Thanks, > > > > Jonathan > > > > > > Thanks, > Rohit > > > if (!iio_buffer_enabled(indio_dev)) > > > ret = -EAGAIN; > > > @@ -399,7 +399,7 @@ static int max30100_read_raw(struct iio_dev *indio_dev, > > > > > > } > > > > > > - mutex_unlock(&indio_dev->mlock); > > > + mutex_unlock(&data->lock); > > > break; > > > case IIO_CHAN_INFO_SCALE: > > > *val = 1; /* 0.0625 */ > >