• Vladimir Oltean's avatar
    net: dsa: tag_ocelot: break circular dependency with ocelot switch lib driver · deab6b1c
    Vladimir Oltean authored
    As explained here:
    https://lore.kernel.org/netdev/20210908220834.d7gmtnwrorhharna@skbuf/
    DSA tagging protocol drivers cannot depend on symbols exported by switch
    drivers, because this creates a circular dependency that breaks module
    autoloading.
    
    The tag_ocelot.c file depends on the ocelot_ptp_rew_op() function
    exported by the common ocelot switch lib. This function looks at
    OCELOT_SKB_CB(skb) and computes how to populate the REW_OP field of the
    DSA tag, for PTP timestamping (the command: one-step/two-step, and the
    TX timestamp identifier).
    
    None of that requires deep insight into the driver, it is quite
    stateless, as it only depends upon the skb->cb. So let's make it a
    static inline function and put it in include/linux/dsa/ocelot.h, a
    file that despite its name is used by the ocelot switch driver for
    populating the injection header too - since commit 40d3f295 ("net:
    mscc: ocelot: use common tag parsing code with DSA").
    
    With that function declared as static inline, its body is expanded
    inside each call site, so the dependency is broken and the DSA tagger
    can be built without the switch library, upon which the felix driver
    depends.
    
    Fixes: 39e5308b ("net: mscc: ocelot: support PTP Sync one-step timestamping")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    deab6b1c
ocelot.h 26.8 KB