net: group skb_shinfo zerocopy related bits together.
In preparation for expanded zerocopy (TX and RX), move the zerocopy related bits out of tx_flags into their own flag word. Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
8c793822c5
commit
06b4feb37e
@@ -430,27 +430,31 @@ enum {
|
||||
/* device driver is going to provide hardware time stamp */
|
||||
SKBTX_IN_PROGRESS = 1 << 2,
|
||||
|
||||
/* device driver supports TX zero-copy buffers */
|
||||
SKBTX_DEV_ZEROCOPY = 1 << 3,
|
||||
|
||||
/* generate wifi status information (where possible) */
|
||||
SKBTX_WIFI_STATUS = 1 << 4,
|
||||
|
||||
/* generate software time stamp when entering packet scheduling */
|
||||
SKBTX_SCHED_TSTAMP = 1 << 6,
|
||||
};
|
||||
|
||||
#define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \
|
||||
SKBTX_SCHED_TSTAMP)
|
||||
#define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | SKBTX_ANY_SW_TSTAMP)
|
||||
|
||||
/* Definitions for flags in struct skb_shared_info */
|
||||
enum {
|
||||
/* use zcopy routines */
|
||||
SKBFL_ZEROCOPY_ENABLE = BIT(0),
|
||||
|
||||
/* This indicates at least one fragment might be overwritten
|
||||
* (as in vmsplice(), sendfile() ...)
|
||||
* If we need to compute a TX checksum, we'll need to copy
|
||||
* all frags to avoid possible bad checksum
|
||||
*/
|
||||
SKBTX_SHARED_FRAG = 1 << 5,
|
||||
|
||||
/* generate software time stamp when entering packet scheduling */
|
||||
SKBTX_SCHED_TSTAMP = 1 << 6,
|
||||
SKBFL_SHARED_FRAG = BIT(1),
|
||||
};
|
||||
|
||||
#define SKBTX_ZEROCOPY_FRAG (SKBTX_DEV_ZEROCOPY | SKBTX_SHARED_FRAG)
|
||||
#define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \
|
||||
SKBTX_SCHED_TSTAMP)
|
||||
#define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | SKBTX_ANY_SW_TSTAMP)
|
||||
#define SKBFL_ZEROCOPY_FRAG (SKBFL_ZEROCOPY_ENABLE | SKBFL_SHARED_FRAG)
|
||||
|
||||
/*
|
||||
* The callback notifies userspace to release buffers when skb DMA is done in
|
||||
@@ -506,7 +510,7 @@ int skb_zerocopy_iter_stream(struct sock *sk, struct sk_buff *skb,
|
||||
* the end of the header data, ie. at skb->end.
|
||||
*/
|
||||
struct skb_shared_info {
|
||||
__u8 __unused;
|
||||
__u8 flags;
|
||||
__u8 meta_len;
|
||||
__u8 nr_frags;
|
||||
__u8 tx_flags;
|
||||
@@ -1433,7 +1437,7 @@ static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb)
|
||||
|
||||
static inline struct ubuf_info *skb_zcopy(struct sk_buff *skb)
|
||||
{
|
||||
bool is_zcopy = skb && skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY;
|
||||
bool is_zcopy = skb && skb_shinfo(skb)->flags & SKBFL_ZEROCOPY_ENABLE;
|
||||
|
||||
return is_zcopy ? skb_uarg(skb) : NULL;
|
||||
}
|
||||
@@ -1452,14 +1456,14 @@ static inline void skb_zcopy_set(struct sk_buff *skb, struct ubuf_info *uarg,
|
||||
else
|
||||
skb_zcopy_get(uarg);
|
||||
skb_shinfo(skb)->destructor_arg = uarg;
|
||||
skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
|
||||
skb_shinfo(skb)->flags |= SKBFL_ZEROCOPY_FRAG;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void skb_zcopy_set_nouarg(struct sk_buff *skb, void *val)
|
||||
{
|
||||
skb_shinfo(skb)->destructor_arg = (void *)((uintptr_t) val | 0x1UL);
|
||||
skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
|
||||
skb_shinfo(skb)->flags |= SKBFL_ZEROCOPY_FRAG;
|
||||
}
|
||||
|
||||
static inline bool skb_zcopy_is_nouarg(struct sk_buff *skb)
|
||||
@@ -1497,7 +1501,7 @@ static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy_success)
|
||||
if (!skb_zcopy_is_nouarg(skb))
|
||||
uarg->callback(skb, uarg, zerocopy_success);
|
||||
|
||||
skb_shinfo(skb)->tx_flags &= ~SKBTX_ZEROCOPY_FRAG;
|
||||
skb_shinfo(skb)->flags &= ~SKBFL_ZEROCOPY_FRAG;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3323,7 +3327,7 @@ static inline int skb_linearize(struct sk_buff *skb)
|
||||
static inline bool skb_has_shared_frag(const struct sk_buff *skb)
|
||||
{
|
||||
return skb_is_nonlinear(skb) &&
|
||||
skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
|
||||
skb_shinfo(skb)->flags & SKBFL_SHARED_FRAG;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user