• Maximilian Luz's avatar
    platform/surface: aggregator: Fix warning when controller is destroyed in probe · bc923d59
    Maximilian Luz authored
    There is a small window in ssam_serial_hub_probe() where the controller
    is initialized but has not been started yet. Specifically, between
    ssam_controller_init() and ssam_controller_start(). Any failure in this
    window, for example caused by a failure of serdev_device_open(),
    currently results in an incorrect warning being emitted.
    
    In particular, any failure in this window results in the controller
    being destroyed via ssam_controller_destroy(). This function checks the
    state of the controller and, in an attempt to validate that the
    controller has been cleanly shut down before we try and deallocate any
    resources, emits a warning if that state is not SSAM_CONTROLLER_STOPPED.
    
    However, since we have only just initialized the controller and have not
    yet started it, its state is SSAM_CONTROLLER_INITIALIZED. Note that this
    is the only point at which the controller has this state, as it will
    change after we start the controller with ssam_controller_start() and
    never revert back. Further, at this point no communication has taken
    place and the sender and receiver threads have not been started yet (and
    we may not even have an open serdev device either).
    
    Therefore, it is perfectly safe to call ssam_controller_destroy() with a
    state of SSAM_CONTROLLER_INITIALIZED. This, however, means that the
    warning currently being emitted is incorrect. Fix it by extending the
    check.
    
    Fixes: c167b9c7 ("platform/surface: Add Surface Aggregator subsystem")
    Signed-off-by: default avatarMaximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20240811124645.246016-1-luzmaximilian@gmail.comReviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
    bc923d59
controller.c 84.5 KB