From: Sasha Levin Date: Tue, 21 Jul 2026 12:01:30 +0000 (-0400) Subject: drop 14 patches based on RC review feedback X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e9f1fc52b8d9ccc7a553f5d2858899e7d35c0fa;p=thirdparty%2Fkernel%2Fstable-queue.git drop 14 patches based on RC review feedback Dropped patches: - "rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`" Queues: 7.1 Reason: maintainer (Gary Guo) drop request -- lint-only fix already worked around by all in-tree 7.1 users; not worth the 8-patch dependency chain Report: https://lore.kernel.org/stable/DK3HV8BJG6G6.1URBMSOVVLT7@garyguo.net/ - "rust: pin-init: internal: remove redundant `pin` filtering" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: turn PhantomPinned error into a warning" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: remove collect_tuple polyfill" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: pin_data: use closure for handling" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: pin_data: add struct to record" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: init: handle code blocks early" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: use marker on drop guard type for pinned fields" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "rust: pin-init: internal: project slots instead of references" [dependency] Queues: 7.1 Reason: depends on dropped patch above (Stable-dep-of: 5423ef9d4db8) - "dt-bindings: vendor-prefixes: add Gira" Queues: 7.1, 6.18, 6.12 Reason: author (Lucas Stach) challenge -- vendor prefix for a board that is not upstream; documentation-only, no in-tree user, not a bug fix Report: https://lore.kernel.org/stable/811630842892a53858bb6c6504d31fa9cca0fd4c.camel@pengutronix.de/ - "net: ethernet: oa_tc6: Interrupt is active low, level triggered." Queues: 7.1, 6.18, 6.12 Reason: author (Selvamani Rajagopal) hold request -- threaded-IRQ rework exposed a race/skb leak; fix series still under review upstream, requeue once it lands Report: https://lore.kernel.org/stable/DM5PR02MB3369AD2C28DE0ADB1A57326A83C32@DM5PR02MB3369.namprd02.prod.outlook.com/ - "scsi: advansys: Drop ISA_DMA_API remnants" Queues: 7.1, 6.18, 6.12, 6.6, 5.15 Reason: author (Arnd Bergmann) drop request -- only a cleanup, not a bugfix Report: https://lore.kernel.org/stable/11842725-e747-4502-953c-996bb8d24da8@app.fastmail.com/ - "scsi: BusLogic: Remove bus_to_virt()" [dependency] Queues: 5.15 Reason: depends on dropped patch above (Stable-dep-of: c7233b3d99db) - "scsi: Add HAS_IOPORT dependencies" [dependency] Queues: 5.15 Reason: depends on dropped patch above (Stable-dep-of: c7233b3d99db) Signed-off-by: Sasha Levin --- diff --git a/queue-5.15/scsi-add-has_ioport-dependencies.patch b/queue-5.15/scsi-add-has_ioport-dependencies.patch deleted file mode 100644 index 2763643314..0000000000 --- a/queue-5.15/scsi-add-has_ioport-dependencies.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 9d692039052888f578de162360a1196fa4cec411 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 12:50:36 +0200 -Subject: scsi: Add HAS_IOPORT dependencies - -From: Niklas Schnelle - -[ Upstream commit b58b2ba351b07f546a8c1fb4eb46303231c24e95 ] - -In a future patch HAS_IOPORT=n will result in inb()/outb() and friends not -being declared. We thus need to add HAS_IOPORT as dependency for those -drivers using them. - -Co-developed-by: Arnd Bergmann -Signed-off-by: Arnd Bergmann -Signed-off-by: Niklas Schnelle -Link: https://lore.kernel.org/r/20230522105049.1467313-32-schnelle@linux.ibm.com -Signed-off-by: Martin K. Petersen -Stable-dep-of: c7233b3d99db ("scsi: advansys: Drop ISA_DMA_API remnants") -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 25 +++++++++++++------------ - drivers/scsi/aic7xxx/Kconfig.aic79xx | 2 +- - drivers/scsi/aic7xxx/Kconfig.aic7xxx | 2 +- - drivers/scsi/aic94xx/Kconfig | 2 +- - drivers/scsi/megaraid/Kconfig.megaraid | 6 +++--- - drivers/scsi/mvsas/Kconfig | 2 +- - drivers/scsi/pcmcia/Kconfig | 6 +++++- - drivers/scsi/qla2xxx/Kconfig | 2 +- - 8 files changed, 26 insertions(+), 21 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 743a72b7421eba..00354c005aeb6b 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -333,7 +333,7 @@ config SGIWD93_SCSI - - config BLK_DEV_3W_XXXX_RAID - tristate "3ware 5/6/7/8xxx ATA-RAID support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - 3ware is the only hardware ATA-Raid product in Linux to date. - This card is 2,4, or 8 channel master mode support only. -@@ -380,7 +380,7 @@ config SCSI_3W_SAS - - config SCSI_ACARD - tristate "ACARD SCSI support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - This driver supports the ACARD SCSI host adapter. - Support Chip -@@ -472,7 +472,7 @@ config SCSI_DPT_I2O - config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI -- depends on ISA || EISA || PCI -+ depends on (ISA || EISA || PCI) && HAS_IOPORT - depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by -@@ -514,7 +514,7 @@ config SCSI_HPTIOP - - config SCSI_BUSLOGIC - tristate "BusLogic SCSI support" -- depends on PCI && SCSI -+ depends on SCSI && PCI && HAS_IOPORT - help - This is support for BusLogic MultiMaster and FlashPoint SCSI Host - Adapters. Consult the SCSI-HOWTO, available from -@@ -529,7 +529,7 @@ config SCSI_BUSLOGIC - - config SCSI_FLASHPOINT - bool "FlashPoint support" -- depends on SCSI_BUSLOGIC && PCI -+ depends on SCSI_BUSLOGIC && PCI && HAS_IOPORT - help - This option allows you to add FlashPoint support to the - BusLogic SCSI driver. The FlashPoint SCCB Manager code is -@@ -643,7 +643,7 @@ config SCSI_SNIC_DEBUG_FS - - config SCSI_DMX3191D - tristate "DMX3191D SCSI support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - select SCSI_SPI_ATTRS - help - This is support for Domex DMX3191D SCSI Host Adapters. -@@ -657,7 +657,7 @@ config SCSI_FDOMAIN - - config SCSI_FDOMAIN_PCI - tristate "Future Domain TMC-3260/AHA-2920A PCI SCSI support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - select SCSI_FDOMAIN - help - This is support for Future Domain's PCI SCSI host adapters (TMC-3260) -@@ -710,7 +710,7 @@ config SCSI_GENERIC_NCR5380 - - config SCSI_IPS - tristate "IBM ServeRAID support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - This is support for the IBM ServeRAID hardware RAID controllers. - See -@@ -770,7 +770,7 @@ config SCSI_IBMVFC_TRACE - - config SCSI_INITIO - tristate "Initio 9100U(W) support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - This is support for the Initio 91XXU(W) SCSI host adapter. Please - read the SCSI-HOWTO, available from -@@ -781,7 +781,7 @@ config SCSI_INITIO - - config SCSI_INIA100 - tristate "Initio INI-A100U2W support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - This is support for the Initio INI-A100U2W SCSI host adapter. - Please read the SCSI-HOWTO, available from -@@ -793,6 +793,7 @@ config SCSI_INIA100 - config SCSI_PPA - tristate "IOMEGA parallel port (ppa - older drives)" - depends on SCSI && PARPORT_PC -+ depends on HAS_IOPORT - help - This driver supports older versions of IOMEGA's parallel port ZIP - drive (a 100 MB removable media device). -@@ -1187,7 +1188,7 @@ config SCSI_SIM710 - - config SCSI_DC395x - tristate "Tekram DC395(U/UW/F) and DC315(U) SCSI support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - select SCSI_SPI_ATTRS - help - This driver supports PCI SCSI host adapters based on the ASIC -@@ -1219,7 +1220,7 @@ config SCSI_AM53C974 - - config SCSI_NSP32 - tristate "Workbit NinjaSCSI-32Bi/UDE support" -- depends on PCI && SCSI && !64BIT -+ depends on PCI && SCSI && !64BIT && HAS_IOPORT - help - This is support for the Workbit NinjaSCSI-32Bi/UDE PCI/Cardbus - SCSI host adapter. Please read the SCSI-HOWTO, available from -diff --git a/drivers/scsi/aic7xxx/Kconfig.aic79xx b/drivers/scsi/aic7xxx/Kconfig.aic79xx -index a47dbd500e9a5a..4bc53eec4c83f7 100644 ---- a/drivers/scsi/aic7xxx/Kconfig.aic79xx -+++ b/drivers/scsi/aic7xxx/Kconfig.aic79xx -@@ -5,7 +5,7 @@ - # - config SCSI_AIC79XX - tristate "Adaptec AIC79xx U320 support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - select SCSI_SPI_ATTRS - help - This driver supports all of Adaptec's Ultra 320 PCI-X -diff --git a/drivers/scsi/aic7xxx/Kconfig.aic7xxx b/drivers/scsi/aic7xxx/Kconfig.aic7xxx -index 0cfd92ce750af5..f0425145a5f4d8 100644 ---- a/drivers/scsi/aic7xxx/Kconfig.aic7xxx -+++ b/drivers/scsi/aic7xxx/Kconfig.aic7xxx -@@ -5,7 +5,7 @@ - # - config SCSI_AIC7XXX - tristate "Adaptec AIC7xxx Fast -> U160 support" -- depends on (PCI || EISA) && SCSI -+ depends on (PCI || EISA) && HAS_IOPORT && SCSI - select SCSI_SPI_ATTRS - help - This driver supports all of Adaptec's Fast through Ultra 160 PCI -diff --git a/drivers/scsi/aic94xx/Kconfig b/drivers/scsi/aic94xx/Kconfig -index 71931c371b1cff..aaa8dadc6e1cd0 100644 ---- a/drivers/scsi/aic94xx/Kconfig -+++ b/drivers/scsi/aic94xx/Kconfig -@@ -8,7 +8,7 @@ - - config SCSI_AIC94XX - tristate "Adaptec AIC94xx SAS/SATA support" -- depends on PCI -+ depends on PCI && HAS_IOPORT - select SCSI_SAS_LIBSAS - select FW_LOADER - help -diff --git a/drivers/scsi/megaraid/Kconfig.megaraid b/drivers/scsi/megaraid/Kconfig.megaraid -index 2adc2afd9f91c9..3f2ce1eb081c4e 100644 ---- a/drivers/scsi/megaraid/Kconfig.megaraid -+++ b/drivers/scsi/megaraid/Kconfig.megaraid -@@ -1,13 +1,13 @@ - # SPDX-License-Identifier: GPL-2.0-only - config MEGARAID_NEWGEN - bool "LSI Logic New Generation RAID Device Drivers" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - LSI Logic RAID Device Drivers - - config MEGARAID_MM - tristate "LSI Logic Management Module (New Driver)" -- depends on PCI && SCSI && MEGARAID_NEWGEN -+ depends on PCI && HAS_IOPORT && SCSI && MEGARAID_NEWGEN - help - Management Module provides ioctl, sysfs support for LSI Logic - RAID controllers. -@@ -67,7 +67,7 @@ config MEGARAID_MAILBOX - - config MEGARAID_LEGACY - tristate "LSI Logic Legacy MegaRAID Driver" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - help - This driver supports the LSI MegaRAID 418, 428, 438, 466, 762, 490 - and 467 SCSI host adapters. This driver also support the all U320 -diff --git a/drivers/scsi/mvsas/Kconfig b/drivers/scsi/mvsas/Kconfig -index 79812b80743b9a..5ac7fd593b17e5 100644 ---- a/drivers/scsi/mvsas/Kconfig -+++ b/drivers/scsi/mvsas/Kconfig -@@ -9,7 +9,7 @@ - - config SCSI_MVSAS - tristate "Marvell 88SE64XX/88SE94XX SAS/SATA support" -- depends on PCI -+ depends on PCI && HAS_IOPORT - select SCSI_SAS_LIBSAS - select FW_LOADER - help -diff --git a/drivers/scsi/pcmcia/Kconfig b/drivers/scsi/pcmcia/Kconfig -index 9696b6b5591f26..449bd85db7bb40 100644 ---- a/drivers/scsi/pcmcia/Kconfig -+++ b/drivers/scsi/pcmcia/Kconfig -@@ -12,6 +12,7 @@ if SCSI_LOWLEVEL_PCMCIA && SCSI && PCMCIA && m - - config PCMCIA_AHA152X - tristate "Adaptec AHA152X PCMCIA support" -+ depends on HAS_IOPORT - select SCSI_SPI_ATTRS - help - Say Y here if you intend to attach this type of PCMCIA SCSI host -@@ -22,6 +23,7 @@ config PCMCIA_AHA152X - - config PCMCIA_FDOMAIN - tristate "Future Domain PCMCIA support" -+ depends on HAS_IOPORT - select SCSI_FDOMAIN - help - Say Y here if you intend to attach this type of PCMCIA SCSI host -@@ -32,7 +34,7 @@ config PCMCIA_FDOMAIN - - config PCMCIA_NINJA_SCSI - tristate "NinjaSCSI-3 / NinjaSCSI-32Bi (16bit) PCMCIA support" -- depends on !64BIT || COMPILE_TEST -+ depends on (!64BIT || COMPILE_TEST) && HAS_IOPORT - help - If you intend to attach this type of PCMCIA SCSI host adapter to - your computer, say Y here and read -@@ -66,6 +68,7 @@ config PCMCIA_NINJA_SCSI - - config PCMCIA_QLOGIC - tristate "Qlogic PCMCIA support" -+ depends on HAS_IOPORT - help - Say Y here if you intend to attach this type of PCMCIA SCSI host - adapter to your computer. -@@ -75,6 +78,7 @@ config PCMCIA_QLOGIC - - config PCMCIA_SYM53C500 - tristate "Symbios 53c500 PCMCIA support" -+ depends on HAS_IOPORT - help - Say Y here if you have a New Media Bus Toaster or other PCMCIA - SCSI adapter based on the Symbios 53c500 controller. -diff --git a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig -index 802c373fd6d92a..a584708d3056f5 100644 ---- a/drivers/scsi/qla2xxx/Kconfig -+++ b/drivers/scsi/qla2xxx/Kconfig -@@ -1,7 +1,7 @@ - # SPDX-License-Identifier: GPL-2.0-only - config SCSI_QLA_FC - tristate "QLogic QLA2XXX Fibre Channel Support" -- depends on PCI && SCSI -+ depends on PCI && HAS_IOPORT && SCSI - depends on SCSI_FC_ATTRS - depends on NVME_FC || !NVME_FC - select FW_LOADER --- -2.53.0 - diff --git a/queue-5.15/scsi-advansys-drop-isa_dma_api-remnants.patch b/queue-5.15/scsi-advansys-drop-isa_dma_api-remnants.patch deleted file mode 100644 index cbccd58e50..0000000000 --- a/queue-5.15/scsi-advansys-drop-isa_dma_api-remnants.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 07e08d5ed66edfe01f469985eb2a0967f8331982 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Apr 2026 17:15:37 +0200 -Subject: scsi: advansys: Drop ISA_DMA_API remnants - -From: Arnd Bergmann - -[ Upstream commit c7233b3d99db9760daf07c4e95daa9675c6c0cba ] - -Support for ISA bus mastering was removed a few years ago, and the VLB -mode does not use the ISA DMA API, so drop the dependency and the header -inclusion. - -Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") -Signed-off-by: Arnd Bergmann -Reviewed-by: Johannes Thumshirn -Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 1 - - drivers/scsi/advansys.c | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 00354c005aeb6b..52a3252b2569be 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -473,7 +473,6 @@ config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI - depends on (ISA || EISA || PCI) && HAS_IOPORT -- depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by - AdvanSys. It is documented in the kernel source in -diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c -index 97be0765cb9bd0..d9d4aec5b89c02 100644 ---- a/drivers/scsi/advansys.c -+++ b/drivers/scsi/advansys.c -@@ -36,7 +36,6 @@ - #include - - #include --#include - - #include - #include --- -2.53.0 - diff --git a/queue-5.15/scsi-buslogic-remove-bus_to_virt.patch b/queue-5.15/scsi-buslogic-remove-bus_to_virt.patch deleted file mode 100644 index 33d4779fbd..0000000000 --- a/queue-5.15/scsi-buslogic-remove-bus_to_virt.patch +++ /dev/null @@ -1,124 +0,0 @@ -From fec5e921ef8867f970d7afa92ce73f7e53a74b6e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 24 Jun 2022 17:52:24 +0200 -Subject: scsi: BusLogic: Remove bus_to_virt() - -From: Arnd Bergmann - -[ Upstream commit 9f7c2232e131b1de2ee4abadfce5d8f010e223c6 ] - -The BusLogic driver is the last remaining driver that relies on the -deprecated bus_to_virt() function, which in turn only works on a few -architectures, and is incompatible with both swiotlb and iommu support. - -Before commit 391e2f25601e ("[SCSI] BusLogic: Port driver to 64-bit."), the -driver had a dependency on x86-32, presumably because of this -problem. However, the change introduced another bug that made it still -impossible to use the driver on any 64-bit machine. - -This was in turn fixed in commit 56f396146af2 ("scsi: BusLogic: Fix 64-bit -system enumeration error for Buslogic"), 8 years later, which shows that -there are not a lot of users. - -Maciej is still using the driver on 32-bit hardware, and Khalid mentioned -that the driver works with the device emulation used in VirtualBox and -VMware. Both of those only emulate it for Windows 2000 and older operating -systems that did not ship with the better LSI logic driver. - -Do a minimum fix that searches through the list of descriptors to find one -that matches the bus address. This is clearly as inefficient as was -indicated in the code comment about the lack of a bus_to_virt() -replacement. A better fix would likely involve changing out the entire -descriptor allocation for a simpler one, but that would be much more -invasive. - -Link: https://lore.kernel.org/r/20220624155226.2889613-2-arnd@kernel.org -Cc: Maciej W. Rozycki -Cc: Matt Wang -Tested-by: Khalid Aziz -Reviewed-by: Robin Murphy -Reviewed-by: Hannes Reinecke -Acked-by: Khalid Aziz -Signed-off-by: Arnd Bergmann -Signed-off-by: Martin K. Petersen -Stable-dep-of: c7233b3d99db ("scsi: advansys: Drop ISA_DMA_API remnants") -Signed-off-by: Sasha Levin ---- - drivers/scsi/BusLogic.c | 35 +++++++++++++++++++++++------------ - drivers/scsi/Kconfig | 2 +- - 2 files changed, 24 insertions(+), 13 deletions(-) - -diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c -index ee90509b5c7603..e52d9a6e94088f 100644 ---- a/drivers/scsi/BusLogic.c -+++ b/drivers/scsi/BusLogic.c -@@ -2517,12 +2517,26 @@ static int blogic_resultcode(struct blogic_adapter *adapter, - return (hoststatus << 16) | tgt_status; - } - -+/* -+ * turn the dma address from an inbox into a ccb pointer -+ * This is rather inefficient. -+ */ -+static struct blogic_ccb * -+blogic_inbox_to_ccb(struct blogic_adapter *adapter, struct blogic_inbox *inbox) -+{ -+ struct blogic_ccb *ccb; -+ -+ for (ccb = adapter->all_ccbs; ccb; ccb = ccb->next_all) -+ if (inbox->ccb == ccb->dma_handle) -+ break; -+ -+ return ccb; -+} - - /* - blogic_scan_inbox scans the Incoming Mailboxes saving any - Incoming Mailbox entries for completion processing. - */ -- - static void blogic_scan_inbox(struct blogic_adapter *adapter) - { - /* -@@ -2542,17 +2556,14 @@ static void blogic_scan_inbox(struct blogic_adapter *adapter) - enum blogic_cmplt_code comp_code; - - while ((comp_code = next_inbox->comp_code) != BLOGIC_INBOX_FREE) { -- /* -- We are only allowed to do this because we limit our -- architectures we run on to machines where bus_to_virt( -- actually works. There *needs* to be a dma_addr_to_virt() -- in the new PCI DMA mapping interface to replace -- bus_to_virt() or else this code is going to become very -- innefficient. -- */ -- struct blogic_ccb *ccb = -- (struct blogic_ccb *) bus_to_virt(next_inbox->ccb); -- if (comp_code != BLOGIC_CMD_NOTFOUND) { -+ struct blogic_ccb *ccb = blogic_inbox_to_ccb(adapter, next_inbox); -+ if (!ccb) { -+ /* -+ * This should never happen, unless the CCB list is -+ * corrupted in memory. -+ */ -+ blogic_warn("Could not find CCB for dma address %x\n", adapter, next_inbox->ccb); -+ } else if (comp_code != BLOGIC_CMD_NOTFOUND) { - if (ccb->status == BLOGIC_CCB_ACTIVE || - ccb->status == BLOGIC_CCB_RESET) { - /* -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 43e6f86e08c33d..743a72b7421eba 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -514,7 +514,7 @@ config SCSI_HPTIOP - - config SCSI_BUSLOGIC - tristate "BusLogic SCSI support" -- depends on PCI && SCSI && VIRT_TO_BUS -+ depends on PCI && SCSI - help - This is support for BusLogic MultiMaster and FlashPoint SCSI Host - Adapters. Consult the SCSI-HOWTO, available from --- -2.53.0 - diff --git a/queue-5.15/series b/queue-5.15/series index 08c8955233..6aea9df204 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -219,9 +219,6 @@ drm-radeon-fix-memory-leak-in-radeon_ring_restore-on.patch driver-core-use-read_once-for-dev-driver-in-dev_has_.patch wifi-rtw88-fix-oob-read-from-firmware-rx-descriptor-.patch kconfig-fix-potential-null-pointer-dereference-in-co.patch -scsi-buslogic-remove-bus_to_virt.patch -scsi-add-has_ioport-dependencies.patch -scsi-advansys-drop-isa_dma_api-remnants.patch wifi-ath9k-fix-oob-access-from-firmware-tx-status-qu.patch arm-dts-am335x-sl50-fix-audio-bitclock-and-frame-mas.patch watchdog-sp5100_tco-use-efch-mmio-for-newer-hygon-fc.patch diff --git a/queue-6.12/dt-bindings-vendor-prefixes-add-gira.patch b/queue-6.12/dt-bindings-vendor-prefixes-add-gira.patch deleted file mode 100644 index 69fa075e6d..0000000000 --- a/queue-6.12/dt-bindings-vendor-prefixes-add-gira.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 9b424330672fac4e57de52df6466bfa1550dd948 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Jun 2026 23:30:47 +0200 -Subject: dt-bindings: vendor-prefixes: add Gira - -From: Lucas Stach - -[ Upstream commit 61a7e4c2c98c08da6bbf8c30c71da57610930ae7 ] - -Add vendor prefix for Gira Giersiepen GmbH & Co. KG -Link: https://www.gira.de/ - -Signed-off-by: Lucas Stach -Reviewed-by: Alexander Dahl -Acked-by: Conor Dooley -Link: https://patch.msgid.link/20260610213047.500701-1-l.stach@pengutronix.de -Signed-off-by: Rob Herring (Arm) -Signed-off-by: Sasha Levin ---- - Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml -index af9a8d43b2479c..35a4bd5eacb890 100644 ---- a/Documentation/devicetree/bindings/vendor-prefixes.yaml -+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml -@@ -573,6 +573,8 @@ patternProperties: - description: Giantec Semiconductor, Inc. - "^giantplus,.*": - description: Giantplus Technology Co., Ltd. -+ "^gira,.*": -+ description: Gira Giersiepen GmbH & Co. KG - "^glinet,.*": - description: GL Intelligence, Inc. - "^globalscale,.*": --- -2.53.0 - diff --git a/queue-6.12/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch b/queue-6.12/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch deleted file mode 100644 index d14e308c88..0000000000 --- a/queue-6.12/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch +++ /dev/null @@ -1,266 +0,0 @@ -From eabfafb9eba33f84658f6e70acd5a15581b222fe Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 Jun 2026 14:55:38 -0700 -Subject: net: ethernet: oa_tc6: Interrupt is active low, level triggered. - -From: Selvamani Rajagopal - -[ Upstream commit b542d13fab0f556660ce5f10179fb3ae66bdb9a4 ] - -According OPEN Alliance 10BASET1x MAC-PHY Serial Interface -specification, interrupt is active low, level triggered. - -Code used edge triggered interrupt which has the risk of losing an -interrupt on instances like when interrupt is disabled. Level -triggered interrupt won't be deasserted unless handler runs and -clear the interrupting conditions. - -Interrupt handler mechanism is changed to threaded irq from -interrupt handler and kernel thread waiting on work queue. -Threaded irq mechanism is best suited for level triggered interrupt -as it disables the interrupt until handler is run in thread level, -while giving us an ability to have interrupt context handler to -signal the threaded irq handler. - -Introduced a logic to disable the device interrupt on error. Error -could be due in data chunk's header and footer or SPI interface itself. -This will avoid having repeated interrupts, in case the driver couldn't -recover from the error condition with the available recovery mechanism. - -Fixes: 2c6ce5354453 ("net: ethernet: oa_tc6: implement mac-phy interrupt") -Signed-off-by: Selvamani Rajagopal -Link: https://patch.msgid.link/20260611-level-trigger-v5-1-4533a9e85ce2@onsemi.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/oa_tc6.c | 126 ++++++++++++++++++++-------------- - 1 file changed, 76 insertions(+), 50 deletions(-) - -diff --git a/drivers/net/ethernet/oa_tc6.c b/drivers/net/ethernet/oa_tc6.c -index 91a906a7918a25..f3ac2875adfb7b 100644 ---- a/drivers/net/ethernet/oa_tc6.c -+++ b/drivers/net/ethernet/oa_tc6.c -@@ -7,6 +7,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -44,6 +45,8 @@ - #define INT_MASK0_LOSS_OF_FRAME_ERR_MASK BIT(4) - #define INT_MASK0_RX_BUFFER_OVERFLOW_ERR_MASK BIT(3) - #define INT_MASK0_TX_PROTOCOL_ERR_MASK BIT(0) -+#define INT_MASK0_ALL_INTERRUPTS (GENMASK(5, 0) | \ -+ GENMASK(12, 7)) - - /* PHY Clause 22 registers base address and mask */ - #define OA_TC6_PHY_STD_REG_ADDR_BASE 0xFF00 -@@ -121,14 +124,13 @@ struct oa_tc6 { - struct sk_buff *ongoing_tx_skb; - struct sk_buff *waiting_tx_skb; - struct sk_buff *rx_skb; -- struct task_struct *spi_thread; -- wait_queue_head_t spi_wq; - u16 tx_skb_offset; - u16 spi_data_tx_buf_offset; - u16 tx_credits; - u8 rx_chunks_available; - bool rx_buf_overflow; - bool int_flag; -+ bool disable_traffic; - }; - - enum oa_tc6_header_type { -@@ -669,6 +671,38 @@ static void oa_tc6_cleanup_ongoing_tx_skb(struct oa_tc6 *tc6) - } - } - -+static void oa_tc6_cleanup_waiting_tx_skb(struct oa_tc6 *tc6) -+{ -+ if (tc6->waiting_tx_skb) { -+ tc6->netdev->stats.tx_dropped++; -+ kfree_skb(tc6->waiting_tx_skb); -+ tc6->waiting_tx_skb = NULL; -+ } -+} -+ -+static void oa_tc6_free_pending_skbs(struct oa_tc6 *tc6) -+{ -+ oa_tc6_cleanup_ongoing_tx_skb(tc6); -+ oa_tc6_cleanup_ongoing_rx_skb(tc6); -+ oa_tc6_cleanup_waiting_tx_skb(tc6); -+} -+ -+/* If the failure is at SPI interface level, masking and clearing -+ * the interrupt of the device won't work. Since SPI interrupt is -+ * disabled, it should stop the repeated interrupts. -+ */ -+static void oa_tc6_disable_traffic(struct oa_tc6 *tc6) -+{ -+ u32 regval = INT_MASK0_ALL_INTERRUPTS; -+ -+ tc6->disable_traffic = true; -+ oa_tc6_free_pending_skbs(tc6); -+ oa_tc6_write_register(tc6, OA_TC6_REG_INT_MASK0, regval); -+ oa_tc6_read_register(tc6, OA_TC6_REG_STATUS0, ®val); -+ oa_tc6_write_register(tc6, OA_TC6_REG_STATUS0, regval); -+ dev_err(&tc6->spi->dev, "Device interrupt disabled to avoid interrupt storm"); -+} -+ - static int oa_tc6_process_extended_status(struct oa_tc6 *tc6) - { - u32 value; -@@ -1105,29 +1139,29 @@ static int oa_tc6_try_spi_transfer(struct oa_tc6 *tc6) - return 0; - } - --static int oa_tc6_spi_thread_handler(void *data) -+static irqreturn_t oa_tc6_macphy_threaded_irq(int irq, void *data) - { - struct oa_tc6 *tc6 = data; -- int ret; -- -- while (likely(!kthread_should_stop())) { -- /* This kthread will be waken up if there is a tx skb or mac-phy -- * interrupt to perform spi transfer with tx chunks. -- */ -- wait_event_interruptible(tc6->spi_wq, tc6->int_flag || -- (tc6->waiting_tx_skb && -- tc6->tx_credits) || -- kthread_should_stop()); -- -- if (kthread_should_stop()) -- break; -+ int ret = 0; - -- ret = oa_tc6_try_spi_transfer(tc6); -- if (ret) -- return ret; -+ /* It is possible that interrupt woke the thread before it is -+ * disabled. Until we come up with good recovery mechanism, -+ * no need to attempt spi transfer, once it fails. Pending skbs -+ * are already freed. -+ */ -+ if (!tc6->disable_traffic) { -+ while (tc6->int_flag || -+ (tc6->waiting_tx_skb && tc6->tx_credits)) { -+ ret = oa_tc6_try_spi_transfer(tc6); -+ if (ret) { -+ disable_irq_nosync(tc6->spi->irq); -+ oa_tc6_disable_traffic(tc6); -+ break; -+ } -+ } - } - -- return 0; -+ return IRQ_HANDLED; - } - - static int oa_tc6_update_buffer_status_from_register(struct oa_tc6 *tc6) -@@ -1161,11 +1195,15 @@ static irqreturn_t oa_tc6_macphy_isr(int irq, void *data) - * the previous rx footer. - * - extended status event not reported in the previous rx footer. - */ -- tc6->int_flag = true; -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -- -- return IRQ_HANDLED; -+ if (tc6->disable_traffic) -+ disable_irq_nosync(tc6->spi->irq); -+ else -+ tc6->int_flag = true; -+ /* Wake IRQ thread to perform spi transfer . In case -+ * disable_traffic is set, threaded irq may run again -+ * one more time. -+ */ -+ return IRQ_WAKE_THREAD; - } - - /** -@@ -1202,7 +1240,7 @@ EXPORT_SYMBOL_GPL(oa_tc6_zero_align_receive_frame_enable); - */ - netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - { -- if (tc6->waiting_tx_skb) { -+ if (tc6->disable_traffic || tc6->waiting_tx_skb) { - netif_stop_queue(tc6->netdev); - return NETDEV_TX_BUSY; - } -@@ -1217,8 +1255,8 @@ netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - tc6->waiting_tx_skb = skb; - spin_unlock_bh(&tc6->tx_skb_lock); - -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -+ /* Wake the threaded IRQ to perform spi transfer. */ -+ irq_wake_thread(tc6->spi->irq, tc6); - - return NETDEV_TX_OK; - } -@@ -1311,24 +1349,15 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - goto phy_exit; - } - -- init_waitqueue_head(&tc6->spi_wq); -- -- tc6->spi_thread = kthread_run(oa_tc6_spi_thread_handler, tc6, -- "oa-tc6-spi-thread"); -- if (IS_ERR(tc6->spi_thread)) { -- dev_err(&tc6->spi->dev, "Failed to create SPI thread\n"); -- goto phy_exit; -- } -- -- sched_set_fifo(tc6->spi_thread); -- -- ret = devm_request_irq(&tc6->spi->dev, tc6->spi->irq, oa_tc6_macphy_isr, -- IRQF_TRIGGER_FALLING, dev_name(&tc6->spi->dev), -- tc6); -+ ret = devm_request_threaded_irq(&tc6->spi->dev, tc6->spi->irq, -+ oa_tc6_macphy_isr, -+ oa_tc6_macphy_threaded_irq, -+ IRQF_TRIGGER_LOW | IRQF_ONESHOT, -+ dev_name(&tc6->spi->dev), tc6); - if (ret) { - dev_err(&tc6->spi->dev, "Failed to request macphy isr %d\n", - ret); -- goto kthread_stop; -+ goto phy_exit; - } - - /* oa_tc6_sw_reset_macphy() function resets and clears the MAC-PHY reset -@@ -1338,12 +1367,10 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - * 7.7 and 9.2.8.8 in the OPEN Alliance specification for more details. - */ - tc6->int_flag = true; -- wake_up_interruptible(&tc6->spi_wq); -+ irq_wake_thread(tc6->spi->irq, tc6); - - return tc6; - --kthread_stop: -- kthread_stop(tc6->spi_thread); - phy_exit: - oa_tc6_phy_exit(tc6); - return NULL; -@@ -1356,11 +1383,10 @@ EXPORT_SYMBOL_GPL(oa_tc6_init); - */ - void oa_tc6_exit(struct oa_tc6 *tc6) - { -+ tc6->disable_traffic = true; -+ disable_irq(tc6->spi->irq); - oa_tc6_phy_exit(tc6); -- kthread_stop(tc6->spi_thread); -- dev_kfree_skb_any(tc6->ongoing_tx_skb); -- dev_kfree_skb_any(tc6->waiting_tx_skb); -- dev_kfree_skb_any(tc6->rx_skb); -+ oa_tc6_free_pending_skbs(tc6); - } - EXPORT_SYMBOL_GPL(oa_tc6_exit); - --- -2.53.0 - diff --git a/queue-6.12/scsi-advansys-drop-isa_dma_api-remnants.patch b/queue-6.12/scsi-advansys-drop-isa_dma_api-remnants.patch deleted file mode 100644 index 09e795301a..0000000000 --- a/queue-6.12/scsi-advansys-drop-isa_dma_api-remnants.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 92820fe5fd817f87e2e3e0b13bf7b988ca68465b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Apr 2026 17:15:37 +0200 -Subject: scsi: advansys: Drop ISA_DMA_API remnants - -From: Arnd Bergmann - -[ Upstream commit c7233b3d99db9760daf07c4e95daa9675c6c0cba ] - -Support for ISA bus mastering was removed a few years ago, and the VLB -mode does not use the ISA DMA API, so drop the dependency and the header -inclusion. - -Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") -Signed-off-by: Arnd Bergmann -Reviewed-by: Johannes Thumshirn -Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 1 - - drivers/scsi/advansys.c | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 37c24ffea65cc0..cdcfbec6033bbe 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -476,7 +476,6 @@ config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI - depends on (ISA || EISA || PCI) && HAS_IOPORT -- depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by - AdvanSys. It is documented in the kernel source in -diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c -index fd4fcb37863dc2..73137430a33de9 100644 ---- a/drivers/scsi/advansys.c -+++ b/drivers/scsi/advansys.c -@@ -36,7 +36,6 @@ - #include - - #include --#include - - #include - #include --- -2.53.0 - diff --git a/queue-6.12/series b/queue-6.12/series index 493860f5bb..bd1ec41caa 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -79,7 +79,6 @@ wifi-rtw89-correct-data-type-for-scan-index-to-avoid.patch wifi-rtw88-fix-oob-read-from-firmware-rx-descriptor-.patch kconfig-fix-potential-null-pointer-dereference-in-co.patch soc-xilinx-shutdown-and-free-rx-mailbox-channel.patch -scsi-advansys-drop-isa_dma_api-remnants.patch wifi-ath9k-fix-oob-access-from-firmware-tx-status-qu.patch arm-dts-am335x-sl50-fix-audio-bitclock-and-frame-mas.patch watchdog-sp5100_tco-use-efch-mmio-for-newer-hygon-fc.patch @@ -389,13 +388,11 @@ powerpc-perf-fix-preempt-count-underflow-in-fsl_emb_.patch powerpc-powernv-fix-preempt-count-leak-in-pnv_kexec_.patch powerpc-kexec-fix-double-get_cpu-imbalance-in-kexec_.patch keys-use-acquire-when-reading-state-in-keyring-searc.patch -dt-bindings-vendor-prefixes-add-gira.patch tipc-fix-uaf-in-tipc_l2_send_msg.patch tcp-ipv6-clamp-default-adverting-mss-to-avoid-gso_by.patch net-airoha-introduce-ndo_select_queue-callback.patch net-airoha-add-sched-ets-offload-support.patch net-airoha-fix-always-true-condition-in-ppe1-queue-r.patch -net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch net-ethernet-oa_tc6-mdiobus-parent-initialized-with-.patch net-ethernet-oa_tc6-remove-fcs-size-in-rx-frame.patch dt-bindings-net-updated-interrupt-type-to-be-active-.patch diff --git a/queue-6.18/dt-bindings-vendor-prefixes-add-gira.patch b/queue-6.18/dt-bindings-vendor-prefixes-add-gira.patch deleted file mode 100644 index 19f0afb474..0000000000 --- a/queue-6.18/dt-bindings-vendor-prefixes-add-gira.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 12ac52145e0d46f39cdae149d61318d35c3b4038 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Jun 2026 23:30:47 +0200 -Subject: dt-bindings: vendor-prefixes: add Gira - -From: Lucas Stach - -[ Upstream commit 61a7e4c2c98c08da6bbf8c30c71da57610930ae7 ] - -Add vendor prefix for Gira Giersiepen GmbH & Co. KG -Link: https://www.gira.de/ - -Signed-off-by: Lucas Stach -Reviewed-by: Alexander Dahl -Acked-by: Conor Dooley -Link: https://patch.msgid.link/20260610213047.500701-1-l.stach@pengutronix.de -Signed-off-by: Rob Herring (Arm) -Signed-off-by: Sasha Levin ---- - Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml -index a9cf85fd6fbec7..363b2fcb1ddad2 100644 ---- a/Documentation/devicetree/bindings/vendor-prefixes.yaml -+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml -@@ -632,6 +632,8 @@ patternProperties: - description: Giantec Semiconductor, Inc. - "^giantplus,.*": - description: Giantplus Technology Co., Ltd. -+ "^gira,.*": -+ description: Gira Giersiepen GmbH & Co. KG - "^glinet,.*": - description: GL Intelligence, Inc. - "^globalscale,.*": --- -2.53.0 - diff --git a/queue-6.18/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch b/queue-6.18/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch deleted file mode 100644 index 37be467093..0000000000 --- a/queue-6.18/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch +++ /dev/null @@ -1,266 +0,0 @@ -From a2b0a77e72831120956f7fbccd1aa450c698c78c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 Jun 2026 14:55:38 -0700 -Subject: net: ethernet: oa_tc6: Interrupt is active low, level triggered. - -From: Selvamani Rajagopal - -[ Upstream commit b542d13fab0f556660ce5f10179fb3ae66bdb9a4 ] - -According OPEN Alliance 10BASET1x MAC-PHY Serial Interface -specification, interrupt is active low, level triggered. - -Code used edge triggered interrupt which has the risk of losing an -interrupt on instances like when interrupt is disabled. Level -triggered interrupt won't be deasserted unless handler runs and -clear the interrupting conditions. - -Interrupt handler mechanism is changed to threaded irq from -interrupt handler and kernel thread waiting on work queue. -Threaded irq mechanism is best suited for level triggered interrupt -as it disables the interrupt until handler is run in thread level, -while giving us an ability to have interrupt context handler to -signal the threaded irq handler. - -Introduced a logic to disable the device interrupt on error. Error -could be due in data chunk's header and footer or SPI interface itself. -This will avoid having repeated interrupts, in case the driver couldn't -recover from the error condition with the available recovery mechanism. - -Fixes: 2c6ce5354453 ("net: ethernet: oa_tc6: implement mac-phy interrupt") -Signed-off-by: Selvamani Rajagopal -Link: https://patch.msgid.link/20260611-level-trigger-v5-1-4533a9e85ce2@onsemi.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/oa_tc6.c | 126 ++++++++++++++++++++-------------- - 1 file changed, 76 insertions(+), 50 deletions(-) - -diff --git a/drivers/net/ethernet/oa_tc6.c b/drivers/net/ethernet/oa_tc6.c -index 91a906a7918a25..f3ac2875adfb7b 100644 ---- a/drivers/net/ethernet/oa_tc6.c -+++ b/drivers/net/ethernet/oa_tc6.c -@@ -7,6 +7,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -44,6 +45,8 @@ - #define INT_MASK0_LOSS_OF_FRAME_ERR_MASK BIT(4) - #define INT_MASK0_RX_BUFFER_OVERFLOW_ERR_MASK BIT(3) - #define INT_MASK0_TX_PROTOCOL_ERR_MASK BIT(0) -+#define INT_MASK0_ALL_INTERRUPTS (GENMASK(5, 0) | \ -+ GENMASK(12, 7)) - - /* PHY Clause 22 registers base address and mask */ - #define OA_TC6_PHY_STD_REG_ADDR_BASE 0xFF00 -@@ -121,14 +124,13 @@ struct oa_tc6 { - struct sk_buff *ongoing_tx_skb; - struct sk_buff *waiting_tx_skb; - struct sk_buff *rx_skb; -- struct task_struct *spi_thread; -- wait_queue_head_t spi_wq; - u16 tx_skb_offset; - u16 spi_data_tx_buf_offset; - u16 tx_credits; - u8 rx_chunks_available; - bool rx_buf_overflow; - bool int_flag; -+ bool disable_traffic; - }; - - enum oa_tc6_header_type { -@@ -669,6 +671,38 @@ static void oa_tc6_cleanup_ongoing_tx_skb(struct oa_tc6 *tc6) - } - } - -+static void oa_tc6_cleanup_waiting_tx_skb(struct oa_tc6 *tc6) -+{ -+ if (tc6->waiting_tx_skb) { -+ tc6->netdev->stats.tx_dropped++; -+ kfree_skb(tc6->waiting_tx_skb); -+ tc6->waiting_tx_skb = NULL; -+ } -+} -+ -+static void oa_tc6_free_pending_skbs(struct oa_tc6 *tc6) -+{ -+ oa_tc6_cleanup_ongoing_tx_skb(tc6); -+ oa_tc6_cleanup_ongoing_rx_skb(tc6); -+ oa_tc6_cleanup_waiting_tx_skb(tc6); -+} -+ -+/* If the failure is at SPI interface level, masking and clearing -+ * the interrupt of the device won't work. Since SPI interrupt is -+ * disabled, it should stop the repeated interrupts. -+ */ -+static void oa_tc6_disable_traffic(struct oa_tc6 *tc6) -+{ -+ u32 regval = INT_MASK0_ALL_INTERRUPTS; -+ -+ tc6->disable_traffic = true; -+ oa_tc6_free_pending_skbs(tc6); -+ oa_tc6_write_register(tc6, OA_TC6_REG_INT_MASK0, regval); -+ oa_tc6_read_register(tc6, OA_TC6_REG_STATUS0, ®val); -+ oa_tc6_write_register(tc6, OA_TC6_REG_STATUS0, regval); -+ dev_err(&tc6->spi->dev, "Device interrupt disabled to avoid interrupt storm"); -+} -+ - static int oa_tc6_process_extended_status(struct oa_tc6 *tc6) - { - u32 value; -@@ -1105,29 +1139,29 @@ static int oa_tc6_try_spi_transfer(struct oa_tc6 *tc6) - return 0; - } - --static int oa_tc6_spi_thread_handler(void *data) -+static irqreturn_t oa_tc6_macphy_threaded_irq(int irq, void *data) - { - struct oa_tc6 *tc6 = data; -- int ret; -- -- while (likely(!kthread_should_stop())) { -- /* This kthread will be waken up if there is a tx skb or mac-phy -- * interrupt to perform spi transfer with tx chunks. -- */ -- wait_event_interruptible(tc6->spi_wq, tc6->int_flag || -- (tc6->waiting_tx_skb && -- tc6->tx_credits) || -- kthread_should_stop()); -- -- if (kthread_should_stop()) -- break; -+ int ret = 0; - -- ret = oa_tc6_try_spi_transfer(tc6); -- if (ret) -- return ret; -+ /* It is possible that interrupt woke the thread before it is -+ * disabled. Until we come up with good recovery mechanism, -+ * no need to attempt spi transfer, once it fails. Pending skbs -+ * are already freed. -+ */ -+ if (!tc6->disable_traffic) { -+ while (tc6->int_flag || -+ (tc6->waiting_tx_skb && tc6->tx_credits)) { -+ ret = oa_tc6_try_spi_transfer(tc6); -+ if (ret) { -+ disable_irq_nosync(tc6->spi->irq); -+ oa_tc6_disable_traffic(tc6); -+ break; -+ } -+ } - } - -- return 0; -+ return IRQ_HANDLED; - } - - static int oa_tc6_update_buffer_status_from_register(struct oa_tc6 *tc6) -@@ -1161,11 +1195,15 @@ static irqreturn_t oa_tc6_macphy_isr(int irq, void *data) - * the previous rx footer. - * - extended status event not reported in the previous rx footer. - */ -- tc6->int_flag = true; -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -- -- return IRQ_HANDLED; -+ if (tc6->disable_traffic) -+ disable_irq_nosync(tc6->spi->irq); -+ else -+ tc6->int_flag = true; -+ /* Wake IRQ thread to perform spi transfer . In case -+ * disable_traffic is set, threaded irq may run again -+ * one more time. -+ */ -+ return IRQ_WAKE_THREAD; - } - - /** -@@ -1202,7 +1240,7 @@ EXPORT_SYMBOL_GPL(oa_tc6_zero_align_receive_frame_enable); - */ - netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - { -- if (tc6->waiting_tx_skb) { -+ if (tc6->disable_traffic || tc6->waiting_tx_skb) { - netif_stop_queue(tc6->netdev); - return NETDEV_TX_BUSY; - } -@@ -1217,8 +1255,8 @@ netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - tc6->waiting_tx_skb = skb; - spin_unlock_bh(&tc6->tx_skb_lock); - -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -+ /* Wake the threaded IRQ to perform spi transfer. */ -+ irq_wake_thread(tc6->spi->irq, tc6); - - return NETDEV_TX_OK; - } -@@ -1311,24 +1349,15 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - goto phy_exit; - } - -- init_waitqueue_head(&tc6->spi_wq); -- -- tc6->spi_thread = kthread_run(oa_tc6_spi_thread_handler, tc6, -- "oa-tc6-spi-thread"); -- if (IS_ERR(tc6->spi_thread)) { -- dev_err(&tc6->spi->dev, "Failed to create SPI thread\n"); -- goto phy_exit; -- } -- -- sched_set_fifo(tc6->spi_thread); -- -- ret = devm_request_irq(&tc6->spi->dev, tc6->spi->irq, oa_tc6_macphy_isr, -- IRQF_TRIGGER_FALLING, dev_name(&tc6->spi->dev), -- tc6); -+ ret = devm_request_threaded_irq(&tc6->spi->dev, tc6->spi->irq, -+ oa_tc6_macphy_isr, -+ oa_tc6_macphy_threaded_irq, -+ IRQF_TRIGGER_LOW | IRQF_ONESHOT, -+ dev_name(&tc6->spi->dev), tc6); - if (ret) { - dev_err(&tc6->spi->dev, "Failed to request macphy isr %d\n", - ret); -- goto kthread_stop; -+ goto phy_exit; - } - - /* oa_tc6_sw_reset_macphy() function resets and clears the MAC-PHY reset -@@ -1338,12 +1367,10 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - * 7.7 and 9.2.8.8 in the OPEN Alliance specification for more details. - */ - tc6->int_flag = true; -- wake_up_interruptible(&tc6->spi_wq); -+ irq_wake_thread(tc6->spi->irq, tc6); - - return tc6; - --kthread_stop: -- kthread_stop(tc6->spi_thread); - phy_exit: - oa_tc6_phy_exit(tc6); - return NULL; -@@ -1356,11 +1383,10 @@ EXPORT_SYMBOL_GPL(oa_tc6_init); - */ - void oa_tc6_exit(struct oa_tc6 *tc6) - { -+ tc6->disable_traffic = true; -+ disable_irq(tc6->spi->irq); - oa_tc6_phy_exit(tc6); -- kthread_stop(tc6->spi_thread); -- dev_kfree_skb_any(tc6->ongoing_tx_skb); -- dev_kfree_skb_any(tc6->waiting_tx_skb); -- dev_kfree_skb_any(tc6->rx_skb); -+ oa_tc6_free_pending_skbs(tc6); - } - EXPORT_SYMBOL_GPL(oa_tc6_exit); - --- -2.53.0 - diff --git a/queue-6.18/scsi-advansys-drop-isa_dma_api-remnants.patch b/queue-6.18/scsi-advansys-drop-isa_dma_api-remnants.patch deleted file mode 100644 index 002929d86e..0000000000 --- a/queue-6.18/scsi-advansys-drop-isa_dma_api-remnants.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 08b62a3fbfcf9577da04cfae82983de179dddc65 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Apr 2026 17:15:37 +0200 -Subject: scsi: advansys: Drop ISA_DMA_API remnants - -From: Arnd Bergmann - -[ Upstream commit c7233b3d99db9760daf07c4e95daa9675c6c0cba ] - -Support for ISA bus mastering was removed a few years ago, and the VLB -mode does not use the ISA DMA API, so drop the dependency and the header -inclusion. - -Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") -Signed-off-by: Arnd Bergmann -Reviewed-by: Johannes Thumshirn -Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 1 - - drivers/scsi/advansys.c | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 19d0884479a247..70d6392192b59c 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -476,7 +476,6 @@ config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI - depends on (ISA || EISA || PCI) && HAS_IOPORT -- depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by - AdvanSys. It is documented in the kernel source in -diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c -index 063e1b5818d342..9a6bd4b12d236c 100644 ---- a/drivers/scsi/advansys.c -+++ b/drivers/scsi/advansys.c -@@ -36,7 +36,6 @@ - #include - - #include --#include - - #include - #include --- -2.53.0 - diff --git a/queue-6.18/series b/queue-6.18/series index 43b66aa29b..7d3497533c 100644 --- a/queue-6.18/series +++ b/queue-6.18/series @@ -91,7 +91,6 @@ wifi-rtw89-add-bounds-check-on-firmware-mac_id-in-li.patch kconfig-fix-potential-null-pointer-dereference-in-co.patch soc-xilinx-shutdown-and-free-rx-mailbox-channel.patch pinctrl-mediatek-eint-drop-base-from-mtk_eint_chip_w.patch -scsi-advansys-drop-isa_dma_api-remnants.patch wifi-ath9k-fix-oob-access-from-firmware-tx-status-qu.patch arm-dts-am335x-sl50-fix-audio-bitclock-and-frame-mas.patch documentation-rv-replace-stale-website-link.patch @@ -548,11 +547,9 @@ powerpc-perf-fix-preempt-count-underflow-in-fsl_emb_.patch powerpc-powernv-fix-preempt-count-leak-in-pnv_kexec_.patch powerpc-kexec-fix-double-get_cpu-imbalance-in-kexec_.patch keys-use-acquire-when-reading-state-in-keyring-searc.patch -dt-bindings-vendor-prefixes-add-gira.patch tipc-fix-uaf-in-tipc_l2_send_msg.patch tcp-ipv6-clamp-default-adverting-mss-to-avoid-gso_by.patch net-airoha-fix-always-true-condition-in-ppe1-queue-r.patch -net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch net-ethernet-oa_tc6-mdiobus-parent-initialized-with-.patch net-ethernet-oa_tc6-remove-fcs-size-in-rx-frame.patch dt-bindings-net-updated-interrupt-type-to-be-active-.patch diff --git a/queue-6.6/scsi-advansys-drop-isa_dma_api-remnants.patch b/queue-6.6/scsi-advansys-drop-isa_dma_api-remnants.patch deleted file mode 100644 index 3b606f28d2..0000000000 --- a/queue-6.6/scsi-advansys-drop-isa_dma_api-remnants.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 149c09f246680de13a6267da1699c6ae92c7602d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Apr 2026 17:15:37 +0200 -Subject: scsi: advansys: Drop ISA_DMA_API remnants - -From: Arnd Bergmann - -[ Upstream commit c7233b3d99db9760daf07c4e95daa9675c6c0cba ] - -Support for ISA bus mastering was removed a few years ago, and the VLB -mode does not use the ISA DMA API, so drop the dependency and the header -inclusion. - -Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") -Signed-off-by: Arnd Bergmann -Reviewed-by: Johannes Thumshirn -Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 1 - - drivers/scsi/advansys.c | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 23bce8995a5575..02f41bf250af5f 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -463,7 +463,6 @@ config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI - depends on (ISA || EISA || PCI) && HAS_IOPORT -- depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by - AdvanSys. It is documented in the kernel source in -diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c -index ab066bb27a5704..920be96f585f00 100644 ---- a/drivers/scsi/advansys.c -+++ b/drivers/scsi/advansys.c -@@ -36,7 +36,6 @@ - #include - - #include --#include - - #include - #include --- -2.53.0 - diff --git a/queue-6.6/series b/queue-6.6/series index 5071b1b63f..8557f55fdc 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -373,7 +373,6 @@ driver-core-use-read_once-for-dev-driver-in-dev_has_.patch wifi-rtw89-correct-data-type-for-scan-index-to-avoid.patch wifi-rtw88-fix-oob-read-from-firmware-rx-descriptor-.patch kconfig-fix-potential-null-pointer-dereference-in-co.patch -scsi-advansys-drop-isa_dma_api-remnants.patch wifi-ath9k-fix-oob-access-from-firmware-tx-status-qu.patch arm-dts-am335x-sl50-fix-audio-bitclock-and-frame-mas.patch watchdog-sp5100_tco-use-efch-mmio-for-newer-hygon-fc.patch diff --git a/queue-7.1/dt-bindings-vendor-prefixes-add-gira.patch b/queue-7.1/dt-bindings-vendor-prefixes-add-gira.patch deleted file mode 100644 index fdc0fbc279..0000000000 --- a/queue-7.1/dt-bindings-vendor-prefixes-add-gira.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 26b08f0fcf83bd733238cf556bab64c65ded09a4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Jun 2026 23:30:47 +0200 -Subject: dt-bindings: vendor-prefixes: add Gira - -From: Lucas Stach - -[ Upstream commit 61a7e4c2c98c08da6bbf8c30c71da57610930ae7 ] - -Add vendor prefix for Gira Giersiepen GmbH & Co. KG -Link: https://www.gira.de/ - -Signed-off-by: Lucas Stach -Reviewed-by: Alexander Dahl -Acked-by: Conor Dooley -Link: https://patch.msgid.link/20260610213047.500701-1-l.stach@pengutronix.de -Signed-off-by: Rob Herring (Arm) -Signed-off-by: Sasha Levin ---- - Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml -index ac83310259a914..55ef75d530e6c2 100644 ---- a/Documentation/devicetree/bindings/vendor-prefixes.yaml -+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml -@@ -658,6 +658,8 @@ patternProperties: - description: Giantec Semiconductor, Inc. - "^giantplus,.*": - description: Giantplus Technology Co., Ltd. -+ "^gira,.*": -+ description: Gira Giersiepen GmbH & Co. KG - "^glinet,.*": - description: GL Intelligence, Inc. - "^globalscale,.*": --- -2.53.0 - diff --git a/queue-7.1/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch b/queue-7.1/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch deleted file mode 100644 index 742dc3ccfe..0000000000 --- a/queue-7.1/net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch +++ /dev/null @@ -1,266 +0,0 @@ -From 67373094ff13ea1e12c8d99590204fef10506165 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 Jun 2026 14:55:38 -0700 -Subject: net: ethernet: oa_tc6: Interrupt is active low, level triggered. - -From: Selvamani Rajagopal - -[ Upstream commit b542d13fab0f556660ce5f10179fb3ae66bdb9a4 ] - -According OPEN Alliance 10BASET1x MAC-PHY Serial Interface -specification, interrupt is active low, level triggered. - -Code used edge triggered interrupt which has the risk of losing an -interrupt on instances like when interrupt is disabled. Level -triggered interrupt won't be deasserted unless handler runs and -clear the interrupting conditions. - -Interrupt handler mechanism is changed to threaded irq from -interrupt handler and kernel thread waiting on work queue. -Threaded irq mechanism is best suited for level triggered interrupt -as it disables the interrupt until handler is run in thread level, -while giving us an ability to have interrupt context handler to -signal the threaded irq handler. - -Introduced a logic to disable the device interrupt on error. Error -could be due in data chunk's header and footer or SPI interface itself. -This will avoid having repeated interrupts, in case the driver couldn't -recover from the error condition with the available recovery mechanism. - -Fixes: 2c6ce5354453 ("net: ethernet: oa_tc6: implement mac-phy interrupt") -Signed-off-by: Selvamani Rajagopal -Link: https://patch.msgid.link/20260611-level-trigger-v5-1-4533a9e85ce2@onsemi.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/oa_tc6.c | 126 ++++++++++++++++++++-------------- - 1 file changed, 76 insertions(+), 50 deletions(-) - -diff --git a/drivers/net/ethernet/oa_tc6.c b/drivers/net/ethernet/oa_tc6.c -index 91a906a7918a25..f3ac2875adfb7b 100644 ---- a/drivers/net/ethernet/oa_tc6.c -+++ b/drivers/net/ethernet/oa_tc6.c -@@ -7,6 +7,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -44,6 +45,8 @@ - #define INT_MASK0_LOSS_OF_FRAME_ERR_MASK BIT(4) - #define INT_MASK0_RX_BUFFER_OVERFLOW_ERR_MASK BIT(3) - #define INT_MASK0_TX_PROTOCOL_ERR_MASK BIT(0) -+#define INT_MASK0_ALL_INTERRUPTS (GENMASK(5, 0) | \ -+ GENMASK(12, 7)) - - /* PHY Clause 22 registers base address and mask */ - #define OA_TC6_PHY_STD_REG_ADDR_BASE 0xFF00 -@@ -121,14 +124,13 @@ struct oa_tc6 { - struct sk_buff *ongoing_tx_skb; - struct sk_buff *waiting_tx_skb; - struct sk_buff *rx_skb; -- struct task_struct *spi_thread; -- wait_queue_head_t spi_wq; - u16 tx_skb_offset; - u16 spi_data_tx_buf_offset; - u16 tx_credits; - u8 rx_chunks_available; - bool rx_buf_overflow; - bool int_flag; -+ bool disable_traffic; - }; - - enum oa_tc6_header_type { -@@ -669,6 +671,38 @@ static void oa_tc6_cleanup_ongoing_tx_skb(struct oa_tc6 *tc6) - } - } - -+static void oa_tc6_cleanup_waiting_tx_skb(struct oa_tc6 *tc6) -+{ -+ if (tc6->waiting_tx_skb) { -+ tc6->netdev->stats.tx_dropped++; -+ kfree_skb(tc6->waiting_tx_skb); -+ tc6->waiting_tx_skb = NULL; -+ } -+} -+ -+static void oa_tc6_free_pending_skbs(struct oa_tc6 *tc6) -+{ -+ oa_tc6_cleanup_ongoing_tx_skb(tc6); -+ oa_tc6_cleanup_ongoing_rx_skb(tc6); -+ oa_tc6_cleanup_waiting_tx_skb(tc6); -+} -+ -+/* If the failure is at SPI interface level, masking and clearing -+ * the interrupt of the device won't work. Since SPI interrupt is -+ * disabled, it should stop the repeated interrupts. -+ */ -+static void oa_tc6_disable_traffic(struct oa_tc6 *tc6) -+{ -+ u32 regval = INT_MASK0_ALL_INTERRUPTS; -+ -+ tc6->disable_traffic = true; -+ oa_tc6_free_pending_skbs(tc6); -+ oa_tc6_write_register(tc6, OA_TC6_REG_INT_MASK0, regval); -+ oa_tc6_read_register(tc6, OA_TC6_REG_STATUS0, ®val); -+ oa_tc6_write_register(tc6, OA_TC6_REG_STATUS0, regval); -+ dev_err(&tc6->spi->dev, "Device interrupt disabled to avoid interrupt storm"); -+} -+ - static int oa_tc6_process_extended_status(struct oa_tc6 *tc6) - { - u32 value; -@@ -1105,29 +1139,29 @@ static int oa_tc6_try_spi_transfer(struct oa_tc6 *tc6) - return 0; - } - --static int oa_tc6_spi_thread_handler(void *data) -+static irqreturn_t oa_tc6_macphy_threaded_irq(int irq, void *data) - { - struct oa_tc6 *tc6 = data; -- int ret; -- -- while (likely(!kthread_should_stop())) { -- /* This kthread will be waken up if there is a tx skb or mac-phy -- * interrupt to perform spi transfer with tx chunks. -- */ -- wait_event_interruptible(tc6->spi_wq, tc6->int_flag || -- (tc6->waiting_tx_skb && -- tc6->tx_credits) || -- kthread_should_stop()); -- -- if (kthread_should_stop()) -- break; -+ int ret = 0; - -- ret = oa_tc6_try_spi_transfer(tc6); -- if (ret) -- return ret; -+ /* It is possible that interrupt woke the thread before it is -+ * disabled. Until we come up with good recovery mechanism, -+ * no need to attempt spi transfer, once it fails. Pending skbs -+ * are already freed. -+ */ -+ if (!tc6->disable_traffic) { -+ while (tc6->int_flag || -+ (tc6->waiting_tx_skb && tc6->tx_credits)) { -+ ret = oa_tc6_try_spi_transfer(tc6); -+ if (ret) { -+ disable_irq_nosync(tc6->spi->irq); -+ oa_tc6_disable_traffic(tc6); -+ break; -+ } -+ } - } - -- return 0; -+ return IRQ_HANDLED; - } - - static int oa_tc6_update_buffer_status_from_register(struct oa_tc6 *tc6) -@@ -1161,11 +1195,15 @@ static irqreturn_t oa_tc6_macphy_isr(int irq, void *data) - * the previous rx footer. - * - extended status event not reported in the previous rx footer. - */ -- tc6->int_flag = true; -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -- -- return IRQ_HANDLED; -+ if (tc6->disable_traffic) -+ disable_irq_nosync(tc6->spi->irq); -+ else -+ tc6->int_flag = true; -+ /* Wake IRQ thread to perform spi transfer . In case -+ * disable_traffic is set, threaded irq may run again -+ * one more time. -+ */ -+ return IRQ_WAKE_THREAD; - } - - /** -@@ -1202,7 +1240,7 @@ EXPORT_SYMBOL_GPL(oa_tc6_zero_align_receive_frame_enable); - */ - netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - { -- if (tc6->waiting_tx_skb) { -+ if (tc6->disable_traffic || tc6->waiting_tx_skb) { - netif_stop_queue(tc6->netdev); - return NETDEV_TX_BUSY; - } -@@ -1217,8 +1255,8 @@ netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb) - tc6->waiting_tx_skb = skb; - spin_unlock_bh(&tc6->tx_skb_lock); - -- /* Wake spi kthread to perform spi transfer */ -- wake_up_interruptible(&tc6->spi_wq); -+ /* Wake the threaded IRQ to perform spi transfer. */ -+ irq_wake_thread(tc6->spi->irq, tc6); - - return NETDEV_TX_OK; - } -@@ -1311,24 +1349,15 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - goto phy_exit; - } - -- init_waitqueue_head(&tc6->spi_wq); -- -- tc6->spi_thread = kthread_run(oa_tc6_spi_thread_handler, tc6, -- "oa-tc6-spi-thread"); -- if (IS_ERR(tc6->spi_thread)) { -- dev_err(&tc6->spi->dev, "Failed to create SPI thread\n"); -- goto phy_exit; -- } -- -- sched_set_fifo(tc6->spi_thread); -- -- ret = devm_request_irq(&tc6->spi->dev, tc6->spi->irq, oa_tc6_macphy_isr, -- IRQF_TRIGGER_FALLING, dev_name(&tc6->spi->dev), -- tc6); -+ ret = devm_request_threaded_irq(&tc6->spi->dev, tc6->spi->irq, -+ oa_tc6_macphy_isr, -+ oa_tc6_macphy_threaded_irq, -+ IRQF_TRIGGER_LOW | IRQF_ONESHOT, -+ dev_name(&tc6->spi->dev), tc6); - if (ret) { - dev_err(&tc6->spi->dev, "Failed to request macphy isr %d\n", - ret); -- goto kthread_stop; -+ goto phy_exit; - } - - /* oa_tc6_sw_reset_macphy() function resets and clears the MAC-PHY reset -@@ -1338,12 +1367,10 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev) - * 7.7 and 9.2.8.8 in the OPEN Alliance specification for more details. - */ - tc6->int_flag = true; -- wake_up_interruptible(&tc6->spi_wq); -+ irq_wake_thread(tc6->spi->irq, tc6); - - return tc6; - --kthread_stop: -- kthread_stop(tc6->spi_thread); - phy_exit: - oa_tc6_phy_exit(tc6); - return NULL; -@@ -1356,11 +1383,10 @@ EXPORT_SYMBOL_GPL(oa_tc6_init); - */ - void oa_tc6_exit(struct oa_tc6 *tc6) - { -+ tc6->disable_traffic = true; -+ disable_irq(tc6->spi->irq); - oa_tc6_phy_exit(tc6); -- kthread_stop(tc6->spi_thread); -- dev_kfree_skb_any(tc6->ongoing_tx_skb); -- dev_kfree_skb_any(tc6->waiting_tx_skb); -- dev_kfree_skb_any(tc6->rx_skb); -+ oa_tc6_free_pending_skbs(tc6); - } - EXPORT_SYMBOL_GPL(oa_tc6_exit); - --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-init-handle-code-blocks-early.patch b/queue-7.1/rust-pin-init-internal-init-handle-code-blocks-early.patch deleted file mode 100644 index 17c7a8ef7f..0000000000 --- a/queue-7.1/rust-pin-init-internal-init-handle-code-blocks-early.patch +++ /dev/null @@ -1,145 +0,0 @@ -From f76e4bc5c6292a323db4fdd0395cf57efad5277f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 12 May 2026 13:09:49 +0100 -Subject: rust: pin-init: internal: init: handle code blocks early - -From: Gary Guo - -[ Upstream commit df1827babd665ea7039383dbc5c671b66a65c1ec ] - -`InitializerKind::Code` is a special case where it does not initialize a -field, and thus generate no guard and accessors. Handle it earlier and make -the rest of the code more linear. - -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/init.rs | 100 ++++++++++++++++------------- - 1 file changed, 55 insertions(+), 45 deletions(-) - -diff --git a/rust/pin-init/internal/src/init.rs b/rust/pin-init/internal/src/init.rs -index 487ee0013fafee..0e19169d022ad9 100644 ---- a/rust/pin-init/internal/src/init.rs -+++ b/rust/pin-init/internal/src/init.rs -@@ -238,6 +238,20 @@ fn init_fields( - cfgs.retain(|attr| attr.path().is_ident("cfg")); - cfgs - }; -+ -+ let ident = match kind { -+ InitializerKind::Value { ident, .. } => ident, -+ InitializerKind::Init { ident, .. } => ident, -+ InitializerKind::Code { block, .. } => { -+ res.extend(quote! { -+ #(#attrs)* -+ #[allow(unused_braces)] -+ #block -+ }); -+ continue; -+ } -+ }; -+ - let init = match kind { - InitializerKind::Value { ident, value } => { - let mut value_ident = ident.clone(); -@@ -290,55 +304,51 @@ fn init_fields( - } - } - } -- InitializerKind::Code { block: value, .. } => quote! { -- #(#attrs)* -- #[allow(unused_braces)] -- #value -- }, -+ InitializerKind::Code { .. } => unreachable!(), - }; -- res.extend(init); -- if let Some(ident) = kind.ident() { -- // `mixed_site` ensures that the guard is not accessible to the user-controlled code. -- let guard = format_ident!("__{ident}_guard", span = Span::mixed_site()); - -- // NOTE: The reference is derived from the guard so that it only lives as long as the -- // guard does and cannot escape the scope. If it's created via `&mut (*#slot).#ident` -- // like the unaligned field guard, it will become effectively `'static`. -- let accessor = if pinned { -- let project_ident = format_ident!("__project_{ident}"); -- quote! { -- // SAFETY: the initialization is pinned. -- unsafe { #data.#project_ident(#guard.let_binding()) } -- } -- } else { -- quote! { -- #guard.let_binding() -- } -- }; -+ // `mixed_site` ensures that the guard is not accessible to the user-controlled code. -+ let guard = format_ident!("__{ident}_guard", span = Span::mixed_site()); - -- res.extend(quote! { -- #(#cfgs)* -- // Create the drop guard. -- // -- // SAFETY: -- // - `&raw mut (*slot).#ident` is valid. -- // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -- // - `(*slot).#ident` has been initialized above. -- // - We only need the ownership to the pointee back when initialization has -- // succeeded, where we `forget` the guard. -- let mut #guard = unsafe { -- ::pin_init::__internal::DropGuard::new( -- &raw mut (*slot).#ident -- ) -- }; -+ // NOTE: The reference is derived from the guard so that it only lives as long as the -+ // guard does and cannot escape the scope. If it's created via `&mut (*#slot).#ident` -+ // like the unaligned field guard, it will become effectively `'static`. -+ let accessor = if pinned { -+ let project_ident = format_ident!("__project_{ident}"); -+ quote! { -+ // SAFETY: the initialization is pinned. -+ unsafe { #data.#project_ident(#guard.let_binding()) } -+ } -+ } else { -+ quote! { -+ #guard.let_binding() -+ } -+ }; - -- #(#cfgs)* -- #[allow(unused_variables)] -- let #ident = #accessor; -- }); -- guards.push(guard); -- guard_attrs.push(cfgs); -- } -+ res.extend(quote! { -+ #init -+ -+ #(#cfgs)* -+ // Create the drop guard. -+ // -+ // SAFETY: -+ // - `&raw mut (*slot).#ident` is valid. -+ // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -+ // - `(*slot).#ident` has been initialized above. -+ // - We only need the ownership to the pointee back when initialization has -+ // succeeded, where we `forget` the guard. -+ let mut #guard = unsafe { -+ ::pin_init::__internal::DropGuard::new( -+ &raw mut (*slot).#ident -+ ) -+ }; -+ -+ #(#cfgs)* -+ #[allow(unused_variables)] -+ let #ident = #accessor; -+ }); -+ guards.push(guard); -+ guard_attrs.push(cfgs); - } - quote! { - #res --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-pin_data-add-struct-to-record.patch b/queue-7.1/rust-pin-init-internal-pin_data-add-struct-to-record.patch deleted file mode 100644 index 5180cfd56d..0000000000 --- a/queue-7.1/rust-pin-init-internal-pin_data-add-struct-to-record.patch +++ /dev/null @@ -1,182 +0,0 @@ -From a678f28fb047cb3ba52191615ec0f0f09ad9ce86 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 12 May 2026 13:09:47 +0100 -Subject: rust: pin-init: internal: pin_data: add struct to record field info - -From: Mohamad Alsadhan - -[ Upstream commit 4b60f38cd2a4b2d3288377f25100f8d67015988a ] - -Introduce `FieldInfo` struct to encapsulate field and other relevant data, -instead of carrying a pair of `(pinned, field)` in all places. This allows -us to add more information to the struct in the future. - -Signed-off-by: Mohamad Alsadhan -Co-developed-by: Gary Guo -Link: https://patch.msgid.link/20260512-pin-init-sync-v1-2-81963130dfbd@garyguo.net -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/pin_data.rs | 53 ++++++++++++++++---------- - 1 file changed, 32 insertions(+), 21 deletions(-) - -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 93976d4f50a285..7e529fc4d276ef 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -35,6 +35,11 @@ impl Parse for Args { - } - } - -+struct FieldInfo<'a> { -+ field: &'a Field, -+ pinned: bool, -+} -+ - pub(crate) fn pin_data( - args: Args, - input: Item, -@@ -73,24 +78,30 @@ pub(crate) fn pin_data( - replacer.visit_generics_mut(&mut struct_.generics); - replacer.visit_fields_mut(&mut struct_.fields); - -- let fields: Vec<(bool, &Field)> = struct_ -+ let fields: Vec> = struct_ - .fields - .iter_mut() - .map(|field| { - let len = field.attrs.len(); - field.attrs.retain(|a| !a.path().is_ident("pin")); -- (len != field.attrs.len(), &*field) -+ let pinned = len != field.attrs.len(); -+ -+ FieldInfo { -+ field: &*field, -+ pinned, -+ } - }) - .collect(); - -- for (pinned, field) in &fields { -- if !pinned && is_phantom_pinned(&field.ty) { -+ for field in &fields { -+ let ident = field.field.ident.as_ref().unwrap(); -+ -+ if !field.pinned && is_phantom_pinned(&field.field.ty) { - dcx.warn( -- field, -+ field.field, - format!( -- "The field `{}` of type `PhantomPinned` only has an effect \ -+ "The field `{ident}` of type `PhantomPinned` only has an effect \ - if it has the `#[pin]` attribute", -- field.ident.as_ref().unwrap(), - ), - ); - } -@@ -143,7 +154,7 @@ fn is_phantom_pinned(ty: &Type) -> bool { - fn generate_unpin_impl( - ident: &Ident, - generics: &Generics, -- fields: &[(bool, &Field)], -+ fields: &[FieldInfo<'_>], - ) -> TokenStream { - let (_, ty_generics, _) = generics.split_for_impl(); - let mut generics_with_pin_lt = generics.clone(); -@@ -160,7 +171,7 @@ fn generate_unpin_impl( - else { - unreachable!() - }; -- let pinned_fields = fields.iter().filter_map(|(b, f)| b.then_some(f)); -+ let pinned_fields = fields.iter().filter(|f| f.pinned).map(|f| f.field); - quote! { - // This struct will be used for the unpin analysis. It is needed, because only structurally - // pinned fields are relevant whether the struct should implement `Unpin`. -@@ -238,7 +249,7 @@ fn generate_projections( - vis: &Visibility, - ident: &Ident, - generics: &Generics, -- fields: &[(bool, &Field)], -+ fields: &[FieldInfo<'_>], - ) -> TokenStream { - let (impl_generics, ty_generics, _) = generics.split_for_impl(); - let mut generics_with_pin_lt = generics.clone(); -@@ -249,21 +260,21 @@ fn generate_projections( - - let (fields_decl, fields_proj): (Vec<_>, Vec<_>) = fields - .iter() -- .map(|(pinned, field)| { -+ .map(|field| { - let Field { - vis, - ident, - ty, - attrs, - .. -- } = field; -+ } = &field.field; - - let mut no_doc_attrs = attrs.clone(); - no_doc_attrs.retain(|a| !a.path().is_ident("doc")); - let ident = ident - .as_ref() - .expect("only structs with named fields are supported"); -- if *pinned { -+ if field.pinned { - ( - quote!( - #(#attrs)* -@@ -291,12 +302,12 @@ fn generate_projections( - .collect(); - let structurally_pinned_fields_docs = fields - .iter() -- .filter_map(|(pinned, field)| pinned.then_some(field)) -- .map(|Field { ident, .. }| format!(" - `{}`", ident.as_ref().unwrap())); -+ .filter(|f| f.pinned) -+ .map(|f| format!(" - `{}`", f.field.ident.as_ref().unwrap())); - let not_structurally_pinned_fields_docs = fields - .iter() -- .filter_map(|(pinned, field)| (!pinned).then_some(field)) -- .map(|Field { ident, .. }| format!(" - `{}`", ident.as_ref().unwrap())); -+ .filter(|f| !f.pinned) -+ .map(|f| format!(" - `{}`", f.field.ident.as_ref().unwrap())); - let docs = format!(" Pin-projections of [`{ident}`]"); - quote! { - #[doc = #docs] -@@ -336,7 +347,7 @@ fn generate_the_pin_data( - vis: &Visibility, - struct_name: &Ident, - generics: &Generics, -- fields: &[(bool, &Field)], -+ fields: &[FieldInfo<'_>], - ) -> TokenStream { - let (impl_generics, ty_generics, whr) = generics.split_for_impl(); - -@@ -347,20 +358,20 @@ fn generate_the_pin_data( - // The functions are `unsafe` to prevent accidentally calling them. - let field_accessors = fields - .iter() -- .map(|(pinned, field)| { -+ .map(|f| { - let Field { - vis, - ident, - ty, - attrs, - .. -- } = field; -+ } = f.field; - - let field_name = ident - .as_ref() - .expect("only structs with named fields are supported"); - let project_ident = format_ident!("__project_{field_name}"); -- let (init_ty, init_fn, project_ty, project_body, pin_safety) = if *pinned { -+ let (init_ty, init_fn, project_ty, project_body, pin_safety) = if f.pinned { - ( - quote!(PinInit), - quote!(__pinned_init), --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-pin_data-use-closure-for-hand.patch b/queue-7.1/rust-pin-init-internal-pin_data-use-closure-for-hand.patch deleted file mode 100644 index 565842fe54..0000000000 --- a/queue-7.1/rust-pin-init-internal-pin_data-use-closure-for-hand.patch +++ /dev/null @@ -1,210 +0,0 @@ -From 978a956693152d6a9adb9c35778a64e1dbc578ac Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 12 May 2026 13:09:46 +0100 -Subject: rust: pin-init: internal: pin_data: use closure for `handle_field` - -From: Gary Guo - -[ Upstream commit 1e648c22abfe448d284314a0d05622a242ba4eac ] - -`handle_field` is currently a function, which precludes it from referencing -things in the scope of the parent function. Given that it's only called -once, inline its contents to the closure that invokes it instead, so it can -directly reference `struct_name` without having to pass in as argument. - -Link: https://patch.msgid.link/20260512-pin-init-sync-v1-1-81963130dfbd@garyguo.net -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/pin_data.rs | 144 ++++++++++++------------- - 1 file changed, 70 insertions(+), 74 deletions(-) - -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 3e07b75903cb41..93976d4f50a285 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -334,7 +334,7 @@ fn generate_projections( - - fn generate_the_pin_data( - vis: &Visibility, -- ident: &Ident, -+ struct_name: &Ident, - generics: &Generics, - fields: &[(bool, &Field)], - ) -> TokenStream { -@@ -345,78 +345,74 @@ fn generate_the_pin_data( - // not structurally pinned, then it can be initialized via `Init`. - // - // The functions are `unsafe` to prevent accidentally calling them. -- fn handle_field( -- Field { -- vis, -- ident, -- ty, -- attrs, -- .. -- }: &Field, -- struct_ident: &Ident, -- pinned: bool, -- ) -> TokenStream { -- let ident = ident -- .as_ref() -- .expect("only structs with named fields are supported"); -- let project_ident = format_ident!("__project_{ident}"); -- let (init_ty, init_fn, project_ty, project_body, pin_safety) = if pinned { -- ( -- quote!(PinInit), -- quote!(__pinned_init), -- quote!(::core::pin::Pin<&'__slot mut #ty>), -- // SAFETY: this field is structurally pinned. -- quote!(unsafe { ::core::pin::Pin::new_unchecked(slot) }), -- quote!( -- /// - `slot` will not move until it is dropped, i.e. it will be pinned. -- ), -- ) -- } else { -- ( -- quote!(Init), -- quote!(__init), -- quote!(&'__slot mut #ty), -- quote!(slot), -- quote!(), -- ) -- }; -- let slot_safety = format!( -- " `slot` points at the field `{ident}` inside of `{struct_ident}`, which is pinned.", -- ); -- quote! { -- /// # Safety -- /// -- /// - `slot` is a valid pointer to uninitialized memory. -- /// - the caller does not touch `slot` when `Err` is returned, they are only permitted -- /// to deallocate. -- #pin_safety -- #(#attrs)* -- #vis unsafe fn #ident( -- self, -- slot: *mut #ty, -- init: impl ::pin_init::#init_ty<#ty, E>, -- ) -> ::core::result::Result<(), E> { -- // SAFETY: this function has the same safety requirements as the __init function -- // called below. -- unsafe { ::pin_init::#init_ty::#init_fn(init, slot) } -- } -- -- /// # Safety -- /// -- #[doc = #slot_safety] -- #(#attrs)* -- #vis unsafe fn #project_ident<'__slot>( -- self, -- slot: &'__slot mut #ty, -- ) -> #project_ty { -- #project_body -- } -- } -- } -- - let field_accessors = fields - .iter() -- .map(|(pinned, field)| handle_field(field, ident, *pinned)) -+ .map(|(pinned, field)| { -+ let Field { -+ vis, -+ ident, -+ ty, -+ attrs, -+ .. -+ } = field; -+ -+ let field_name = ident -+ .as_ref() -+ .expect("only structs with named fields are supported"); -+ let project_ident = format_ident!("__project_{field_name}"); -+ let (init_ty, init_fn, project_ty, project_body, pin_safety) = if *pinned { -+ ( -+ quote!(PinInit), -+ quote!(__pinned_init), -+ quote!(::core::pin::Pin<&'__slot mut #ty>), -+ // SAFETY: this field is structurally pinned. -+ quote!(unsafe { ::core::pin::Pin::new_unchecked(slot) }), -+ quote!( -+ /// - `slot` will not move until it is dropped, i.e. it will be pinned. -+ ), -+ ) -+ } else { -+ ( -+ quote!(Init), -+ quote!(__init), -+ quote!(&'__slot mut #ty), -+ quote!(slot), -+ quote!(), -+ ) -+ }; -+ let slot_safety = format!( -+ " `slot` points at the field `{field_name}` inside of `{struct_name}`, which is pinned.", -+ ); -+ quote! { -+ /// # Safety -+ /// -+ /// - `slot` is a valid pointer to uninitialized memory. -+ /// - the caller does not touch `slot` when `Err` is returned, they are only -+ /// permitted to deallocate. -+ #pin_safety -+ #(#attrs)* -+ #vis unsafe fn #field_name( -+ self, -+ slot: *mut #ty, -+ init: impl ::pin_init::#init_ty<#ty, E>, -+ ) -> ::core::result::Result<(), E> { -+ // SAFETY: this function has the same safety requirements as the __init function -+ // called below. -+ unsafe { ::pin_init::#init_ty::#init_fn(init, slot) } -+ } -+ -+ /// # Safety -+ /// -+ #[doc = #slot_safety] -+ #(#attrs)* -+ #vis unsafe fn #project_ident<'__slot>( -+ self, -+ slot: &'__slot mut #ty, -+ ) -> #project_ty { -+ #project_body -+ } -+ } -+ }) - .collect::(); - quote! { - // We declare this struct which will host all of the projection function for our type. It -@@ -426,7 +422,7 @@ fn generate_the_pin_data( - #whr - { - __phantom: ::core::marker::PhantomData< -- fn(#ident #ty_generics) -> #ident #ty_generics -+ fn(#struct_name #ty_generics) -> #struct_name #ty_generics - >, - } - -@@ -450,7 +446,7 @@ fn generate_the_pin_data( - - // SAFETY: We have added the correct projection functions above to `__ThePinData` and - // we also use the least restrictive generics possible. -- unsafe impl #impl_generics ::pin_init::__internal::HasPinData for #ident #ty_generics -+ unsafe impl #impl_generics ::pin_init::__internal::HasPinData for #struct_name #ty_generics - #whr - { - type PinData = __ThePinData #ty_generics; -@@ -464,7 +460,7 @@ fn generate_the_pin_data( - unsafe impl #impl_generics ::pin_init::__internal::PinData for __ThePinData #ty_generics - #whr - { -- type Datee = #ident #ty_generics; -+ type Datee = #struct_name #ty_generics; - } - } - } --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-project-slots-instead-of-refe.patch b/queue-7.1/rust-pin-init-internal-project-slots-instead-of-refe.patch deleted file mode 100644 index e912ecccaf..0000000000 --- a/queue-7.1/rust-pin-init-internal-project-slots-instead-of-refe.patch +++ /dev/null @@ -1,372 +0,0 @@ -From 30dbb1fbdb3a094e0f162443771ce8d219210e00 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 12 May 2026 13:09:52 +0100 -Subject: rust: pin-init: internal: project slots instead of references - -From: Gary Guo - -[ Upstream commit 5483a97dd2dfcaf8540dba0a80b68a400c4c1861 ] - -By projecting slots, the `pin_init!` and `init!` code path can be more -unified. This also reduces the amount of macro-generated code and shifts -them to the shared infrastructure. - -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/init.rs | 113 ++++++++----------------- - rust/pin-init/internal/src/pin_data.rs | 54 +++--------- - rust/pin-init/src/__internal.rs | 77 +++++++++++++++++ - rust/pin-init/src/lib.rs | 12 +-- - 4 files changed, 133 insertions(+), 123 deletions(-) - -diff --git a/rust/pin-init/internal/src/init.rs b/rust/pin-init/internal/src/init.rs -index 025cc9405470bc..aba32825fef477 100644 ---- a/rust/pin-init/internal/src/init.rs -+++ b/rust/pin-init/internal/src/init.rs -@@ -1,7 +1,7 @@ - // SPDX-License-Identifier: Apache-2.0 OR MIT - - use proc_macro2::{Span, TokenStream}; --use quote::{format_ident, quote, quote_spanned}; -+use quote::{format_ident, quote}; - use syn::{ - braced, - parse::{End, Parse}, -@@ -252,102 +252,61 @@ fn init_fields( - } - }; - -- let init = match kind { -- InitializerKind::Value { ident, value } => { -- let mut value_ident = ident.clone(); -- let value_prep = value.as_ref().map(|value| &value.1).map(|value| { -- // Setting the span of `value_ident` to `value`'s span improves error messages -- // when the type of `value` is wrong. -- value_ident.set_span(value.span()); -- quote!(let #value_ident = #value;) -- }); -- // Again span for better diagnostics -- let write = quote_spanned!(ident.span()=> ::core::ptr::write); -- quote! { -- #(#attrs)* -- { -- #value_prep -- // SAFETY: TODO -- unsafe { #write(&raw mut (*#slot).#ident, #value_ident) }; -- } -- } -- } -- InitializerKind::Init { ident, value, .. } => { -- // Again span for better diagnostics -- let init = format_ident!("init", span = value.span()); -- let value_init = if pinned { -- quote! { -- // SAFETY: -- // - `slot` is valid, because we are inside of an initializer closure, we -- // return when an error/panic occurs. -- // - We also use `#data` to require the correct trait (`Init` or `PinInit`) -- // for `#ident`. -- unsafe { #data.#ident(&raw mut (*#slot).#ident, #init)? }; -- } -- } else { -- quote! { -- // SAFETY: `slot` is valid, because we are inside of an initializer -- // closure, we return when an error/panic occurs. -- unsafe { -- ::pin_init::Init::__init( -- #init, -- &raw mut (*#slot).#ident, -- )? -- }; -- } -- }; -- quote! { -- #(#attrs)* -- { -- let #init = #value; -- #value_init -- } -- } -- } -- InitializerKind::Code { .. } => unreachable!(), -- }; -- -- // `mixed_site` ensures that the guard is not accessible to the user-controlled code. -- let guard = format_ident!("__{ident}_guard", span = Span::mixed_site()); -- -- let guard_creation = if pinned { -- let project_ident = format_ident!("__project_{ident}"); -+ let slot = if pinned { - quote! { - // SAFETY: - // - `&raw mut (*slot).#ident` points to the `#ident` field of `slot`. - // - `&raw mut (*slot).#ident` is valid. - // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -- // - `(*slot).#ident` has been initialized above. -- // - We only need the ownership to the pointee back when initialization has -- // succeeded, where we `forget` the guard. -- unsafe { #data.#project_ident(&raw mut (*slot).#ident) } -+ // - `make_field_check` prevents `#ident` from being used twice, therefore -+ // `(*slot).#ident` is exclusively accessed and has not been initialized. -+ (unsafe { #data.#ident(&raw mut (*#slot).#ident) }) - } - } else { - quote! { -+ // For `init!()` macro, everything is unpinned. - // SAFETY: - // - `&raw mut (*slot).#ident` is valid. - // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -- // - `(*slot).#ident` has been initialized above. -- // - We only need the ownership to the pointee back when initialization has -- // succeeded, where we `forget` the guard. -- unsafe { -- ::pin_init::__internal::DropGuard::<::pin_init::__internal::Unpinned, _>::new( -- &raw mut (*slot).#ident -+ // - `make_field_check` prevents `#ident` from being used twice, therefore -+ // `(*slot).#ident` is exclusively accessed and has not been initialized. -+ (unsafe { -+ ::pin_init::__internal::Slot::<::pin_init::__internal::Unpinned, _>::new( -+ &raw mut (*#slot).#ident - ) -+ }) -+ } -+ }; -+ -+ // `mixed_site` ensures that the guard is not accessible to the user-controlled code. -+ let guard = format_ident!("__{ident}_guard", span = Span::mixed_site()); -+ -+ let init = match kind { -+ InitializerKind::Value { ident, value } => { -+ let value = value -+ .as_ref() -+ .map(|(_, value)| quote!(#value)) -+ .unwrap_or_else(|| quote!(#ident)); -+ -+ quote! { -+ #(#attrs)* -+ let mut #guard = #slot.write(#value); -+ - } - } -+ InitializerKind::Init { value, .. } => { -+ quote! { -+ #(#attrs)* -+ let mut #guard = #slot.init(#value)?; -+ } -+ } -+ InitializerKind::Code { .. } => unreachable!(), - }; - - res.extend(quote! { - #init - - #(#cfgs)* -- let mut #guard = #guard_creation; -- -- #(#cfgs)* -- // NOTE: The reference is derived from the guard so that it only lives as long as the -- // guard does and cannot escape the scope. If it's created via `&mut (*#slot).#ident` -- // like the unaligned field guard, it will become effectively `'static`. - #[allow(unused_variables)] - let #ident = #guard.let_binding(); - }); -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 86130db2ee9b73..31584152b06216 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -352,10 +352,9 @@ fn generate_the_pin_data( - let (impl_generics, ty_generics, whr) = generics.split_for_impl(); - - // For every field, we create an initializing projection function according to its projection -- // type. If a field is structurally pinned, then it must be initialized via `PinInit`, if it is -- // not structurally pinned, then it can be initialized via `Init`. -- // -- // The functions are `unsafe` to prevent accidentally calling them. -+ // type. If a field is structurally pinned, we create a `Slot` with `Pinned` which must be -+ // initialized via `PinInit`; if it is not structurally pinned, then we create a `Slot` with -+ // `Unpinned` which allows initialization via `Init`. - let field_accessors = fields - .iter() - .map(|f| { -@@ -370,54 +369,29 @@ fn generate_the_pin_data( - let field_name = ident - .as_ref() - .expect("only structs with named fields are supported"); -- let project_ident = format_ident!("__project_{field_name}"); -- let (init_ty, init_fn, pin_marker, pin_safety) = if f.pinned { -- ( -- quote!(PinInit), -- quote!(__pinned_init), -- quote!(Pinned), -- quote!( -- /// - `slot` will not move until it is dropped, i.e. it will be pinned. -- ), -- ) -+ let pin_marker = if f.pinned { -+ quote!(Pinned) - } else { -- (quote!(Init), quote!(__init), quote!(Unpinned), quote!()) -+ quote!(Unpinned) - }; - quote! { - /// # Safety - /// -- /// - `slot` is a valid pointer to uninitialized memory. -- /// - the caller does not touch `slot` when `Err` is returned, they are only -- /// permitted to deallocate. -- #pin_safety -- #(#attrs)* -- #vis unsafe fn #field_name( -- self, -- slot: *mut #ty, -- init: impl ::pin_init::#init_ty<#ty, E>, -- ) -> ::core::result::Result<(), E> { -- // SAFETY: this function has the same safety requirements as the __init function -- // called below. -- unsafe { ::pin_init::#init_ty::#init_fn(init, slot) } -- } -- -- /// # Safety -- /// -- /// - `slot` points to a `#ident` field of a pinned struct that this `__ThePinData` -- /// describes. -- /// - `slot` is valid and properly aligned. -- /// - `*slot` is initialized, and the ownership is transferred to the returned -- /// guard. -+ /// - `slot` points to a `#field_name` field of a pinned struct that this -+ /// `__ThePinData` describes. -+ /// - `slot` is a valid, properly aligned and points to uninitialized and -+ /// exclusively accessed memory. - #(#attrs)* -- #vis unsafe fn #project_ident( -+ #[inline(always)] -+ #vis unsafe fn #field_name( - self, - slot: *mut #ty, -- ) -> ::pin_init::__internal::DropGuard<::pin_init::__internal::#pin_marker, #ty> { -+ ) -> ::pin_init::__internal::Slot<::pin_init::__internal::#pin_marker, #ty> { - // SAFETY: - // - If `#pin_marker` is `Pinned`, the corresponding field is structurally - // pinned. - // - Other safety requirements follows the safety requirement. -- unsafe { ::pin_init::__internal::DropGuard::new(slot) } -+ unsafe { ::pin_init::__internal::Slot::new(slot) } - } - } - }) -diff --git a/rust/pin-init/src/__internal.rs b/rust/pin-init/src/__internal.rs -index 855acc67273139..879bc2307f7c0f 100644 ---- a/rust/pin-init/src/__internal.rs -+++ b/rust/pin-init/src/__internal.rs -@@ -239,6 +239,83 @@ fn stack_init_reuse() { - pub struct Pinned; - pub struct Unpinned; - -+/// Represent an uninitialized field. -+/// -+/// # Invariants -+/// -+/// - `ptr` is valid, properly aligned and points to uninitialized and exclusively accessed memory. -+/// - If `P` is `Pinned`, then `ptr` is structurally pinned. -+pub struct Slot { -+ ptr: *mut T, -+ _phantom: PhantomData

