lkml.org 
[lkml]   [2022]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 014/114] platform/surface: aggregator: Fix initialization order when compiling as builtin module
    Date
    From: Maximilian Luz <luzmaximilian@gmail.com>

    [ Upstream commit 44acfc22c7d055d9c4f8f0974ee28422405b971a ]

    When building the Surface Aggregator Module (SAM) core, registry, and
    other SAM client drivers as builtin modules (=y), proper initialization
    order is not guaranteed. Due to this, client driver registration
    (triggered by device registration in the registry) races against bus
    initialization in the core.

    If any attempt is made at registering the device driver before the bus
    has been initialized (i.e. if bus initialization fails this race) driver
    registration will fail with a message similar to:

    Driver surface_battery was unable to register with bus_type surface_aggregator because the bus was not initialized

    Switch from module_init() to subsys_initcall() to resolve this issue.
    Note that the serdev subsystem uses postcore_initcall() so we are still
    able to safely register the serdev device driver for the core.

    Fixes: c167b9c7e3d6 ("platform/surface: Add Surface Aggregator subsystem")
    Reported-by: Blaž Hrastnik <blaz@mxxn.io>
    Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20220429195738.535751-1-luzmaximilian@gmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/platform/surface/aggregator/core.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/platform/surface/aggregator/core.c b/drivers/platform/surface/aggregator/core.c
    index d384d36098c2..a62c5dfe42d6 100644
    --- a/drivers/platform/surface/aggregator/core.c
    +++ b/drivers/platform/surface/aggregator/core.c
    @@ -817,7 +817,7 @@ static int __init ssam_core_init(void)
    err_bus:
    return status;
    }
    -module_init(ssam_core_init);
    +subsys_initcall(ssam_core_init);

    static void __exit ssam_core_exit(void)
    {
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-05-16 22:28    [W:4.223 / U:0.660 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site