Skip to content

Commit dba4e6d

Browse files
committed
tgupdate: merge t/DO-NOT-MERGE-mptcp-enabled-by-default into t/upstream base
2 parents e01775e + 80378fd commit dba4e6d

File tree

12 files changed

+145
-37
lines changed

12 files changed

+145
-37
lines changed

MAINTAINERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9834,7 +9834,6 @@ F: drivers/input/touchscreen/goodix*
98349834

98359835
GOOGLE ETHERNET DRIVERS
98369836
M: Jeroen de Borst <[email protected]>
9837-
M: Joshua Washington <[email protected]>
98389837
M: Harshitha Ramamurthy <[email protected]>
98399838
98409839
S: Maintained

drivers/net/ethernet/google/gve/gve.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,16 @@ static inline u32 gve_xdp_tx_start_queue_id(struct gve_priv *priv)
11161116
return gve_xdp_tx_queue_id(priv, 0);
11171117
}
11181118

1119+
static inline bool gve_supports_xdp_xmit(struct gve_priv *priv)
1120+
{
1121+
switch (priv->queue_format) {
1122+
case GVE_GQI_QPL_FORMAT:
1123+
return true;
1124+
default:
1125+
return false;
1126+
}
1127+
}
1128+
11191129
/* gqi napi handler defined in gve_main.c */
11201130
int gve_napi_poll(struct napi_struct *napi, int budget);
11211131

drivers/net/ethernet/google/gve/gve_main.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1903,6 +1903,8 @@ static void gve_turndown(struct gve_priv *priv)
19031903
/* Stop tx queues */
19041904
netif_tx_disable(priv->dev);
19051905

1906+
xdp_features_clear_redirect_target(priv->dev);
1907+
19061908
gve_clear_napi_enabled(priv);
19071909
gve_clear_report_stats(priv);
19081910

@@ -1972,6 +1974,9 @@ static void gve_turnup(struct gve_priv *priv)
19721974
napi_schedule(&block->napi);
19731975
}
19741976

1977+
if (priv->num_xdp_queues && gve_supports_xdp_xmit(priv))
1978+
xdp_features_set_redirect_target(priv->dev, false);
1979+
19751980
gve_set_napi_enabled(priv);
19761981
}
19771982

@@ -2246,7 +2251,6 @@ static void gve_set_netdev_xdp_features(struct gve_priv *priv)
22462251
if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
22472252
xdp_features = NETDEV_XDP_ACT_BASIC;
22482253
xdp_features |= NETDEV_XDP_ACT_REDIRECT;
2249-
xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
22502254
xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
22512255
} else {
22522256
xdp_features = 0;

drivers/net/pse-pd/pd692x0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ static int pd692x0_pi_get_pw_limit(struct pse_controller_dev *pcdev,
10471047
if (ret < 0)
10481048
return ret;
10491049

1050-
return pd692x0_pi_get_pw_from_table(buf.data[2], buf.data[3]);
1050+
return pd692x0_pi_get_pw_from_table(buf.data[0], buf.data[1]);
10511051
}
10521052

10531053
static int pd692x0_pi_set_pw_limit(struct pse_controller_dev *pcdev,

include/net/net_namespace.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ static inline int check_net(const struct net *net)
297297
}
298298

299299
void net_drop_ns(void *);
300+
void net_passive_dec(struct net *net);
300301

301302
#else
302303

@@ -326,8 +327,18 @@ static inline int check_net(const struct net *net)
326327
}
327328

328329
#define net_drop_ns NULL
330+
331+
static inline void net_passive_dec(struct net *net)
332+
{
333+
refcount_dec(&net->passive);
334+
}
329335
#endif
330336