, -+} -+ -+impl Slot { -+ /// # Safety -+ /// -+ /// - `ptr` is valid, properly aligned and points to uninitialized and exclusively accessed -+ /// memory. -+ /// - If `P` is `Pinned`, then `ptr` is structurally pinned. -+ #[inline(always)] -+ pub unsafe fn new(ptr: *mut T) -> Self { -+ // INVARIANT: Per safety requirement. -+ Self { -+ ptr, -+ _phantom: PhantomData, -+ } -+ } -+ -+ /// Initialize the field by value. -+ #[inline(always)] -+ pub fn write(self, value: T) -> DropGuard -+ where -+ T: Sized, -+ { -+ // SAFETY: `self.ptr` is a valid and aligned pointer for write. -+ unsafe { self.ptr.write(value) } -+ // SAFETY: -+ // - `self.ptr` is valid and properly aligned per type invariant. -+ // - `*self.ptr` is initialized above and the ownership is transferred to the guard. -+ // - If `P` is `Pinned`, `self.ptr` is pinned. -+ unsafe { DropGuard::new(self.ptr) } -+ } -+} -+ -+impl Slot { -+ /// Initialize the field. -+ #[inline(always)] -+ pub fn init(self, init: impl Init) -> Result, E> { -+ // SAFETY: -+ // - `self.ptr` is valid and properly aligned. -+ // - when `Err` is returned, we also propagate the error without touching `slot`; -+ // also `self` is consumed so it cannot be touched further. -+ unsafe { init.__init(self.ptr)? }; -+ -+ // SAFETY: -+ // - `self.ptr` is valid and properly aligned per type invariant. -+ // - `*self.ptr` is initialized above and the ownership is transferred to the guard. -+ Ok(unsafe { DropGuard::new(self.ptr) }) -+ } -+} -+ -+impl Slot { -+ /// Initialize the field. -+ #[inline(always)] -+ pub fn init(self, init: impl PinInit) -> Result, E> { -+ // SAFETY: -+ // - `self.ptr` is valid and properly aligned. -+ // - when `Err` is returned, we also propagate the error without touching `ptr`; -+ // also `self` is consumed so it cannot be touched further. -+ // - the drop guard will not hand out `&mut` (only `Pin<&mut T>`). -+ unsafe { init.__pinned_init(self.ptr)? }; -+ -+ // SAFETY: -+ // - `self.ptr` is valid, properly aligned and pinned per type invariant. -+ // - `*self.ptr` is initialized above and the ownership is transferred to the guard. -+ Ok(unsafe { DropGuard::new(self.ptr) }) -+ } -+} -+ - /// When a value of this type is dropped, it drops a `T`. - /// - /// Can be forgotten to prevent the drop. -diff --git a/rust/pin-init/src/lib.rs b/rust/pin-init/src/lib.rs -index 64eec095c859c0..06e67de0d69feb 100644 ---- a/rust/pin-init/src/lib.rs -+++ b/rust/pin-init/src/lib.rs -@@ -873,12 +873,12 @@ pub use pin_init_internal::init; - #[macro_export] - macro_rules! assert_pinned { - ($ty:ty, $field:ident, $field_ty:ty, inline) => { -- let _ = move |ptr: *mut $field_ty| { -- // SAFETY: This code is unreachable. -- let data = unsafe { <$ty as $crate::__internal::HasPinData>::__pin_data() }; -- let init = $crate::__internal::AlwaysFail::<$field_ty>::new(); -- // SAFETY: This code is unreachable. -- unsafe { data.$field(ptr, init) }.ok(); -+ // SAFETY: This code is unreachable. -+ let _ = move |ptr: *mut $field_ty| unsafe { -+ let data = <$ty as $crate::__internal::HasPinData>::__pin_data(); -+ _ = data -+ .$field(ptr) -+ .init($crate::__internal::AlwaysFail::<$field_ty>::new()); - }; - }; - --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-remove-collect_tuple-polyfill.patch b/queue-7.1/rust-pin-init-internal-remove-collect_tuple-polyfill.patch deleted file mode 100644 index e09bbc49d2..0000000000 --- a/queue-7.1/rust-pin-init-internal-remove-collect_tuple-polyfill.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 44c55d989c24146d2a12dff63a1550012c4c0db7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 1 May 2026 14:44:45 +0100 -Subject: rust: pin-init: internal: remove `collect_tuple` polyfill after MSRV - bump - -From: Gary Guo - -[ Upstream commit faed81945d0bfcced81a2738d9681a265d41079a ] - -Tuples implement `FromIterator` since Rust 1.79. Remove the `collect_tuple` -polyfill now the MSRV is above 1.79. - -To avoid over-identing the closure, I move the `Field` destructure from the -closure parameter to a let binding. This keeps the diff small. - -Link: https://patch.msgid.link/20260501134445.3809731-1-gary@garyguo.net -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/pin_data.rs | 27 ++++++++------------------ - 1 file changed, 8 insertions(+), 19 deletions(-) - -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 2971e4f303828c..3e07b75903cb41 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -247,17 +247,17 @@ fn generate_projections( - let projection = format_ident!("{ident}Projection"); - let this = format_ident!("this"); - -- let (fields_decl, fields_proj) = collect_tuple(fields.iter().map( -- |( -- pinned, -- Field { -+ let (fields_decl, fields_proj): (Vec<_>, Vec<_>) = fields -+ .iter() -+ .map(|(pinned, field)| { -+ let Field { - vis, - ident, - ty, - attrs, - .. -- }, -- )| { -+ } = field; -+ - let mut no_doc_attrs = attrs.clone(); - no_doc_attrs.retain(|a| !a.path().is_ident("doc")); - let ident = ident -@@ -287,8 +287,8 @@ fn generate_projections( - ), - ) - } -- }, -- )); -+ }) -+ .collect(); - let structurally_pinned_fields_docs = fields - .iter() - .filter_map(|(pinned, field)| pinned.then_some(field)) -@@ -496,14 +496,3 @@ impl VisitMut for SelfReplacer { - // Do not descend into items, since items reset/change what `Self` refers to. - } - } -- --// replace with `.collect()` once MSRV is above 1.79 --fn collect_tuple(iter: impl Iterator) -> (Vec, Vec) { -- let mut res_a = vec![]; -- let mut res_b = vec![]; -- for (a, b) in iter { -- res_a.push(a); -- res_b.push(b); -- } -- (res_a, res_b) --} --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-remove-redundant-pin-filterin.patch b/queue-7.1/rust-pin-init-internal-remove-redundant-pin-filterin.patch deleted file mode 100644 index 159191149e..0000000000 --- a/queue-7.1/rust-pin-init-internal-remove-redundant-pin-filterin.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 6f71978b7a77894d2eda9aa9be746d6bb873711e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 28 Apr 2026 14:10:55 +0100 -Subject: rust: pin-init: internal: remove redundant `#[pin]` filtering - -From: Gary Guo - -[ Upstream commit c64c793d9a162768a78f98f99774b5df6d360d0b ] - -The `generate_projections` and `generate_the_pin_data` function already -receive filtered field lists, they do not need to filter out `#[pin]` -again. - -Reviewed-by: Benno Lossin -Link: https://patch.msgid.link/20260428-pin-init-sync-v1-6-07f9bd3859fb@garyguo.net -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/pin_data.rs | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 7d871236b49c7e..db32c90b84519b 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -258,8 +258,6 @@ fn generate_projections( - .. - }, - )| { -- let mut attrs = attrs.clone(); -- attrs.retain(|a| !a.path().is_ident("pin")); - let mut no_doc_attrs = attrs.clone(); - no_doc_attrs.retain(|a| !a.path().is_ident("doc")); - let ident = ident -@@ -358,8 +356,6 @@ fn generate_the_pin_data( - struct_ident: &Ident, - pinned: bool, - ) -> TokenStream { -- let mut attrs = attrs.clone(); -- attrs.retain(|a| !a.path().is_ident("pin")); - let ident = ident - .as_ref() - .expect("only structs with named fields are supported"); --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-suppress-non_snake_case-lint-.patch b/queue-7.1/rust-pin-init-internal-suppress-non_snake_case-lint-.patch deleted file mode 100644 index 83111b489c..0000000000 --- a/queue-7.1/rust-pin-init-internal-suppress-non_snake_case-lint-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 54db70c2ed9fb176f2f097a04c55b67071dc0db7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 27 May 2026 18:19:54 +0100 -Subject: rust: pin-init: internal: suppress `non_snake_case` lint in - `[pin_]init!` - -From: Mirko Adzic - -[ Upstream commit 5423ef9d4db852835746001d0840231227bb0e39 ] - -Allows `non_snake_case` lint on local variables generated in `[pin_]init!`. - -Conceptually the identifiers in `[pin_]init!` just references the field -names, and are not defining them, so the warning should not be generated, -similar to how constructing a struct with non-snake-case field names do no -generate these warnings. - -Reported-by: Gary Guo -Closes: https://github.com/Rust-for-Linux/pin-init/issues/125 -Closes: https://lore.kernel.org/rust-for-linux/DGTBJBIVFZ2K.2F1ZEFGY0G7NK@garyguo.net/ -Fixes: 42415d163e5d ("rust: pin-init: add references to previously initialized fields") -Signed-off-by: Mirko Adzic -[ Reworded commit message - Gary ] -Link: https://patch.msgid.link/20260527-pin-init-sync-v1-3-e20335ed2501@garyguo.net -Signed-off-by: Gary Guo -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/init.rs | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/rust/pin-init/internal/src/init.rs b/rust/pin-init/internal/src/init.rs -index aba32825fef477..45528ab82f6a82 100644 ---- a/rust/pin-init/internal/src/init.rs -+++ b/rust/pin-init/internal/src/init.rs -@@ -307,7 +307,9 @@ fn init_fields( - #init - - #(#cfgs)* -- #[allow(unused_variables)] -+ // Allow `non_snake_case` since the same warning is going to be reported for the struct -+ // field. -+ #[allow(unused_variables, non_snake_case)] - let #ident = #guard.let_binding(); - }); - --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-turn-phantompinned-error-into.patch b/queue-7.1/rust-pin-init-internal-turn-phantompinned-error-into.patch deleted file mode 100644 index 2830e4c8da..0000000000 --- a/queue-7.1/rust-pin-init-internal-turn-phantompinned-error-into.patch +++ /dev/null @@ -1,84 +0,0 @@ -From cde5c6418a785071df4fdb205d440d24bc839726 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 28 Apr 2026 14:10:59 +0100 -Subject: rust: pin-init: internal: turn `PhantomPinned` error into warnings - -From: Gary Guo - -[ Upstream commit e5cece935531997cd9903c129cc9a2471ed05a4b ] - -The `PhantomPinned` detection is just a lint, and is emitted as an error -because there is no `compile_warning!()` macro, and -`proc-macro-diagnostics` is not stable. - -Use of `#[deprecated = ""]` attribute to approximate custom proc-macro -warnings. A new line is added before message for visual clarity. - -An example warning with this trick looks like this: - - warning: use of deprecated function `_::warn`: - The field `pin` of type `PhantomPinned` only has an effect if it has the `#[pin]` attribute - --> test.rs:9:5 - | - 9 | pin: marker::PhantomPinned, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Suggested-by: Benno Lossin -Link: https://github.com/Rust-for-Linux/pin-init/issues/51 -Link: https://patch.msgid.link/20260428-pin-init-sync-v1-10-07f9bd3859fb@garyguo.net -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/diagnostics.rs | 14 ++++++++++++++ - rust/pin-init/internal/src/pin_data.rs | 2 +- - 2 files changed, 15 insertions(+), 1 deletion(-) - -diff --git a/rust/pin-init/internal/src/diagnostics.rs b/rust/pin-init/internal/src/diagnostics.rs -index 3bdb477c2f2b8c..c7d9b3e624fc8a 100644 ---- a/rust/pin-init/internal/src/diagnostics.rs -+++ b/rust/pin-init/internal/src/diagnostics.rs -@@ -3,6 +3,7 @@ - use std::fmt::Display; - - use proc_macro2::TokenStream; -+use quote::quote_spanned; - use syn::{spanned::Spanned, Error}; - - pub(crate) struct DiagCtxt(TokenStream); -@@ -15,6 +16,19 @@ impl DiagCtxt { - ErrorGuaranteed(()) - } - -+ pub(crate) fn warn(&mut self, span: impl Spanned, msg: impl Display) { -+ // Have the message start on a new line for visual clarity. -+ let msg = format!("\n{}", msg); -+ self.0.extend(quote_spanned!(span.span() => -+ // Approximate using deprecated warning while `proc_macro_diagnostic` is unstable. -+ const _: () = { -+ #[deprecated = #msg] -+ const fn warn() {} -+ warn(); -+ }; -+ )); -+ } -+ - pub(crate) fn with( - fun: impl FnOnce(&mut DiagCtxt) -> Result, - ) -> TokenStream { -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index db32c90b84519b..2971e4f303828c 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -85,7 +85,7 @@ pub(crate) fn pin_data( - - for (pinned, field) in &fields { - if !pinned && is_phantom_pinned(&field.ty) { -- dcx.error( -+ dcx.warn( - field, - format!( - "The field `{}` of type `PhantomPinned` only has an effect \ --- -2.53.0 - diff --git a/queue-7.1/rust-pin-init-internal-use-marker-on-drop-guard-type.patch b/queue-7.1/rust-pin-init-internal-use-marker-on-drop-guard-type.patch deleted file mode 100644 index 343e6114a7..0000000000 --- a/queue-7.1/rust-pin-init-internal-use-marker-on-drop-guard-type.patch +++ /dev/null @@ -1,237 +0,0 @@ -From 8b6b3effce45539265a0b96deeaecaa1bebbe6b3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 12 May 2026 13:09:50 +0100 -Subject: rust: pin-init: internal: use marker on drop guard type for pinned - fields - -From: Gary Guo - -[ Upstream commit 27693a56e8a697f78db535aad2d5267f286e1f51 ] - -Instead of projecting the created reference, simply create drop guards with -different marker types and have the `let_binding()` method of guards of -different marker produce different type instead. - -This allows more flexible lifetime as this is now controlled by the guard. -This will be needed when implementing self-referential fields. - -Signed-off-by: Gary Guo -Stable-dep-of: 5423ef9d4db8 ("rust: pin-init: internal: suppress `non_snake_case` lint in `[pin_]init!`") -Signed-off-by: Sasha Levin ---- - rust/pin-init/internal/src/init.rs | 47 ++++++++++++++------------ - rust/pin-init/internal/src/pin_data.rs | 35 +++++++++---------- - rust/pin-init/src/__internal.rs | 30 +++++++++++++--- - 3 files changed, 68 insertions(+), 44 deletions(-) - -diff --git a/rust/pin-init/internal/src/init.rs b/rust/pin-init/internal/src/init.rs -index 0e19169d022ad9..025cc9405470bc 100644 ---- a/rust/pin-init/internal/src/init.rs -+++ b/rust/pin-init/internal/src/init.rs -@@ -310,18 +310,31 @@ fn init_fields( - // `mixed_site` ensures that the guard is not accessible to the user-controlled code. - let guard = format_ident!("__{ident}_guard", span = Span::mixed_site()); - -- // NOTE: The reference is derived from the guard so that it only lives as long as the -- // guard does and cannot escape the scope. If it's created via `&mut (*#slot).#ident` -- // like the unaligned field guard, it will become effectively `'static`. -- let accessor = if pinned { -+ let guard_creation = if pinned { - let project_ident = format_ident!("__project_{ident}"); - quote! { -- // SAFETY: the initialization is pinned. -- unsafe { #data.#project_ident(#guard.let_binding()) } -+ // SAFETY: -+ // - `&raw mut (*slot).#ident` points to the `#ident` field of `slot`. -+ // - `&raw mut (*slot).#ident` is valid. -+ // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -+ // - `(*slot).#ident` has been initialized above. -+ // - We only need the ownership to the pointee back when initialization has -+ // succeeded, where we `forget` the guard. -+ unsafe { #data.#project_ident(&raw mut (*slot).#ident) } - } - } else { - quote! { -- #guard.let_binding() -+ // SAFETY: -+ // - `&raw mut (*slot).#ident` is valid. -+ // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -+ // - `(*slot).#ident` has been initialized above. -+ // - We only need the ownership to the pointee back when initialization has -+ // succeeded, where we `forget` the guard. -+ unsafe { -+ ::pin_init::__internal::DropGuard::<::pin_init::__internal::Unpinned, _>::new( -+ &raw mut (*slot).#ident -+ ) -+ } - } - }; - -@@ -329,24 +342,16 @@ fn init_fields( - #init - - #(#cfgs)* -- // Create the drop guard. -- // -- // SAFETY: -- // - `&raw mut (*slot).#ident` is valid. -- // - `make_field_check` checks that `&raw mut (*slot).#ident` is properly aligned. -- // - `(*slot).#ident` has been initialized above. -- // - We only need the ownership to the pointee back when initialization has -- // succeeded, where we `forget` the guard. -- let mut #guard = unsafe { -- ::pin_init::__internal::DropGuard::new( -- &raw mut (*slot).#ident -- ) -- }; -+ let mut #guard = #guard_creation; - - #(#cfgs)* -+ // NOTE: The reference is derived from the guard so that it only lives as long as the -+ // guard does and cannot escape the scope. If it's created via `&mut (*#slot).#ident` -+ // like the unaligned field guard, it will become effectively `'static`. - #[allow(unused_variables)] -- let #ident = #accessor; -+ let #ident = #guard.let_binding(); - }); -+ - guards.push(guard); - guard_attrs.push(cfgs); - } -diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs -index 7e529fc4d276ef..86130db2ee9b73 100644 ---- a/rust/pin-init/internal/src/pin_data.rs -+++ b/rust/pin-init/internal/src/pin_data.rs -@@ -371,29 +371,18 @@ fn generate_the_pin_data( - .as_ref() - .expect("only structs with named fields are supported"); - let project_ident = format_ident!("__project_{field_name}"); -- let (init_ty, init_fn, project_ty, project_body, pin_safety) = if f.pinned { -+ let (init_ty, init_fn, pin_marker, pin_safety) = if f.pinned { - ( - quote!(PinInit), - quote!(__pinned_init), -- quote!(::core::pin::Pin<&'__slot mut #ty>), -- // SAFETY: this field is structurally pinned. -- quote!(unsafe { ::core::pin::Pin::new_unchecked(slot) }), -+ quote!(Pinned), - quote!( - /// - `slot` will not move until it is dropped, i.e. it will be pinned. - ), - ) - } else { -- ( -- quote!(Init), -- quote!(__init), -- quote!(&'__slot mut #ty), -- quote!(slot), -- quote!(), -- ) -+ (quote!(Init), quote!(__init), quote!(Unpinned), quote!()) - }; -- let slot_safety = format!( -- " `slot` points at the field `{field_name}` inside of `{struct_name}`, which is pinned.", -- ); - quote! { - /// # Safety - /// -@@ -414,13 +403,21 @@ fn generate_the_pin_data( - - /// # Safety - /// -- #[doc = #slot_safety] -+ /// - `slot` points to a `#ident` field of a pinned struct that this `__ThePinData` -+ /// describes. -+ /// - `slot` is valid and properly aligned. -+ /// - `*slot` is initialized, and the ownership is transferred to the returned -+ /// guard. - #(#attrs)* -- #vis unsafe fn #project_ident<'__slot>( -+ #vis unsafe fn #project_ident( - self, -- slot: &'__slot mut #ty, -- ) -> #project_ty { -- #project_body -+ slot: *mut #ty, -+ ) -> ::pin_init::__internal::DropGuard<::pin_init::__internal::#pin_marker, #ty> { -+ // SAFETY: -+ // - If `#pin_marker` is `Pinned`, the corresponding field is structurally -+ // pinned. -+ // - Other safety requirements follows the safety requirement. -+ unsafe { ::pin_init::__internal::DropGuard::new(slot) } - } - } - }) -diff --git a/rust/pin-init/src/__internal.rs b/rust/pin-init/src/__internal.rs -index 5720a621aed74b..855acc67273139 100644 ---- a/rust/pin-init/src/__internal.rs -+++ b/rust/pin-init/src/__internal.rs -@@ -235,6 +235,10 @@ fn stack_init_reuse() { - println!("{value:?}"); - } - -+// Marker types that determines type of `DropGuard`'s let bindings. -+pub struct Pinned; -+pub struct Unpinned; -+ - /// When a value of this type is dropped, it drops a `T`. - /// - /// Can be forgotten to prevent the drop. -@@ -243,11 +247,13 @@ fn stack_init_reuse() { - /// - /// - `ptr` is valid and properly aligned. - /// - `*ptr` is initialized and owned by this guard. --pub struct DropGuard { -+/// - if `P` is `Pinned`, `ptr` is pinned. -+pub struct DropGuard { - ptr: *mut T, -+ phantom: PhantomData

, - } - --impl DropGuard { -+impl DropGuard { - /// Creates a drop guard and transfer the ownership of the pointer content. - /// - /// The ownership is only relinguished if the guard is forgotten via [`core::mem::forget`]. -@@ -256,12 +262,18 @@ impl DropGuard { - /// - /// - `ptr` is valid and properly aligned. - /// - `*ptr` is initialized, and the ownership is transferred to this guard. -+ /// - if `P` is `Pinned`, `ptr` is pinned. - #[inline] - pub unsafe fn new(ptr: *mut T) -> Self { - // INVARIANT: By safety requirement. -- Self { ptr } -+ Self { -+ ptr, -+ phantom: PhantomData, -+ } - } -+} - -+impl DropGuard { - /// Create a let binding for accessor use. - #[inline] - pub fn let_binding(&mut self) -> &mut T { -@@ -270,7 +282,17 @@ impl DropGuard { - } - } - --impl Drop for DropGuard { -+impl DropGuard { -+ /// Create a let binding for accessor use. -+ #[inline] -+ pub fn let_binding(&mut self) -> Pin<&mut T> { -+ // SAFETY: `self.ptr` is valid, properly aligned, initialized, exclusively accessible and -+ // pinned per type invariant. -+ unsafe { Pin::new_unchecked(&mut *self.ptr) } -+ } -+} -+ -+impl Drop for DropGuard { - #[inline] - fn drop(&mut self) { - // SAFETY: `self.ptr` is valid, properly aligned and `*self.ptr` is owned by this guard. --- -2.53.0 - diff --git a/queue-7.1/scsi-advansys-drop-isa_dma_api-remnants.patch b/queue-7.1/scsi-advansys-drop-isa_dma_api-remnants.patch deleted file mode 100644 index bb8d1c67e6..0000000000 --- a/queue-7.1/scsi-advansys-drop-isa_dma_api-remnants.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 0ab7d2f2122293e0c78b5c93a1b8013d1d893662 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Apr 2026 17:15:37 +0200 -Subject: scsi: advansys: Drop ISA_DMA_API remnants - -From: Arnd Bergmann - -[ Upstream commit c7233b3d99db9760daf07c4e95daa9675c6c0cba ] - -Support for ISA bus mastering was removed a few years ago, and the VLB -mode does not use the ISA DMA API, so drop the dependency and the header -inclusion. - -Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") -Signed-off-by: Arnd Bergmann -Reviewed-by: Johannes Thumshirn -Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/Kconfig | 1 - - drivers/scsi/advansys.c | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index fc8e8b0bfa3912..c3042393af234f 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -474,7 +474,6 @@ config SCSI_ADVANSYS - tristate "AdvanSys SCSI support" - depends on SCSI - depends on (ISA || EISA || PCI) && HAS_IOPORT -- depends on ISA_DMA_API || !ISA - help - This is a driver for all SCSI host adapters manufactured by - AdvanSys. It is documented in the kernel source in -diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c -index fcf059bf41e855..5cdbf2bdb13df4 100644 ---- a/drivers/scsi/advansys.c -+++ b/drivers/scsi/advansys.c -@@ -36,7 +36,6 @@ - #include - - #include --#include - - #include - #include --- -2.53.0 - diff --git a/queue-7.1/series b/queue-7.1/series index e550e42976..42a1103da7 100644 --- a/queue-7.1/series +++ b/queue-7.1/series @@ -106,7 +106,6 @@ kconfig-fix-potential-null-pointer-dereference-in-co.patch soc-xilinx-fix-race-condition-in-event-registration.patch soc-xilinx-shutdown-and-free-rx-mailbox-channel.patch pinctrl-mediatek-eint-drop-base-from-mtk_eint_chip_w.patch -scsi-advansys-drop-isa_dma_api-remnants.patch wifi-ath9k-fix-oob-access-from-firmware-tx-status-qu.patch wifi-ath11k-cancel-ssr-work-items-during-pci-shutdow.patch arm-dts-am335x-sl50-fix-audio-bitclock-and-frame-mas.patch @@ -380,15 +379,6 @@ edac-igen6-fix-memory-topology-parsing-for-panther-l.patch edac-skx_common-skx-fix-ubsan-shift-out-of-bounds-in.patch arm64-dts-st-fix-sai-addresses-on-stm32mp251.patch arm-dts-bcm2711-fix-typo-in-gpio-line-names.patch -rust-pin-init-internal-remove-redundant-pin-filterin.patch -rust-pin-init-internal-turn-phantompinned-error-into.patch -rust-pin-init-internal-remove-collect_tuple-polyfill.patch -rust-pin-init-internal-pin_data-use-closure-for-hand.patch -rust-pin-init-internal-pin_data-add-struct-to-record.patch -rust-pin-init-internal-init-handle-code-blocks-early.patch -rust-pin-init-internal-use-marker-on-drop-guard-type.patch -rust-pin-init-internal-project-slots-instead-of-refe.patch -rust-pin-init-internal-suppress-non_snake_case-lint-.patch rdma-umem-add-ib_umem_is_contiguous-stub-for-config_.patch rdma-rxe-fix-toctou-heap-overflow-in-get_srq_wqe.patch rdma-rxe-copy-wqe-to-local-buffer-in-non-srq-receive.patch @@ -800,14 +790,12 @@ powerpc-perf-fix-preempt-count-underflow-in-fsl_emb_.patch powerpc-powernv-fix-preempt-count-leak-in-pnv_kexec_.patch powerpc-kexec-fix-double-get_cpu-imbalance-in-kexec_.patch keys-use-acquire-when-reading-state-in-keyring-searc.patch -dt-bindings-vendor-prefixes-add-gira.patch tipc-fix-uaf-in-tipc_l2_send_msg.patch tcp-ipv6-clamp-default-adverting-mss-to-avoid-gso_by.patch net-airoha-fix-always-true-condition-in-ppe1-queue-r.patch net-ti-icssg-prueth-fix-af_xdp-fill-ring-alloc-and-w.patch net-ti-icssg-use-undirected-tx-tag-for-native-xdp-in.patch net-ti-icssg-use-undirected-tx-tag-for-xdp-zero-copy.patch -net-ethernet-oa_tc6-interrupt-is-active-low-level-tr.patch net-ethernet-oa_tc6-mdiobus-parent-initialized-with-.patch net-ethernet-oa_tc6-remove-fcs-size-in-rx-frame.patch dt-bindings-net-updated-interrupt-type-to-be-active-.patch