mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 11:15:10 +07:00
net/mlx5e: TX, Obsolete maintaining local copies of skb->len/data
Instead of maintaining a local copy of skb->len/data and updating it upon every copy to the WQE inline part, just calculate it once when needed, using the ihs. This obsoletes the function mlx5e_tx_skb_pull_inline. Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
98db16bab5
commit
5e7d77a9c5
@ -188,28 +188,16 @@ static inline u16 mlx5e_calc_min_inline(enum mlx5_inline_modes mode,
|
||||
return min_t(u16, hlen, skb_headlen(skb));
|
||||
}
|
||||
|
||||
static inline void mlx5e_tx_skb_pull_inline(unsigned char **skb_data,
|
||||
unsigned int *skb_len,
|
||||
unsigned int len)
|
||||
{
|
||||
*skb_len -= len;
|
||||
*skb_data += len;
|
||||
}
|
||||
|
||||
static inline void mlx5e_insert_vlan(void *start, struct sk_buff *skb, u16 ihs,
|
||||
unsigned char **skb_data,
|
||||
unsigned int *skb_len)
|
||||
static inline void mlx5e_insert_vlan(void *start, struct sk_buff *skb, u16 ihs)
|
||||
{
|
||||
struct vlan_ethhdr *vhdr = (struct vlan_ethhdr *)start;
|
||||
int cpy1_sz = 2 * ETH_ALEN;
|
||||
int cpy2_sz = ihs - cpy1_sz;
|
||||
|
||||
memcpy(vhdr, *skb_data, cpy1_sz);
|
||||
mlx5e_tx_skb_pull_inline(skb_data, skb_len, cpy1_sz);
|
||||
memcpy(vhdr, skb->data, cpy1_sz);
|
||||
vhdr->h_vlan_proto = skb->vlan_proto;
|
||||
vhdr->h_vlan_TCI = cpu_to_be16(skb_vlan_tag_get(skb));
|
||||
memcpy(&vhdr->h_vlan_encapsulated_proto, *skb_data, cpy2_sz);
|
||||
mlx5e_tx_skb_pull_inline(skb_data, skb_len, cpy2_sz);
|
||||
memcpy(&vhdr->h_vlan_encapsulated_proto, skb->data + cpy1_sz, cpy2_sz);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -357,8 +345,6 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
struct mlx5e_tx_wqe_info *wi;
|
||||
|
||||
struct mlx5e_sq_stats *stats = sq->stats;
|
||||
unsigned char *skb_data = skb->data;
|
||||
unsigned int skb_len = skb->len;
|
||||
u16 ds_cnt, ds_cnt_inl = 0;
|
||||
u16 headlen, ihs, frag_pi;
|
||||
u8 num_wqebbs, opcode;
|
||||
@ -385,7 +371,7 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
stats->bytes += num_bytes;
|
||||
stats->xmit_more += skb->xmit_more;
|
||||
|
||||
headlen = skb_len - ihs - skb->data_len;
|
||||
headlen = skb->len - ihs - skb->data_len;
|
||||
ds_cnt += !!headlen;
|
||||
ds_cnt += skb_shinfo(skb)->nr_frags;
|
||||
|
||||
@ -414,15 +400,14 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
eseg->mss = mss;
|
||||
|
||||
if (ihs) {
|
||||
eseg->inline_hdr.sz = cpu_to_be16(ihs);
|
||||
if (skb_vlan_tag_present(skb)) {
|
||||
mlx5e_insert_vlan(eseg->inline_hdr.start, skb,
|
||||
ihs - VLAN_HLEN, &skb_data, &skb_len);
|
||||
ihs -= VLAN_HLEN;
|
||||
mlx5e_insert_vlan(eseg->inline_hdr.start, skb, ihs);
|
||||
stats->added_vlan_packets++;
|
||||
} else {
|
||||
memcpy(eseg->inline_hdr.start, skb_data, ihs);
|
||||
mlx5e_tx_skb_pull_inline(&skb_data, &skb_len, ihs);
|
||||
memcpy(eseg->inline_hdr.start, skb->data, ihs);
|
||||
}
|
||||
eseg->inline_hdr.sz = cpu_to_be16(ihs);
|
||||
dseg += ds_cnt_inl;
|
||||
} else if (skb_vlan_tag_present(skb)) {
|
||||
eseg->insert.type = cpu_to_be16(MLX5_ETH_WQE_INSERT_VLAN);
|
||||
@ -432,7 +417,7 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
stats->added_vlan_packets++;
|
||||
}
|
||||
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen, dseg);
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + ihs, headlen, dseg);
|
||||
if (unlikely(num_dma < 0))
|
||||
goto err_drop;
|
||||
|
||||
@ -644,8 +629,6 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
struct mlx5e_tx_wqe_info *wi;
|
||||
|
||||
struct mlx5e_sq_stats *stats = sq->stats;
|
||||
unsigned char *skb_data = skb->data;
|
||||
unsigned int skb_len = skb->len;
|
||||
u16 headlen, ihs, pi, frag_pi;
|
||||
u16 ds_cnt, ds_cnt_inl = 0;
|
||||
u8 num_wqebbs, opcode;
|
||||
@ -672,7 +655,7 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
stats->bytes += num_bytes;
|
||||
stats->xmit_more += skb->xmit_more;
|
||||
|
||||
headlen = skb_len - ihs - skb->data_len;
|
||||
headlen = skb->len - ihs - skb->data_len;
|
||||
ds_cnt += !!headlen;
|
||||
ds_cnt += skb_shinfo(skb)->nr_frags;
|
||||
|
||||
@ -704,13 +687,12 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
eseg->mss = mss;
|
||||
|
||||
if (ihs) {
|
||||
memcpy(eseg->inline_hdr.start, skb_data, ihs);
|
||||
mlx5e_tx_skb_pull_inline(&skb_data, &skb_len, ihs);
|
||||
memcpy(eseg->inline_hdr.start, skb->data, ihs);
|
||||
eseg->inline_hdr.sz = cpu_to_be16(ihs);
|
||||
dseg += ds_cnt_inl;
|
||||
}
|
||||
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen, dseg);
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + ihs, headlen, dseg);
|
||||
if (unlikely(num_dma < 0))
|
||||
goto err_drop;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user