• David Jander's avatar
    spi: opportunistically skip ctlr->cur_msg_completion · dc302905
    David Jander authored
    There are only a few drivers that do not call
    spi_finalize_current_message() in the context of transfer_one_message(),
    and even for those cases the completion ctlr->cur_msg_completion is not
    needed always. The calls to complete() and wait_for_completion() each
    take a spin-lock, which is costly. This patch makes it possible to avoid
    those calls in the big majority of cases, by introducing two flags that
    with the help of ordering via barriers can avoid using the completion
    safely. In case of a race with the context calling
    spi_finalize_current_message(), the scheme errs on the safe side and takes
    the completion.
    The impact of this patch is worth the effort: On a i.MX8MM SoC, the time
    the SPI bus is idle between two consecutive calls to spi_sync(), is
    reduced from 19.6us to 16.8us... roughly 15%.
    Signed-off-by: default avatarDavid Jander <david@protonic.nl>
    Link: https://lore.kernel.org/r/20220621061234.3626638-12-david@protonic.nlSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    dc302905
spi.c 118 KB