• Théo Lebrun's avatar
    spi: spi-mem: add statistics support to ->exec_op() calls · e63aef9c
    Théo Lebrun authored
    Current behavior is that spi-mem operations do not increment statistics,
    neither per-controller nor per-device, if ->exec_op() is used. For
    operations that do NOT use ->exec_op(), stats are increased as the
    usual spi_sync() is called.
    
    The newly implemented spi_mem_add_op_stats() function is strongly
    inspired by spi_statistics_add_transfer_stats(); locking logic and
    l2len computation comes from there.
    
    Statistics that are being filled: bytes{,_rx,_tx}, messages, transfers,
    errors, timedout, transfer_bytes_histo_*.
    
    Note about messages & transfers counters: in the fallback to spi_sync()
    case, there are from 1 to 4 transfers per message. We only register one
    big transfer in the ->exec_op() case as that is closer to reality.
    
    This patch is NOT touching:
     - spi_async, spi_sync, spi_sync_immediate: those counters describe
       precise function calls, incrementing them would be lying. I believe
       comparing the messages counter to spi_async+spi_sync is a good way
       to detect ->exec_op() calls, but I might be missing edge cases
       knowledge.
     - transfers_split_maxsize: splitting cannot happen if ->exec_op() is
       provided.
    Reviewed-by: default avatarDhruva Gole <d-gole@ti.com>
    Signed-off-by: default avatarThéo Lebrun <theo.lebrun@bootlin.com>
    Reviewed-by: default avatarTudor Ambarus <tudor.ambarus@linaro.org>
    Link: https://msgid.link/r/20240216-spi-mem-stats-v2-1-9256dfe4887d@bootlin.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    e63aef9c
spi-mem.c 25.6 KB