Skip to content

Commit 4de4454

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge in late fixes in preparation for the net-next PR. Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 9954464 + 108f940 commit 4de4454

File tree

7 files changed

+85
-31
lines changed

7 files changed

+85
-31
lines changed

drivers/net/ethernet/intel/iavf/iavf_ptp.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@ static int iavf_ptp_gettimex64(struct ptp_clock_info *info,
252252
return iavf_read_phc_indirect(adapter, ts, sts);
253253
}
254254

255+
static int iavf_ptp_settime64(struct ptp_clock_info *info,
256+
const struct timespec64 *ts)
257+
{
258+
return -EOPNOTSUPP;
259+
}
260+
255261
/**
256262
* iavf_ptp_cache_phc_time - Cache PHC time for performing timestamp extension
257263
* @adapter: private adapter structure
@@ -320,6 +326,7 @@ static int iavf_ptp_register_clock(struct iavf_adapter *adapter)
320326
KBUILD_MODNAME, dev_name(dev));
321327
ptp_info->owner = THIS_MODULE;
322328
ptp_info->gettimex64 = iavf_ptp_gettimex64;
329+
ptp_info->settime64 = iavf_ptp_settime64;
323330
ptp_info->do_aux_work = iavf_ptp_do_aux_work;
324331

325332
clock = ptp_clock_register(ptp_info, dev);

drivers/net/phy/aquantia/aquantia_firmware.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ int aqr_firmware_load(struct phy_device *phydev)
369369
* assume that, and load a new image.
370370
*/
371371
ret = aqr_firmware_load_nvmem(phydev);
372-
if (!ret)
372+
if (ret == -EPROBE_DEFER || !ret)
373373
return ret;
374374

375375
ret = aqr_firmware_load_fs(phydev);

drivers/net/vxlan/vxlan_core.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2349,7 +2349,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
23492349
int addr_family;
23502350
__u8 tos, ttl;
23512351
int ifindex;
2352-
int err;
2352+
int err = 0;
23532353
u32 flags = vxlan->cfg.flags;
23542354
bool use_cache;
23552355
bool udp_sum = false;
@@ -2454,12 +2454,18 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
24542454

24552455
rcu_read_lock();
24562456
if (addr_family == AF_INET) {
2457-
struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock);
2457+
struct vxlan_sock *sock4;
24582458
u16 ipcb_flags = 0;
24592459
struct rtable *rt;
24602460
__be16 df = 0;
24612461
__be32 saddr;
24622462

2463+
sock4 = rcu_dereference(vxlan->vn4_sock);
2464+
if (unlikely(!sock4)) {
2465+
reason = SKB_DROP_REASON_DEV_READY;
2466+
goto tx_error;
2467+
}
2468+
24632469
if (!ifindex)
24642470
ifindex = sock4->sock->sk->sk_bound_dev_if;
24652471

