-LINUX_VERSION-6.1 = .79
-LINUX_KERNEL_HASH-6.1.79 = faa49ca22fb55ed4d5ca2a55e07dd10e4e171cfc3b92568a631453cd2068b39b
+LINUX_VERSION-6.1 = .80
+LINUX_KERNEL_HASH-6.1.80 = 568ecaaebb8b87c7c8246bba67bc83402972bf34f5811651a2d3cd548ff7b671
case IPV6_2292HOPOPTS:
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
-@@ -1003,7 +1003,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
+@@ -1013,7 +1013,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
goto drop;
}
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
-@@ -1426,6 +1426,7 @@ static bool pl011_tx_char(struct uart_am
+@@ -1456,6 +1456,7 @@ static bool pl011_tx_char(struct uart_am
return false; /* unable to transmit character */
pl011_write(c, uap, REG_DR);
}
/*********************************
-@@ -1496,7 +1512,6 @@ static int __init zswap_debugfs_init(voi
+@@ -1498,7 +1514,6 @@ static int __init zswap_debugfs_init(voi
**********************************/
static int __init init_zswap(void)
{
int ret;
zswap_init_started = true;
-@@ -1520,33 +1535,23 @@ static int __init init_zswap(void)
+@@ -1522,33 +1537,23 @@ static int __init init_zswap(void)
if (ret)
goto hp_fail;
}
static int goodix_check_cfg_8(struct goodix_ts_data *ts, const u8 *cfg, int len)
-@@ -1425,6 +1478,11 @@ static void goodix_ts_remove(struct i2c_
+@@ -1426,6 +1479,11 @@ static void goodix_ts_remove(struct i2c_
{
struct goodix_ts_data *ts = i2c_get_clientdata(client);
if (ts->load_cfg_from_disk)
wait_for_completion(&ts->firmware_loading_complete);
}
-@@ -1440,7 +1498,7 @@ static int __maybe_unused goodix_suspend
+@@ -1441,7 +1499,7 @@ static int __maybe_unused goodix_suspend
/* We need gpio pins to suspend/resume */
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
return 0;
}
-@@ -1484,7 +1542,7 @@ static int __maybe_unused goodix_resume(
+@@ -1485,7 +1543,7 @@ static int __maybe_unused goodix_resume(
int error;
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
--- a/drivers/input/touchscreen/goodix.c
+++ b/drivers/input/touchscreen/goodix.c
-@@ -1211,7 +1211,10 @@ static int goodix_configure_dev(struct g
+@@ -1212,7 +1212,10 @@ static int goodix_configure_dev(struct g
return -ENOMEM;
}
--- a/drivers/irqchip/irq-sifive-plic.c
+++ b/drivers/irqchip/irq-sifive-plic.c
-@@ -201,7 +201,9 @@ static struct irq_chip plic_chip = {
+@@ -207,7 +207,9 @@ static struct irq_chip plic_chip = {
.irq_set_affinity = plic_set_affinity,
#endif
.irq_set_type = plic_irq_set_type,
--- a/drivers/irqchip/irq-sifive-plic.c
+++ b/drivers/irqchip/irq-sifive-plic.c
-@@ -187,7 +187,8 @@ static struct irq_chip plic_edge_chip =
+@@ -193,7 +193,8 @@ static struct irq_chip plic_edge_chip =
.irq_set_affinity = plic_set_affinity,
#endif
.irq_set_type = plic_irq_set_type,
};
static struct irq_chip plic_chip = {
-@@ -201,7 +202,8 @@ static struct irq_chip plic_chip = {
+@@ -207,7 +208,8 @@ static struct irq_chip plic_chip = {
.irq_set_affinity = plic_set_affinity,
#endif
.irq_set_type = plic_irq_set_type,
--- a/sound/soc/sunxi/sun4i-spdif.c
+++ b/sound/soc/sunxi/sun4i-spdif.c
-@@ -705,10 +705,14 @@ err_unregister:
+@@ -710,10 +710,14 @@ err_unregister:
static int sun4i_spdif_remove(struct platform_device *pdev)
{
};
static const struct of_device_id sun4i_spdif_of_match[] = {
-@@ -667,17 +662,12 @@ static int sun4i_spdif_probe(struct plat
+@@ -672,17 +667,12 @@ static int sun4i_spdif_probe(struct plat
platform_set_drvdata(pdev, host);
.reg_dac_txdata = SUN8I_SPDIF_TXFIFO,
.val_fctl_ftx = SUN50I_H6_SPDIF_FCTL_FTX,
};
-@@ -586,7 +592,7 @@ static int sun4i_spdif_runtime_suspend(s
+@@ -591,7 +597,7 @@ static int sun4i_spdif_runtime_suspend(s
{
struct sun4i_spdif_dev *host = dev_get_drvdata(dev);
clk_disable_unprepare(host->apb_clk);
return 0;
-@@ -597,12 +603,12 @@ static int sun4i_spdif_runtime_resume(st
+@@ -602,12 +608,12 @@ static int sun4i_spdif_runtime_resume(st
struct sun4i_spdif_dev *host = dev_get_drvdata(dev);
int ret;
return ret;
}
-@@ -650,10 +656,10 @@ static int sun4i_spdif_probe(struct plat
+@@ -655,10 +661,10 @@ static int sun4i_spdif_probe(struct plat
return PTR_ERR(host->apb_clk);
}
mark_page_accessed(page);
}
rss[mm_counter(page)]--;
-@@ -5199,8 +5198,8 @@ static inline void mm_account_fault(stru
+@@ -5219,8 +5218,8 @@ static inline void mm_account_fault(stru
#ifdef CONFIG_LRU_GEN
static void lru_gen_enter_fault(struct vm_area_struct *vma)
{
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
--- /dev/null
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
-@@ -0,0 +1,699 @@
+@@ -0,0 +1,702 @@
+/*
+ * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
+ *
+ break;
+ }
+
++ if (!dst_hold_safe(this_dst))
++ return -ENOENT;
++
+ nf_route(xt_net(par), &other_dst, &fl, false, xt_family(par));
-+ if (!other_dst)
++ if (!other_dst) {
++ dst_release(this_dst);
+ return -ENOENT;
++ }
+
+ nf_default_forward_path(route, this_dst, dir, devs);
+ nf_default_forward_path(route, other_dst, !dir, devs);
+ if (!flow)
+ goto err_flow_alloc;
+
-+ if (flow_offload_route_init(flow, &route) < 0)
-+ goto err_flow_add;
++ flow_offload_route_init(flow, &route);
+
+ if (tcph) {
+ ct->proto.tcp.seen[0].flags |= IP_CT_TCP_FLAG_BE_LIBERAL;
+ xt_flowoffload_check_device(table, devs[0]);
+ xt_flowoffload_check_device(table, devs[1]);
+
-+ dst_release(route.tuple[!dir].dst);
-+
+ return XT_CONTINUE;
+
+err_flow_add:
+ flow_offload_free(flow);
+err_flow_alloc:
++ dst_release(route.tuple[dir].dst);
+ dst_release(route.tuple[!dir].dst);
+err_flow_route:
+ clear_bit(IPS_OFFLOAD_BIT, &ct->status);
#include <net/netfilter/nf_flow_table.h>
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_core.h>
-@@ -381,8 +380,7 @@ flow_offload_lookup(struct nf_flowtable
+@@ -374,8 +373,7 @@ flow_offload_lookup(struct nf_flowtable
}
EXPORT_SYMBOL_GPL(flow_offload_lookup);
void (*iter)(struct nf_flowtable *flowtable,
struct flow_offload *flow, void *data),
void *data)
-@@ -443,6 +441,7 @@ static void nf_flow_offload_gc_step(stru
+@@ -436,6 +434,7 @@ static void nf_flow_offload_gc_step(stru
nf_flow_offload_stats(flow_table, flow);
}
}
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
-@@ -666,6 +666,23 @@ static struct pernet_operations nf_flow_
+@@ -659,6 +659,23 @@ static struct pernet_operations nf_flow_
.exit_batch = nf_flow_table_pernet_exit,
};
static int __init nf_flow_table_module_init(void)
{
int ret;
-@@ -678,8 +695,14 @@ static int __init nf_flow_table_module_i
+@@ -671,8 +688,14 @@ static int __init nf_flow_table_module_i
if (ret)
goto out_offload;
out_offload:
unregister_pernet_subsys(&nf_flow_table_net_ops);
return ret;
-@@ -687,6 +710,7 @@ out_offload:
+@@ -680,6 +703,7 @@ out_offload:
static void __exit nf_flow_table_module_exit(void)
{
}
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
-@@ -475,47 +475,14 @@ static struct nft_expr_type nft_flow_off
+@@ -479,47 +479,14 @@ static struct nft_expr_type nft_flow_off
.owner = THIS_MODULE,
};
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
-@@ -7908,7 +7908,7 @@ static int nft_register_flowtable_net_ho
+@@ -7911,7 +7911,7 @@ static int nft_register_flowtable_net_ho
err = flowtable->data.type->setup(&flowtable->data,
hook->ops.dev,
FLOW_BLOCK_BIND);
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
-@@ -357,6 +357,7 @@ static void nft_flow_offload_eval(const
+@@ -361,6 +361,7 @@ static void nft_flow_offload_eval(const
ct->proto.tcp.seen[1].flags |= IP_CT_TCP_FLAG_BE_LIBERAL;
}
#define RTL8366RB_POWER_SAVE 0x15
#define RTL8366RB_POWER_SAVE_ON BIT(12)
-@@ -849,6 +858,48 @@ static irqreturn_t rtl9000a_handle_inter
+@@ -851,6 +860,48 @@ static irqreturn_t rtl9000a_handle_inter
return IRQ_HANDLED;
}
static struct phy_driver realtek_drvs[] = {
{
PHY_ID_MATCH_EXACT(0x00008201),
-@@ -1001,6 +1052,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1003,6 +1054,7 @@ static struct phy_driver realtek_drvs[]
PHY_ID_MATCH_EXACT(0x001cc849),
.name = "RTL8221B-VB-CG 2.5Gbps PHY",
.get_features = rtl822x_get_features,
.config_aneg = rtl822x_config_aneg,
.read_status = rtl822x_read_status,
.suspend = genphy_suspend,
-@@ -1012,6 +1064,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1014,6 +1066,7 @@ static struct phy_driver realtek_drvs[]
.name = "RTL8221B-VM-CG 2.5Gbps PHY",
.get_features = rtl822x_get_features,
.config_aneg = rtl822x_config_aneg,
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -684,6 +684,25 @@ static int rtl822x_config_aneg(struct ph
+@@ -686,6 +686,25 @@ static int rtl822x_config_aneg(struct ph
return __genphy_config_aneg(phydev, ret);
}
static int rtl822x_read_status(struct phy_device *phydev)
{
int ret;
-@@ -702,11 +721,14 @@ static int rtl822x_read_status(struct ph
+@@ -704,11 +723,14 @@ static int rtl822x_read_status(struct ph
phydev->lp_advertising, lpadv & RTL_LPADV_2500FULL);
}
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -1038,6 +1038,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1040,6 +1040,7 @@ static struct phy_driver realtek_drvs[]
.write_page = rtl821x_write_page,
.read_mmd = rtl822x_read_mmd,
.write_mmd = rtl822x_write_mmd,
}, {
PHY_ID_MATCH_EXACT(0x001cc840),
.name = "RTL8226B_RTL8221B 2.5Gbps PHY",
-@@ -1050,6 +1051,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1052,6 +1053,7 @@ static struct phy_driver realtek_drvs[]
.write_page = rtl821x_write_page,
.read_mmd = rtl822x_read_mmd,
.write_mmd = rtl822x_write_mmd,
}, {
PHY_ID_MATCH_EXACT(0x001cc838),
.name = "RTL8226-CG 2.5Gbps PHY",
-@@ -1060,6 +1062,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1062,6 +1064,7 @@ static struct phy_driver realtek_drvs[]
.resume = rtlgen_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
}, {
PHY_ID_MATCH_EXACT(0x001cc848),
.name = "RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY",
-@@ -1070,6 +1073,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1072,6 +1075,7 @@ static struct phy_driver realtek_drvs[]
.resume = rtlgen_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
}, {
PHY_ID_MATCH_EXACT(0x001cc849),
.name = "RTL8221B-VB-CG 2.5Gbps PHY",
-@@ -1081,6 +1085,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1083,6 +1087,7 @@ static struct phy_driver realtek_drvs[]
.resume = rtlgen_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
}, {
PHY_ID_MATCH_EXACT(0x001cc84a),
.name = "RTL8221B-VM-CG 2.5Gbps PHY",
-@@ -1092,6 +1097,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1094,6 +1099,7 @@ static struct phy_driver realtek_drvs[]
.resume = rtlgen_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -883,6 +883,7 @@ static irqreturn_t rtl9000a_handle_inter
+@@ -885,6 +885,7 @@ static irqreturn_t rtl9000a_handle_inter
static int rtl8221b_config_init(struct phy_device *phydev)
{
u16 option_mode;
switch (phydev->interface) {
case PHY_INTERFACE_MODE_2500BASEX:
-@@ -919,6 +920,13 @@ static int rtl8221b_config_init(struct p
+@@ -921,6 +922,13 @@ static int rtl8221b_config_init(struct p
break;
}
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -735,9 +735,11 @@ static bool rtlgen_supports_2_5gbps(stru
+@@ -737,9 +737,11 @@ static bool rtlgen_supports_2_5gbps(stru
{
int val;
#define RTL9000A_GINMR 0x14
#define RTL9000A_GINMR_LINK_STATUS BIT(4)
-@@ -669,14 +665,11 @@ static int rtl822x_config_aneg(struct ph
+@@ -671,14 +667,11 @@ static int rtl822x_config_aneg(struct ph
int ret = 0;
if (phydev->autoneg == AUTONEG_ENABLE) {
if (ret < 0)
return ret;
}
-@@ -713,12 +706,7 @@ static int rtl822x_read_status(struct ph
+@@ -715,12 +708,7 @@ static int rtl822x_read_status(struct ph
if (lpadv < 0)
return lpadv;
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -706,6 +706,10 @@ static int rtl822x_read_status(struct ph
+@@ -708,6 +708,10 @@ static int rtl822x_read_status(struct ph
if (lpadv < 0)
return lpadv;
#define RTL8366RB_POWER_SAVE 0x15
#define RTL8366RB_POWER_SAVE_ON BIT(12)
-@@ -748,6 +752,25 @@ static int rtl8226_match_phy_device(stru
+@@ -750,6 +754,25 @@ static int rtl8226_match_phy_device(stru
rtlgen_supports_2_5gbps(phydev);
}
static int rtlgen_resume(struct phy_device *phydev)
{
int ret = genphy_resume(phydev);
-@@ -1059,6 +1082,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1061,6 +1084,7 @@ static struct phy_driver realtek_drvs[]
.name = "RTL8226-CG 2.5Gbps PHY",
.get_features = rtl822x_get_features,
.config_aneg = rtl822x_config_aneg,
.read_status = rtl822x_read_status,
.suspend = genphy_suspend,
.resume = rtlgen_resume,
-@@ -1070,6 +1094,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1072,6 +1096,7 @@ static struct phy_driver realtek_drvs[]
.name = "RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY",
.get_features = rtl822x_get_features,
.config_aneg = rtl822x_config_aneg,
.read_status = rtl822x_read_status,
.suspend = genphy_suspend,
.resume = rtlgen_resume,
-@@ -1082,6 +1107,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1084,6 +1109,7 @@ static struct phy_driver realtek_drvs[]
.get_features = rtl822x_get_features,
.config_init = rtl8221b_config_init,
.config_aneg = rtl822x_config_aneg,
.read_status = rtl822x_read_status,
.suspend = genphy_suspend,
.resume = rtlgen_resume,
-@@ -1094,6 +1120,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1096,6 +1122,7 @@ static struct phy_driver realtek_drvs[]
.get_features = rtl822x_get_features,
.config_aneg = rtl822x_config_aneg,
.config_init = rtl8221b_config_init,
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -752,6 +752,38 @@ static int rtl8226_match_phy_device(stru
+@@ -754,6 +754,38 @@ static int rtl8226_match_phy_device(stru
rtlgen_supports_2_5gbps(phydev);
}
static int rtl822x_probe(struct phy_device *phydev)
{
struct device *dev = &phydev->mdio.dev;
-@@ -1102,7 +1134,7 @@ static struct phy_driver realtek_drvs[]
+@@ -1104,7 +1136,7 @@ static struct phy_driver realtek_drvs[]
.write_page = rtl821x_write_page,
.soft_reset = genphy_soft_reset,
}, {
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
-@@ -979,6 +979,51 @@ static int rtl8221b_config_init(struct p
+@@ -981,6 +981,51 @@ static int rtl8221b_config_init(struct p
return 0;
}
static struct phy_driver realtek_drvs[] = {
{
PHY_ID_MATCH_EXACT(0x00008201),
-@@ -1139,6 +1184,8 @@ static struct phy_driver realtek_drvs[]
+@@ -1141,6 +1186,8 @@ static struct phy_driver realtek_drvs[]
.get_features = rtl822x_get_features,
.config_init = rtl8221b_config_init,
.config_aneg = rtl822x_config_aneg,
/**
* ata_build_rw_tf - Build ATA taskfile for given read/write request
* @qc: Metadata associated with the taskfile to build
-@@ -4712,6 +4725,9 @@ void __ata_qc_complete(struct ata_queued
+@@ -4716,6 +4729,9 @@ void __ata_qc_complete(struct ata_queued
link->active_tag = ATA_TAG_POISON;
ap->nr_active_links--;
}
/* clear exclusive status */
if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL &&
-@@ -5434,6 +5450,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -5438,6 +5454,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1;
#endif
ata_sff_port_init(ap);
return ap;
-@@ -5469,6 +5488,12 @@ static void ata_host_release(struct kref
+@@ -5473,6 +5492,12 @@ static void ata_host_release(struct kref
kfree(ap->pmp_link);
kfree(ap->slave_link);
kfree(ap);
host->ports[i] = NULL;
}
-@@ -5871,7 +5896,23 @@ int ata_host_register(struct ata_host *h
+@@ -5875,7 +5900,23 @@ int ata_host_register(struct ata_host *h
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
host->ports[i]->local_port_no = i + 1;
}