337+
static inline void net_passive_inc(struct net *net)
338+
{
339+
refcount_inc(&net->passive);
340+
}
341+
331342
/* Returns true if the netns initialization is completed successfully */
332343
static inline bool net_initialized(const struct net *net)
333344
{

net/core/dev.c

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2071,13 +2071,54 @@ static void __move_netdevice_notifier_net(struct net *src_net,
20712071
__register_netdevice_notifier_net(dst_net, nb, true);
20722072
}
20732073

2074+
static void rtnl_net_dev_lock(struct net_device *dev)
2075+
{
2076+
bool again;
2077+
2078+
do {
2079+
struct net *net;
2080+
2081+
again = false;
2082+
2083+
/* netns might be being dismantled. */
2084+
rcu_read_lock();
2085+
net = dev_net_rcu(dev);
2086+
net_passive_inc(net);
2087+
rcu_read_unlock();
2088+
2089+
rtnl_net_lock(net);
2090+
2091+
#ifdef CONFIG_NET_NS
2092+
/* dev might have been moved to another netns. */
2093+
if (!net_eq(net, rcu_access_pointer(dev->nd_net.net))) {
2094+
rtnl_net_unlock(net);
2095+
net_passive_dec(net);
2096+
again = true;
2097+
}
2098+
#endif
2099+
} while (again);
2100+
}
2101+
2102+
static void rtnl_net_dev_unlock(struct net_device *dev)
2103+
{
2104+
struct net *net = dev_net(dev);
2105+
2106+
rtnl_net_unlock(net);
2107+
net_passive_dec(net);
2108+
}
2109+
20742110
int register_netdevice_notifier_dev_net(struct net_device *dev,
20752111
struct notifier_block *nb,
20762112
struct netdev_net_notifier *nn)
20772113
{
20782114
struct net *net = dev_net(dev);
20792115
int err;
20802116

2117+
/* rtnl_net_lock() assumes dev is not yet published by
2118+
* register_netdevice().
2119+
*/
2120+
DEBUG_NET_WARN_ON_ONCE(!list_empty(&dev->dev_list));
2121+
20812122
rtnl_net_lock(net);
20822123
err = __register_netdevice_notifier_net(net, nb, false);
20832124
if (!err) {
@@ -2094,13 +2135,12 @@ int unregister_netdevice_notifier_dev_net(struct net_device *dev,
20942135
struct notifier_block *nb,
20952136
struct netdev_net_notifier *nn)
20962137
{
2097-
struct net *net = dev_net(dev);
20982138
int err;
20992139

2100-
rtnl_net_lock(net);
2140+
rtnl_net_dev_lock(dev);
21012141
list_del(&nn->list);
2102-
err = __unregister_netdevice_notifier_net(net, nb);
2103-
rtnl_net_unlock(net);
2142+
err = __unregister_netdevice_notifier_net(dev_net(dev), nb);
2143+
rtnl_net_dev_unlock(dev);
21042144

21052145
return err;
21062146
}
@@ -11901,11 +11941,9 @@ EXPORT_SYMBOL(unregister_netdevice_many);
1190111941
*/
1190211942
void unregister_netdev(struct net_device *dev)
1190311943
{
11904-
struct net *net = dev_net(dev);
11905-
11906-
rtnl_net_lock(net);
11944+
rtnl_net_dev_lock(dev);
1190711945
unregister_netdevice(dev);
11908-
rtnl_net_unlock(net);
11946+
rtnl_net_dev_unlock(dev);
1190911947
}
1191011948
EXPORT_SYMBOL(unregister_netdev);
1191111949

net/core/net_namespace.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ static void net_complete_free(void)
464464

465465
}
466466

467-
static void net_free(struct net *net)
467+
void net_passive_dec(struct net *net)
468468
{
469469
if (refcount_dec_and_test(&net->passive)) {
470470
kfree(rcu_access_pointer(net->gen));
@@ -482,7 +482,7 @@ void net_drop_ns(void *p)
482482
struct net *net = (struct net *)p;
483483

484484
if (net)
485-
net_free(net);
485+
net_passive_dec(net);
486486
}
487487

488488
struct net *copy_net_ns(unsigned long flags,
@@ -523,7 +523,7 @@ struct net *copy_net_ns(unsigned long flags,
523523
key_remove_domain(net->key_domain);
524524
#endif
525525
put_user_ns(user_ns);
526-
net_free(net);
526+
net_passive_dec(net);
527527
dec_ucounts:
528528
dec_net_namespaces(ucounts);
529529
return ERR_PTR(rv);
@@ -672,7 +672,7 @@ static void cleanup_net(struct work_struct *work)
672672
key_remove_domain(net->key_domain);
673673
#endif
674674
put_user_ns(net->user_ns);
675-
net_free(net);
675+
net_passive_dec(net);
676676
}
677677
cleanup_net_task = NULL;
678678
}

net/core/sock_map.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,9 @@ static bool sock_map_sk_state_allowed(const struct sock *sk)
541541
return (1 << sk->sk_state) & (TCPF_ESTABLISHED | TCPF_LISTEN);
542542
if (sk_is_stream_unix(sk))
543543
return (1 << sk->sk_state) & TCPF_ESTABLISHED;
544+
if (sk_is_vsock(sk) &&
545+
(sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET))
546+
return (1 << sk->sk_state) & TCPF_ESTABLISHED;
544547
return true;
545548
}
546549

net/ipv4/tcp_input.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,15 @@ static void tcp_measure_rcv_mss(struct sock *sk, const struct sk_buff *skb)
243243
do_div(val, skb->truesize);
244244
tcp_sk(sk)->scaling_ratio = val ? val : 1;
245245

246-
if (old_ratio != tcp_sk(sk)->scaling_ratio)
247-
WRITE_ONCE(tcp_sk(sk)->window_clamp,
248-
tcp_win_from_space(sk, sk->sk_rcvbuf));
246+
if (old_ratio != tcp_sk(sk)->scaling_ratio) {
247+
struct tcp_sock *tp = tcp_sk(sk);
248+
249+
val = tcp_win_from_space(sk, sk->sk_rcvbuf);
250+
tcp_set_window_clamp(sk, val);
251+
252+
if (tp->window_clamp < tp->rcvq_space.space)
253+
tp->rcvq_space.space = tp->window_clamp;
254+
}
249255
}
250256
icsk->icsk_ack.rcv_mss = min_t(unsigned int, len,
251257
tcp_sk(sk)->advmss);

net/vmw_vsock/af_vsock.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,9 @@ static int vsock_read_skb(struct sock *sk, skb_read_actor_t read_actor)
11891189
{
11901190
struct vsock_sock *vsk = vsock_sk(sk);
11911191

1192+
if (WARN_ON_ONCE(!vsk->transport))
1193+
return -ENODEV;
1194+
11921195
return vsk->transport->read_skb(vsk, read_actor);
11931196
}
11941197

0 commit comments

Comments
 (0)