Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1432761ybz; Thu, 16 Apr 2020 09:04:10 -0700 (PDT) X-Google-Smtp-Source: APiQypK6k0gVj+nEls3OUCtfqCG/PWuh23Ax1rZGoljvVMMZcnupHuhW5sDhps0xIPXPs+ZXD9wz X-Received: by 2002:a05:6402:1c8b:: with SMTP id cy11mr31701094edb.102.1587053050643; Thu, 16 Apr 2020 09:04:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587053050; cv=none; d=google.com; s=arc-20160816; b=Him/MVcHnCdQakW/LWvB1dhoavnnkVcAeQEk36cWdXINrQRz9giGtUIkK5PIiSY7ZJ Qsx5NyRSbrW7okuZwFxhJfLzOiySjS38WDK9aJYeWW3IVYGC6R0ePTKvmgkEHNG9gxfs mgNbt5EoDPfVUM/dGVcjowI/NBRFGsEeTa9FVAHZrz7LuowGDCe5cGLk74ErAggHTW8t HaHrju5qKul/2t2ehmtGFd2yviRR+Y9n2jLm+QbhxiM15onO8JDIivp+PMykxwF8lJ2B NXsS8uFhurivU7aGBUkO04AuCZHDHVctE2DlqDumMdXCUZGEtnyCHy/LIfR72pNxfe5t iaYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:date:cc:to:from:subject:message-id; bh=kaCl22ehRsAd2AHonePaVCrNPpvf2YuAOxp5kMNMoQs=; b=vpc2RMpht7yg2P6oocMHiFyOsT21s0VcVDeNHTfABZbmDnX3MGC7D4LeiD9y1dwrR8 TyTAHxYNhOG2tUgiZJzdHZXf3RwrHbbMn/HCMPUalBRePEsCfocAeverUf0Nbq75IzAm LyYAIhkYnvIysjIy/lMmmcbVvh9nR4U0KyFJU9FeB/dg2MW/QT2mhejLtgSHs2r815TO 2yce24bR4lkj3UZKP9W/YlOiIFaeU8YICM1sNW6UvwZ1LVaqNuq2IIXIV11HLi7+DX0D fo/Qr/do12MH03GquW2xvQysCoXO1w71snXMekCX+xJV8Eo23BVaWxMjgx+5TdEA2okJ I2iQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d11si13586745edo.105.2020.04.16.09.03.31; Thu, 16 Apr 2020 09:04:10 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2636557AbgDPQBS (ORCPT + 99 others); Thu, 16 Apr 2020 12:01:18 -0400 Received: from mx2.suse.de ([195.135.220.15]:50406 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2636513AbgDPQBJ (ORCPT ); Thu, 16 Apr 2020 12:01:09 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id EBC40AC20; Thu, 16 Apr 2020 16:01:04 +0000 (UTC) Message-ID: Subject: Re: [PATCH 4/4] of: property: Avoid linking devices with circular dependencies From: Nicolas Saenz Julienne To: Saravana Kannan Cc: Greg Kroah-Hartman , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Rob Herring , Frank Rowand , LKML Date: Thu, 16 Apr 2020 18:01:03 +0200 In-Reply-To: References: <20200415150550.28156-1-nsaenzjulienne@suse.de> <20200415150550.28156-5-nsaenzjulienne@suse.de> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-IU+VxIL8s8vBUZATDN/4" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-IU+VxIL8s8vBUZATDN/4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2020-04-15 at 11:52 -0700, Saravana Kannan wrote: > On Wed, Apr 15, 2020 at 8:06 AM Nicolas Saenz Julienne > wrote: > > When creating a consumer/supplier relationship between devices it's > > essential to make sure they aren't supplying each other creating a > > circular dependency. >=20 > Kinda correct. But fw_devlink is not just about optimizing probing. > It's also about ensuring sync_state() callbacks work correctly when > drivers are built as modules. And for that to work, circular > "SYNC_STATE_ONLY" device links are allowed. I've explained it in a bit > more detail here [1]. Understood. [...] > This only catches circular links made out of 2 devices. If we really > needed such a function that worked correctly to catch bigger > "circles", you'd need to recurse and it'll get super wasteful and > ugly. Yeah, I was kind of expecting this reply :). > Thankfully, device_link_add() already checks for circular dependencies > when we need it and it's much cheaper because the links are at a > device level and not examined at a property level. >=20 > Is this a real problem you are hitting with the Raspberry Pi 4's? If > so can you give an example in its DT where you are hitting this? So the DT bit that triggered all this series is in 'arch/arm/boot/dts/bcm283x.dtsi'. Namely the interaction between 'cprman@7e101000' and 'dsi@7e209000.' Both are clock providers and both are clock consumers of each other. Well I had a second deeper look at the issue, here is how the circular dependency breaks the boot process (A being soc, B being cprman and C being dsi): Device node A Device node B -> C Device node C -> B The probe sequence is the following (with DL_FLAG_AUTOPROBE_CONSUMER): 1. A device is added, the rest of devices are siblings, nothing is done 2. B device is added, C device doesn't exist, B is added to 'wait_for_suppliers' list with 'need_for_probe' flag set. 3. C device is added, B is picked up from 'wait_for_suppliers' list, device link created with B consuming from C. 4. C is then parsed, and tried to be linked with B as a consumer this time. This fails after testing for circular deps (by device_is_dependent()) du= ring device_link_add(). This leaves C in the 'wait_for_suppliers' list *for e= ver* as every further attempt at add_link() on C will fail. -> Ultimately this prevents C for ever being probed, which also prevents B = from being probed. Which isn't good as B is the main clock provider of the sy= stem. Note that B can live without C. I think some clock re-parenting will not be accessible, but that's all. > I'll have to NACK this patch for reasons mentioned above and in [1]. > However, I think I have a solution that should work for what I'm > guessing is your real problem. But let me see the description of the > real scenario before I claim to have a solution. My intuition would be, upon getting a circular dep from device_is_dependent= () with DL_FLAG_AUTOPROBE_CONSUMER to switch need_for_probe to false on both devices. Regards, Nicolas --=-IU+VxIL8s8vBUZATDN/4 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEErOkkGDHCg2EbPcGjlfZmHno8x/4FAl6YgT8ACgkQlfZmHno8 x/4HIQf/YzvcO8H45/rGAJj01DwZWfYBY1Y9O4IY+FxsUryfxFQJzRy1BsxEiBrg cr3EkaaBEEqxnojCYE7EYV7hWObvMv+HaSY7GiERH5xGCatVbdz8Wa7ysz9y5nNR 5t10OlVwFdXfb+V5YYqXJ+Q+9X6H88XAIvTl6XJIqbJPnes0BBkEEu5BjYd7AZbq elVbo4xmRq166ZyrjrG+DJ/6/v48iE3jhBrR4zpTz4aY/3D5mE4cveLuIM/IRrun WwanZB8NgfogJ9OjFtUx82Wh1PJO5iIQPmS49JBgc7QNfnYMEnNTcqGtY2kIz2FE xVqhsYqj0xfKkrdw62L7uC8zGft72g== =H5F4 -----END PGP SIGNATURE----- --=-IU+VxIL8s8vBUZATDN/4--