summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-10-21Merge branch 'pci/controller/dwc-rcar-gen4'Bjorn Helgaas
- Limit Max_Read_Request_Size to 256 to avoid hardware erratum (Marek Vasut) - Add a .post_deinit() callback to handle dw_pcie_ep_init() failures (Marek Vasut) - Rework .additional_common_init() into .init() to simplify flow (Marek Vasut) - Add .deinit() and .speed_control() callbacks, both to prepare for R-Car Gen5 SoC support (Marek Vasut) - Support PERST# via reset subsystem as well as the existing GPIO support to prepare for R-Car Gen5 SoCs (Marek Vasut) - Add DT and driver support for the R-Car Gen 5 X5H (R8A78000) PCIe Gen 4 core (Marek Vasut) - Drop documentation about obtaining R-Car platform firmware, which is obsolete now that it's available in the linux-firmware.git repository (Marek Vasut) - Add Application/Local register reset DT description and driver support for both host and endpoint mode (Marek Vasut) - Add PM ops so controller works after suspend/resume (Marek Vasut) * pci/controller/dwc-rcar-gen4: PCI: rcar-gen4: Add missing PM ops PCI: rcar-gen4: Add Application/Local register reset control dt-bindings: PCI: rcar-gen4-pci-ep: Document Application/Local register reset dt-bindings: PCI: rcar-gen4-pci-host: Document Application/Local register reset PCI: rcar-gen4: Drop documentation about obtaining platform firmware PCI: rcar-gen4: Add support for R-Car X5H PCIe4 PCI: rcar-gen4: Handle PERST# via reset subsystem PCI: rcar-gen4: Add .speed_control() callback PCI: rcar-gen4: Add .deinit() callback PCI: rcar-gen4: Rework .additional_common_init() into .init() dt-bindings: PCI: rcar-gen4-pci-host: Add R-Car X5H PCIe4 compatible PCI: rcar-gen4: Use .post_deinit() to handle dw_pcie_ep_init() failures PCI: dwc: Add dw_pcie_ep_ops->post_deinit() callback PCI: rcar-gen4: Limit Max_Read_Request_Size to 256 Bytes # Conflicts: # drivers/pci/controller/dwc/pcie-rcar-gen4.c
2026-10-21Merge branch 'pci/controller/dwc-qcom'Bjorn Helgaas
- Only collect reset GPIOs from PCI bridge DT nodes to avoid stealing resets used by downstream devices like USB controllers (Christopher Obbard) - Block accesses to downstream devices on link down to reduce a storm of Completion Timeout AER interrupts (Qiang Yu) - Skip system suspend/resume for firmware-managed PCIe, where firmware manages clocks, regulators, resets, etc (Mrinmay Sarkar) - Honor IOMMU provider's #iommu-cells in qcom_pcie_config_sid_1_9_0() (Manivannan Sadhasivam) - Deinitialize endpoint on remove (Guangshuo Li) - Treat Root Port error recovery as successful even if link doesn't come up after reset because the device was hot-unplugged (Konrad Dybcio) - Skip unnecessary iMSI-RX initialization if DT 'msi-map' is present, indicating an external MSI controller (Ayiluri Naga Rashmi) * pci/controller/dwc-qcom: PCI: qcom: Skip DWC MSI host initialization when DT 'msi-map' is present PCI: qcom: Ignore -ENODEV after Root Port reset PCI: qcom-ep: Deinitialize endpoint on remove PCI: qcom: Honor IOMMU provider's #iommu-cells in qcom_pcie_config_sid_1_9_0() PCI: qcom: Skip system suspend/resume for firmware-managed PCIe PCI: qcom: Block accesses to downstream devices on link down PCI: qcom: Only check bridge nodes for PERST# GPIOs
2026-10-21Merge branch 'pci/controller/dwc-layerscape'Bjorn Helgaas
- Enable PROBE_PREFER_ASYNCHRONOUS to reduce probe time of the four controllers on LX2160A (Vincent Jardin) * pci/controller/dwc-layerscape: PCI: layerscape: Enable async probe by default
2026-10-21Merge branch 'pci/controller/dwc-keystone'Bjorn Helgaas
- Remove device links to PHY, which are redundant because the PHY core itself adds them (Vladimir Oltean) * pci/controller/dwc-keystone: PCI: keystone: Remove device links to PHY
2026-10-21Merge branch 'pci/controller/dwc-imx6'Bjorn Helgaas
- Fix pwrctrl device leak when .probe() PM runtime setup fails (Zhijian Han) - Fix resource leaks in .probe() error paths (Zhijian Han) - Improve i.MX95 Gen3 link stability by changing MPLLB_BANDWIDTH from default 120 to 140 (Richard Zhu) - Use dev_err_probe() in host init error path to silence -EPROBE_DEFER messages (Alexander Stein) - Avoid dereferencing NULL clock names when 'clocks' includes more phandles than 'clock-names' has names (Rudi Heitbaum) - Add suspend_poweroff flag so platforms like i.MX that power off RC controllers during suspend can enter L2 so endpoints can get PME_Turn_Off notifications before power loss (Richard Zhu) - Use regmap_assign_bits() to simplify conditional set/clear blocks (Peng Fan) * pci/controller/dwc-imx6: PCI: dwc: imx6: Use regmap_assign_bits() for conditional set/clear PCI: dwc: Add suspend_poweroff flag for platforms with RC power loss PCI: imx6: Avoid dereferencing a NULL clock name PCI: imx6: Use dev_err_probe() in error path of pci_pwrctrl_power_on_devices() PCI: imx6: Update MPLLB bandwidth to improve i.MX95 Gen3 PCIe stability PCI: imx6: Fix resource leaks in probe error paths PCI: imx6: Fix pwrctrl device leak on PM runtime setup failure
2026-10-21Merge branch 'pci/controller/dwc-eswin'Bjorn Helgaas
- Publish the platform driver MODULE_DEVICE_TABLE so the driver can be autoloaded when built as a module (Pengpeng Hou) * pci/controller/dwc-eswin: PCI: eswin: Publish the platform driver OF alias
2026-10-21Merge branch 'pci/controller/dwc-dra7xx'Bjorn Helgaas
- Remove device links to PHY, which are redundant because the PHY core itself adds them (Vladimir Oltean) - Fix optional clock leak when .probe() fails by using devm_clk_get_optional_enabled() (Felix Gu) * pci/controller/dwc-dra7xx: PCI: dra7xx: Fix clock enable leak on probe failure PCI: dra7xx: Remove device links to PHY
2026-10-21Merge branch 'pci/controller/dwc'Bjorn Helgaas
- Align register macros with Synopsys documentation (Hans Zhang) - Remove unused PCIE_ATU_UNR_* register definitions; the driver now uses ATU_* macros instead (Hans Zhang) - Set DMA_BYPASS bit in outbound IATU CTRL2 register to avoid data corruption if the iATU translates DMA engine transactions (Sumit Kumar) - Correct Kconfig help text reference to PCIE_DW_PLAT_EP (Philippe Lecointre) - Rename dw_pcie_allocate_domains() to dw_pcie_allocate_msi_domains() for clarity (Shawn Lin) - Rename pp->irq_domain to pp->msi_irq_domain for clarity (Shawn Lin) - Use FIELD_PREP() to remove need for *_SHIFT definitions (Hans Zhang) * pci/controller/dwc: PCI: dwc: Describe DWC PCIe fields with full masks and FIELD_PREP() PCI: dwc: Rename pp->irq_domain to pp->msi_irq_domain PCI: dwc: Rename dw_pcie_allocate_domains() to dw_pcie_allocate_msi_domains() PCI: dwc: Correct PCIE_DW_PLAT_EP reference in Kconfig help PCI: dwc: Set DMA_BYPASS bit in outbound IATU CTRL2 register PCI: dwc: Remove unused PCIE_ATU_UNR_* register definitions PCI: dwc: Align register macros with Synopsys documentation
2026-10-21Merge branch 'pci/controller/rockchip'Bjorn Helgaas
- Limit host and endpoint controllers to 2.5 GT/s since 5.0 GT/s is unsafe per Rockchip (Geraldo Nascimento) * pci/controller/rockchip: PCI: rockchip: Drive at 2.5 GT/s, error other speeds PCI: rockchip-host: Do not attempt 5.0 GT/s retraining PCI: rockchip-ep: Do not attempt 5.0 GT/s retraining
2026-10-21Merge branch 'pci/controller/mvebu'Bjorn Helgaas
- Use for_each_available_child_of_node_scoped() to simplify probe loop over children (Krzysztof Kozlowski) - Refcount child OF nodes during .probe() to make a concurrent OF overlay removal safe (Krzysztof Kozlowski) * pci/controller/mvebu: PCI: mvebu: Keep child node refcnt for probe duration PCI: mvebu: Simplify with scoped for each OF child loop
2026-10-21Merge branch 'pci/controller/cadence'Bjorn Helgaas
- Fix enum type mismatch warning in LTSSM debugfs (Hans Zhang) - Remove device links to PHY, which are redundant because the PHY core itself adds them (Vladimir Oltean) - Return error (not success) from cdns_plat_pcie_probe() if pm_runtime_get_sync() or cdns_pcie_ep_setup() failed (Vladimir Oltean) - Correct the driver data pointer usage; previously .probe() stored 'struct cdns_plat_pcie *', but .shutdown() used the pointer as 'struct cdns_pcie *', resulting in accessing garbage (Linmao Li) * pci/controller/cadence: PCI: cadence: Store the core controller in platform drvdata PCI: cadence: Preserve all error codes in cdns_plat_pcie_probe() PCI: cadence: Remove device links to PHY PCI: cadence: Fix enum type mismatch warning in LTSSM debugfs
2026-10-21Merge branch 'pci/controller/brcmstb'Bjorn Helgaas
- Remove unnecessary 'const' specifier from struct pcie_cfg_data members (Jim Quinlan) - Replace bool properties for each SoC configuration with a u32 bitvector and a BFLAG() helper (Jim Quinlan) - Use a similar BQUIRK() helper to test various SoC quirks (Jim Quinlan) * pci/controller/brcmstb: PCI: brcmstb: Declare and assign quirk PERST_PCIE_REV_CUTOFF PCI: brcmstb: Declare and assign quirk EARLY_PERST_ASSERT PCI: brcmstb: Declare and assign quirk NO_RGR1_TIMER PCI: brcmstb: Declare and assign quirk 32BIT_PCI_OPS PCI: brcmstb: Declare and assign flag IS_BMIPS PCI: brcmstb: Declare and assign quirk OB_WIN_MAXSZ_128MB PCI: brcmstb: Declare and assign quirk OB_WIN_32BIT_ADDR PCI: brcmstb: Add Broadcom quirks macro PCI: brcmstb: Use flags u32 instead of bools PCI: brcmstb: Remove redundant const specifier for struct fields
2026-10-21Merge branch 'pci/controller/aspeed'Bjorn Helgaas
- Fix clk and PHY leaks in aspeed_pcie_port_init() error paths (Liu Zhenlong) * pci/controller/aspeed: PCI: aspeed: Fix clk and PHY leak in aspeed_pcie_port_init() error paths
2026-10-21Merge branch 'pci/controller/aardvark'Bjorn Helgaas
- Disable PHY on probe failures (Myeonghun Pak) * pci/controller/aardvark: PCI: aardvark: Disable PHY on probe failures
2026-10-21Merge branch 'pci/controller/misc'Bjorn Helgaas
- Add missing headers transitively included by <linux/phy/phy.h> so these can be removed from linux/phy/phy.h itself (Vladimir Oltean) * pci/controller/misc: PCI: Add missing headers transitively included by <linux/phy/phy.h>
2026-10-21Merge branch 'pci/endpoint'Bjorn Helgaas
- Pass the correct physical and virtual endpoint function numbers when setting translation of inbound memory windows (Koichiro Den) - Make embedded doorbell IRQ non-shared, since currently only the first EPF can allocate doorbells (Koichiro Den) - MSI doorbells currently target the first EPF attached to an EPC; let other EPFs try the embedded doorbell instead of failing when they can't use the MSI doorbell (Koichiro Den) - Serialize scan of vNTB virtual PCI bus with other PCI topology changes (Koichiro Den) - Manage vNTB lifetimes to avoid leaking virtual devices and buses and allow removal (Koichiro Den) - Track vNTB link state from both sides so both see the same effective link state (Koichiro Den) - Add local epf pointer to shorten repeated ntp->epf accesses (Koichiro Den) - Configure vNTB MSI-X when supported to avoid IOMMU faults and failure to deliver doorbell interrupts on RC (Koichiro Den) * pci/endpoint: PCI: endpoint: pci-epf-vntb: Honor MSI-X selection PCI: endpoint: pci-epf-vntb: Use a local epf pointer in interrupt setup PCI: endpoint: pci-epf-vntb: Track link state from both sides PCI: endpoint: pci-epf-vntb: Manage virtual NTB and PCI bus lifetime PCI: endpoint: pci-epf-vntb: Serialize virtual PCI bus scan PCI: endpoint: pci-ep-msi: Let non-first EPFs use embedded doorbells PCI: endpoint: pci-ep-msi: Make embedded doorbell IRQ exclusive PCI: endpoint: pci-epf-vntb: Pass PF/VF number when BAR programming
2026-10-21Merge branch 'pci/virtualization'Bjorn Helgaas
- Add ACS quirk for Pericom PI7C9X2G304 switches (Hans de Goede) - Read SR-IOV VF Revision ID and Subsystem ID from VF instead of assuming they're the same as VF 0; they may differ (Logan Odell) * pci/virtualization: PCI/IOV: Read VF config values that need not match PF PCI: Add ACS quirk for Pericom PI7C9X2G304 switches [12d8:b304]
2026-10-21Merge branch 'pci/tph'Bjorn Helgaas
- Validate the Steering Tag buffer returned from the Query Cache Locality TPH Features _DSM (Wei Huang) * pci/tph: PCI/TPH: Validate the firmware Steering Tag response
2026-10-21Merge branch 'pci/sysfs'Bjorn Helgaas
- Return -ENODEV or -EIO sysfs 'label' or 'acpi_index' attributes when Device Name _DSM fails, not -1, which is interpreted as -EPERM (Krzysztof Wilczyński) - Return valid sysfs 'acpi_index' attribute even if the Device Name _DSM returned an invalid 'label' (Krzysztof Wilczyński) - Expose sysfs 'acpi_index' and 'label' based on whether the Device Name _DSM returns valid data, not merely whether the _DSM is implemented (Krzysztof Wilczyński) - Avoid out-of-bounds reads of the label returned by the Device Name _DSM, which is in UTF-16 characters, not bytes (Krzysztof Wilczyński) - Reject unaligned resource I/O port accesses, which can oops on arm64 (Deepanshu Kartikey) * pci/sysfs: PCI/sysfs: Reject unaligned resource I/O port accesses PCI/sysfs: Pass the device name length in UTF-16 code units PCI/sysfs: Handle a malformed _DSM result in acpi_attr_is_visible() PCI/sysfs: Decouple acpi_index from the optional device name element PCI/sysfs: Stop reporting _DSM failures as -EPERM
2026-10-21Merge branch 'pci/reset'Bjorn Helgaas
- Add device-specific reset for Qualcomm WCN6855/WCN7850 WLAN cards and SDX62/SDX65 modems, which don't support FLR and have broken SBR (Jose Ignacio Tornos Martinez) - Avoid FLR and SBR on Intel DG1 0x4905 graphics adapters, where they sometimes fail and lead to system hangs (Janusz Krzysztofik) * pci/reset: PCI: Avoid FLR and SBR on Intel DG1 0x4905 graphics adapters PCI: Add device-specific reset for Qualcomm WCN6855/WCN7850 WLAN PCI: Add device-specific reset for Qualcomm SDX62/SDX65 modems
2026-10-21Merge branch 'pci/pwrctrl'Bjorn Helgaas
- Use regmap APIs for tc9563 I2C accesses instead of open-coding I2C transfers (Lorenzo Bianconi) - Use devm-managed tc9563 I2C dummy device allocation (Lorenzo Bianconi) - Allow tc9563 RESX reset assertion to sleep (Abel Vesa) - Add GPIO driver for Toshiba TC9563 embedded GPIO controller (Alex Elder) - Add DT documentation and pwrctrl driver support for TC9563 embedded GPIO controller (Lorenzo Bianconi) - Switch the tc9563 per-port reset to use the GPIO descriptor API instead of direct regmap accesses (Lorenzo Bianconi) - Fix leak of regulator consumers array (Alexey Charkov) - Only destroy devices created by pwrctrl core, so that when removing a PCIe controller driver that uses pwrctrl, we don't remove devices populated by another mechanism (Shawn Lin) - Power off child devices on power-on failure (Lorenzo Bianconi) * pci/pwrctrl: PCI/pwrctrl: Power off child devices on power-on failure PCI/pwrctrl: Only destroy devices created by pwrctrl core PCI/pwrctrl: generic: Fix leaking array from of_regulator_bulk_get_all() PCI/pwrctrl: tc9563: Switch per-port reset to GPIO descriptor API PCI/pwrctrl: tc9563: Add GPIO auxiliary device support dt-bindings: PCI: toshiba,tc9563: Document embedded GPIO controller gpio: tc9563: Add support for the embedded GPIO controller PCI/pwrctrl: tc9563: Allow RESX reset assertion to sleep PCI/pwrctrl: tc9563: Use devm-managed I2C dummy device allocation PCI/pwrctrl: tc9563: Rely on regmap APIs
2026-10-21Merge branch 'pci/portdrv'Bjorn Helgaas
- Assume control of portdrv-related features only when portdrv is enabled, since we can't use them without portdrv (Kuppuswamy Sathyanarayanan) - Tidy _OSC control bit checking (Kuppuswamy Sathyanarayanan) - Centralize feature ownership checking so code only needs to check 'host->native_X' and doesn't need to also check 'pcie_ports_native' (Kuppuswamy Sathyanarayanan) * pci/portdrv: PCI/ACPI: Centralize pcie_ports_native checking PCI/ACPI: Tidy _OSC control bit checking PCI: Assume control of portdrv-related features only when portdrv enabled
2026-10-21Merge branch 'pci/pm'Bjorn Helgaas
- Factor common code from pci_pm_suspend_noirq() into a pci_pm_suspend_noirq_common() helper (Mario Limonciello) - Align hibernate poweroff flow with suspend flow for bridges so they can be powered down at hibernate as they are for suspend (Mario Limonciello) - Avoid D3 on PLX PEX 8532/8533/8548 downstream ports, where putting them in D3hot takes down the whole switch (Imre Kaloz) - Restore BARs after powering up during enumeration to fix a regression on devices that don't preserve state in D3hot (Keng-Yu Lin) * pci/pm: PCI/PM: Restore BARs after powering up during enumeration PCI: Avoid D3 on PLX PEX 8532/8533/8548 downstream ports PCI: Align hibernate poweroff flow with suspend flow for bridges PCI/PM: Split out code from pci_pm_suspend_noirq() into helper
2026-10-21Merge branch 'pci/p2pdma'Bjorn Helgaas
- Add Zhaoxin KX-6000, KH-40000, KX-6000G, KX-7000, and KH-50000 host bridges to allowlist (LeoLiu-oc) - Add Alibaba T-HEAD Yitian 710 host bridge to allowlist (Feng Tang) - Add Intel Haswell client host bridge to allowlist (Scott Lee) - Intel Xeon E3/E5/E7 0x6f00 host bridge to allowlist (kai zhang) - Update DMABUF lifecycle docs renaming move_notify() (Leon Romanovsky) - Fix handling of errors in pci_p2pdma_add_resource() to avoid (a) unmapping a BAR if registering another fails and (b) use after free of p2p_pgmap (Leon Romanovsky) - Wait for RCU readers before freeing state to avoid use-after-free of pdev->p2pdma (Leon Romanovsky) - Restrict pci_p2pmem_find_many() to providers backed by a pool (Leon Romanovsky) - Safely terminate ACS redirect lists to avoid out-of-bounds access to the buffer (Leon Romanovsky) - Silence 'Host bridge not in P2PDMA whitelist' warnings unless caller, e.g., pci_p2pmem_find_many(), requests 'verbose' (Leon Romanovsky) * pci/p2pdma: PCI/P2PDMA: Gate the host bridge whitelist warning on verbose PCI/P2PDMA: Safely terminate ACS redirect lists PCI/P2PDMA: Restrict the p2pmem search to pool-backed providers PCI/P2PDMA: Wait for RCU readers before freeing state PCI/P2PDMA: Do not tear down the allocate attribute on registration failure PCI/P2PDMA: Update DMABUF lifecycle docs after move_notify() rename PCI/P2PDMA: Add Intel Xeon E3 v4/E5 v4/E7 v4 host bridge to allowlist PCI/P2PDMA: Add Intel Haswell client host bridge to allowlist PCI/P2PDMA: Add Alibaba T-HEAD Yitian 710 to allowlist PCI/P2PDMA: Add Zhaoxin host bridges to allowlist
2026-10-21Merge branch 'pci/mps'Bjorn Helgaas
- When pcie_set_mps() changes the MPS, update the value in the saved state so a subsequent restore doesn't restore an invalid value (Niklas Cassel) * pci/mps: PCI: Update saved Max Payload Size in pcie_set_mps()
2026-10-21Merge branch 'pci/hotplug'Bjorn Helgaas
- Make the 'pciehp_poll_mode' parameter read-only to prevent changes via sysfs, which can cause errors when unbinding (Runyu Xiao) * pci/hotplug: PCI: pciehp: Make 'pciehp_poll_mode' parameter read-only
2026-10-21Merge branch 'pci/enumeration'Bjorn Helgaas
- Set supported_speeds in set_pcie_port_type() so sparc64 and powerpc, which call it via of_create_pci_dev() instead of the usual pci_setup_device(), correctly set the supported PCIe link speeds (Stian Halseth) * pci/enumeration: PCI: Set supported_speeds in set_pcie_port_type()
2026-10-21Merge branch 'pci/doe'Bjorn Helgaas
- Fix double free of sysfs name if a DOE feature is reported twice (Donggeun Yoo) * pci/doe: PCI/DOE: Fix double free of a duplicate feature's sysfs name
2026-10-21Merge branch 'pci/aspm'Bjorn Helgaas
- Disable ASPM when drivers request that, even if the OS doesn't own ASPM; otherwise drivers do it on their own, which is worse (Ilpo Järvinen) * pci/aspm: PCI/ASPM: Disable ASPM when driver requests it
2026-10-21Merge branch 'pci/aer'Bjorn Helgaas
- Fix aer_recover_queue() leak when ACPI APEI/GHES error events overflow the kfifo (Priyank Rathod) - Fix aer_recover_work_func() leak when ACPI APEI/GHES events mention a pci_dev that no longer exists (Priyank Rathod) - Document that aer_recover_queue() takes ownership of aer_regs structures passed to it by ACPI APEI/GHES (Priyank Rathod) - Fix aer_process_err_devices() leak when a device is recorded as an error source purely by being mentioned in the Root Port Error Source and the device is inaccessible or logged only masked errors (Priyank Rathod) * pci/aer: PCI/AER: Fix struct pci_dev reference leak in aer_process_err_devices() PCI/AER: Document that aer_recover_queue() takes ownership of aer_regs PCI/AER: Fix memory leak in aer_recover_work_func() when pci_dev is missing PCI/AER: Fix memory leak in aer_recover_queue() on kfifo buffer overflow
2026-10-21PCI/pwrctrl: Power off child devices on power-on failureLorenzo Bianconi
pci_pwrctrl_power_on_device() recursively powers on the child nodes of a device before powering on the device itself. If powering on a child fails (e.g. returning -EPROBE_DEFER), the function returned immediately, leaving the sibling children that were already powered on in the same loop iteration enabled. Since probe deferral is a standard boot path, this leads to unbounded regulator and clock enable increments across retries. The error path in pci_pwrctrl_power_on_devices() only powers off the top-level children processed before the failing one and explicitly stops at it, so it can never clean up the siblings leaked deeper in the failed subtree. Power off the sibling children that were successfully powered on before a child fails, and power off all children if the device's own power_on() fails after its children were already enabled. Switch to a manual child iterator so the failing node can be tracked and its reference released in the error path. Fixes: b35cf3b6aa1e ("PCI/pwrctrl: Add APIs to power on/off pwrctrl devices") Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Link: https://patch.msgid.link/20260909-pwrtctl-power-on-rallback-v1-1-412ef996ba27@oss.qualcomm.com
2026-10-21PCI/pwrctrl: Only destroy devices created by pwrctrl coreShawn Lin
pci_pwrctrl_create_device() only creates platform devices for OF nodes that pci_pwrctrl_is_required() accepts, but pci_pwrctrl_destroy_device() unregisters the platform device of every available child node without that check. Nodes under a PCI host controller that are not pwrctrl devices may have been populated by another mechanism. Destroying them here would tear down devices owned by other code. Mirror the check done at creation time so that only devices created by the pwrctrl core are removed. Fixes: 4c4132489201 ("PCI/pwrctrl: Add APIs to create, destroy pwrctrl devices") Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Cc: stable@vger.kernel.org Link: https://patch.msgid.link/1791446700-100166-1-git-send-email-shawn.lin@rock-chips.com
2026-10-21PCI/pwrctrl: generic: Fix leaking array from of_regulator_bulk_get_all()Alexey Charkov
of_regulator_bulk_get_all() allocates the consumers array and returns it to the caller, who is expected to free it at an appropriate time. PCI pwrctrl never did, leading to a memory leak. Add an explicit kfree() for the consumers array. Fixes: 75996c92f4de ("PCI/pwrctrl: Add pwrctrl driver for PCI slots") Signed-off-by: Alexey Charkov <alchark@flipper.net> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Cc: stable@vger.kernel.org Link: https://patch.msgid.link/20260930-pci-pwrctrl-kfree-v1-1-f09bbffd8da3@flipper.net
2026-10-21PCI/pwrctrl: tc9563: Switch per-port reset to GPIO descriptor APILorenzo Bianconi
Remove the local TC9563_GPIO_MASK and TC9563_GPIO_DEASSERT_BITS definitions, which are no longer used after switching to the GPIO descriptor API. Move TC9563_GPIO_CONFIG and TC9563_RESET_GPIO definitions in tc9563.h header file. Replace the direct regmap-based per-port reset logic in assert_deassert_reset() with gpiod_direction_output() calls, falling back to the legacy regmap approach only when no reset-gpios DT property is present for a given port. Add the reset GPIO pointer to struct tc9563_pwrctrl_cfg and introduce tc9563_pwrctrl_parse_reset_line() to look up reset-gpios from each PCI downstream port child node. The lookup is done lazily at the beginning of power_on(), returning -EPROBE_DEFER until the GPIO chip is registered. Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Reviewed-by: Alex Elder <elder@riscstar.com> Link: https://patch.msgid.link/20260909-pci-tc9563-aux-v5-4-c9b33f56c8d3@oss.qualcomm.com
2026-10-21PCI/pwrctrl: tc9563: Add GPIO auxiliary device supportLorenzo Bianconi
The TC9563 embeds a GPIO controller used for per-port reset signals. Create an auxiliary device for it so the gpio-tc9563 driver can register the GPIO chip and enable DT-based GPIO lookups. Pass the tc9563 regmap to the auxiliary device as its platform data. The pwrctrl driver does not wait for the GPIO chip to be probed. The per-port reset GPIO lookup, returning -EPROBE_DEFER until the chip is registered, is added in the next patch. Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> [bhelgaas: squash Geert Uytterhoeven <geert+renesas@glider.be> Kconfig fix: https://lore.kernel.org/all/45484c37512a3102495d8b75b6e9f72a141ba42e.1792574560.git.geert+renesas@glider.be, Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Acked-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Reviewed-by: Alex Elder <elder@riscstar.com> Link: https://patch.msgid.link/20260909-pci-tc9563-aux-v5-3-c9b33f56c8d3@oss.qualcomm.com
2026-10-21dt-bindings: PCI: toshiba,tc9563: Document embedded GPIO controllerLorenzo Bianconi
The TC9563 PCIe switch embeds a GPIO controller providing 37 GPIO lines, accessed through the switch's I2C interface. The controller is integrated in the switch rather than being a separate device, so expose it by adding the gpio-controller and #gpio-cells properties to the switch node itself, and extend the example to show the downstream ports' reset-gpios being driven from those lines. Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Link: https://patch.msgid.link/20260909-pci-tc9563-aux-v5-1-c9b33f56c8d3@oss.qualcomm.com
2026-10-21gpio: tc9563: Add support for the embedded GPIO controllerAlex Elder
Add a driver for the GPIO controller embedded in the Toshiba TC9563 PCIe switch (and the Qualcomm QPS615). The device implements 37 GPIOs using two register banks: three registers control the first 32 GPIOs and three more control GPIOs 32-36. GPIOs 20 and 21 are reserved while GPIOs 22-24, 27-28, 31, and 34 are input-only. Register the driver as an auxiliary device driver. The TC9563 power controller creates the auxiliary device and provides a regmap that gives access to the GPIO registers, so use the gpio-regmap helpers to implement the GPIO chip. Signed-off-by: Alex Elder <elder@riscstar.com> Co-developed-by: Daniel Thompson <daniel@riscstar.com> Signed-off-by: Daniel Thompson <daniel@riscstar.com> Co-developed-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com> [bhelgaas: commit log per https://lore.kernel.org/arQ2mDjqHv4gmoOK@lore-desk] [bhelgaas: squash Geert Uytterhoeven <geert+renesas@glider.be> Kconfig fix: https://lore.kernel.org/all/45484c37512a3102495d8b75b6e9f72a141ba42e.1792574560.git.geert+renesas@glider.be, Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Acked-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Acked-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Link: https://patch.msgid.link/20260909-pci-tc9563-aux-v5-2-c9b33f56c8d3@oss.qualcomm.com
2026-10-21sh: Select BINFMT_FLAT_NO_DATA_START_OFFSET for !MMUWaldemar Brodkorb
binfmt_flat offsets the in-memory start of the data segment by MAX_SHARED_LIBS words and then aligns it to FLAT_DATA_ALIGN, so FLAT_FLAG_RAM binaries end up with a gap between text and data (commit 2217b9826246 ("binfmt_flat: revert "binfmt_flat: don't offset the data start"")). SH position-independent code finds the GOT with a PC-relative mova of _GLOBAL_OFFSET_TABLE_, which assumes data follows text directly, as elf2flt lays out the image. With the gap, the GOT register points below the real GOT, so every GOT load reads the neighbouring slot and gets a wrong pointer. On a J2 (sh2eb, no MMU) this made userland crash or hang right after start-up. In my case the data was moved up by 0x20 bytes. Commit 04d82a6d0881 ("binfmt_flat: allow not offsetting data start") added CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET for architectures that cannot tolerate such a gap; currently only riscv !MMU selects it. Select it on SH as well when building without an MMU. Tested on a J2 board (Numato Mimas V2, sh2eb, no MMU) with Linux 7.3 and FLAT binaries built with elf2flt: with this change the data segment starts exactly at the end of text and init runs. Without the patch bootup fails with: [ 12.080472] Fixing up unaligned userspace access in "init" pid=1 pc=0x(ptrval) ins=0x6583 [ 12.123609] Fixing up unaligned userspace access in "init" pid=1 pc=0x(ptrval) ins=0x6583 [ 12.175153] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00 Fixes: 2217b9826246 ("binfmt_flat: revert "binfmt_flat: don't offset the data start"") Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> Assisted-by: LLM Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
2026-10-21sh: maple: Use the matching IRQ cookie when invoking free_irq()Runyu Xiao
The Maple DMA and VBLANK handlers are registered with &maple_unsupported_device as their dev_id. Passing NULL to free_irq() cannot find either action, so the handlers remain registered and the IRQ core warns. Use the same cookie when freeing both handlers on the error paths. Fixes: b3c69e248176 ("maple: more robust device detection.") Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn> Assisted-by: LLM Cc: stable@vger.kernel.org Tested-by: Florian Fuchs <fuchsfl@gmail.com> Reviewed-By: Florian Fuchs <fuchsfl@gmail.com> Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
2026-10-21selftests/bpf: Time tc_edt from its first packet with dataQiliang Yuan
tc_edt sends 1MB over a TCP connection that a BPF program shapes with EDT, and checks that the rate it measures is within 2% of the target rate. The transfer takes about 200ms, so the margin is about 4ms. The measurement starts before send_recv_data(), which first creates the sender thread and accepts the connection. On a KASAN kernel, x86_64 VM with 32 vCPUs, that takes 0.7ms when idle and up to 4.7ms with all CPUs busy, while the BPF program spreads the data over 200.08ms in the median. The test also fails without test_progs -j where everything runs slower, e.g. on s390x and with ASAN in BPF CI. Have the BPF program note when the first packet with data goes out, and start the measurement there. tc_edt run 100 times on the same VM, idle and with 32 busy loops in the background, before and after this patch: before after idle 0 of 100 failed 0 of 100 failed busy loops 3 of 100 failed 0 of 100 failed Fixes: b0f82e7ab6fb ("selftests/bpf: integrate test_tc_edt into test_progs") Signed-off-by: Qiliang Yuan <odys.yuan@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Reviewed-by: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com> Link: https://patch.msgid.link/20261019-selftests-bpf-tc-edt-serial-v2-1-41c3813e7916@gmail.com
2026-10-21Merge branch 'bpf-fixes-for-unwind_goto-and-unwind_exit'Alexei Starovoitov
Alexei Starovoitov says: ==================== bpf: Fixes for unwind_goto and unwind_exit From: Alexei Starovoitov <ast@kernel.org> Two fixes for what the bots found in v4 [1] of the series that added unwind_goto and unwind_exit. Patch 1. unwind_exit of an exception callback is exit for the verifier, but JITs looked up the return address. The callback returns from the frame of the main prog. After freplace or a tail call that's a return to a prog, and the callback could end up in a pad that wasn't verified with it. It came with 'unwind_exit of an async or an exception callback is exit' in v4. For an async callback that's fine: it has a frame of its own. Patch 2. Offloaded progs with the new insns are rejected. Patch 3. Tests for patch 1. They fail without it. [1] https://lore.kernel.org/bpf/20261020181320.1284798-1-alexei.starovoitov@gmail.com/ ==================== Link: https://patch.msgid.link/20261020231942.2568163-1-alexei.starovoitov@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2026-10-21Merge branch 'bpf-support-32-bit-linear-scalar-evolution'Alexei Starovoitov
Eduard Zingerman says: ==================== bpf: support 32-bit linear scalar evolution Support scalar evolution widening for loops like: w0 = 0; l: w0 += 1; if w0 != 3 goto l; exit; Implementation details are covered in the first patch. Veristat results follow. Program sets: cilium, meta, scx, selftests. Tables: success in both runs; baseline Insns >= 5,000. Ranked by percentage change, then instruction-count change, file, program. Meta names are anonymized. Top 50 wins are shown, there are no loses. Histogram --------- Total progs: 7994 Old success: 5665 New success: 5665 -100 .. -95 %: 21 -95 .. -85 %: 1 -85 .. -75 %: 4 -75 .. -70 %: 17 -70 .. -65 %: 10 -65 .. -55 %: 3 -50 .. -40 %: 2 -40 .. -30 %: 2 -25 .. -15 %: 2 -15 .. -10 %: 7 -10 .. -5 %: 32 -5 .. 0 %: 6 0 .. 5 %: 7887 Top wins (50) ------------- File Program Insns (A) Insns (B) Insns (DIFF) ----------------------------- --------------------------------- --------- --------- ----------------- timer_start_delete_race.bpf.o start_timer 40007 28 -39979 (-99.93%) timer_start_delete_race.bpf.o delete_elem 14003 11 -13992 (-99.92%) verifier_bounds.bpf.o crossing_32_bit_signed_boundary_2 12330 20 -12310 (-99.84%) access_map_in_map.bpf.o access_map_in_array 18457 35 -18422 (-99.81%) access_map_in_map.bpf.o access_map_in_htab 18457 35 -18422 (-99.81%) access_map_in_map.bpf.o sleepable_access_map_in_array 18457 35 -18422 (-99.81%) access_map_in_map.bpf.o sleepable_access_map_in_htab 18457 35 -18422 (-99.81%) firewall-09.bpf.o twfw_connect6 153638 320 -153318 (-99.79%) firewall-09.bpf.o twfw_sendmsg6 153638 320 -153318 (-99.79%) firewall-10.bpf.o twfw_connect4 102193 241 -101952 (-99.76%) firewall-10.bpf.o twfw_sendmsg4 102193 241 -101952 (-99.76%) firewall-10.bpf.o twfw_connect6 166183 397 -165786 (-99.76%) firewall-10.bpf.o twfw_sendmsg6 166183 397 -165786 (-99.76%) firewall-09.bpf.o twfw_connect4 76030 197 -75833 (-99.74%) firewall-09.bpf.o twfw_sendmsg4 76030 197 -75833 (-99.74%) linked_list.bpf.o clear_global_array_list 13071 57 -13014 (-99.56%) rhash.bpf.o test_rhash_update_elements 7584 91 -7493 (-98.80%) profiler-06.bpf.o on_perf_event 425953 94751 -331202 (-77.76%) profiler-26.bpf.o handle_cu_mem_address_reserve 45724 12702 -33022 (-72.22%) profiler-26.bpf.o handle_cu_mem_create 45724 12702 -33022 (-72.22%) profiler-26.bpf.o handle_malloc 45724 12702 -33022 (-72.22%) profiler-19.bpf.o sched_switch_offcpu 78210 21906 -56304 (-71.99%) profiler-26.bpf.o handle_cu_mem_map 45922 12900 -33022 (-71.91%) profiler-09.bpf.o on_custom_event_start 45973 12951 -33022 (-71.83%) profiler-09.bpf.o trace_func_entry 45973 12951 -33022 (-71.83%) profiler-19.bpf.o sched_waking 23153 6642 -16511 (-71.31%) profiler-27.bpf.o handle_cuda_launch_exc 23176 6665 -16511 (-71.24%) profiler-27.bpf.o handle_cuda_launch 23189 6678 -16511 (-71.20%) profiler-12.bpf.o on_custom_event_begin 23396 6885 -16511 (-70.57%) profiler-12.bpf.o on_custom_event_end 23400 6889 -16511 (-70.56%) profiler-26.bpf.o handle_mtia_cached_alloc 46892 13870 -33022 (-70.42%) profiler-26.bpf.o handle_mtia_allocate_enter 46953 13931 -33022 (-70.33%) profiler-12.bpf.o sched_switch 40257 12105 -28152 (-69.93%) profiler-26.bpf.o handle_pytorch_malloc 47245 14223 -33022 (-69.90%) profiler-19.bpf.o oncpu 23689 7178 -16511 (-69.70%) profiler-12.bpf.o on_task_enqueued 23734 7223 -16511 (-69.57%) profiler-12.bpf.o sched_waking 23769 7258 -16511 (-69.46%) profiler-12.bpf.o on_task_dequeued 23909 7398 -16511 (-69.06%) profiler-12.bpf.o on_request_context_event 24000 7489 -16511 (-68.80%) profiler-12.bpf.o on_pytorch_event 24001 7490 -16511 (-68.79%) profiler-12.bpf.o on_task_stats 24083 7572 -16511 (-68.56%) profiler-12.bpf.o oncpu 24187 7676 -16511 (-68.26%) scx_rusty.bpf.o rusty_init 8784 3171 -5613 (-63.90%) profiler-12.bpf.o get_crochet_walltime_stacks 50215 22063 -28152 (-56.06%) security-sandbox-13.bpf.o kvm_die 5807 2967 -2840 (-48.91%) profiler-24.bpf.o get_task_stacks 103742 64928 -38814 (-37.41%) scheduler-01.bpf.o arena_alloc_mask 29208 25497 -3711 (-12.71%) scheduler-03.bpf.o arena_alloc_mask 29208 25497 -3711 (-12.71%) file-system-monitor-01.bpf.o file_lineage_lsm_file_free 20986 18354 -2632 (-12.54%) file-system-monitor-01.bpf.o file_lineage_security_file_free 20986 18354 -2632 (-12.54%) --- ==================== Link: https://patch.msgid.link/20261020-scev-32bit-v1-0-838f34f9f0cd@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2026-10-21selftests/bpf: Test unwind_exit of an exception callbackAlexei Starovoitov
In both tests the prog that throws returns to a call that unwind_goto follows, and its exception callback ends with unwind_exit: - An extension replaces a subprog that cannot unwind. unwind_goto after the call stays, since it shares the pad with a call of a subprog that can unwind. - A subprog that can unwind does a tail call. unwind_exit of the callback has to be exit. Without the fix the callers go to the pad and return 2 instead of 3 and 42 instead of 7. Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20261020231942.2568163-4-alexei.starovoitov@gmail.com
2026-10-21selftests/bpf: Tests for 32-bit scalar evolution bounds computationEduard Zingerman
The post32_* tests exercise scev.c:compute_max_iters(): - 32-bit to 64-bit operand extension and overflow handling. - <, <=, >, >=, s<, s<=, s>, s>=, != operations. - Checks exact boundary hits and overflow at S32_MIN, S32_MAX, and U32_MAX. The post_cond_jne32* tests exercise zero-extension logic in scev.c:linear_bounds(): - 32-bit unsigned wraparound. - Entry and zero-extended iteration values disagreeing on base/step, requiring the step to be reduced. - Widened bounds containing both the original entry value and the zero-extended iteration values. - Preserving step and base when that union crosses the signed 64-bit boundary. The post_cond_alu{32,64}_jmp{64,32} tests cover mixed-width recurrences and comparisons: - Declining to compute an iteration count when operands or the predicted exit fall outside the required 32-bit ranges. - Computing iteration counts and widened bounds for compatible mixed-width loops. Also add a basic pre-condition loop test. Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20261020-scev-32bit-v1-2-838f34f9f0cd@gmail.com
2026-10-21bpf: Reject unwind_goto and unwind_exit in offloaded progsAlexei Starovoitov
A prog with unwind_goto or unwind_exit has to be JITed by a JIT that supports them. The driver JITs an offloaded prog, and nobody looks at jit_required there. nfp rejects unwind_goto in nfp_verify_insn(). netdevsim takes everything. Nothing runs such a prog, but it's not jited for bpf_insn_prepare_dump(), which takes unwind_goto for BPF_CALL_ARGS and shows it as a call. Fixes: a2d274771321 ("bpf: Add unwind_goto and unwind_exit insns") Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20261020231942.2568163-3-alexei.starovoitov@gmail.com Closes: https://lore.kernel.org/bpf/sashiko-outbox-179499@kernel.org/
2026-10-21bpf: Support 32-bit linear scalar evolutionEduard Zingerman
Representation -------------- Represent ALU32 recurrences as: w0 += step -> (zext32 (linear r0 step)) Extend simplify() rules to maintain the above form for latch expressions. E.g. for a post-condition loop such as: w0 = 0; l: w0 += 1; if w0 != 3 goto l; exit; SCEV at header: (zext32 (linear r0 1)) Initial SCEV at latch: (zext32 (+ (zext32 (linear r0 1)) 1)) Simplified SCEV at latch: (zext32 (+ (zext32 (linear r0 1)) 1)) -> (zext32 (+ (linear r0 1) 1)) -> (zext32 (linear (+ r0 1) 1)) Iterations count computation ---------------------------- - Extract the main iteration-count logic from compute_max_iters() into compute_backedge_taken_count(). Reuse its 64-bit arithmetic after sign/zero extending the latch operands. - Reject the computed count if the predicted exit value falls outside signed/unsigned 32-bit range, e.g.: w0 = 0x7ffffffe; l: w0 += 1; if w0 s<= 0x7fffffff goto l; The 64-bit computation predicts an exit at S32_MAX + 1, but the 32-bit value wraps to S32_MIN and the comparison remains true. - Handle mixed 64-bit/32-bit comparisons/recurrences only when initial bounds and step fit in 32-bit ranges, e.g.: w0 = 0; r1 = 0x100000003 ll; l: w0 += 1; if r0 != r1 goto l; Truncating the bound to 32 bits would predict three header visits. However, `w0 += 1` keeps r0 within [0, U32_MAX], so it can never be equal to the 64-bit bound. Widened bounds computation -------------------------- - Update linear_bounds() to truncate the initially computed 64-bit range to 32 bits, then zero-extend it to obtain the 64-bit range of iteration values. Step computation needs to handle: - unsigned 32-bit wraparound; - entry and zero-extended iteration values disagreeing on base/step. - Union both ranges with the corresponding register ranges at entry, since the entry value need not be zero-extended. - Extend `struct bounds` to keep both {32,64}-bit ranges and pass both to bpf_set_reg_range(). A 64-bit range alone loses useful 32-bit information, e.g.: entry = 0, step = -1, two header visits r64: [0, U32_MAX] r32: [-1, 0] Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20261020-scev-32bit-v1-1-838f34f9f0cd@gmail.com
2026-10-21bpf: Make unwind_exit of an exception callback exit in JITsAlexei Starovoitov
For the verifier unwind_exit of an exception callback is exit. For JITs the callback is a subprog, so they emit the lookup of the return address. The idea was that the kernel calls the callback and the lookup finds nothing. But an exception callback has no frame of its own. It returns from the frame of the main prog that threw, and the kernel isn't always the caller of that one: - An extension returns to the caller of the subprog that it replaced. - After a tail call in a subprog the main prog returns to the caller of that subprog. When unwind_goto follows that call, the callback goes to the pad, and the pad wasn't verified with it: r6 = 1 call a // can unwind unwind_goto pad r6 = 2 call b // cannot unwind unwind_goto pad // stays, since the pad is not dead code exit pad: r0 = r6 // r6 is 1 for the verifier An extension without unwind_exit can replace b(). When it throws and its exception callback ends with unwind_exit, the pad runs with r6 = 2. Both JITs ask bpf_prog_can_unwind(). Let it say no for an exception callback. An async callback has a frame of its own and the kernel is the caller. Fixes: a2d274771321 ("bpf: Add unwind_goto and unwind_exit insns") Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/5f24cbed1ec4a6a0ecd0b834d738c48dc9eb64362be4fa50dfb0eaddfad928b3@mail.kernel.org/ Link: https://patch.msgid.link/20261020231942.2568163-2-alexei.starovoitov@gmail.com Closes: https://lore.kernel.org/bpf/sashiko-outbox-179498@kernel.org/
2026-10-21Merge __{get,put}_user() removal branchLinus Torvalds
This is long over-due: the __get_user() and __put_user() functions are entirely historical, and are never the rigth thing to use any more. And when mis-used (read: every case) they are not only slower than the right thing, but also insecure because they don't check the user address range. Most of the usage sites have been converted long ago, but various left-overs remained. So this started out as a single patch that I wrote as a "show people how to convert __{get,put}_user() to modern code". In particular, Thomas last year implemented the very nice new scoped user access region helpers (see commit e497310b4ffb: "uaccess: Provide scoped user access regions") that makes the modern interfaces particularly easy to use and really removes any excuse for the old horrors. That small example patch then grew to this, partly using Claude as a glorified coccinelle script to apply the pattern to other places. There were a few different reasons for using __put_user() and __get_user() rather than the alternatives, but the original historical one was performance: when doing multiple accesses off the same base pointer, doing a single range check followed by multiple non-checked accesses used to create smaller and faster code. The keyword here is "used to". It hasn't been true for years, because the range check isn't actually the real cost these days. The real cost of user accesses on modern hardware is turning the user accesses on and off in the first place (on x86, using the STAC/CLAC instructions). Those sequences get turned into 'scoped_user_read_access() { }' blocks, see for example that first patch in the series: "signal: use scoped user access for old-style sigaction". Another, historical reason for using __get_user() and friends is that you actually want to do a kernel pointer access, but the pointer might not be entirely reliable (typically during fault handling), so you want to have exception handling for the kernel access. The modern way to do that kind of non-faulting kernel access is using "get_kernel_nofault()", but some code predates that helper existing at all, and used __get_user() as a way to just get a memory access with exception handling. For that pattern, see for example "alpha: use get_kernel_nofault() in dik_show_code()" A third bad reason for using __get_user() and friends was that the proper get_user() had a "might_fault()" in it, and code that ran in atomic regions but hadn't disabled page faults would result in a warning. That kind of code needs to explicitly disable page faults, because "atomic region" is not well defined at run-time and can be invisible (eg a preempt-off region in a non-preemptible kernel). See "vdpa_sim: disable page faults around vringh_need_notify_iotlb()" for an example of that pattern, where the local_bh_disable() now also grows a pagefault_disable(), which makes the normal get_user() no longer warn about the user access in non-process context, because it can see that the potential page fault will not cause problems. And finally, the really nasty reason to use __get_user() and friends: pointers that can be either kernel pointers or user pointers. We've gotten rid of almost all such cases, but a couple remained. See for example "x86/sev: Use explicit user-or-kernel accessors for #VC memory operands". NOTE! This series removes all __get/put_user() calls from generic code but only does the final removal of the whole interface on x86. Other architectures have not been entirely converted, for a variety of reasons: - arm64 makes __{get,put}_user() be exactly the same as {get,put}_user() so it's harmless and didn't have the dangers of the legacy use cases. - any architecture that uses <asm-generic/uaccess.h> will still use __{get,put}_user as the underlying helper function name - several architectures had some legacy uses that weren't entirely trivial and I didn't want to extend this patch series to things that I don't know and that don't really matter. but I did do a couple of the obvious "follows the exact same pattern" just because it could be done mindlessly and automatically. Let's see if I broke anything, but we should have done this years ago. * uaccess-cleanups: (48 commits) drm/i915/gem: ignore errors on presumed_offset write-back powerpc/align: use get_user_instr() for a user-mode instruction powerpc/signal64: use scoped user access in setup_trampoline() powerpc/signal64: use get_user() for the single context reads powerpc/signal32: use get_user() for the single context reads KVM: PPC: Book3S HV: use get_user()/put_user() for the HPT fd powerpc/powernv: use get_user()/put_user() in the LPC debugfs files s390: use get_user()/put_user() instead of the unchecked variants ARM: OABI: use scoped user access in epoll_put_uevent() ARM: signal: stop using __put_user() for the signal frame ARM: signal: check the FDPIC function descriptor address alpha: split the prefetch check in do_page_fault() by mode openrisc: use get_kernel_nofault() in show_registers() alpha: use get_kernel_nofault() in dik_show_code() nios2: use scoped user access for the signal frame nios2: check the signal frame address before writing to it hexagon: use scoped user access for the signal frame alpha: use scoped user access when setting up signal frames alpha: use scoped user access in the sigreturn path alpha: use scoped user access in osf_sigaction() ...
2026-10-21drm/i915/gem: ignore errors on presumed_offset write-backLinus Torvalds
It appears that the crazy "don't check for errors" code in the i915 relocation code was intentional, but not visible in the code as such. See commit 97a37c919f62 ("drm/i915/gem: Ignore readonly failures when updating relocs"). Quoting that commit: "Be damned if you do, and damned if you don't." So disable the error check again, but leave it around visibly for posterity as documentation for why it's not there. Fixes: 03c19e449ac6 ("drm/i915/gem: Don't fault on presumed_offset write-back") Reported-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2026-10-21rust: fwctl: declare cfi_encoding for fwctl_rpc_scopeAlice Ryhl
Currently, VTable::fw_rpc_callback() takes scope as a u32, whereas C calls fwctl_ops::fw_rpc with enum fwctl_rpc_scope. With kCFI enabled, enum types are encoded distinctly from integers, causing every fw_rpc indirect call into a Rust fwctl driver to trip a CFI failure. Thus, generate fwctl_rpc_scope as a newtype with a cfi_encoding attribute and use it in fw_rpc_callback(). Link: https://patch.msgid.link/r/20261020-fwctl-cfi-encoding-v1-1-ebb30d1500df@google.com Cc: stable@vger.kernel.org Fixes: e052daab94ee ("rust: introduce abstractions for fwctl") Signed-off-by: Alice Ryhl <aliceryhl@google.com> Reviewed-by: Zhi Wang <zhiw@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>