提交 08b0dec4 编写于 作者: D David S. Miller

Merge branch 'dsa-Fix-a-bug-and-avoid-dangerous-usage-patterns'

Vladimir Oltean says:

====================
Fix a bug and avoid dangerous usage patterns around DSA_SKB_CB

Making DSA use the sk_buff control block was my idea during the
'Traffic-support-for-SJA1105-DSA-driver' patchset, and I had also
introduced a series of macro helpers that turned out to not be so
helpful:

1. DSA_SKB_ZERO() zeroizes the 48-byte skb->cb area, but due to the high
   performance impact in the hotpath it was only intended to be called
   from the timestamping path. But it turns out that not zeroizing it
   has uncovered the reading of an uninitialized member field of
   DSA_SKB_CB, so in the future just be careful about what needs
   initialization and remove this macro.
2. DSA_SKB_CLONE() contains a flaw in its body definition (originally
   put there to silence checkpatch.pl) and is unusable at this point
   (will only cause NPE's when used). So remove it.
3. For DSA_SKB_COPY() the same performance considerations apply as above
   and therefore it's best to prune this function before it reaches a
   stable kernel and potentially any users.
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -99,24 +99,9 @@ struct __dsa_skb_cb { ...@@ -99,24 +99,9 @@ struct __dsa_skb_cb {
#define DSA_SKB_CB(skb) ((struct dsa_skb_cb *)((skb)->cb)) #define DSA_SKB_CB(skb) ((struct dsa_skb_cb *)((skb)->cb))
#define DSA_SKB_CB_COPY(nskb, skb) \
{ *__DSA_SKB_CB(nskb) = *__DSA_SKB_CB(skb); }
#define DSA_SKB_CB_ZERO(skb) \
{ *__DSA_SKB_CB(skb) = (struct __dsa_skb_cb) {0}; }
#define DSA_SKB_CB_PRIV(skb) \ #define DSA_SKB_CB_PRIV(skb) \
((void *)(skb)->cb + offsetof(struct __dsa_skb_cb, priv)) ((void *)(skb)->cb + offsetof(struct __dsa_skb_cb, priv))
#define DSA_SKB_CB_CLONE(_clone, _skb) \
{ \
struct sk_buff *clone = _clone; \
struct sk_buff *skb = _skb; \
\
DSA_SKB_CB_COPY(clone, skb); \
DSA_SKB_CB(skb)->clone = clone; \
}
struct dsa_switch_tree { struct dsa_switch_tree {
struct list_head list; struct list_head list;
......
...@@ -463,6 +463,8 @@ static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -463,6 +463,8 @@ static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
s->tx_bytes += skb->len; s->tx_bytes += skb->len;
u64_stats_update_end(&s->syncp); u64_stats_update_end(&s->syncp);
DSA_SKB_CB(skb)->deferred_xmit = false;
/* Identify PTP protocol packets, clone them, and pass them to the /* Identify PTP protocol packets, clone them, and pass them to the
* switch driver * switch driver
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册