diff options
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 44 |
1 files changed, 16 insertions, 28 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index d8050382b189..f067c95cf18a 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -163,26 +163,19 @@ struct skb_shared_hwtstamps { | |||
163 | ktime_t syststamp; | 163 | ktime_t syststamp; |
164 | }; | 164 | }; |
165 | 165 | ||
166 | /** | 166 | /* Definitions for tx_flags in struct skb_shared_info */ |
167 | * struct skb_shared_tx - instructions for time stamping of outgoing packets | 167 | enum { |
168 | * @hardware: generate hardware time stamp | 168 | /* generate hardware time stamp */ |
169 | * @software: generate software time stamp | 169 | SKBTX_HW_TSTAMP = 1 << 0, |
170 | * @in_progress: device driver is going to provide | 170 | |
171 | * hardware time stamp | 171 | /* generate software time stamp */ |
172 | * @prevent_sk_orphan: make sk reference available on driver level | 172 | SKBTX_SW_TSTAMP = 1 << 1, |
173 | * @flags: all shared_tx flags | 173 | |
174 | * | 174 | /* device driver is going to provide hardware time stamp */ |
175 | * These flags are attached to packets as part of the | 175 | SKBTX_IN_PROGRESS = 1 << 2, |
176 | * &skb_shared_info. Use skb_tx() to get a pointer. | 176 | |
177 | */ | 177 | /* ensure the originating sk reference is available on driver level */ |
178 | union skb_shared_tx { | 178 | SKBTX_DRV_NEEDS_SK_REF = 1 << 3, |
179 | struct { | ||
180 | __u8 hardware:1, | ||
181 | software:1, | ||
182 | in_progress:1, | ||
183 | prevent_sk_orphan:1; | ||
184 | }; | ||
185 | __u8 flags; | ||
186 | }; | 179 | }; |
187 | 180 | ||
188 | /* This data is invariant across clones and lives at | 181 | /* This data is invariant across clones and lives at |
@@ -195,7 +188,7 @@ struct skb_shared_info { | |||
195 | unsigned short gso_segs; | 188 | unsigned short gso_segs; |
196 | unsigned short gso_type; | 189 | unsigned short gso_type; |
197 | __be32 ip6_frag_id; | 190 | __be32 ip6_frag_id; |
198 | union skb_shared_tx tx_flags; | 191 | __u8 tx_flags; |
199 | struct sk_buff *frag_list; | 192 | struct sk_buff *frag_list; |
200 | struct skb_shared_hwtstamps hwtstamps; | 193 | struct skb_shared_hwtstamps hwtstamps; |
201 | 194 | ||
@@ -587,11 +580,6 @@ static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb) | |||
587 | return &skb_shinfo(skb)->hwtstamps; | 580 | return &skb_shinfo(skb)->hwtstamps; |
588 | } | 581 | } |
589 | 582 | ||
590 | static inline union skb_shared_tx *skb_tx(struct sk_buff *skb) | ||
591 | { | ||
592 | return &skb_shinfo(skb)->tx_flags; | ||
593 | } | ||
594 | |||
595 | /** | 583 | /** |
596 | * skb_queue_empty - check if a queue is empty | 584 | * skb_queue_empty - check if a queue is empty |
597 | * @list: queue head | 585 | * @list: queue head |
@@ -1996,8 +1984,8 @@ extern void skb_tstamp_tx(struct sk_buff *orig_skb, | |||
1996 | 1984 | ||
1997 | static inline void sw_tx_timestamp(struct sk_buff *skb) | 1985 | static inline void sw_tx_timestamp(struct sk_buff *skb) |
1998 | { | 1986 | { |
1999 | union skb_shared_tx *shtx = skb_tx(skb); | 1987 | if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP && |
2000 | if (shtx->software && !shtx->in_progress) | 1988 | !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) |
2001 | skb_tstamp_tx(skb, NULL); | 1989 | skb_tstamp_tx(skb, NULL); |
2002 | } | 1990 | } |
2003 | 1991 | ||