From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753672AbeEOOGT (ORCPT ); Tue, 15 May 2018 10:06:19 -0400 Received: from mail-it0-f67.google.com ([209.85.214.67]:36693 "EHLO mail-it0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753635AbeEOOGQ (ORCPT ); Tue, 15 May 2018 10:06:16 -0400 X-Google-Smtp-Source: AB8JxZrlFRPJubZPhqMtY+p/wDzvAc4B1TY5QphrfBSDK5sESo20mqnYHlE1WCbTI5GVbOz+/uruIzA2qUoJmCyFMEo= MIME-Version: 1.0 In-Reply-To: References: <20180511162028.20616-1-brgl@bgdev.pl> <20180511162028.20616-11-brgl@bgdev.pl> From: Bartosz Golaszewski Date: Tue, 15 May 2018 16:06:15 +0200 Message-ID: Subject: Re: [PATCH 10/12] platform/early: implement support for early platform drivers To: Rob Herring Cc: Sekhar Nori , Kevin Hilman , David Lechner , Michael Turquette , Stephen Boyd , Arnd Bergmann , Greg Kroah-Hartman , Mark Rutland , Yoshinori Sato , Rich Felker , Andy Shevchenko , Marc Zyngier , "Rafael J . Wysocki" , Peter Rosin , Jiri Slaby , Thomas Gleixner , Daniel Lezcano , Geert Uytterhoeven , Magnus Damm , Johan Hovold , Frank Rowand , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , "linux-kernel@vger.kernel.org" , devicetree , "open list:GENERIC INCLUDE/ASM HEADER FILES" , Bartosz Golaszewski Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-05-14 15:37 GMT+02:00 Rob Herring : > On Fri, May 11, 2018 at 11:20 AM, Bartosz Golaszewski wrote: >> From: Bartosz Golaszewski >> >> This introduces the core part of support for early platform drivers >> and devices. >> > > It looks like most of your prep patches are to separate the alloc and > init of platform devices because you are essentially making early > devices/drivers a sub-class. Maybe you could avoid doing that and > simplify things a bit. Comments below based on doing that... > My aim was to change as little as possible for everybody else while fixing our problem. These changes are already controversial enough without risky reusing of existing fields in common structures. I was just afraid that there are too many intricacies for it to be safe. >> +/** >> + * struct early_platform_driver >> + * >> + * @pdrv: real platform driver associated with this early platform driver >> + * @list: list head for the list of early platform drivers >> + * @early_probe: early probe callback >> + */ >> +struct early_platform_driver { >> + struct platform_driver pdrv; >> + struct list_head list; > > Couldn't you use an existing list in driver_private until you move > over to the normal bus infra. > This is something that the previous implementation did. It was quite unreadable, so I decided to go with a separate list. >> + int (*early_probe)(struct platform_device *); > > Just add this to platform_driver. > This would extend the structure for everybody else while there'll be very few such devices and not all systems would even require it. >> +}; >> + >> +/** >> + * struct early_platform_device >> + * >> + * @pdev: real platform device associated with this early platform device >> + * @list: list head for the list of early platform devices >> + * @deferred: true if this device's early probe was deferred >> + * @deferred_drv: early platform driver with which this device was matched >> + */ >> +struct early_platform_device { >> + struct platform_device pdev; >> + struct list_head list; > > Use a list in device_private? > >> + bool deferred; >> + struct early_platform_driver *deferred_drv; > > Can't you use the existing deferred probe list? > I thought about it, but I was afraid there could be some timing issues with that and decided against it. The early deferral also doesn't work in a workque, but is synchronous instead. Best regards, Bartosz Golaszewski