KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
endif
-LINUX_VERSION-5.4 = .165
+LINUX_VERSION-5.4 = .166
LINUX_VERSION-5.10 = .83
-LINUX_KERNEL_HASH-5.4.165 = ba13da6d18476269ce2a608cc1a4d69d61cca79585c07675495e3fbc8f9d2acc
+LINUX_KERNEL_HASH-5.4.166 = d6a5fe54495d5c1cd0d1a3d8bfa052ef6cf12a1703cb8207b8aaac69c267f6af
LINUX_KERNEL_HASH-5.10.83 = ef259a43f33ddb56001283f4f4e50af29b8a48fa066aed7371a90ebf38c29b70
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6322,15 +6322,10 @@ void netif_napi_del(struct napi_struct *
+@@ -6325,15 +6325,10 @@ void netif_napi_del(struct napi_struct *
}
EXPORT_SYMBOL(netif_napi_del);
weight = n->weight;
/* This NAPI_STATE_SCHED test is for avoiding a race
-@@ -6348,7 +6343,7 @@ static int napi_poll(struct napi_struct
+@@ -6351,7 +6346,7 @@ static int napi_poll(struct napi_struct
WARN_ON_ONCE(work > weight);
if (likely(work < weight))
/* Drivers must not modify the NAPI state if they
* consume the entire weight. In such cases this code
-@@ -6357,7 +6352,7 @@ static int napi_poll(struct napi_struct
+@@ -6360,7 +6355,7 @@ static int napi_poll(struct napi_struct
*/
if (unlikely(napi_disable_pending(n))) {
napi_complete(n);
}
if (n->gro_bitmask) {
-@@ -6375,12 +6370,29 @@ static int napi_poll(struct napi_struct
+@@ -6378,12 +6373,29 @@ static int napi_poll(struct napi_struct
if (unlikely(!list_empty(&n->poll_list))) {
pr_warn_once("%s: Budget exhausted after napi rescheduled\n",
n->dev ? n->dev->name : "backlog");
static int __dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
{
const struct net_device_ops *ops = dev->netdev_ops;
-@@ -3885,6 +3907,21 @@ int gro_normal_batch __read_mostly = 8;
+@@ -3888,6 +3910,21 @@ int gro_normal_batch __read_mostly = 8;
static inline void ____napi_schedule(struct softnet_data *sd,
struct napi_struct *napi)
{
list_add_tail(&napi->poll_list, &sd->poll_list);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
}
-@@ -6276,6 +6313,12 @@ void netif_napi_add(struct net_device *d
+@@ -6279,6 +6316,12 @@ void netif_napi_add(struct net_device *d
set_bit(NAPI_STATE_NPSVC, &napi->state);
list_add_rcu(&napi->dev_list, &dev->napi_list);
napi_hash_add(napi);
}
EXPORT_SYMBOL(netif_napi_add);
-@@ -6292,9 +6335,28 @@ void napi_disable(struct napi_struct *n)
+@@ -6295,9 +6338,28 @@ void napi_disable(struct napi_struct *n)
hrtimer_cancel(&n->timer);
clear_bit(NAPI_STATE_DISABLE, &n->state);
static void flush_gro_hash(struct napi_struct *napi)
{
int i;
-@@ -6319,6 +6381,11 @@ void netif_napi_del(struct napi_struct *
+@@ -6322,6 +6384,11 @@ void netif_napi_del(struct napi_struct *
flush_gro_hash(napi);
napi->gro_bitmask = 0;
}
EXPORT_SYMBOL(netif_napi_del);
-@@ -6398,6 +6465,51 @@ static int napi_poll(struct napi_struct
+@@ -6401,6 +6468,51 @@ static int napi_poll(struct napi_struct
return work;
}
* @n: NAPI context
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -3911,8 +3911,9 @@ static inline void ____napi_schedule(str
+@@ -3914,8 +3914,9 @@ static inline void ____napi_schedule(str
if (test_bit(NAPI_STATE_THREADED, &napi->state)) {
/* Paired with smp_mb__before_atomic() in
* wake_up_process() when it's not NULL.
*/
thread = READ_ONCE(napi->thread);
-@@ -6290,6 +6291,49 @@ static void init_gro_hash(struct napi_st
+@@ -6293,6 +6294,49 @@ static void init_gro_hash(struct napi_st
napi->gro_bitmask = 0;
}
enum gro_result {
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -3918,6 +3918,8 @@ static inline void ____napi_schedule(str
+@@ -3921,6 +3921,8 @@ static inline void ____napi_schedule(str
*/
thread = READ_ONCE(napi->thread);
if (thread) {
wake_up_process(thread);
return;
}
-@@ -6078,7 +6080,8 @@ bool napi_complete_done(struct napi_stru
+@@ -6081,7 +6083,8 @@ bool napi_complete_done(struct napi_stru
WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));
/* If STATE_MISSED was set, leave STATE_SCHED set,
* because we will call napi->poll() one more time.
-@@ -6511,16 +6514,25 @@ static int napi_poll(struct napi_struct
+@@ -6514,16 +6517,25 @@ static int napi_poll(struct napi_struct
static int napi_thread_wait(struct napi_struct *napi)
{
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6518,7 +6518,7 @@ static int napi_thread_wait(struct napi_
+@@ -6521,7 +6521,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
/* Testing SCHED_THREADED bit here to make sure the current
* kthread owns this napi and could poll on this napi.
* Testing SCHED bit is not enough because SCHED bit might be
-@@ -6536,6 +6536,7 @@ static int napi_thread_wait(struct napi_
+@@ -6539,6 +6539,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -5435,8 +5435,7 @@ static inline void skb_gro_reset_offset(
+@@ -5475,8 +5475,7 @@ static inline void skb_gro_reset_offset(
NAPI_GRO_CB(skb)->frag0 = NULL;
NAPI_GRO_CB(skb)->frag0_len = 0;
__u16 tc_index; /* traffic control index */
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -5501,6 +5501,9 @@ static enum gro_result dev_gro_receive(s
+@@ -5541,6 +5541,9 @@ static enum gro_result dev_gro_receive(s
int same_flow;
int grow;
if (netif_elide_gro(skb->dev))
goto normal;
-@@ -7303,6 +7306,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -7484,6 +7487,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower);
}
static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info,
-@@ -7353,6 +7398,7 @@ static int __netdev_upper_dev_link(struc
+@@ -7534,6 +7579,7 @@ static int __netdev_upper_dev_link(struc
if (ret)
return ret;
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
ret = notifier_to_errno(ret);
-@@ -7446,6 +7492,7 @@ void netdev_upper_dev_unlink(struct net_
+@@ -7627,6 +7673,7 @@ void netdev_upper_dev_unlink(struct net_
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
-@@ -8176,6 +8223,7 @@ int dev_set_mac_address(struct net_devic
+@@ -8357,6 +8404,7 @@ int dev_set_mac_address(struct net_devic
if (err)
return err;
dev->addr_assign_type = NET_ADDR_SET;