-LINUX_VERSION-5.15 = .63
-LINUX_KERNEL_HASH-5.15.63 = 6dd3cd1e5a629d0002bc6c6ec7e8ea96710104f38664122dd56c83dfd4eb7341
+LINUX_VERSION-5.15 = .64
+LINUX_KERNEL_HASH-5.15.64 = c6a1d38c6fa3798341372d5cf0088ae806ccdc827e31ecbff8988e097ba5de50
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -76,6 +76,10 @@ static bool turbo_mode = true;
+@@ -67,6 +67,10 @@ static bool turbo_mode = true;
module_param(turbo_mode, bool, 0644);
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -1860,7 +1864,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1837,7 +1841,8 @@ static int smsc95xx_rx_fixup(struct usbn
if (dev->net->features & NETIF_F_RXCSUM)
smsc95xx_rx_csum_offload(skb);
skb_trim(skb, skb->len - 4); /* remove fcs */
return 1;
}
-@@ -1878,7 +1883,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1855,7 +1860,8 @@ static int smsc95xx_rx_fixup(struct usbn
if (dev->net->features & NETIF_F_RXCSUM)
smsc95xx_rx_csum_offload(ax_skb);
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -80,6 +80,10 @@ static bool truesize_mode = false;
+@@ -71,6 +71,10 @@ static bool truesize_mode = false;
module_param(truesize_mode, bool, 0644);
MODULE_PARM_DESC(truesize_mode, "Report larger truesize value");
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -932,13 +936,13 @@ static int smsc95xx_reset(struct usbnet
+@@ -915,13 +919,13 @@ static int smsc95xx_reset(struct usbnet
if (!turbo_mode) {
burst_cap = 0;
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -52,6 +52,7 @@
+@@ -50,6 +50,7 @@
#define SUSPEND_SUSPEND3 (0x08)
#define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3)
+#define MAC_ADDR_LEN (6)
- #define SMSC95XX_NR_IRQS (1) /* raise to 12 for GPIOs */
- #define PHY_HWIRQ (SMSC95XX_NR_IRQS - 1)
-@@ -84,6 +85,10 @@ static int packetsize = 2560;
+ struct smsc95xx_priv {
+ u32 mac_cr;
+@@ -75,6 +76,10 @@ static int packetsize = 2560;
module_param(packetsize, int, 0644);
MODULE_PARM_DESC(packetsize, "Override the RX URB packet size");
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -788,6 +793,53 @@ static int smsc95xx_ioctl(struct net_dev
+@@ -771,6 +776,53 @@ static int smsc95xx_ioctl(struct net_dev
return phy_mii_ioctl(netdev->phydev, rq, cmd);
}
static void smsc95xx_init_mac_address(struct usbnet *dev)
{
/* maybe the boot loader passed the MAC address in devicetree */
-@@ -810,6 +862,10 @@ static void smsc95xx_init_mac_address(st
+@@ -793,6 +845,10 @@ static void smsc95xx_init_mac_address(st
}
}
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
-@@ -5833,6 +5833,9 @@ int __init cgroup_init_early(void)
+@@ -5834,6 +5834,9 @@ int __init cgroup_init_early(void)
return 0;
}
/**
* cgroup_init - cgroup initialization
*
-@@ -5871,6 +5874,12 @@ int __init cgroup_init(void)
+@@ -5872,6 +5875,12 @@ int __init cgroup_init(void)
mutex_unlock(&cgroup_mutex);
for_each_subsys(ss, ssid) {
if (ss->early_init) {
struct cgroup_subsys_state *css =
-@@ -6455,6 +6464,10 @@ static int __init cgroup_disable(char *s
+@@ -6456,6 +6465,10 @@ static int __init cgroup_disable(char *s
strcmp(token, ss->legacy_name))
continue;
static_branch_disable(cgroup_subsys_enabled_key[i]);
pr_info("Disabling %s control group subsystem\n",
ss->name);
-@@ -6473,6 +6486,31 @@ static int __init cgroup_disable(char *s
+@@ -6474,6 +6487,31 @@ static int __init cgroup_disable(char *s
}
__setup("cgroup_disable=", cgroup_disable);
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
-@@ -608,13 +608,41 @@ void nf_flow_table_free(struct nf_flowta
+@@ -613,13 +613,41 @@ void nf_flow_table_free(struct nf_flowta
}
EXPORT_SYMBOL_GPL(nf_flow_table_free);
static inline void
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -849,6 +849,7 @@ enum net_device_path_type {
+@@ -863,6 +863,7 @@ enum net_device_path_type {
DEV_PATH_BRIDGE,
DEV_PATH_PPPOE,
DEV_PATH_DSA,
};
struct net_device_path {
-@@ -874,6 +875,12 @@ struct net_device_path {
+@@ -888,6 +889,12 @@ struct net_device_path {
int port;
u16 proto;
} dsa;
}
+EXPORT_SYMBOL_GPL(nf_flow_table_iterate);
- static void nf_flow_offload_work_gc(struct work_struct *work)
+ void nf_flow_table_gc_run(struct nf_flowtable *flow_table)
{
--- /dev/null
+++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
+#endif /* _XT_FLOWOFFLOAD_H */
--- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h
-@@ -275,6 +275,11 @@ void nf_flow_table_free(struct nf_flowta
+@@ -276,6 +276,11 @@ void nf_flow_table_free(struct nf_flowta
void flow_offload_teardown(struct flow_offload *flow);
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -1655,6 +1655,10 @@ enum netdev_priv_flags {
+@@ -1669,6 +1669,10 @@ enum netdev_priv_flags {
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
};
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
#define IFF_EBRIDGE IFF_EBRIDGE
#define IFF_BONDING IFF_BONDING
-@@ -1687,6 +1691,7 @@ enum netdev_priv_flags {
+@@ -1701,6 +1705,7 @@ enum netdev_priv_flags {
#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
#define IFF_TX_SKB_NO_LINEAR IFF_TX_SKB_NO_LINEAR
/* Specifies the type of the struct net_device::ml_priv pointer */
enum netdev_ml_priv_type {
-@@ -1988,6 +1993,7 @@ struct net_device {
+@@ -2002,6 +2007,7 @@ struct net_device {
/* Read-mostly cache-line for fast-path access */
unsigned int flags;
unsigned int priv_flags;
const struct net_device_ops *netdev_ops;
int ifindex;
unsigned short gflags;
-@@ -2048,6 +2054,11 @@ struct net_device {
+@@ -2062,6 +2068,11 @@ struct net_device {
const struct tlsdev_ops *tlsdev_ops;
#endif
const struct header_ops *header_ops;
unsigned char operstate;
-@@ -2122,6 +2133,10 @@ struct net_device {
+@@ -2136,6 +2147,10 @@ struct net_device {
struct mctp_dev __rcu *mctp_ptr;
#endif
#include <linux/crc32.h>
#include <linux/if_vlan.h>
#include <linux/uaccess.h>
-@@ -6864,6 +6865,22 @@ static void rtl_tally_reset(struct r8152
+@@ -6861,6 +6862,22 @@ static void rtl_tally_reset(struct r8152
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
}
static void r8152b_init(struct r8152 *tp)
{
u32 ocp_data;
-@@ -6905,6 +6922,8 @@ static void r8152b_init(struct r8152 *tp
+@@ -6902,6 +6919,8 @@ static void r8152b_init(struct r8152 *tp
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
}
static void r8153_init(struct r8152 *tp)
-@@ -7045,6 +7064,8 @@ static void r8153_init(struct r8152 *tp)
+@@ -7042,6 +7061,8 @@ static void r8153_init(struct r8152 *tp)
tp->coalesce = COALESCE_SLOW;
break;
}
}
static void r8153b_init(struct r8152 *tp)
-@@ -7127,6 +7148,8 @@ static void r8153b_init(struct r8152 *tp
+@@ -7124,6 +7145,8 @@ static void r8153b_init(struct r8152 *tp
rtl_tally_reset(tp);
tp->coalesce = 15000; /* 15 us */
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -3855,6 +3855,8 @@ static __net_initdata struct pernet_oper
+@@ -3857,6 +3857,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void)
{
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -2075,6 +2075,8 @@ struct net_device {
+@@ -2089,6 +2089,8 @@ struct net_device {
struct netdev_hw_addr_list mc;
struct netdev_hw_addr_list dev_addrs;
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -771,6 +771,16 @@ struct xps_map {
+@@ -785,6 +785,16 @@ struct xps_map {
#define XPS_MIN_MAP_ALLOC ((L1_CACHE_ALIGN(offsetof(struct xps_map, queues[1])) \
- sizeof(struct xps_map)) / sizeof(u16))
/*
* This structure holds all XPS maps for device. Maps are indexed by CPU.
*
-@@ -1477,6 +1487,9 @@ struct net_device_ops {
+@@ -1491,6 +1501,9 @@ struct net_device_ops {
const struct sk_buff *skb,
u16 rxq_index,
u32 flow_id);