@@ -2534,10 +2540,16 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
25342540
ipcb_flags);
25352541
#if IS_ENABLED(CONFIG_IPV6)
25362542
} else {
2537-
struct vxlan_sock *sock6 = rcu_dereference(vxlan->vn6_sock);
2543+
struct vxlan_sock *sock6;
25382544
struct in6_addr saddr;
25392545
u16 ip6cb_flags = 0;
25402546

2547+
sock6 = rcu_dereference(vxlan->vn6_sock);
2548+
if (unlikely(!sock6)) {
2549+
reason = SKB_DROP_REASON_DEV_READY;
2550+
goto tx_error;
2551+
}
2552+
25412553
if (!ifindex)
25422554
ifindex = sock6->sock->sk->sk_bound_dev_if;
25432555

net/core/netpoll.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
554554
int err;
555555

556556
skb_queue_head_init(&np->skb_pool);
557+
INIT_WORK(&np->refill_wq, refill_skbs_work_handler);
557558

558559
if (ndev->priv_flags & IFF_DISABLE_NETPOLL) {
559560
np_err(np, "%s doesn't support polling, aborting\n",
@@ -591,7 +592,6 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
591592

592593
/* fill up the skb queue */
593594
refill_skbs(np);
594-
INIT_WORK(&np->refill_wq, refill_skbs_work_handler);
595595

596596
/* last thing to do is link it to the net device structure */
597597
rcu_assign_pointer(ndev->npinfo, npinfo);

net/sched/sch_cake.c

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,7 +1591,6 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
15911591

15921592
qdisc_drop_reason(skb, sch, to_free, SKB_DROP_REASON_QDISC_OVERLIMIT);
15931593
sch->q.qlen--;
1594-
qdisc_tree_reduce_backlog(sch, 1, len);
15951594

15961595
cake_heapify(q, 0);
15971596

@@ -1737,14 +1736,14 @@ static void cake_reconfigure(struct Qdisc *sch);
17371736
static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
17381737
struct sk_buff **to_free)
17391738
{
1739+
u32 idx, tin, prev_qlen, prev_backlog, drop_id;
17401740
struct cake_sched_data *q = qdisc_priv(sch);
1741-
int len = qdisc_pkt_len(skb);
1742-
int ret;
1741+
int len = qdisc_pkt_len(skb), ret;
17431742
struct sk_buff *ack = NULL;
17441743
ktime_t now = ktime_get();
17451744
struct cake_tin_data *b;
17461745
struct cake_flow *flow;
1747-
u32 idx, tin;
1746+
bool same_flow = false;
17481747

17491748
/* choose flow to insert into */
17501749
idx = cake_classify(sch, &b, skb, q->flow_mode, &ret);
@@ -1818,6 +1817,8 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
18181817
consume_skb(skb);
18191818
} else {
18201819
/* not splitting */
1820+
int ack_pkt_len = 0;
1821+
18211822
cobalt_set_enqueue_time(skb, now);
18221823
get_cobalt_cb(skb)->adjusted_len = cake_overhead(q, skb);
18231824
flow_queue_add(flow, skb);
@@ -1828,13 +1829,13 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
18281829
if (ack) {
18291830
b->ack_drops++;
18301831
sch->qstats.drops++;
1831-
b->bytes += qdisc_pkt_len(ack);
1832-
len -= qdisc_pkt_len(ack);
1832+
ack_pkt_len = qdisc_pkt_len(ack);
1833+
b->bytes += ack_pkt_len;
18331834
q->buffer_used += skb->truesize - ack->truesize;
18341835
if (q->rate_flags & CAKE_FLAG_INGRESS)
18351836
cake_advance_shaper(q, b, ack, now, true);
18361837

1837-
qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(ack));
1838+
qdisc_tree_reduce_backlog(sch, 1, ack_pkt_len);
18381839
consume_skb(ack);
18391840
} else {
18401841
sch->q.qlen++;
@@ -1843,11 +1844,11 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
18431844

18441845
/* stats */
18451846
b->packets++;
1846-
b->bytes += len;
1847-
b->backlogs[idx] += len;
1848-
b->tin_backlog += len;
1849-
sch->qstats.backlog += len;
1850-
q->avg_window_bytes += len;
1847+
b->bytes += len - ack_pkt_len;
1848+
b->backlogs[idx] += len - ack_pkt_len;
1849+
b->tin_backlog += len - ack_pkt_len;
1850+
sch->qstats.backlog += len - ack_pkt_len;
1851+
q->avg_window_bytes += len - ack_pkt_len;
18511852
}
18521853

18531854
if (q->overflow_timeout)
@@ -1922,24 +1923,29 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
19221923
if (q->buffer_used > q->buffer_max_used)
19231924
q->buffer_max_used = q->buffer_used;
19241925

1925-
if (q->buffer_used > q->buffer_limit) {
1926-
bool same_flow = false;
1927-
u32 dropped = 0;
1928-
u32 drop_id;
1926+
if (q->buffer_used <= q->buffer_limit)
1927+
return NET_XMIT_SUCCESS;
19291928

1930-
while (q->buffer_used > q->buffer_limit) {
1931-
dropped++;
1932-
drop_id = cake_drop(sch, to_free);
1929+
prev_qlen = sch->q.qlen;
1930+
prev_backlog = sch->qstats.backlog;
19331931

1934-
if ((drop_id >> 16) == tin &&
1935-
(drop_id & 0xFFFF) == idx)
1936-
same_flow = true;
1937-
}
1938-
b->drop_overlimit += dropped;
1932+
while (q->buffer_used > q->buffer_limit) {
1933+
drop_id = cake_drop(sch, to_free);
1934+
if ((drop_id >> 16) == tin &&
1935+
(drop_id & 0xFFFF) == idx)
1936+
same_flow = true;
1937+
}
1938+
1939+
prev_qlen -= sch->q.qlen;
1940+
prev_backlog -= sch->qstats.backlog;
1941+
b->drop_overlimit += prev_qlen;
19391942

1940-
if (same_flow)
1941-
return NET_XMIT_CN;
1943+
if (same_flow) {
1944+
qdisc_tree_reduce_backlog(sch, prev_qlen - 1,
1945+
prev_backlog - len);
1946+
return NET_XMIT_CN;
19421947
}
1948+
qdisc_tree_reduce_backlog(sch, prev_qlen, prev_backlog);
19431949
return NET_XMIT_SUCCESS;
19441950
}
19451951

tools/testing/selftests/drivers/net/bonding/bond_macvlan_ipvlan.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ check_connection()
3030
local message=${3}
3131
RET=0
3232

33+
sleep 0.25
3334
ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
3435
check_err $? "ping failed"
3536
log_test "${bond_mode}/${xvlan_type}_${xvlan_mode}: ${message}"

tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,5 +1005,33 @@
10051005
"teardown": [
10061006
"$TC qdisc del dev $DUMMY clsact"
10071007
]
1008+
},
1009+
{
1010+
"id": "4366",
1011+
"name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping",
1012+
"category": [
1013+
"qdisc",
1014+
"cake",
1015+
"netem"
1016+
],
1017+
"plugins": {
1018+
"requires": "nsPlugin"
1019+
},
1020+
"setup":[
1021+
"$TC qdisc add dev $DUMMY handle 1: root qfq",
1022+
"$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024",
1023+
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9",
1024+
"$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1",
1025+
"ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1026+
"$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms"
1027+
],
1028+
"cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1029+
"expExitCode": "0",
1030+
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
1031+
"matchPattern": "qdisc qfq 1:",
1032+
"matchCount": "1",
1033+
"teardown": [
1034+
"$TC qdisc del dev $DUMMY handle 1: root"
1035+
]
10081036
}
10091037
]

0 commit comments

Comments
 (0)