Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1611815pxb; Mon, 11 Oct 2021 09:27:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjIT/vgQdS4lnRchziRqF2WL1lRyo6TqCQ3Fob/g9gy/u9v8oYXarCfK2cutsQD3HatU8M X-Received: by 2002:a17:90b:38c3:: with SMTP id nn3mr31885129pjb.110.1633969679777; Mon, 11 Oct 2021 09:27:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633969679; cv=none; d=google.com; s=arc-20160816; b=h8oWCkyFtwh821yT3vBsgBuVuYngRFWVS0660WDbO/+CDO3mwZwZmxjlw6LdffV52e b9oPjwtVGdDNm3398Poi2E+TQTToQSGKZvf/RURnJn5ZwX1Q7RAKVjnZ23vVMZycCQR0 m2/MirnmgtzczMhPtwMywoNlfuQWZMoz1FkcrSZE88oVxi3YKfweDdDTVjEPftge3djR C5qh9ZhjIA49kAfd+vOsLMYJrQSN1zGQisGGMQVa5s4wX+t55sJ0CWN/P7nkIs41Rjha Z+yduMW6iRXjJkHN7Wvyp/N6WkAFip15PIPinqTV7DSHwJD6gQVOB2Hm1qzSXlgNgXzx tsrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=lu2VHTCH3frBxLWoDkEGCdkFWDRT3neJMDdsxUq3QaY=; b=PeHZ7CcRzPwJ/kFUQHxvkX11BymNIHUXIbYTY16Q6Pjagi1xZoulU5G3n2gfpaOWxI fggeyWddHgi4oJB5M4bQv5iZFYK5COGHJhV/peoROk0YE8uZUcvkaHzkwUHmjLpEuKFs WVsSqZ2LVQqflLG+b+JQdzX9Idd0ScVMKZ8C0K7r0MXlfloeRO9AsAC8dzuTg+AxHxni lapbUjqrR0bP1XWDAaattTUlmV0jGzidX/TeRWhQ9udhJGrzKeQcpN96WP76o1XISdXK 3nJ3DXFjd/GD0tibnsyTWxHtLaRWDtnyJRmSDBLX1W5WT+0F5vtXxr1d/Ov8fwRxbdAr lK4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@geanix.com header.s=first header.b=XylsbvZJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=geanix.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j14si24642648pjf.142.2021.10.11.09.27.47; Mon, 11 Oct 2021 09:27:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@geanix.com header.s=first header.b=XylsbvZJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=geanix.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235866AbhJKNiB (ORCPT + 99 others); Mon, 11 Oct 2021 09:38:01 -0400 Received: from first.geanix.com ([116.203.34.67]:37366 "EHLO first.geanix.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235759AbhJKNiA (ORCPT ); Mon, 11 Oct 2021 09:38:00 -0400 Received: from skn-laptop (_gateway [172.25.0.1]) by first.geanix.com (Postfix) with ESMTPSA id 766D3C3DCB; Mon, 11 Oct 2021 13:35:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=geanix.com; s=first; t=1633959358; bh=xE4X5BF6E0aIpTrV8lCehzVbxCNFk1JaXrnIGkwaPM0=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=XylsbvZJw/MkJO9l9jUSUS4m1IjoBfgfn0MEkkKOxYSFue3IogdDPmaT+FIyeJPXa eZEyWlTJZofBtk9p3LHmE+JtcnbHtxDRdgUFVqgvNYi9uxPXp97Q5uYP4h+tfSfI0k hf9akEBZ9F/pbPj2XNAKvWZEmhNvqQGECMscUx6KTVSQF5GVimEAv1ptALdKeqdvqK IwjTRFDpjpHKNx5xIpST0St/rZs+dwbZuZIS7XsDIK4Drs5gLESU1k3aX6CkIDey0U H23cKJCg04PEyaMeTnC9fr46llxFo/N3oRw/JFgOv/TC2PX/0d6VV5yQhBAd+fXWcf MYX6N3vfuGNIg== Date: Mon, 11 Oct 2021 15:35:56 +0200 From: Sean Nyekjaer To: Boris Brezillon Cc: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Boris Brezillon , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] mtd: mtdconcat: add suspend lock handling Message-ID: <20211011133556.probhbuowxkumpzb@skn-laptop> References: <20211011115253.38497-1-sean@geanix.com> <20211011115253.38497-4-sean@geanix.com> <20211011151501.48cc9289@collabora.com> <20211011152703.0086d990@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20211011152703.0086d990@collabora.com> X-Spam-Status: No, score=-3.1 required=4.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED autolearn=disabled version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 13e2a5895688 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 11, 2021 at 03:27:03PM +0200, Boris Brezillon wrote: > On Mon, 11 Oct 2021 15:15:01 +0200 > Boris Brezillon wrote: > > > On Mon, 11 Oct 2021 13:52:53 +0200 > > Sean Nyekjaer wrote: > > > > > Use new suspend lock handling for this special case for concatenated > > > MTD devices. > > > > > > Fixes: 013e6292aaf5 ("mtd: rawnand: Simplify the locking") > > > Signed-off-by: Sean Nyekjaer > > > --- > > > drivers/mtd/mtdconcat.c | 11 +++++++++-- > > > 1 file changed, 9 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c > > > index f685a581df48..c497c851481f 100644 > > > --- a/drivers/mtd/mtdconcat.c > > > +++ b/drivers/mtd/mtdconcat.c > > > @@ -561,25 +561,32 @@ static void concat_sync(struct mtd_info *mtd) > > > > > > static int concat_suspend(struct mtd_info *mtd) > > > { > > > + struct mtd_info *master = mtd_get_master(mtd); > > > struct mtd_concat *concat = CONCAT(mtd); > > > int i, rc = 0; > > > > > > for (i = 0; i < concat->num_subdev; i++) { > > > struct mtd_info *subdev = concat->subdev[i]; > > > - if ((rc = mtd_suspend(subdev)) < 0) > > > + > > > + down_write(&master->master.suspend_lock); > > > + if ((rc = __mtd_suspend(subdev)) < 0) > > > return rc; > > > + up_write(&master->master.suspend_lock); > > > } > > > return rc; > > > } > > > > > > static void concat_resume(struct mtd_info *mtd) > > > { > > > + struct mtd_info *master = mtd_get_master(mtd); > > > struct mtd_concat *concat = CONCAT(mtd); > > > int i; > > > > > > for (i = 0; i < concat->num_subdev; i++) { > > > struct mtd_info *subdev = concat->subdev[i]; > > > - mtd_resume(subdev); > > > + down_write(&master->master.suspend_lock); > > > + __mtd_resume(subdev); > > > + up_write(&master->master.suspend_lock); > > > } > > > } > > > > > > > Why do we need to implement the _suspend/_resume() hooks here? The > > underlying MTD devices should be suspended at some point (when the > > class ->suspend() method is called on those device), and there's > > nothing mtdconcat-specific to do here. Looks like implementing this > > suspend-all-subdevs loop results in calling mtd->_suspend()/_resume() > > twice, which is useless. The only issue I see is if the subdevices > > haven't been registered to the device model, but that happens, I > > believe we have bigger issues (those devices won't be suspended when > > mtdconcat is not used). > > > Uh, just had a look at mtd_concat_create() callers, and they indeed > don't register the subdevices, so I guess the suspend-all-subdevs loop > is needed. I really thought mtdconcat was something more generic > aggregating already registered devices... Hi Boris, Cool, mtd_concat should be seen as mtd devices concatenated? Could be spi-nors and rawnand. So _suspend() needs to be called for every device layer? From what I see here, mtd_suspend()/mtd_resume() is called for every mtd device. Before this patch mtd_suspend() would only have effect on the first device as master->master.suspended is set and then calls to device specific _suspend() is skipped. Correct? /Sean