mirror of https://github.com/torvalds/linux.git
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 <kuba@kernel.org>
This commit is contained in:
commit
4de4454299
|
|
@ -252,6 +252,12 @@ static int iavf_ptp_gettimex64(struct ptp_clock_info *info,
|
|||
return iavf_read_phc_indirect(adapter, ts, sts);
|
||||
}
|
||||
|
||||
static int iavf_ptp_settime64(struct ptp_clock_info *info,
|
||||
const struct timespec64 *ts)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/**
|
||||
* iavf_ptp_cache_phc_time - Cache PHC time for performing timestamp extension
|
||||
* @adapter: private adapter structure
|
||||
|
|
@ -320,6 +326,7 @@ static int iavf_ptp_register_clock(struct iavf_adapter *adapter)
|
|||
KBUILD_MODNAME, dev_name(dev));
|
||||
ptp_info->owner = THIS_MODULE;
|
||||
ptp_info->gettimex64 = iavf_ptp_gettimex64;
|
||||
ptp_info->settime64 = iavf_ptp_settime64;
|
||||
ptp_info->do_aux_work = iavf_ptp_do_aux_work;
|
||||
|
||||
clock = ptp_clock_register(ptp_info, dev);
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ int aqr_firmware_load(struct phy_device *phydev)
|
|||
* assume that, and load a new image.
|
||||
*/
|
||||
ret = aqr_firmware_load_nvmem(phydev);
|
||||
if (!ret)
|
||||
if (ret == -EPROBE_DEFER || !ret)
|
||||
return ret;
|
||||
|
||||
ret = aqr_firmware_load_fs(phydev);
|
||||
|
|
|
|||
|
|
@ -2349,7 +2349,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
|||
int addr_family;
|
||||
__u8 tos, ttl;
|
||||
int ifindex;
|
||||
int err;
|
||||
int err = 0;
|
||||
u32 flags = vxlan->cfg.flags;
|
||||
bool use_cache;
|
||||
bool udp_sum = false;
|
||||
|
|
@ -2454,12 +2454,18 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
|||
|
||||
rcu_read_lock();
|
||||
if (addr_family == AF_INET) {
|
||||
struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock);
|
||||
struct vxlan_sock *sock4;
|
||||
u16 ipcb_flags = 0;
|
||||
struct rtable *rt;
|
||||
__be16 df = 0;
|
||||
__be32 saddr;
|
||||
|
||||
sock4 = rcu_dereference(vxlan->vn4_sock);
|
||||
if (unlikely(!sock4)) {
|
||||
reason = SKB_DROP_REASON_DEV_READY;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
if (!ifindex)
|
||||
ifindex = sock4->sock->sk->sk_bound_dev_if;
|
||||
|
||||
|
|
@ -2534,10 +2540,16 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
|||
ipcb_flags);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else {
|
||||
struct vxlan_sock *sock6 = rcu_dereference(vxlan->vn6_sock);
|
||||
struct vxlan_sock *sock6;
|
||||
struct in6_addr saddr;
|
||||
u16 ip6cb_flags = 0;
|
||||
|
||||
sock6 = rcu_dereference(vxlan->vn6_sock);
|
||||
if (unlikely(!sock6)) {
|
||||
reason = SKB_DROP_REASON_DEV_READY;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
if (!ifindex)
|
||||
ifindex = sock6->sock->sk->sk_bound_dev_if;
|
||||
|
||||
|
|
|
|||
|
|
@ -554,6 +554,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
|
|||
int err;
|
||||
|
||||
skb_queue_head_init(&np->skb_pool);
|
||||
INIT_WORK(&np->refill_wq, refill_skbs_work_handler);
|
||||
|
||||
if (ndev->priv_flags & IFF_DISABLE_NETPOLL) {
|
||||
np_err(np, "%s doesn't support polling, aborting\n",
|
||||
|
|
@ -591,7 +592,6 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
|
|||
|
||||
/* fill up the skb queue */
|
||||
refill_skbs(np);
|
||||
INIT_WORK(&np->refill_wq, refill_skbs_work_handler);
|
||||
|
||||
/* last thing to do is link it to the net device structure */
|
||||
rcu_assign_pointer(ndev->npinfo, npinfo);
|
||||
|
|
|
|||
|
|
@ -1591,7 +1591,6 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
|
|||
|
||||
qdisc_drop_reason(skb, sch, to_free, SKB_DROP_REASON_QDISC_OVERLIMIT);
|
||||
sch->q.qlen--;
|
||||
qdisc_tree_reduce_backlog(sch, 1, len);
|
||||
|
||||
cake_heapify(q, 0);
|
||||
|
||||
|
|
@ -1737,14 +1736,14 @@ static void cake_reconfigure(struct Qdisc *sch);
|
|||
static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
struct sk_buff **to_free)
|
||||
{
|
||||
u32 idx, tin, prev_qlen, prev_backlog, drop_id;
|
||||
struct cake_sched_data *q = qdisc_priv(sch);
|
||||
int len = qdisc_pkt_len(skb);
|
||||
int ret;
|
||||
int len = qdisc_pkt_len(skb), ret;
|
||||
struct sk_buff *ack = NULL;
|
||||
ktime_t now = ktime_get();
|
||||
struct cake_tin_data *b;
|
||||
struct cake_flow *flow;
|
||||
u32 idx, tin;
|
||||
bool same_flow = false;
|
||||
|
||||
/* choose flow to insert into */
|
||||
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,
|
|||
consume_skb(skb);
|
||||
} else {
|
||||
/* not splitting */
|
||||
int ack_pkt_len = 0;
|
||||
|
||||
cobalt_set_enqueue_time(skb, now);
|
||||
get_cobalt_cb(skb)->adjusted_len = cake_overhead(q, skb);
|
||||
flow_queue_add(flow, skb);
|
||||
|
|
@ -1828,13 +1829,13 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|||
if (ack) {
|
||||
b->ack_drops++;
|
||||
sch->qstats.drops++;
|
||||
b->bytes += qdisc_pkt_len(ack);
|
||||
len -= qdisc_pkt_len(ack);
|
||||
ack_pkt_len = qdisc_pkt_len(ack);
|
||||
b->bytes += ack_pkt_len;
|
||||
q->buffer_used += skb->truesize - ack->truesize;
|
||||
if (q->rate_flags & CAKE_FLAG_INGRESS)
|
||||
cake_advance_shaper(q, b, ack, now, true);
|
||||
|
||||
qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(ack));
|
||||
qdisc_tree_reduce_backlog(sch, 1, ack_pkt_len);
|
||||
consume_skb(ack);
|
||||
} else {
|
||||
sch->q.qlen++;
|
||||
|
|
@ -1843,11 +1844,11 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|||
|
||||
/* stats */
|
||||
b->packets++;
|
||||
b->bytes += len;
|
||||
b->backlogs[idx] += len;
|
||||
b->tin_backlog += len;
|
||||
sch->qstats.backlog += len;
|
||||
q->avg_window_bytes += len;
|
||||
b->bytes += len - ack_pkt_len;
|
||||
b->backlogs[idx] += len - ack_pkt_len;
|
||||
b->tin_backlog += len - ack_pkt_len;
|
||||
sch->qstats.backlog += len - ack_pkt_len;
|
||||
q->avg_window_bytes += len - ack_pkt_len;
|
||||
}
|
||||
|
||||
if (q->overflow_timeout)
|
||||
|
|
@ -1922,24 +1923,29 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|||
if (q->buffer_used > q->buffer_max_used)
|
||||
q->buffer_max_used = q->buffer_used;
|
||||
|
||||
if (q->buffer_used > q->buffer_limit) {
|
||||
bool same_flow = false;
|
||||
u32 dropped = 0;
|
||||
u32 drop_id;
|
||||
if (q->buffer_used <= q->buffer_limit)
|
||||
return NET_XMIT_SUCCESS;
|
||||
|
||||
while (q->buffer_used > q->buffer_limit) {
|
||||
dropped++;
|
||||
drop_id = cake_drop(sch, to_free);
|
||||
prev_qlen = sch->q.qlen;
|
||||
prev_backlog = sch->qstats.backlog;
|
||||
|
||||
if ((drop_id >> 16) == tin &&
|
||||
(drop_id & 0xFFFF) == idx)
|
||||
same_flow = true;
|
||||
}
|
||||
b->drop_overlimit += dropped;
|
||||
|
||||
if (same_flow)
|
||||
return NET_XMIT_CN;
|
||||
while (q->buffer_used > q->buffer_limit) {
|
||||
drop_id = cake_drop(sch, to_free);
|
||||
if ((drop_id >> 16) == tin &&
|
||||
(drop_id & 0xFFFF) == idx)
|
||||
same_flow = true;
|
||||
}
|
||||
|
||||
prev_qlen -= sch->q.qlen;
|
||||
prev_backlog -= sch->qstats.backlog;
|
||||
b->drop_overlimit += prev_qlen;
|
||||
|
||||
if (same_flow) {
|
||||
qdisc_tree_reduce_backlog(sch, prev_qlen - 1,
|
||||
prev_backlog - len);
|
||||
return NET_XMIT_CN;
|
||||
}
|
||||
qdisc_tree_reduce_backlog(sch, prev_qlen, prev_backlog);
|
||||
return NET_XMIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ check_connection()
|
|||
local message=${3}
|
||||
RET=0
|
||||
|
||||
sleep 0.25
|
||||
ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
|
||||
check_err $? "ping failed"
|
||||
log_test "${bond_mode}/${xvlan_type}_${xvlan_mode}: ${message}"
|
||||
|
|
|
|||
|
|
@ -1005,5 +1005,33 @@
|
|||
"teardown": [
|
||||
"$TC qdisc del dev $DUMMY clsact"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4366",
|
||||
"name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"cake",
|
||||
"netem"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup":[
|
||||
"$TC qdisc add dev $DUMMY handle 1: root qfq",
|
||||
"$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024",
|
||||
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9",
|
||||
"$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1",
|
||||
"ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
|
||||
"$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms"
|
||||
],
|
||||
"cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
|
||||
"matchPattern": "qdisc qfq 1:",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DUMMY handle 1: root"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue