Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp593635pxb; Wed, 27 Jan 2021 16:08:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJxeb2xse40sjo4A+OCL2X1kYuz7In8TH3GBpyURHjXPp+ATZr5C3+xxtIbIFowPpvYidek3 X-Received: by 2002:a50:e8c1:: with SMTP id l1mr9025002edn.168.1611792514129; Wed, 27 Jan 2021 16:08:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611792514; cv=none; d=google.com; s=arc-20160816; b=LcxKBefTfoEa0o6ezAlxET2dyp6W/JXj4KwKqwz8sVbAzZYKu61qg9jxikk4XoYfBL /Obm9lHKC00GGeTRynVqs/2NgY1bOGLF3wigXrCym9OxAR0x0B15M8S7x8OPz8+2Luob 3MXlfJDgCP95vQEJxQT8e5R+vbM/hDhIvOf46BXluFbwLxzaHUBVBWUzeeCfKjaiXp91 1ipYOiHaIbRaL/X7safiu8nIKf8gIj1qRoK5gLJkFgGH1YrOSHQbw+EvI+GbK7leDgxJ /STXMp10WjHy/msKNXnuvuGWSVN8jqizTHLWNl2lwO2TDosOwQfmO6YgoSZCEX50nSWp 993Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=DhlJDOHouhyzoZng9fJ2frIQEnLbOzAgsBucZ1xKE+Q=; b=xZmmWfEJHGgtJBfxR9XgJJy/JhSln7l/af56+n/MSEMtJFH0ln9XQeiLx/3FqnrrJu F2LAsVc6ewCEA9NiECMMNVcuTUfae0m/DLURBS+o82ekUXcr6yWxcZRzU0qI96R+VCq/ sHUSTDrfCWM62R/istXr1mXNKKglXD+u43F8J7xez8XE+vIwvmx0x9ezCh5zN0WqrDIN F6TFPuV15aGFze2JnhOtIppteqjQzckGAfIVn3qVg4bPy7IDLiQCn16RF2JC2F1UurrK d9amjN9jnNADEKDfGIaeTUYSd+ioA2GNa4rpwOp3tQ8V/D7LWzKZYJkg+0KrUshP/1/J tQsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qhZFI+sM; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e6si1974494edz.361.2021.01.27.16.08.09; Wed, 27 Jan 2021 16:08:34 -0800 (PST) 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=@google.com header.s=20161025 header.b=qhZFI+sM; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232209AbhA0Qn1 (ORCPT + 99 others); Wed, 27 Jan 2021 11:43:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45098 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231403AbhA0QnO (ORCPT ); Wed, 27 Jan 2021 11:43:14 -0500 Received: from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com [IPv6:2607:f8b0:4864:20::b29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E4B0C061786 for ; Wed, 27 Jan 2021 08:42:28 -0800 (PST) Received: by mail-yb1-xb29.google.com with SMTP id r32so2618666ybd.5 for ; Wed, 27 Jan 2021 08:42:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DhlJDOHouhyzoZng9fJ2frIQEnLbOzAgsBucZ1xKE+Q=; b=qhZFI+sMK2QvOM0tX+sbe7tSSfEUacHXU7Wc/fiZiGImf44dQ3z3Uund/QxKZ/1h9Q s/GDEhs3T8IvEXbPJ6jxrzs+IEeoSm8SbL88rB75v9+7PODSL5SGoUGJT29bIRR3qL+O UFojdWN6LdFC74lUmRR7GHaahe7McQNBwzFUKs3KTsBg8QM3+Yryqa3n6oOmkYNqq0Wn SEwaPMwAE4YCyne6qX0eMoZ4ng3Xf66DEfIDE4UarGF1ToJkA5Vtdw69wEtbLSzyVZNr JF3QgHYa5DcdVJipQQ9JGZxtkoQU9Y9Y+fja30YayyMKL7/ZOUUmZM9jCZa+nktN0coR y9yQ== 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=DhlJDOHouhyzoZng9fJ2frIQEnLbOzAgsBucZ1xKE+Q=; b=hrsKaVZov+Jzk5dQxUxtqM3yHF+NvxWdazApspqQoMLR4YU+jLFy3ilQC4tdzVmFGJ hP2e+VRaGz4+GCgX3ZmDLKe8lvY7DqNrcmxueHrI//GonFKDDT1XnEL7V7HJfyjnYu6u /3XgGTDUlf1cO2JmffQWxNleQq3eLurZnxCDBHuxaz4xUEIKZ+pKoKXXzeNneA1fvPvS uDDDlAbYqYk71DhfDXhSOytU2E3a/CEBfPewEGGUQZscoXqemCcZUhcfv2Ffb/WGNzsE Yg0oHBUU2TxfJGOYmNk8E+Kn6QMckIwnp61URi45KveRP9VR/HoUuHjf3tO4YNMzhEVC XnmQ== X-Gm-Message-State: AOAM530xAC2o1o9P5bMNmgErpcPE0kAhv8Yimnrjpi3IQIUR8NUWN+26 8uksDItVNUQ28n6/vnZCn/dZ0ux06+q8EWbL8oOfFQ== X-Received: by 2002:a25:77d4:: with SMTP id s203mr19594855ybc.32.1611765747235; Wed, 27 Jan 2021 08:42:27 -0800 (PST) MIME-Version: 1.0 References: <20210120105246.23218-1-michael@walle.cc> In-Reply-To: From: Saravana Kannan Date: Wed, 27 Jan 2021 08:41:50 -0800 Message-ID: Subject: Re: [PATCH] PCI: dwc: layerscape: convert to builtin_platform_driver() To: Geert Uytterhoeven Cc: Michael Walle , Lorenzo Pieralisi , Roy Zang , PCI , LKML , Minghuan Lian , Mingkai Hu , Greg Kroah-Hartman , Bjorn Helgaas , linuxppc-dev , linux-arm-kernel Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 26, 2021 at 11:43 PM Geert Uytterhoeven wrote: > > Hi Saravana, > > On Wed, Jan 27, 2021 at 1:44 AM Saravana Kannan wrote: > > On Tue, Jan 26, 2021 at 12:50 AM Geert Uytterhoeven > > wrote: > > > On Mon, Jan 25, 2021 at 11:42 PM Saravana Kannan wrote: > > > > On Mon, Jan 25, 2021 at 11:49 AM Michael Walle wrote: > > > > > Am 2021-01-21 12:01, schrieb Geert Uytterhoeven: > > > > > > On Thu, Jan 21, 2021 at 1:05 AM Saravana Kannan > > > > > > wrote: > > > > > >> On Wed, Jan 20, 2021 at 3:53 PM Michael Walle > > > > > >> wrote: > > > > > >> > Am 2021-01-20 20:47, schrieb Saravana Kannan: > > > > > >> > > On Wed, Jan 20, 2021 at 11:28 AM Michael Walle > > > > > >> > > wrote: > > > > > >> > >> > > > > > >> > >> [RESEND, fat-fingered the buttons of my mail client and converted > > > > > >> > >> all CCs to BCCs :(] > > > > > >> > >> > > > > > >> > >> Am 2021-01-20 20:02, schrieb Saravana Kannan: > > > > > >> > >> > On Wed, Jan 20, 2021 at 6:24 AM Rob Herring wrote: > > > > > >> > >> >> > > > > > >> > >> >> On Wed, Jan 20, 2021 at 4:53 AM Michael Walle > > > > > >> > >> >> wrote: > > > > > >> > >> >> > > > > > > >> > >> >> > fw_devlink will defer the probe until all suppliers are ready. We can't > > > > > >> > >> >> > use builtin_platform_driver_probe() because it doesn't retry after probe > > > > > >> > >> >> > deferral. Convert it to builtin_platform_driver(). > > > > > >> > >> >> > > > > > >> > >> >> If builtin_platform_driver_probe() doesn't work with fw_devlink, then > > > > > >> > >> >> shouldn't it be fixed or removed? > > > > > >> > >> > > > > > > >> > >> > I was actually thinking about this too. The problem with fixing > > > > > >> > >> > builtin_platform_driver_probe() to behave like > > > > > >> > >> > builtin_platform_driver() is that these probe functions could be > > > > > >> > >> > marked with __init. But there are also only 20 instances of > > > > > >> > >> > builtin_platform_driver_probe() in the kernel: > > > > > >> > >> > $ git grep ^builtin_platform_driver_probe | wc -l > > > > > >> > >> > 20 > > > > > >> > >> > > > > > > >> > >> > So it might be easier to just fix them to not use > > > > > >> > >> > builtin_platform_driver_probe(). > > > > > >> > >> > > > > > > >> > >> > Michael, > > > > > >> > >> > > > > > > >> > >> > Any chance you'd be willing to help me by converting all these to > > > > > >> > >> > builtin_platform_driver() and delete builtin_platform_driver_probe()? > > > > > >> > >> > > > > > >> > >> If it just moving the probe function to the _driver struct and > > > > > >> > >> remove the __init annotations. I could look into that. > > > > > >> > > > > > > > >> > > Yup. That's pretty much it AFAICT. > > > > > >> > > > > > > > >> > > builtin_platform_driver_probe() also makes sure the driver doesn't ask > > > > > >> > > for async probe, etc. But I doubt anyone is actually setting async > > > > > >> > > flags and still using builtin_platform_driver_probe(). > > > > > >> > > > > > > >> > Hasn't module_platform_driver_probe() the same problem? And there > > > > > >> > are ~80 drivers which uses that. > > > > > >> > > > > > >> Yeah. The biggest problem with all of these is the __init markers. > > > > > >> Maybe some familiar with coccinelle can help? > > > > > > > > > > > > And dropping them will increase memory usage. > > > > > > > > > > Although I do have the changes for the builtin_platform_driver_probe() > > > > > ready, I don't think it makes much sense to send these unless we agree > > > > > on the increased memory footprint. While there are just a few > > > > > builtin_platform_driver_probe() and memory increase _might_ be > > > > > negligible, there are many more module_platform_driver_probe(). > > > > > > > > While it's good to drop code that'll not be used past kernel init, the > > > > module_platform_driver_probe() is going even more extreme. It doesn't > > > > even allow deferred probe (well before kernel init is done). I don't > > > > think that behavior is right and that's why we should delete it. Also, > > > > > > This construct is typically used for builtin hardware for which the > > > dependencies are registered very early, and thus known to probe at > > > first try (if present). > > > > > > > I doubt if any of these probe functions even take up 4KB of memory. > > > > > > How many 4 KiB pages do you have in a system with 10 MiB of SRAM? > > > How many can you afford to waste? > > > > There are only a few instances of this macro in the kernel. How many > > $ git grep -lw builtin_platform_driver_probe | wc -l > 21 > $ git grep -lw module_platform_driver_probe | wc -l > 86 > > + the ones that haven't been converted to the above yet: > > $ git grep -lw platform_driver_probe | wc -l > 58 > Yeah, this adds up in terms of the number of places we'd need to fix. But thinking more about it, a couple of points: 1. Not all builtin_platform_driver_probe() are problems for fw_devlink. So we can just fix them as we go if we need to. 2. The problem with builtin_platform_driver_probe() isn't really with the use of __init. It's the fact that it doesn't allow deferred probes. builtin_platform_driver_probe()/platform_driver_probe() could still be fixed up to allow deferred probe until we get to the point where we free the __init section (so at least till late_initcall). > > of those actually fit the description above? We can probably just > > check the DT? > > What do you mean by checking the DT? I was talking about checking the DT to see if the board has very little memory, but that's not always obvious from DT nor does it scale with the number of instances we have. So, ignore this comment. Anyway, time to get back to actually writing the code to deal with this and other corner cases. -Saravana