mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-13 08:20:07 +00:00
kernel: bump 6.6 to 6.6.70
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.70
Removed upstreamed:
generic/backport-6.6/902-net-llc-reset-skb-transport_header.patch[1]
generic/pending-6.6/605-netfilter-nft_set_hash-unaligned-atomic-read-on-stru.patch[2]
All other patches automatically rebased.
1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.70&id=0c896816aa193e6459fc947747e5753c06b395b9
2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.70&id=4f49349c1963e507aa37c1ec05178faeb0103959
Build system: x86/64
Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17545
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit efafd7d47f
)
This commit is contained in:
parent
e9d80cdb6c
commit
220860ef4c
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.6 = .69
|
||||
LINUX_KERNEL_HASH-6.6.69 = 9c6305567b75d99514cde6eb9de39973f3d5c857a75bd9dcdfca57041f8d4f34
|
||||
LINUX_VERSION-6.6 = .70
|
||||
LINUX_KERNEL_HASH-6.6.70 = 84d23ee07fb26febbcb6d1295ba15efdc67ac382b4137b2c8853146c10fd2f97
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
|
||||
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -839,7 +839,7 @@ config I2C_MT65XX
|
||||
@@ -841,7 +841,7 @@ config I2C_MT65XX
|
||||
|
||||
config I2C_MT7621
|
||||
tristate "MT7621/MT7628 I2C Controller"
|
||||
|
@ -12,9 +12,9 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/include/linux/spinlock.h
|
||||
+++ b/include/linux/spinlock.h
|
||||
@@ -515,6 +515,10 @@ DEFINE_LOCK_GUARD_1(raw_spinlock_irq, ra
|
||||
raw_spin_lock_irq(_T->lock),
|
||||
raw_spin_unlock_irq(_T->lock))
|
||||
@@ -519,6 +519,10 @@ DEFINE_LOCK_GUARD_1(raw_spinlock_irq, ra
|
||||
|
||||
DEFINE_LOCK_GUARD_1_COND(raw_spinlock_irq, _try, raw_spin_trylock_irq(_T->lock))
|
||||
|
||||
+DEFINE_LOCK_GUARD_1(raw_spinlock_bh, raw_spinlock_t,
|
||||
+ raw_spin_lock_bh(_T->lock),
|
||||
@ -23,9 +23,9 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
DEFINE_LOCK_GUARD_1(raw_spinlock_irqsave, raw_spinlock_t,
|
||||
raw_spin_lock_irqsave(_T->lock, _T->flags),
|
||||
raw_spin_unlock_irqrestore(_T->lock, _T->flags),
|
||||
@@ -528,6 +532,10 @@ DEFINE_LOCK_GUARD_1(spinlock_irq, spinlo
|
||||
spin_lock_irq(_T->lock),
|
||||
spin_unlock_irq(_T->lock))
|
||||
@@ -540,6 +544,10 @@ DEFINE_LOCK_GUARD_1(spinlock_irq, spinlo
|
||||
DEFINE_LOCK_GUARD_1_COND(spinlock_irq, _try,
|
||||
spin_trylock_irq(_T->lock))
|
||||
|
||||
+DEFINE_LOCK_GUARD_1(spinlock_bh, spinlock_t,
|
||||
+ spin_lock_bh(_T->lock),
|
||||
|
@ -28,7 +28,7 @@ We don't agree with upstream revert so undo it.
|
||||
pdev->device == PCI_DEVICE_ID_ASMEDIA_1042_XHCI) {
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -633,8 +633,11 @@ static int xhci_move_dequeue_past_td(str
|
||||
@@ -634,8 +634,11 @@ static int xhci_move_dequeue_past_td(str
|
||||
struct xhci_ring *ep_ring;
|
||||
struct xhci_command *cmd;
|
||||
struct xhci_segment *new_seg;
|
||||
@ -40,7 +40,7 @@ We don't agree with upstream revert so undo it.
|
||||
dma_addr_t addr;
|
||||
u64 hw_dequeue;
|
||||
bool cycle_found = false;
|
||||
@@ -672,7 +675,27 @@ static int xhci_move_dequeue_past_td(str
|
||||
@@ -673,7 +676,27 @@ static int xhci_move_dequeue_past_td(str
|
||||
hw_dequeue = xhci_get_hw_deq(xhci, dev, ep_index, stream_id);
|
||||
new_seg = ep_ring->deq_seg;
|
||||
new_deq = ep_ring->dequeue;
|
||||
|
@ -17583,7 +17583,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
* For devices with more than one control interface, we assume the
|
||||
--- a/sound/usb/quirks.c
|
||||
+++ b/sound/usb/quirks.c
|
||||
@@ -2247,6 +2247,8 @@ static const struct usb_audio_quirk_flag
|
||||
@@ -2249,6 +2249,8 @@ static const struct usb_audio_quirk_flag
|
||||
QUIRK_FLAG_ALIGN_TRANSFER),
|
||||
DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */
|
||||
QUIRK_FLAG_ALIGN_TRANSFER),
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1497,6 +1497,109 @@ command_cleanup:
|
||||
@@ -1498,6 +1498,109 @@ command_cleanup:
|
||||
}
|
||||
|
||||
/*
|
||||
@ -125,7 +125,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
* non-error returns are a promise to giveback() the urb later
|
||||
* we drop ownership so next owner (or urb unlink) can get it
|
||||
*/
|
||||
@@ -5347,6 +5450,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
@@ -5360,6 +5463,7 @@ static const struct hc_driver xhci_hc_dr
|
||||
.endpoint_reset = xhci_endpoint_reset,
|
||||
.check_bandwidth = xhci_check_bandwidth,
|
||||
.reset_bandwidth = xhci_reset_bandwidth,
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -738,9 +738,9 @@ deq_found:
|
||||
@@ -739,9 +739,9 @@ deq_found:
|
||||
}
|
||||
|
||||
if ((ep->ep_state & SET_DEQ_PENDING)) {
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -1586,7 +1586,7 @@ static void xhci_fixup_endpoint(struct u
|
||||
@@ -1587,7 +1587,7 @@ static void xhci_fixup_endpoint(struct u
|
||||
return;
|
||||
}
|
||||
ctrl_ctx->add_flags = xhci_get_endpoint_flag_from_index(ep_index);
|
||||
|
@ -52,7 +52,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base);
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1425,8 +1425,9 @@ struct urb_priv {
|
||||
@@ -1426,8 +1426,9 @@ struct urb_priv {
|
||||
* Each segment table entry is 4*32bits long. 1K seems like an ok size:
|
||||
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
|
||||
* meaning 64 ring segments.
|
||||
|
@ -34,7 +34,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -728,6 +728,15 @@ static int xhci_move_dequeue_past_td(str
|
||||
@@ -729,6 +729,15 @@ static int xhci_move_dequeue_past_td(str
|
||||
} while (!cycle_found || !td_last_trb_found);
|
||||
|
||||
deq_found:
|
||||
@ -52,7 +52,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1663,6 +1663,9 @@ struct xhci_hcd {
|
||||
@@ -1664,6 +1664,9 @@ struct xhci_hcd {
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
||||
|
@ -100,7 +100,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1665,6 +1665,7 @@ struct xhci_hcd {
|
||||
@@ -1666,6 +1666,7 @@ struct xhci_hcd {
|
||||
|
||||
/* Downstream VLI fixes */
|
||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
||||
|
@ -75,7 +75,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -3674,6 +3674,48 @@ static int xhci_align_td(struct xhci_hcd
|
||||
@@ -3714,6 +3714,48 @@ static int xhci_align_td(struct xhci_hcd
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
/* This is very similar to what ehci-q.c qtd_fill() does */
|
||||
int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
struct urb *urb, int slot_id, unsigned int ep_index)
|
||||
@@ -3830,6 +3872,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
||||
@@ -3870,6 +3912,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
||||
}
|
||||
|
||||
check_trb_math(urb, enqd_len);
|
||||
@ -133,7 +133,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
|
||||
start_cycle, start_trb);
|
||||
return 0;
|
||||
@@ -3979,6 +4023,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
|
||||
@@ -4019,6 +4063,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
|
||||
/* Event on completion */
|
||||
field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);
|
||||
|
||||
@ -144,7 +144,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
return 0;
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1666,6 +1666,7 @@ struct xhci_hcd {
|
||||
@@ -1667,6 +1667,7 @@ struct xhci_hcd {
|
||||
/* Downstream VLI fixes */
|
||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
||||
#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(57)
|
||||
|
@ -333,7 +333,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
/* Global Debug LSP MUX Select */
|
||||
#define DWC3_GDBGLSPMUX_ENDBC BIT(15) /* Host only */
|
||||
#define DWC3_GDBGLSPMUX_HOSTSELECT(n) ((n) & 0x3fff)
|
||||
@@ -1062,6 +1065,7 @@ struct dwc3_scratchpad_array {
|
||||
@@ -1066,6 +1069,7 @@ struct dwc3_scratchpad_array {
|
||||
* @tx_max_burst_prd: max periodic ESS transmit burst size
|
||||
* @tx_fifo_resize_max_num: max number of fifos allocated during txfifo resize
|
||||
* @clear_stall_protocol: endpoint number that requires a delayed status phase
|
||||
@ -341,7 +341,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
* @hsphy_interface: "utmi" or "ulpi"
|
||||
* @connected: true when we're connected to a host, false otherwise
|
||||
* @softconnect: true when gadget connect is called, false when disconnect runs
|
||||
@@ -1299,6 +1303,7 @@ struct dwc3 {
|
||||
@@ -1303,6 +1307,7 @@ struct dwc3 {
|
||||
u8 tx_max_burst_prd;
|
||||
u8 tx_fifo_resize_max_num;
|
||||
u8 clear_stall_protocol;
|
||||
|
@ -45,7 +45,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
#define DWC3_GUCTL1_RESUME_OPMODE_HS_HOST BIT(10)
|
||||
|
||||
/* Global Status Register */
|
||||
@@ -1117,10 +1118,12 @@ struct dwc3_scratchpad_array {
|
||||
@@ -1121,10 +1122,12 @@ struct dwc3_scratchpad_array {
|
||||
* generation after resume from suspend.
|
||||
* @ulpi_ext_vbus_drv: Set to confiure the upli chip to drives CPEN pin
|
||||
* VBUS with an external supply.
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
* @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk
|
||||
* @tx_de_emphasis: Tx de-emphasis value
|
||||
* 0 - -6dB de-emphasis
|
||||
@@ -1347,6 +1350,7 @@ struct dwc3 {
|
||||
@@ -1351,6 +1354,7 @@ struct dwc3 {
|
||||
unsigned ulpi_ext_vbus_drv:1;
|
||||
unsigned parkmode_disable_ss_quirk:1;
|
||||
unsigned parkmode_disable_hs_quirk:1;
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -4716,7 +4716,7 @@ void lru_gen_look_around(struct page_vma
|
||||
@@ -4723,7 +4723,7 @@ void lru_gen_look_around(struct page_vma
|
||||
if (!folio)
|
||||
continue;
|
||||
|
||||
|
@ -57,7 +57,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
#define DWC3_GUCTL1_PARKMODE_DISABLE_SS BIT(17)
|
||||
#define DWC3_GUCTL1_PARKMODE_DISABLE_HS BIT(16)
|
||||
#define DWC3_GUCTL1_PARKMODE_DISABLE_FSLS BIT(15)
|
||||
@@ -1118,6 +1120,8 @@ struct dwc3_scratchpad_array {
|
||||
@@ -1122,6 +1124,8 @@ struct dwc3_scratchpad_array {
|
||||
* generation after resume from suspend.
|
||||
* @ulpi_ext_vbus_drv: Set to confiure the upli chip to drives CPEN pin
|
||||
* VBUS with an external supply.
|
||||
@ -66,7 +66,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
* @parkmode_disable_ss_quirk: If set, disable park mode feature for all
|
||||
* Superspeed instances.
|
||||
* @parkmode_disable_hs_quirk: If set, disable park mode feature for all
|
||||
@@ -1348,6 +1352,8 @@ struct dwc3 {
|
||||
@@ -1352,6 +1356,8 @@ struct dwc3 {
|
||||
unsigned dis_tx_ipgap_linecheck_quirk:1;
|
||||
unsigned resume_hs_terminations:1;
|
||||
unsigned ulpi_ext_vbus_drv:1;
|
||||
|
@ -28,7 +28,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -505,6 +505,19 @@ void xhci_ring_ep_doorbell(struct xhci_h
|
||||
@@ -506,6 +506,19 @@ void xhci_ring_ep_doorbell(struct xhci_h
|
||||
|
||||
trace_xhci_ring_ep_doorbell(slot_id, DB_VALUE(ep_index, stream_id));
|
||||
|
||||
|
@ -35,7 +35,7 @@ it on BCM4708 family.
|
||||
/* called during probe() after chip reset completes */
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -161,6 +161,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
@@ -162,6 +162,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ it on BCM4708 family.
|
||||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -480,6 +523,15 @@ static int xhci_run_finished(struct xhci
|
||||
@@ -481,6 +524,15 @@ static int xhci_run_finished(struct xhci
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ it on BCM4708 family.
|
||||
if (xhci->quirks & XHCI_NEC_HOST)
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1661,6 +1661,7 @@ struct xhci_hcd {
|
||||
@@ -1662,6 +1662,7 @@ struct xhci_hcd {
|
||||
#define XHCI_WRITE_64_HI_LO BIT_ULL(47)
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
@ -32,7 +32,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4481,13 +4481,7 @@ static inline void ____napi_schedule(str
|
||||
@@ -4483,13 +4483,7 @@ static inline void ____napi_schedule(str
|
||||
*/
|
||||
thread = READ_ONCE(napi->thread);
|
||||
if (thread) {
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
wake_up_process(thread);
|
||||
return;
|
||||
}
|
||||
@@ -6643,8 +6637,6 @@ static int napi_poll(struct napi_struct
|
||||
@@ -6645,8 +6639,6 @@ static int napi_poll(struct napi_struct
|
||||
|
||||
static int napi_thread_wait(struct napi_struct *napi)
|
||||
{
|
||||
@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
while (!kthread_should_stop()) {
|
||||
@@ -6653,15 +6645,13 @@ static int napi_thread_wait(struct napi_
|
||||
@@ -6655,15 +6647,13 @@ static int napi_thread_wait(struct napi_
|
||||
* Testing SCHED bit is not enough because SCHED bit might be
|
||||
* set by some other busy poll thread or by napi_disable().
|
||||
*/
|
||||
|
@ -108,7 +108,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static inline void rps_lock_irqsave(struct softnet_data *sd,
|
||||
unsigned long *flags)
|
||||
{
|
||||
@@ -4449,6 +4475,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
||||
@@ -4451,6 +4477,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
||||
/*************************************************************************
|
||||
* Receiver routines
|
||||
*************************************************************************/
|
||||
@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
int netdev_max_backlog __read_mostly = 1000;
|
||||
EXPORT_SYMBOL(netdev_max_backlog);
|
||||
@@ -4481,12 +4508,16 @@ static inline void ____napi_schedule(str
|
||||
@@ -4483,12 +4510,16 @@ static inline void ____napi_schedule(str
|
||||
*/
|
||||
thread = READ_ONCE(napi->thread);
|
||||
if (thread) {
|
||||
@ -133,7 +133,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
list_add_tail(&napi->poll_list, &sd->poll_list);
|
||||
WRITE_ONCE(napi->list_owner, smp_processor_id());
|
||||
/* If not called from net_rx_action()
|
||||
@@ -4732,6 +4763,11 @@ static void napi_schedule_rps(struct sof
|
||||
@@ -4734,6 +4765,11 @@ static void napi_schedule_rps(struct sof
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
if (sd != mysd) {
|
||||
@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sd->rps_ipi_next = mysd->rps_ipi_list;
|
||||
mysd->rps_ipi_list = sd;
|
||||
|
||||
@@ -5955,7 +5991,7 @@ static void net_rps_action_and_irq_enabl
|
||||
@@ -5957,7 +5993,7 @@ static void net_rps_action_and_irq_enabl
|
||||
#ifdef CONFIG_RPS
|
||||
struct softnet_data *remsd = sd->rps_ipi_list;
|
||||
|
||||
@ -154,7 +154,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
sd->rps_ipi_list = NULL;
|
||||
|
||||
local_irq_enable();
|
||||
@@ -5970,7 +6006,7 @@ static void net_rps_action_and_irq_enabl
|
||||
@@ -5972,7 +6008,7 @@ static void net_rps_action_and_irq_enabl
|
||||
static bool sd_has_rps_ipi_waiting(struct softnet_data *sd)
|
||||
{
|
||||
#ifdef CONFIG_RPS
|
||||
@ -163,7 +163,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
@@ -6014,7 +6050,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6016,7 +6052,7 @@ static int process_backlog(struct napi_s
|
||||
* We can use a plain write instead of clear_bit(),
|
||||
* and we dont need an smp_mb() memory barrier.
|
||||
*/
|
||||
@ -172,7 +172,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
again = false;
|
||||
} else {
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
@@ -6680,43 +6716,48 @@ static void skb_defer_free_flush(struct
|
||||
@@ -6682,43 +6718,48 @@ static void skb_defer_free_flush(struct
|
||||
}
|
||||
}
|
||||
|
||||
@ -250,7 +250,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11297,7 +11338,7 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11299,7 +11340,7 @@ static int dev_cpu_dead(unsigned int old
|
||||
|
||||
list_del_init(&napi->poll_list);
|
||||
if (napi->poll == process_backlog)
|
||||
@ -259,7 +259,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
else
|
||||
____napi_schedule(sd, napi);
|
||||
}
|
||||
@@ -11305,12 +11346,14 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11307,12 +11348,14 @@ static int dev_cpu_dead(unsigned int old
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
local_irq_enable();
|
||||
|
||||
@ -278,7 +278,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
/* Process offline CPU's input_pkt_queue */
|
||||
while ((skb = __skb_dequeue(&oldsd->process_queue))) {
|
||||
@@ -11573,6 +11616,38 @@ static struct pernet_operations __net_in
|
||||
@@ -11575,6 +11618,38 @@ static struct pernet_operations __net_in
|
||||
*
|
||||
*/
|
||||
|
||||
@ -317,7 +317,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/*
|
||||
* This is called single threaded during boot, so no need
|
||||
* to take the rtnl semaphore.
|
||||
@@ -11623,7 +11698,10 @@ static int __init net_dev_init(void)
|
||||
@@ -11625,7 +11700,10 @@ static int __init net_dev_init(void)
|
||||
init_gro_hash(&sd->backlog);
|
||||
sd->backlog.poll = process_backlog;
|
||||
sd->backlog.weight = weight_p;
|
||||
|
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
spin_unlock_irq(&sd->input_pkt_queue.lock);
|
||||
else if (!IS_ENABLED(CONFIG_PREEMPT_RT))
|
||||
local_irq_enable();
|
||||
@@ -4782,6 +4782,23 @@ static void napi_schedule_rps(struct sof
|
||||
@@ -4784,6 +4784,23 @@ static void napi_schedule_rps(struct sof
|
||||
__napi_schedule_irqoff(&mysd->backlog);
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_RPS) || use_backlog_threads())
|
||||
spin_unlock_irq(&sd->input_pkt_queue.lock);
|
||||
@@ -4787,12 +4787,12 @@ void kick_defer_list_purge(struct softne
|
||||
@@ -4789,12 +4789,12 @@ void kick_defer_list_purge(struct softne
|
||||
unsigned long flags;
|
||||
|
||||
if (use_backlog_threads()) {
|
||||
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
} else if (!cmpxchg(&sd->defer_ipi_scheduled, 0, 1)) {
|
||||
smp_call_function_single_async(cpu, &sd->defer_csd);
|
||||
@@ -4854,7 +4854,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
@@ -4856,7 +4856,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
reason = SKB_DROP_REASON_NOT_SPECIFIED;
|
||||
sd = &per_cpu(softnet_data, cpu);
|
||||
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (!netif_running(skb->dev))
|
||||
goto drop;
|
||||
qlen = skb_queue_len(&sd->input_pkt_queue);
|
||||
@@ -4863,7 +4863,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
@@ -4865,7 +4865,7 @@ static int enqueue_to_backlog(struct sk_
|
||||
enqueue:
|
||||
__skb_queue_tail(&sd->input_pkt_queue, skb);
|
||||
input_queue_tail_incr_save(sd, qtail);
|
||||
@ -100,7 +100,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
return NET_RX_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -4878,7 +4878,7 @@ enqueue:
|
||||
@@ -4880,7 +4880,7 @@ enqueue:
|
||||
|
||||
drop:
|
||||
sd->dropped++;
|
||||
@ -109,7 +109,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
dev_core_stats_rx_dropped_inc(skb->dev);
|
||||
kfree_skb_reason(skb, reason);
|
||||
@@ -5909,7 +5909,7 @@ static void flush_backlog(struct work_st
|
||||
@@ -5911,7 +5911,7 @@ static void flush_backlog(struct work_st
|
||||
local_bh_disable();
|
||||
sd = this_cpu_ptr(&softnet_data);
|
||||
|
||||
@ -118,7 +118,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
__skb_unlink(skb, &sd->input_pkt_queue);
|
||||
@@ -5917,7 +5917,7 @@ static void flush_backlog(struct work_st
|
||||
@@ -5919,7 +5919,7 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -127,7 +127,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
@@ -5935,14 +5935,14 @@ static bool flush_required(int cpu)
|
||||
@@ -5937,14 +5937,14 @@ static bool flush_required(int cpu)
|
||||
struct softnet_data *sd = &per_cpu(softnet_data, cpu);
|
||||
bool do_flush;
|
||||
|
||||
@ -144,7 +144,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
return do_flush;
|
||||
#endif
|
||||
@@ -6057,7 +6057,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6059,7 +6059,7 @@ static int process_backlog(struct napi_s
|
||||
|
||||
}
|
||||
|
||||
@ -153,7 +153,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (skb_queue_empty(&sd->input_pkt_queue)) {
|
||||
/*
|
||||
* Inline a custom version of __napi_complete().
|
||||
@@ -6073,7 +6073,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6075,7 +6075,7 @@ static int process_backlog(struct napi_s
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
&sd->process_queue);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -9759,6 +9759,15 @@ static void netdev_sync_lower_features(s
|
||||
@@ -9761,6 +9761,15 @@ static void netdev_sync_lower_features(s
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static netdev_features_t netdev_fix_features(struct net_device *dev,
|
||||
netdev_features_t features)
|
||||
{
|
||||
@@ -9840,15 +9849,9 @@ static netdev_features_t netdev_fix_feat
|
||||
@@ -9842,15 +9851,9 @@ static netdev_features_t netdev_fix_feat
|
||||
features &= ~NETIF_F_LRO;
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
if ((features & NETIF_F_HW_TLS_RX) && !(features & NETIF_F_RXCSUM)) {
|
||||
@@ -9856,6 +9859,11 @@ static netdev_features_t netdev_fix_feat
|
||||
@@ -9858,6 +9861,11 @@ static netdev_features_t netdev_fix_feat
|
||||
features &= ~NETIF_F_HW_TLS_RX;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10666,6 +10666,8 @@ struct rtnl_link_stats64 *dev_get_stats(
|
||||
@@ -10668,6 +10668,8 @@ struct rtnl_link_stats64 *dev_get_stats(
|
||||
ops->ndo_get_stats64(dev, storage);
|
||||
} else if (ops->ndo_get_stats) {
|
||||
netdev_stats_to_stats64(storage, ops->ndo_get_stats(dev));
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
unsigned char name_assign_type,
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10353,25 +10353,12 @@ err_free_name:
|
||||
@@ -10355,25 +10355,12 @@ err_free_name:
|
||||
}
|
||||
EXPORT_SYMBOL(register_netdevice);
|
||||
|
||||
@ -79,7 +79,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* make sure we BUG if trying to hit standard
|
||||
* register/unregister code path
|
||||
*/
|
||||
@@ -10391,12 +10378,32 @@ int init_dummy_netdev(struct net_device
|
||||
@@ -10393,12 +10380,32 @@ int init_dummy_netdev(struct net_device
|
||||
* because users of this 'device' dont need to change
|
||||
* its refcount.
|
||||
*/
|
||||
@ -113,7 +113,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/**
|
||||
* register_netdev - register a network device
|
||||
* @dev: device to register
|
||||
@@ -10990,6 +10997,19 @@ void free_netdev(struct net_device *dev)
|
||||
@@ -10992,6 +10999,19 @@ void free_netdev(struct net_device *dev)
|
||||
EXPORT_SYMBOL(free_netdev);
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
/**
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -6610,7 +6610,7 @@ static int __napi_poll(struct napi_struc
|
||||
@@ -6612,7 +6612,7 @@ static int __napi_poll(struct napi_struc
|
||||
* accidentally calling ->poll() when NAPI is not scheduled.
|
||||
*/
|
||||
work = 0;
|
||||
|
@ -23,7 +23,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10983,7 +10983,8 @@ void free_netdev(struct net_device *dev)
|
||||
@@ -10985,7 +10985,8 @@ void free_netdev(struct net_device *dev)
|
||||
dev->xdp_bulkq = NULL;
|
||||
|
||||
/* Compatibility with error handling in drivers */
|
||||
|
@ -1,52 +0,0 @@
|
||||
From a024e377efed31ecfb39210bed562932321345b3 Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Pastor <antonio.pastor@gmail.com>
|
||||
Date: Tue, 24 Dec 2024 20:07:20 -0500
|
||||
Subject: [PATCH] net: llc: reset skb->transport_header
|
||||
|
||||
802.2+LLC+SNAP frames received by napi_complete_done with GRO and DSA
|
||||
have skb->transport_header set two bytes short, or pointing 2 bytes
|
||||
before network_header & skb->data. As snap_rcv expects transport_header
|
||||
to point to SNAP header (OID:PID) after LLC processing advances offset
|
||||
over LLC header (llc_rcv & llc_fixup_skb), code doesn't find a match
|
||||
and packet is dropped.
|
||||
|
||||
Between napi_complete_done and snap_rcv, transport_header is not used
|
||||
until __netif_receive_skb_core, where originally it was being reset.
|
||||
Commit fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
|
||||
only does so if not set, on the assumption the value was set correctly
|
||||
by GRO (and also on assumption that "network stacks usually reset the
|
||||
transport header anyway"). Afterwards it is moved forward by
|
||||
llc_fixup_skb.
|
||||
|
||||
Locally generated traffic shows up at __netif_receive_skb_core with no
|
||||
transport_header set and is processed without issue. On a setup with
|
||||
GRO but no DSA, transport_header and network_header are both set to
|
||||
point to skb->data which is also correct.
|
||||
|
||||
As issue is LLC specific, to avoid impacting non-LLC traffic, and to
|
||||
follow up on original assumption made on previous code change,
|
||||
llc_fixup_skb to reset the offset after skb pull. llc_fixup_skb
|
||||
assumes the LLC header is at skb->data, and by definition SNAP header
|
||||
immediately follows.
|
||||
|
||||
Fixes: fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
|
||||
Signed-off-by: Antonio Pastor <antonio.pastor@gmail.com>
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Link: https://patch.msgid.link/20241225010723.2830290-1-antonio.pastor@gmail.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
net/llc/llc_input.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/net/llc/llc_input.c
|
||||
+++ b/net/llc/llc_input.c
|
||||
@@ -124,8 +124,8 @@ static inline int llc_fixup_skb(struct s
|
||||
if (unlikely(!pskb_may_pull(skb, llc_len)))
|
||||
return 0;
|
||||
|
||||
- skb->transport_header += llc_len;
|
||||
skb_pull(skb, llc_len);
|
||||
+ skb_reset_transport_header(skb);
|
||||
if (skb->protocol == htons(ETH_P_802_2)) {
|
||||
__be16 pdulen;
|
||||
s32 data_size;
|
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
|
||||
u32));
|
||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
|
||||
@@ -2239,9 +2256,11 @@ static void __sk_free(struct sock *sk)
|
||||
@@ -2242,9 +2259,11 @@ static void __sk_free(struct sock *sk)
|
||||
if (likely(sk->sk_net_refcnt))
|
||||
sock_inuse_add(sock_net(sk), -1);
|
||||
|
||||
|
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -4140,6 +4140,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -4143,6 +4143,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
|
@ -1,87 +0,0 @@
|
||||
From 113fb8a8d1f27156f58b27ce0fc02af9b3705bf7 Mon Sep 17 00:00:00 2001
|
||||
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
Date: Sun, 22 Dec 2024 11:02:39 +0100
|
||||
Subject: [PATCH] netfilter: nft_set_hash: unaligned atomic read on struct
|
||||
nft_set_ext
|
||||
|
||||
Access to genmask field in struct nft_set_ext results in unaligned
|
||||
atomic read:
|
||||
|
||||
[ 72.130109] Unable to handle kernel paging request at virtual address ffff0000c2bb708c
|
||||
[ 72.131036] Mem abort info:
|
||||
[ 72.131213] ESR = 0x0000000096000021
|
||||
[ 72.131446] EC = 0x25: DABT (current EL), IL = 32 bits
|
||||
[ 72.132209] SET = 0, FnV = 0
|
||||
[ 72.133216] EA = 0, S1PTW = 0
|
||||
[ 72.134080] FSC = 0x21: alignment fault
|
||||
[ 72.135593] Data abort info:
|
||||
[ 72.137194] ISV = 0, ISS = 0x00000021, ISS2 = 0x00000000
|
||||
[ 72.142351] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
|
||||
[ 72.145989] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
|
||||
[ 72.150115] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000237d27000
|
||||
[ 72.154893] [ffff0000c2bb708c] pgd=0000000000000000, p4d=180000023ffff403, pud=180000023f84b403, pmd=180000023f835403,
|
||||
+pte=0068000102bb7707
|
||||
[ 72.163021] Internal error: Oops: 0000000096000021 [#1] SMP
|
||||
[...]
|
||||
[ 72.170041] CPU: 7 UID: 0 PID: 54 Comm: kworker/7:0 Tainted: G E 6.13.0-rc3+ #2
|
||||
[ 72.170509] Tainted: [E]=UNSIGNED_MODULE
|
||||
[ 72.170720] Hardware name: QEMU QEMU Virtual Machine, BIOS edk2-stable202302-for-qemu 03/01/2023
|
||||
[ 72.171192] Workqueue: events_power_efficient nft_rhash_gc [nf_tables]
|
||||
[ 72.171552] pstate: 21400005 (nzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
|
||||
[ 72.171915] pc : nft_rhash_gc+0x200/0x2d8 [nf_tables]
|
||||
[ 72.172166] lr : nft_rhash_gc+0x128/0x2d8 [nf_tables]
|
||||
[ 72.172546] sp : ffff800081f2bce0
|
||||
[ 72.172724] x29: ffff800081f2bd40 x28: ffff0000c2bb708c x27: 0000000000000038
|
||||
[ 72.173078] x26: ffff0000c6780ef0 x25: ffff0000c643df00 x24: ffff0000c6778f78
|
||||
[ 72.173431] x23: 000000000000001a x22: ffff0000c4b1f000 x21: ffff0000c6780f78
|
||||
[ 72.173782] x20: ffff0000c2bb70dc x19: ffff0000c2bb7080 x18: 0000000000000000
|
||||
[ 72.174135] x17: ffff0000c0a4e1c0 x16: 0000000000003000 x15: 0000ac26d173b978
|
||||
[ 72.174485] x14: ffffffffffffffff x13: 0000000000000030 x12: ffff0000c6780ef0
|
||||
[ 72.174841] x11: 0000000000000000 x10: ffff800081f2bcf8 x9 : ffff0000c3000000
|
||||
[ 72.175193] x8 : 00000000000004be x7 : 0000000000000000 x6 : 0000000000000000
|
||||
[ 72.175544] x5 : 0000000000000040 x4 : ffff0000c3000010 x3 : 0000000000000000
|
||||
[ 72.175871] x2 : 0000000000003a98 x1 : ffff0000c2bb708c x0 : 0000000000000004
|
||||
[ 72.176207] Call trace:
|
||||
[ 72.176316] nft_rhash_gc+0x200/0x2d8 [nf_tables] (P)
|
||||
[ 72.176653] process_one_work+0x178/0x3d0
|
||||
[ 72.176831] worker_thread+0x200/0x3f0
|
||||
[ 72.176995] kthread+0xe8/0xf8
|
||||
[ 72.177130] ret_from_fork+0x10/0x20
|
||||
[ 72.177289] Code: 54fff984 d503201f d2800080 91003261 (f820303f)
|
||||
[ 72.177557] ---[ end trace 0000000000000000 ]---
|
||||
|
||||
Align struct nft_set_ext to word size to address this and
|
||||
documentation it.
|
||||
|
||||
pahole reports that this increases the size of elements for rhash and
|
||||
pipapo in 8 bytes on x86_64.
|
||||
|
||||
Fixes: 7ffc7481153b ("netfilter: nft_set_hash: skip duplicated elements pending gc run")
|
||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
---
|
||||
include/net/netfilter/nf_tables.h | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/include/net/netfilter/nf_tables.h
|
||||
+++ b/include/net/netfilter/nf_tables.h
|
||||
@@ -721,15 +721,18 @@ struct nft_set_ext_tmpl {
|
||||
/**
|
||||
* struct nft_set_ext - set extensions
|
||||
*
|
||||
- * @genmask: generation mask
|
||||
+ * @genmask: generation mask, but also flags (see NFT_SET_ELEM_DEAD_BIT)
|
||||
* @offset: offsets of individual extension types
|
||||
* @data: beginning of extension data
|
||||
+ *
|
||||
+ * This structure must be aligned to word size, otherwise atomic bitops
|
||||
+ * on genmask field can cause aligment failure on some archs.
|
||||
*/
|
||||
struct nft_set_ext {
|
||||
u8 genmask;
|
||||
u8 offset[NFT_SET_EXT_NUM];
|
||||
char data[];
|
||||
-};
|
||||
+} __aligned(BITS_PER_LONG / 8);
|
||||
|
||||
static inline void nft_set_ext_prepare(struct nft_set_ext_tmpl *tmpl)
|
||||
{
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define PACKET_FANOUT_LB 1
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -1925,6 +1925,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1911,6 +1911,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
{
|
||||
struct sock *sk;
|
||||
struct sockaddr_pkt *spkt;
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* When we registered the protocol we saved the socket in the data
|
||||
@@ -1932,6 +1933,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1918,6 +1919,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
*/
|
||||
|
||||
sk = pt->af_packet_priv;
|
||||
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* Yank back the headers [hope the device set this
|
||||
@@ -1944,7 +1946,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1930,7 +1932,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
* so that this procedure is noop.
|
||||
*/
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
goto out;
|
||||
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
@@ -2190,12 +2192,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
@@ -2176,12 +2178,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
unsigned int snaplen, res;
|
||||
bool is_drop_n_account = false;
|
||||
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -2322,12 +2324,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
@@ -2308,12 +2310,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -3451,6 +3453,7 @@ static int packet_create(struct net *net
|
||||
@@ -3437,6 +3439,7 @@ static int packet_create(struct net *net
|
||||
mutex_init(&po->pg_vec_lock);
|
||||
po->rollover = NULL;
|
||||
po->prot_hook.func = packet_rcv;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sock->type == SOCK_PACKET)
|
||||
po->prot_hook.func = packet_rcv_spkt;
|
||||
@@ -4118,6 +4121,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
@@ -4104,6 +4107,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
packet_sock_flag_set(po, PACKET_SOCK_QDISC_BYPASS, val);
|
||||
return 0;
|
||||
}
|
||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
default:
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
@@ -4177,6 +4190,13 @@ static int packet_getsockopt(struct sock
|
||||
@@ -4163,6 +4176,13 @@ static int packet_getsockopt(struct sock
|
||||
case PACKET_VNET_HDR_SZ:
|
||||
val = READ_ONCE(po->vnet_hdr_sz);
|
||||
break;
|
||||
|
@ -96,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return features;
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -2441,7 +2441,7 @@ void sk_setup_caps(struct sock *sk, stru
|
||||
@@ -2444,7 +2444,7 @@ void sk_setup_caps(struct sock *sk, stru
|
||||
if (sk_is_tcp(sk))
|
||||
sk->sk_route_caps |= NETIF_F_GSO;
|
||||
if (sk->sk_route_caps & NETIF_F_GSO)
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -817,6 +817,16 @@ config I2C_MICROCHIP_CORE
|
||||
@@ -819,6 +819,16 @@ config I2C_MICROCHIP_CORE
|
||||
This driver can also be built as a module. If so, the module will be
|
||||
called i2c-microchip-core.
|
||||
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
--- a/drivers/media/usb/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
||||
@@ -3249,6 +3249,18 @@ static const struct usb_device_id uvc_id
|
||||
@@ -3271,6 +3271,18 @@ static const struct usb_device_id uvc_id
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
||||
|
@ -45,7 +45,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
+};
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -1021,6 +1021,11 @@ config I2C_RK3X
|
||||
@@ -1023,6 +1023,11 @@ config I2C_RK3X
|
||||
This driver can also be built as a module. If so, the module will
|
||||
be called i2c-rk3x.
|
||||
|
||||
|
@ -17,7 +17,7 @@ Submitted-by: Birger Koblitz <git@birger-koblitz.de>
|
||||
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -1021,6 +1021,16 @@ config I2C_RK3X
|
||||
@@ -1023,6 +1023,16 @@ config I2C_RK3X
|
||||
This driver can also be built as a module. If so, the module will
|
||||
be called i2c-rk3x.
|
||||
|
||||
|
@ -71,7 +71,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.h
|
||||
+++ b/drivers/usb/dwc3/core.h
|
||||
@@ -998,6 +998,8 @@ struct dwc3_scratchpad_array {
|
||||
@@ -1002,6 +1002,8 @@ struct dwc3_scratchpad_array {
|
||||
* @bus_clk: clock for accessing the registers
|
||||
* @ref_clk: reference clock
|
||||
* @susp_clk: clock used when the SS phy is in low power (S3) state
|
||||
@ -80,7 +80,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
* @reset: reset control
|
||||
* @regs: base address for our registers
|
||||
* @regs_size: address space size
|
||||
@@ -1170,6 +1172,8 @@ struct dwc3 {
|
||||
@@ -1174,6 +1176,8 @@ struct dwc3 {
|
||||
struct clk *bus_clk;
|
||||
struct clk *ref_clk;
|
||||
struct clk *susp_clk;
|
||||
|
@ -160,7 +160,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
}
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -3667,7 +3667,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
||||
@@ -3707,7 +3707,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
||||
|
||||
full_len = urb->transfer_buffer_length;
|
||||
/* If we have scatter/gather list, we use it. */
|
||||
@ -172,7 +172,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
addr = (u64) sg_dma_address(sg);
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -18,6 +18,8 @@
|
||||
@@ -19,6 +19,8 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
@ -181,7 +181,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
@@ -1285,6 +1287,55 @@ static void xhci_unmap_temp_buf(struct u
|
||||
@@ -1286,6 +1288,55 @@ static void xhci_unmap_temp_buf(struct u
|
||||
urb->transfer_buffer = NULL;
|
||||
}
|
||||
|
||||
@ -237,7 +237,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
/*
|
||||
* Bypass the DMA mapping if URB is suitable for Immediate Transfer (IDT),
|
||||
* we'll copy the actual data into the TRB address register. This is limited to
|
||||
@@ -1305,9 +1356,11 @@ static int xhci_map_urb_for_dma(struct u
|
||||
@@ -1306,9 +1357,11 @@ static int xhci_map_urb_for_dma(struct u
|
||||
if (xhci_urb_temp_buffer_required(hcd, urb))
|
||||
return xhci_map_temp_buffer(hcd, urb);
|
||||
}
|
||||
@ -249,7 +249,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
static void xhci_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
|
||||
{
|
||||
struct xhci_hcd *xhci;
|
||||
@@ -1320,8 +1373,10 @@ static void xhci_unmap_urb_for_dma(struc
|
||||
@@ -1321,8 +1374,10 @@ static void xhci_unmap_urb_for_dma(struc
|
||||
|
||||
if ((xhci->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK) && unmap_temp_buf)
|
||||
xhci_unmap_temp_buf(hcd, urb);
|
||||
@ -263,7 +263,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
/**
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1508,6 +1508,13 @@ struct xhci_hub {
|
||||
@@ -1509,6 +1509,13 @@ struct xhci_hub {
|
||||
u8 min_rev;
|
||||
};
|
||||
|
||||
@ -277,7 +277,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
/* There is one xhci_hcd structure per controller */
|
||||
struct xhci_hcd {
|
||||
struct usb_hcd *main_hcd;
|
||||
@@ -1662,6 +1669,8 @@ struct xhci_hcd {
|
||||
@@ -1663,6 +1670,8 @@ struct xhci_hcd {
|
||||
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
|
||||
#define XHCI_ETRON_HOST BIT_ULL(49)
|
||||
|
||||
@ -286,7 +286,7 @@ Signed-off-by: minda.chen <minda.chen@starfivetech.com>
|
||||
unsigned int num_active_eps;
|
||||
unsigned int limit_active_eps;
|
||||
struct xhci_port *hw_ports;
|
||||
@@ -1691,6 +1700,8 @@ struct xhci_hcd {
|
||||
@@ -1692,6 +1701,8 @@ struct xhci_hcd {
|
||||
struct list_head regset_list;
|
||||
|
||||
void *dbc;
|
||||
|
Loading…
Reference in New Issue
Block a user