• Marc Kleine-Budde's avatar
    can: dev: always create TX echo skb · 7119d786
    Marc Kleine-Budde authored
    So far the creation of the TX echo skb was optional and can be
    controlled by the local sender of a CAN frame.
    
    It turns out that the TX echo CAN skb can be piggybacked to carry
    information in the driver from the TX- to the TX-complete handler.
    
    Several drivers already use the return value of
    can_get_echo_skb() (which is the length of the data field in the CAN
    frame) for their number of transferred bytes statistics. The
    statistics are not working if CAN echo skbs are disabled.
    
    Another use case is to calculate and set the CAN frame length on the
    wire, which is needed for BQL support in both the TX and TX-completion
    handler.
    
    For now in can_put_echo_skb(), which is called from the TX handler,
    the skb carrying the CAN frame is discarded if no TX echo is
    requested, leading to the above illustrated problems.
    
    This patch changes the can_put_echo_skb() function, so that the echo
    skb is always generated. If the sender requests no echo, the echo skb
    is consumed in __can_get_echo_skb() without being passed into the RX
    handler of the networking stack, but the CAN data length and CAN frame
    length information is properly returned.
    
    Link: https://lore.kernel.org/r/20210309211904.3348700-1-mkl@pengutronix.deSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    7119d786
skb.c 5.87 KB