endif
LINUX_VERSION-5.4 = .113
-LINUX_VERSION-5.10 = .31
+LINUX_VERSION-5.10 = .32
LINUX_KERNEL_HASH-5.4.113 = 30cde92463c474b75f9eb197654570dd6dbb32ec20695544c5469f292662da47
-LINUX_KERNEL_HASH-5.10.31 = 54eef1a4d29a2582281375e028ac73c2c5d90dfa21500fa8c3b00e529a2b510d
+LINUX_KERNEL_HASH-5.10.32 = 644f8e326e4cb8eac65f0874774c09ccf91cbe0b55eb8438c1e8711d3d07d7ba
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
+module_platform_driver(gpio_export_driver);
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
-@@ -564,7 +564,7 @@ static struct class gpio_class = {
+@@ -572,7 +572,7 @@ static struct class gpio_class = {
*
* Returns zero on success, else an error.
*/
{
struct gpio_chip *chip;
struct gpio_device *gdev;
-@@ -626,6 +626,8 @@ int gpiod_export(struct gpio_desc *desc,
+@@ -634,6 +634,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (chip->names && chip->names[offset])
ioname = chip->names[offset];
dev = device_create_with_groups(&gpio_class, &gdev->dev,
MKDEV(0, 0), data, gpio_groups,
-@@ -647,6 +649,12 @@ err_unlock:
+@@ -655,6 +657,12 @@ err_unlock:
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6752,15 +6752,10 @@ void __netif_napi_del(struct napi_struct
+@@ -6753,15 +6753,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
-@@ -6780,7 +6775,7 @@ static int napi_poll(struct napi_struct
+@@ -6781,7 +6776,7 @@ static int napi_poll(struct napi_struct
n->poll, work, weight);
if (likely(work < weight))
/* Drivers must not modify the NAPI state if they
* consume the entire weight. In such cases this code
-@@ -6789,7 +6784,7 @@ static int napi_poll(struct napi_struct
+@@ -6790,7 +6785,7 @@ static int napi_poll(struct napi_struct
*/
if (unlikely(napi_disable_pending(n))) {
napi_complete(n);
}
if (n->gro_bitmask) {
-@@ -6807,12 +6802,29 @@ static int napi_poll(struct napi_struct
+@@ -6808,12 +6803,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");
list_add_tail(&napi->poll_list, &sd->poll_list);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
}
-@@ -6705,6 +6742,12 @@ void netif_napi_add(struct net_device *d
+@@ -6706,6 +6743,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);
-@@ -6721,9 +6764,28 @@ void napi_disable(struct napi_struct *n)
+@@ -6722,9 +6765,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;
-@@ -6749,6 +6811,11 @@ void __netif_napi_del(struct napi_struct
+@@ -6750,6 +6812,11 @@ void __netif_napi_del(struct napi_struct
flush_gro_hash(napi);
napi->gro_bitmask = 0;
}
EXPORT_SYMBOL(__netif_napi_del);
-@@ -6830,6 +6897,51 @@ static int napi_poll(struct napi_struct
+@@ -6831,6 +6898,51 @@ static int napi_poll(struct napi_struct
return work;
}
* wake_up_process() when it's not NULL.
*/
thread = READ_ONCE(napi->thread);
-@@ -6715,6 +6716,49 @@ static void init_gro_hash(struct napi_st
+@@ -6716,6 +6717,49 @@ static void init_gro_hash(struct napi_st
napi->gro_bitmask = 0;
}
wake_up_process(thread);
return;
}
-@@ -6507,7 +6509,8 @@ bool napi_complete_done(struct napi_stru
+@@ -6508,7 +6510,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.
-@@ -6943,16 +6946,25 @@ static int napi_poll(struct napi_struct
+@@ -6944,16 +6947,25 @@ static int napi_poll(struct napi_struct
static int napi_thread_wait(struct napi_struct *napi)
{
#include <net/net_namespace.h>
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
-@@ -456,6 +457,56 @@ static int ct_cpu_seq_show(struct seq_fi
+@@ -457,6 +458,56 @@ static int ct_cpu_seq_show(struct seq_fi
return 0;
}
static const struct seq_operations ct_cpu_seq_ops = {
.start = ct_cpu_seq_start,
.next = ct_cpu_seq_next,
-@@ -469,8 +520,9 @@ static int nf_conntrack_standalone_init_
+@@ -470,8 +521,9 @@ static int nf_conntrack_standalone_init_
kuid_t root_uid;
kgid_t root_gid;
static bool enable_hooks __read_mostly;
MODULE_PARM_DESC(enable_hooks, "Always enable conntrack hooks");
module_param(enable_hooks, bool, 0000);
-@@ -651,6 +654,7 @@ enum nf_ct_sysctl_index {
+@@ -652,6 +655,7 @@ enum nf_ct_sysctl_index {
NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM,
#endif
__NF_SYSCTL_CT_LAST_SYSCTL,
};
-@@ -977,6 +981,13 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -978,6 +982,13 @@ static struct ctl_table nf_ct_sysctl_tab
.proc_handler = proc_dointvec_jiffies,
},
#endif
__u16 tc_index; /* traffic control index */
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6017,6 +6017,9 @@ static enum gro_result dev_gro_receive(s
+@@ -6018,6 +6018,9 @@ static enum gro_result dev_gro_receive(s
int same_flow;
int grow;
if (netif_elide_gro(skb->dev))
goto normal;
-@@ -7985,6 +7988,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -7986,6 +7989,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,
-@@ -8036,6 +8081,7 @@ static int __netdev_upper_dev_link(struc
+@@ -8037,6 +8082,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);
-@@ -8132,6 +8178,7 @@ static void __netdev_upper_dev_unlink(st
+@@ -8133,6 +8179,7 @@ static void __netdev_upper_dev_unlink(st
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
-@@ -8918,6 +8965,7 @@ int dev_set_mac_address(struct net_devic
+@@ -8919,6 +8966,7 @@ int dev_set_mac_address(struct net_devic
if (err)
return err;
dev->addr_assign_type = NET_ADDR_SET;
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -5405,6 +5405,7 @@ static int mv88e6xxx_register_switch(str
+@@ -5401,6 +5401,7 @@ static int mv88e6xxx_register_switch(str
ds->ops = &mv88e6xxx_switch_ops;
ds->ageing_time_min = chip->info->age_time_coeff;
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
{
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
-@@ -564,7 +564,7 @@ static struct class gpio_class = {
+@@ -572,7 +572,7 @@ static struct class gpio_class = {
*
* Returns zero on success, else an error.
*/
{
struct gpio_chip *chip;
struct gpio_device *gdev;
-@@ -626,6 +626,8 @@ int gpiod_export(struct gpio_desc *desc,
+@@ -634,6 +634,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (chip->names && chip->names[offset])
ioname = chip->names[offset];
dev = device_create_with_groups(&gpio_class, &gdev->dev,
MKDEV(0, 0), data, gpio_groups,
-@@ -647,6 +649,12 @@ err_unlock:
+@@ -655,6 +657,12 @@ err_unlock:
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}
+++ /dev/null
-From 4a4854761c9dedeedbf72c25d1317ab2e7600d4f Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Mon, 8 Mar 2021 23:16:17 +0100
-Subject: [PATCH] mtd: rawnand: mtk: Fix WAITRDY break condition and timeout
-
-This fixes NAND_OP_WAITRDY_INSTR operation in the driver. Without this
-change the driver waits till the system is busy, but we should wait till
-the busy flag is cleared. The readl_poll_timeout() function gets a break
-condition, not a wait condition.
-
-In addition fix the timeout. The timeout_ms is given in ms, but the
-readl_poll_timeout() function takes the timeout in us. Multiple the
-given timeout by 1000 to convert it.
-
-Without this change, the driver does not work at all, it doesn't even
-identify the NAND chip.
-
-Fixes: 5197360f9e09 ("mtd: rawnand: mtk: Convert the driver to exec_op()")
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- drivers/mtd/nand/raw/mtk_nand.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/mtd/nand/raw/mtk_nand.c
-+++ b/drivers/mtd/nand/raw/mtk_nand.c
-@@ -488,8 +488,8 @@ static int mtk_nfc_exec_instr(struct nan
- return 0;
- case NAND_OP_WAITRDY_INSTR:
- return readl_poll_timeout(nfc->regs + NFI_STA, status,
-- status & STA_BUSY, 20,
-- instr->ctx.waitrdy.timeout_ms);
-+ !(status & STA_BUSY), 20,
-+ instr->ctx.waitrdy.timeout_ms * 1000);
- default:
- break;
- }
+module_platform_driver(gpio_export_driver);
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
-@@ -564,7 +564,7 @@ static struct class gpio_class = {
+@@ -572,7 +572,7 @@ static struct class gpio_class = {
*
* Returns zero on success, else an error.
*/
{
struct gpio_chip *chip;
struct gpio_device *gdev;
-@@ -626,6 +626,8 @@ int gpiod_export(struct gpio_desc *desc,
+@@ -634,6 +634,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (chip->names && chip->names[offset])
ioname = chip->names[offset];
dev = device_create_with_groups(&gpio_class, &gdev->dev,
MKDEV(0, 0), data, gpio_groups,
-@@ -647,6 +649,12 @@ err_unlock:
+@@ -655,6 +657,12 @@ err_unlock:
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}