Skip to content

Commit dc61077

Browse files
committed
Merge: net: rebase tls to current upstream
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/3435 JIRA: https://issues.redhat.com/browse/RHEL-14902 This rebase contains some bugfixes, code improvements, and adds a few selftests. Signed-off-by: Sabrina Dubroca <[email protected]> Approved-by: Hangbin Liu <[email protected]> Approved-by: Xin Long <[email protected]> Signed-off-by: Scott Weaver <[email protected]>
2 parents 361963b + e243e51 commit dc61077

File tree

17 files changed

+705
-720
lines changed

17 files changed

+705
-720
lines changed

drivers/net/bonding/bond_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5441,7 +5441,7 @@ static netdev_tx_t bond_tls_device_xmit(struct bonding *bond, struct sk_buff *sk
54415441
{
54425442
struct net_device *tls_netdev = rcu_dereference(tls_get_ctx(skb->sk)->netdev);
54435443

5444-
/* tls_netdev might become NULL, even if tls_is_sk_tx_device_offloaded
5444+
/* tls_netdev might become NULL, even if tls_is_skb_tx_device_offloaded
54455445
* was true, if tls_device_down is running in parallel, but it's OK,
54465446
* because bond_get_slave_by_dev has a NULL check.
54475447
*/
@@ -5460,7 +5460,7 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
54605460
return NETDEV_TX_OK;
54615461

54625462
#if IS_ENABLED(CONFIG_TLS_DEVICE)
5463-
if (skb->sk && tls_is_sk_tx_device_offloaded(skb->sk))
5463+
if (tls_is_skb_tx_device_offloaded(skb))
54645464
return bond_tls_device_xmit(bond, skb, dev);
54655465
#endif
54665466

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
11751175
txq = netdev_pick_tx(dev, skb, sb_dev);
11761176
if (xfrm_offload(skb) || is_ptp_enabled(skb, dev) ||
11771177
skb->encapsulation ||
1178-
cxgb4_is_ktls_skb(skb) ||
1178+
tls_is_skb_tx_device_offloaded(skb) ||
11791179
(proto != IPPROTO_TCP && proto != IPPROTO_UDP))
11801180
txq = txq % pi->nqsets;
11811181

drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -497,11 +497,6 @@ struct cxgb4_uld_info {
497497
#endif
498498
};
499499

500-
static inline bool cxgb4_is_ktls_skb(struct sk_buff *skb)
501-
{
502-
return skb->sk && tls_is_sk_tx_device_offloaded(skb->sk);
503-
}
504-
505500
void cxgb4_uld_enable(struct adapter *adap);
506501
void cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p);
507502
int cxgb4_unregister_uld(enum cxgb4_uld type);

drivers/net/ethernet/chelsio/cxgb4/sge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1530,7 +1530,7 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
15301530
#endif /* CHELSIO_IPSEC_INLINE */
15311531

15321532
#if IS_ENABLED(CONFIG_CHELSIO_TLS_DEVICE)
1533-
if (cxgb4_is_ktls_skb(skb) &&
1533+
if (tls_is_skb_tx_device_offloaded(skb) &&
15341534
(skb->len - skb_tcp_all_headers(skb)))
15351535
return adap->uld[CXGB4_ULD_KTLS].tx_handler(skb, dev);
15361536
#endif /* CHELSIO_TLS_DEVICE */

drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,7 @@ static void chcr_ktls_dev_del(struct net_device *netdev,
361361
struct tls_context *tls_ctx,
362362
enum tls_offload_ctx_dir direction)
363363
{
364-
struct chcr_ktls_ofld_ctx_tx *tx_ctx =
365-
chcr_get_ktls_tx_context(tls_ctx);
366-
struct chcr_ktls_info *tx_info = tx_ctx->chcr_info;
364+
struct chcr_ktls_info *tx_info = chcr_get_ktls_tx_info(tls_ctx);
367365
struct ch_ktls_port_stats_debug *port_stats;
368366
struct chcr_ktls_uld_ctx *u_ctx;
369367

@@ -396,7 +394,7 @@ static void chcr_ktls_dev_del(struct net_device *netdev,
396394
port_stats = &tx_info->adap->ch_ktls_stats.ktls_port[tx_info->port_id];
397395
atomic64_inc(&port_stats->ktls_tx_connection_close);
398396
kvfree(tx_info);
399-
tx_ctx->chcr_info = NULL;
397+
chcr_set_ktls_tx_info(tls_ctx, NULL);
400398
/* release module refcount */
401399
module_put(THIS_MODULE);
402400
}
@@ -417,7 +415,6 @@ static int chcr_ktls_dev_add(struct net_device *netdev, struct sock *sk,
417415
{
418416
struct tls_context *tls_ctx = tls_get_ctx(sk);
419417
struct ch_ktls_port_stats_debug *port_stats;
420-
struct chcr_ktls_ofld_ctx_tx *tx_ctx;
421418
struct chcr_ktls_uld_ctx *u_ctx;
422419
struct chcr_ktls_info *tx_info;
423420
struct dst_entry *dst;
@@ -427,8 +424,6 @@ static int chcr_ktls_dev_add(struct net_device *netdev, struct sock *sk,
427424
u8 daaddr[16];
428425
int ret = -1;
429426

430-
tx_ctx = chcr_get_ktls_tx_context(tls_ctx);
431-
432427
pi = netdev_priv(netdev);
433428
adap = pi->adapter;
434429
port_stats = &adap->ch_ktls_stats.ktls_port[pi->port_id];
@@ -440,7 +435,7 @@ static int chcr_ktls_dev_add(struct net_device *netdev, struct sock *sk,
440435
goto out;
441436
}
442437

443-
if (tx_ctx->chcr_info)
438+
if (chcr_get_ktls_tx_info(tls_ctx))
444439
goto out;
445440

446441
if (u_ctx && u_ctx->detach)
@@ -566,7 +561,7 @@ static int chcr_ktls_dev_add(struct net_device *netdev, struct sock *sk,
566561
goto free_tid;
567562

568563
atomic64_inc(&port_stats->ktls_tx_ctx);
569-
tx_ctx->chcr_info = tx_info;
564+
chcr_set_ktls_tx_info(tls_ctx, tx_info);
570565

571566
return 0;
572567

@@ -647,7 +642,7 @@ static int chcr_ktls_cpl_act_open_rpl(struct adapter *adap,
647642
{
648643
const struct cpl_act_open_rpl *p = (void *)input;
649644
struct chcr_ktls_info *tx_info = NULL;
650-
struct chcr_ktls_ofld_ctx_tx *tx_ctx;
645+
struct tls_offload_context_tx *tx_ctx;
651646
struct chcr_ktls_uld_ctx *u_ctx;
652647
unsigned int atid, tid, status;
653648
struct tls_context *tls_ctx;
@@ -686,7 +681,7 @@ static int chcr_ktls_cpl_act_open_rpl(struct adapter *adap,
686681
cxgb4_insert_tid(t, tx_info, tx_info->tid, tx_info->ip_family);
687682
/* Adding tid */
688683
tls_ctx = tls_get_ctx(tx_info->sk);
689-
tx_ctx = chcr_get_ktls_tx_context(tls_ctx);
684+
tx_ctx = tls_offload_ctx_tx(tls_ctx);
690685
u_ctx = adap->uld[CXGB4_ULD_KTLS].handle;
691686
if (u_ctx) {
692687
ret = xa_insert_bh(&u_ctx->tid_list, tid, tx_ctx,
@@ -1926,7 +1921,7 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
19261921
{
19271922
u32 tls_end_offset, tcp_seq, skb_data_len, skb_offset;
19281923
struct ch_ktls_port_stats_debug *port_stats;
1929-
struct chcr_ktls_ofld_ctx_tx *tx_ctx;
1924+
struct tls_offload_context_tx *tx_ctx;
19301925
struct ch_ktls_stats_debug *stats;
19311926
struct tcphdr *th = tcp_hdr(skb);
19321927
int data_len, qidx, ret = 0, mss;
@@ -1946,16 +1941,16 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
19461941
mss = skb_is_gso(skb) ? skb_shinfo(skb)->gso_size : data_len;
19471942

19481943
tls_ctx = tls_get_ctx(skb->sk);
1944+
tx_ctx = tls_offload_ctx_tx(tls_ctx);
19491945
tls_netdev = rcu_dereference_bh(tls_ctx->netdev);
19501946
/* Don't quit on NULL: if tls_device_down is running in parallel,
1951-
* netdev might become NULL, even if tls_is_sk_tx_device_offloaded was
1947+
* netdev might become NULL, even if tls_is_skb_tx_device_offloaded was
19521948
* true. Rather continue processing this packet.
19531949
*/
19541950
if (unlikely(tls_netdev && tls_netdev != dev))
19551951
goto out;
19561952

1957-
tx_ctx = chcr_get_ktls_tx_context(tls_ctx);
1958-
tx_info = tx_ctx->chcr_info;
1953+
tx_info = chcr_get_ktls_tx_info(tls_ctx);
19591954

19601955
if (unlikely(!tx_info))
19611956
goto out;
@@ -1981,19 +1976,19 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
19811976
* we will send the complete record again.
19821977
*/
19831978

1984-
spin_lock_irqsave(&tx_ctx->base.lock, flags);
1979+
spin_lock_irqsave(&tx_ctx->lock, flags);
19851980

19861981
do {
19871982

19881983
cxgb4_reclaim_completed_tx(adap, &q->q, true);
19891984
/* fetch the tls record */
1990-
record = tls_get_record(&tx_ctx->base, tcp_seq,
1985+
record = tls_get_record(tx_ctx, tcp_seq,
19911986
&tx_info->record_no);
19921987
/* By the time packet reached to us, ACK is received, and record
19931988
* won't be found in that case, handle it gracefully.
19941989
*/
19951990
if (unlikely(!record)) {
1996-
spin_unlock_irqrestore(&tx_ctx->base.lock, flags);
1991+
spin_unlock_irqrestore(&tx_ctx->lock, flags);
19971992
atomic64_inc(&port_stats->ktls_tx_drop_no_sync_data);
19981993
goto out;
19991994
}
@@ -2017,7 +2012,7 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
20172012
tls_end_offset !=
20182013
record->len);
20192014
if (ret) {
2020-
spin_unlock_irqrestore(&tx_ctx->base.lock,
2015+
spin_unlock_irqrestore(&tx_ctx->lock,
20212016
flags);
20222017
goto out;
20232018
}
@@ -2048,7 +2043,7 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
20482043
/* free the refcount taken earlier */
20492044
if (tls_end_offset < data_len)
20502045
dev_kfree_skb_any(skb);
2051-
spin_unlock_irqrestore(&tx_ctx->base.lock, flags);
2046+
spin_unlock_irqrestore(&tx_ctx->lock, flags);
20522047
goto out;
20532048
}
20542049

@@ -2084,7 +2079,7 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
20842079

20852080
/* if any failure, come out from the loop. */
20862081
if (ret) {
2087-
spin_unlock_irqrestore(&tx_ctx->base.lock, flags);
2082+
spin_unlock_irqrestore(&tx_ctx->lock, flags);
20882083
if (th->fin)
20892084
dev_kfree_skb_any(skb);
20902085

@@ -2099,7 +2094,7 @@ static int chcr_ktls_xmit(struct sk_buff *skb, struct net_device *dev)
20992094

21002095
} while (data_len > 0);
21012096

2102-
spin_unlock_irqrestore(&tx_ctx->base.lock, flags);
2097+
spin_unlock_irqrestore(&tx_ctx->lock, flags);
21032098
atomic64_inc(&port_stats->ktls_tx_encrypted_packets);
21042099
atomic64_add(skb_data_len, &port_stats->ktls_tx_encrypted_bytes);
21052100

@@ -2187,17 +2182,17 @@ static void clear_conn_resources(struct chcr_ktls_info *tx_info)
21872182
static void ch_ktls_reset_all_conn(struct chcr_ktls_uld_ctx *u_ctx)
21882183
{
21892184
struct ch_ktls_port_stats_debug *port_stats;
2190-
struct chcr_ktls_ofld_ctx_tx *tx_ctx;
2185+
struct tls_offload_context_tx *tx_ctx;
21912186
struct chcr_ktls_info *tx_info;
21922187
unsigned long index;
21932188

21942189
xa_for_each(&u_ctx->tid_list, index, tx_ctx) {
2195-
tx_info = tx_ctx->chcr_info;
2190+
tx_info = __chcr_get_ktls_tx_info(tx_ctx);
21962191
clear_conn_resources(tx_info);
21972192
port_stats = &tx_info->adap->ch_ktls_stats.ktls_port[tx_info->port_id];
21982193
atomic64_inc(&port_stats->ktls_tx_connection_close);
21992194
kvfree(tx_info);
2200-
tx_ctx->chcr_info = NULL;
2195+
memset(tx_ctx->driver_state, 0, TLS_DRIVER_STATE_SIZE_TX);
22012196
/* release module refcount */
22022197
module_put(THIS_MODULE);
22032198
}

drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.h

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ struct chcr_ktls_info {
6767
bool pending_close;
6868
};
6969

70-
struct chcr_ktls_ofld_ctx_tx {
71-
struct tls_offload_context_tx base;
70+
struct chcr_ktls_ctx_tx {
7271
struct chcr_ktls_info *chcr_info;
7372
};
7473

@@ -79,14 +78,33 @@ struct chcr_ktls_uld_ctx {
7978
bool detach;
8079
};
8180

82-
static inline struct chcr_ktls_ofld_ctx_tx *
83-
chcr_get_ktls_tx_context(struct tls_context *tls_ctx)
81+
static inline struct chcr_ktls_info *
82+
__chcr_get_ktls_tx_info(struct tls_offload_context_tx *octx)
8483
{
85-
BUILD_BUG_ON(sizeof(struct chcr_ktls_ofld_ctx_tx) >
86-
TLS_OFFLOAD_CONTEXT_SIZE_TX);
87-
return container_of(tls_offload_ctx_tx(tls_ctx),
88-
struct chcr_ktls_ofld_ctx_tx,
89-
base);
84+
struct chcr_ktls_ctx_tx *priv_ctx;
85+
86+
BUILD_BUG_ON(sizeof(struct chcr_ktls_ctx_tx) > TLS_DRIVER_STATE_SIZE_TX);
87+
priv_ctx = (struct chcr_ktls_ctx_tx *)octx->driver_state;
88+
return priv_ctx->chcr_info;
89+
}
90+
91+
static inline struct chcr_ktls_info *
92+
chcr_get_ktls_tx_info(struct tls_context *tls_ctx)
93+
{
94+
struct chcr_ktls_ctx_tx *priv_ctx;
95+
96+
BUILD_BUG_ON(sizeof(struct chcr_ktls_ctx_tx) > TLS_DRIVER_STATE_SIZE_TX);
97+
priv_ctx = (struct chcr_ktls_ctx_tx *)__tls_driver_ctx(tls_ctx, TLS_OFFLOAD_CTX_DIR_TX);
98+
return priv_ctx->chcr_info;
99+
}
100+
101+
static inline void
102+
chcr_set_ktls_tx_info(struct tls_context *tls_ctx, struct chcr_ktls_info *chcr_info)
103+
{
104+
struct chcr_ktls_ctx_tx *priv_ctx;
105+
106+
priv_ctx = __tls_driver_ctx(tls_ctx, TLS_OFFLOAD_CTX_DIR_TX);
107+
priv_ctx->chcr_info = chcr_info;
90108
}
91109

92110
static inline int chcr_get_first_rx_qid(struct adapter *adap)

drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static inline bool mlx5e_accel_tx_begin(struct net_device *dev,
125125

126126
#ifdef CONFIG_MLX5_EN_TLS
127127
/* May send WQEs. */
128-
if (mlx5e_ktls_skb_offloaded(skb))
128+
if (tls_is_skb_tx_device_offloaded(skb))
129129
if (unlikely(!mlx5e_ktls_handle_tx_skb(dev, sq, skb,
130130
&state->tls)))
131131
return false;

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ bool mlx5e_ktls_handle_tx_skb(struct net_device *netdev, struct mlx5e_txqsq *sq,
832832
{
833833
struct mlx5e_ktls_offload_context_tx *priv_tx;
834834
struct mlx5e_sq_stats *stats = sq->stats;
835+
struct net_device *tls_netdev;
835836
struct tls_context *tls_ctx;
836837
int datalen;
837838
u32 seq;
@@ -843,7 +844,12 @@ bool mlx5e_ktls_handle_tx_skb(struct net_device *netdev, struct mlx5e_txqsq *sq,
843844
mlx5e_tx_mpwqe_ensure_complete(sq);
844845

845846
tls_ctx = tls_get_ctx(skb->sk);
846-
if (WARN_ON_ONCE(tls_ctx->netdev != netdev))
847+
tls_netdev = rcu_dereference_bh(tls_ctx->netdev);
848+
/* Don't WARN on NULL: if tls_device_down is running in parallel,
849+
* netdev might become NULL, even if tls_is_skb_tx_device_offloaded was
850+
* true. Rather continue processing this packet.
851+
*/
852+
if (WARN_ON_ONCE(tls_netdev && tls_netdev != netdev))
847853
goto err_out;
848854

849855
priv_tx = mlx5e_get_ktls_tx_priv_ctx(tls_ctx);

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_txrx.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,6 @@ mlx5e_ktls_rx_pending_resync_list(struct mlx5e_channel *c, int budget)
4949
return budget && test_bit(MLX5E_SQ_STATE_PENDING_TLS_RX_RESYNC, &c->async_icosq.state);
5050
}
5151

52-
static inline bool mlx5e_ktls_skb_offloaded(struct sk_buff *skb)
53-
{
54-
return skb->sk && tls_is_sk_tx_device_offloaded(skb->sk);
55-
}
56-
5752
static inline void
5853
mlx5e_ktls_handle_tx_wqe(struct mlx5_wqe_ctrl_seg *cseg,
5954
struct mlx5e_accel_tx_tls_state *state)

drivers/net/ethernet/netronome/nfp/nfp_net_common.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ nfp_net_tls_tx(struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,
594594

595595
if (likely(!dp->ktls_tx))
596596
return skb;
597-
if (!skb->sk || !tls_is_sk_tx_device_offloaded(skb->sk))
597+
if (!tls_is_skb_tx_device_offloaded(skb))
598598
return skb;
599599

600600
datalen = skb->len - skb_tcp_all_headers(skb);
@@ -662,7 +662,7 @@ void nfp_net_tls_tx_undo(struct sk_buff *skb, u64 tls_handle)
662662

663663
if (!tls_handle)
664664
return;
665-
if (WARN_ON_ONCE(!skb->sk || !tls_is_sk_tx_device_offloaded(skb->sk)))
665+
if (WARN_ON_ONCE(!tls_is_skb_tx_device_offloaded(skb)))
666666
return;
667667

668668
datalen = skb->len - skb_tcp_all_headers(skb);

0 commit comments

Comments
 (0)