diff options
| author | Oliver Hartkopp <socketcan@hartkopp.net> | 2026-02-01 15:33:19 +0100 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2026-02-05 11:58:40 +0100 |
| commit | d2d9179751e6d876ed20483ce703ddd8e919101f (patch) | |
| tree | 948edf2a9c8b85e39f8f553fea5b44164aa2cb97 | |
| parent | 5a9229dbb48deb78ee1d20ccbd6453cfbf2a4a61 (diff) | |
can: move frame_len to CAN skb extensions
The can_skb_priv::frame_len variable is used to cache a previous
calculated CAN frame length to be passed to BQL queueing disciplines.
Move the can_skb_priv::frame_len content to can_skb_ext::can_framelen.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://patch.msgid.link/20260201-can_skb_ext-v8-4-3635d790fe8b@hartkopp.net
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
| -rw-r--r-- | drivers/net/can/dev/skb.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/net/can/dev/skb.c b/drivers/net/can/dev/skb.c index 470255fe7367..408ee49abce1 100644 --- a/drivers/net/can/dev/skb.c +++ b/drivers/net/can/dev/skb.c @@ -49,6 +49,7 @@ int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, unsigned int idx, unsigned int frame_len) { struct can_priv *priv = netdev_priv(dev); + struct can_skb_ext *csx; if (idx >= priv->echo_skb_max) { netdev_err(dev, "%s: BUG! Trying to access can_priv::echo_skb out of bounds (%u/max %u)\n", @@ -75,7 +76,9 @@ int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, skb->dev = dev; /* save frame_len to reuse it when transmission is completed */ - can_skb_prv(skb)->frame_len = frame_len; + csx = can_skb_ext_find(skb); + if (csx) + csx->can_framelen = frame_len; if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; @@ -112,7 +115,7 @@ __can_get_echo_skb(struct net_device *dev, unsigned int idx, * length is supported on both CAN and CANFD frames. */ struct sk_buff *skb = priv->echo_skb[idx]; - struct can_skb_priv *can_skb_priv = can_skb_prv(skb); + struct can_skb_ext *csx; if (skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS) skb_tstamp_tx(skb, skb_hwtstamps(skb)); @@ -120,8 +123,13 @@ __can_get_echo_skb(struct net_device *dev, unsigned int idx, /* get the real payload length for netdev statistics */ *len_ptr = can_skb_get_data_len(skb); - if (frame_len_ptr) - *frame_len_ptr = can_skb_priv->frame_len; + if (frame_len_ptr) { + csx = can_skb_ext_find(skb); + if (csx) + *frame_len_ptr = csx->can_framelen; + else + *frame_len_ptr = 0; + } priv->echo_skb[idx] = NULL; @@ -181,10 +189,15 @@ void can_free_echo_skb(struct net_device *dev, unsigned int idx, if (priv->echo_skb[idx]) { struct sk_buff *skb = priv->echo_skb[idx]; - struct can_skb_priv *can_skb_priv = can_skb_prv(skb); - - if (frame_len_ptr) - *frame_len_ptr = can_skb_priv->frame_len; + struct can_skb_ext *csx; + + if (frame_len_ptr) { + csx = can_skb_ext_find(skb); + if (csx) + *frame_len_ptr = csx->can_framelen; + else + *frame_len_ptr = 0; + } dev_kfree_skb_any(skb); priv->echo_skb[idx] = NULL; |
