The following commit has been merged in the master branch: commit 5b7c4cabbb65f5c469464da6c5f614cbd7f730f2 Merge: 36289a03bcd3aabdf66de75cb6d1b4ee15726438 d1fabc68f8e0541d41657096dc713cb01775652d Author: Linus Torvalds torvalds@linux-foundation.org Date: Tue Feb 21 18:24:12 2023 -0800
Merge tag 'net-next-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Pull networking updates from Jakub Kicinski: "Core:
- Add dedicated kmem_cache for typical/small skb->head, avoid having to access struct page at kfree time, and improve memory use.
- Introduce sysctl to set default RPS configuration for new netdevs.
- Define Netlink protocol specification format which can be used to describe messages used by each family and auto-generate parsers. Add tools for generating kernel data structures and uAPI headers.
- Expose all net/core sysctls inside netns.
- Remove 4s sleep in netpoll if carrier is instantly detected on boot.
- Add configurable limit of MDB entries per port, and port-vlan.
- Continue populating drop reasons throughout the stack.
- Retire a handful of legacy Qdiscs and classifiers.
Protocols:
- Support IPv4 big TCP (TSO frames larger than 64kB).
- Add IP_LOCAL_PORT_RANGE socket option, to control local port range on socket by socket basis.
- Track and report in procfs number of MPTCP sockets used.
- Support mixing IPv4 and IPv6 flows in the in-kernel MPTCP path manager.
- IPv6: don't check net.ipv6.route.max_size and rely on garbage collection to free memory (similarly to IPv4).
- Support Penultimate Segment Pop (PSP) flavor in SRv6 (RFC8986).
- ICMP: add per-rate limit counters.
- Add support for user scanning requests in ieee802154.
- Remove static WEP support.
- Support minimal Wi-Fi 7 Extremely High Throughput (EHT) rate reporting.
- WiFi 7 EHT channel puncturing support (client & AP).
BPF:
- Add a rbtree data structure following the "next-gen data structure" precedent set by recently added linked list, that is, by using kfunc + kptr instead of adding a new BPF map type.
- Expose XDP hints via kfuncs with initial support for RX hash and timestamp metadata.
- Add BPF_F_NO_TUNNEL_KEY extension to bpf_skb_set_tunnel_key to better support decap on GRE tunnel devices not operating in collect metadata.
- Improve x86 JIT's codegen for PROBE_MEM runtime error checks.
- Remove the need for trace_printk_lock for bpf_trace_printk and bpf_trace_vprintk helpers.
- Extend libbpf's bpf_tracing.h support for tracing arguments of kprobes/uprobes and syscall as a special case.
- Significantly reduce the search time for module symbols by livepatch and BPF.
- Enable cpumasks to be used as kptrs, which is useful for tracing programs tracking which tasks end up running on which CPUs in different time intervals.
- Add support for BPF trampoline on s390x and riscv64.
- Add capability to export the XDP features supported by the NIC.
- Add __bpf_kfunc tag for marking kernel functions as kfuncs.
- Add cgroup.memory=nobpf kernel parameter option to disable BPF memory accounting for container environments.
Netfilter:
- Remove the CLUSTERIP target. It has been marked as obsolete for years, and we still have WARN splats wrt races of the out-of-band /proc interface installed by this target.
- Add 'destroy' commands to nf_tables. They are identical to the existing 'delete' commands, but do not return an error if the referenced object (set, chain, rule...) did not exist.
Driver API:
- Improve cpumask_local_spread() locality to help NICs set the right IRQ affinity on AMD platforms.
- Separate C22 and C45 MDIO bus transactions more clearly.
- Introduce new DCB table to control DSCP rewrite on egress.
- Support configuration of Physical Layer Collision Avoidance (PLCA) Reconciliation Sublayer (RS) (802.3cg-2019). Modern version of shared medium Ethernet.
- Support for MAC Merge layer (IEEE 802.3-2018 clause 99). Allowing preemption of low priority frames by high priority frames.
- Add support for controlling MACSec offload using netlink SET.
- Rework devlink instance refcounts to allow registration and de-registration under the instance lock. Split the code into multiple files, drop some of the unnecessarily granular locks and factor out common parts of netlink operation handling.
- Add TX frame aggregation parameters (for USB drivers).
- Add a new attr TCA_EXT_WARN_MSG to report TC (offload) warning messages with notifications for debug.
- Allow offloading of UDP NEW connections via act_ct.
- Add support for per action HW stats in TC.
- Support hardware miss to TC action (continue processing in SW from a specific point in the action chain).
- Warn if old Wireless Extension user space interface is used with modern cfg80211/mac80211 drivers. Do not support Wireless Extensions for Wi-Fi 7 devices at all. Everyone should switch to using nl80211 interface instead.
- Improve the CAN bit timing configuration. Use extack to return error messages directly to user space, update the SJW handling, including the definition of a new default value that will benefit CAN-FD controllers, by increasing their oscillator tolerance.
New hardware / drivers:
- Ethernet: - nVidia BlueField-3 support (control traffic driver) - Ethernet support for imx93 SoCs - Motorcomm yt8531 gigabit Ethernet PHY - onsemi NCN26000 10BASE-T1S PHY (with support for PLCA) - Microchip LAN8841 PHY (incl. cable diagnostics and PTP) - Amlogic gxl MDIO mux
- WiFi: - RealTek RTL8188EU (rtl8xxxu) - Qualcomm Wi-Fi 7 devices (ath12k)
- CAN: - Renesas R-Car V4H
Drivers:
- Bluetooth: - Set Per Platform Antenna Gain (PPAG) for Intel controllers.
- Ethernet NICs: - Intel (1G, igc): - support TSN / Qbv / packet scheduling features of i226 model - Intel (100G, ice): - use GNSS subsystem instead of TTY - multi-buffer XDP support - extend support for GPIO pins to E823 devices - nVidia/Mellanox: - update the shared buffer configuration on PFC commands - implement PTP adjphase function for HW offset control - TC support for Geneve and GRE with VF tunnel offload - more efficient crypto key management method - multi-port eswitch support - Netronome/Corigine: - add DCB IEEE support - support IPsec offloading for NFP3800 - Freescale/NXP (enetc): - support XDP_REDIRECT for XDP non-linear buffers - improve reconfig, avoid link flap and waiting for idle - support MAC Merge layer - Other NICs: - sfc/ef100: add basic devlink support for ef100 - ionic: rx_push mode operation (writing descriptors via MMIO) - bnxt: use the auxiliary bus abstraction for RDMA - r8169: disable ASPM and reset bus in case of tx timeout - cpsw: support QSGMII mode for J721e CPSW9G - cpts: support pulse-per-second output - ngbe: add an mdio bus driver - usbnet: optimize usbnet_bh() by avoiding unnecessary queuing - r8152: handle devices with FW with NCM support - amd-xgbe: support 10Mbps, 2.5GbE speeds and rx-adaptation - virtio-net: support multi buffer XDP - virtio/vsock: replace virtio_vsock_pkt with sk_buff - tsnep: XDP support
- Ethernet high-speed switches: - nVidia/Mellanox (mlxsw): - add support for latency TLV (in FW control messages) - Microchip (sparx5): - separate explicit and implicit traffic forwarding rules, make the implicit rules always active - add support for egress DSCP rewrite - IS0 VCAP support (Ingress Classification) - IS2 VCAP filters (protos, L3 addrs, L4 ports, flags, ToS etc.) - ES2 VCAP support (Egress Access Control) - support for Per-Stream Filtering and Policing (802.1Q, 8.6.5.1)
- Ethernet embedded switches: - Marvell (mv88e6xxx): - add MAB (port auth) offload support - enable PTP receive for mv88e6390 - NXP (ocelot): - support MAC Merge layer - support for the the vsc7512 internal copper phys - Microchip: - lan9303: convert to PHYLINK - lan966x: support TC flower filter statistics - lan937x: PTP support for KSZ9563/KSZ8563 and LAN937x - lan937x: support Credit Based Shaper configuration - ksz9477: support Energy Efficient Ethernet - other: - qca8k: convert to regmap read/write API, use bulk operations - rswitch: Improve TX timestamp accuracy
- Intel WiFi (iwlwifi): - EHT (Wi-Fi 7) rate reporting - STEP equalizer support: transfer some STEP (connection to radio on platforms with integrated wifi) related parameters from the BIOS to the firmware.
- Qualcomm 802.11ax WiFi (ath11k): - IPQ5018 support - Fine Timing Measurement (FTM) responder role support - channel 177 support
- MediaTek WiFi (mt76): - per-PHY LED support - mt7996: EHT (Wi-Fi 7) support - Wireless Ethernet Dispatch (WED) reset support - switch to using page pool allocator
- RealTek WiFi (rtw89): - support new version of Bluetooth co-existance
- Mobile: - rmnet: support TX aggregation"
* tag 'net-next-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1872 commits) page_pool: add a comment explaining the fragment counter usage net: ethtool: fix __ethtool_dev_mm_supported() implementation ethtool: pse-pd: Fix double word in comments xsk: add linux/vmalloc.h to xsk.c sefltests: netdevsim: wait for devlink instance after netns removal selftest: fib_tests: Always cleanup before exit net/mlx5e: Align IPsec ASO result memory to be as required by hardware net/mlx5e: TC, Set CT miss to the specific ct action instance net/mlx5e: Rename CHAIN_TO_REG to MAPPED_OBJ_TO_REG net/mlx5: Refactor tc miss handling to a single function net/mlx5: Kconfig: Make tc offload depend on tc skb extension net/sched: flower: Support hardware miss to tc action net/sched: flower: Move filter handle initialization earlier net/sched: cls_api: Support hardware miss to tc action net/sched: Rename user cookie and act cookie sfc: fix builds without CONFIG_RTC_LIB sfc: clean up some inconsistent indentings net/mlx4_en: Introduce flexible array to silence overflow warning net: lan966x: Fix possible deadlock inside PTP net/ulp: Remove redundant ->clone() test in inet_clone_ulp(). ...
diff --combined Documentation/admin-guide/kernel-parameters.txt index 993f3b6c10ff,29fb41e801ce..5e4ee29cf393 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@@ -557,6 -557,7 +557,7 @@@ Format: <string> nosocket -- Disable socket memory accounting. nokmem -- Disable kernel memory accounting. + nobpf -- Disable BPF memory accounting.
checkreqprot= [SELINUX] Set initial checkreqprot flag value. Format: { "0" | "1" } @@@ -5113,17 -5114,6 +5114,17 @@@ rcupdate.rcu_cpu_stall_timeout to be used (after conversion from seconds to milliseconds).
+ rcupdate.rcu_cpu_stall_cputime= [KNL] + Provide statistics on the cputime and count of + interrupts and tasks during the sampling period. For + multiple continuous RCU stalls, all sampling periods + begin at half of the first RCU stall timeout. + + rcupdate.rcu_exp_stall_task_details= [KNL] + Print stack dumps of any tasks blocking the + current expedited RCU grace period during an + expedited RCU CPU stall warning. + rcupdate.rcu_expedited= [KNL] Use expedited grace-period primitives, for example, synchronize_rcu_expedited() instead @@@ -5232,7 -5222,7 +5233,7 @@@ rdt= [HW,X86,RDT] Turn on/off individual RDT features. List is: cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, l2cdp, - mba. + mba, smba, bmec. E.g. to turn on cmt and turn off mba use: rdt=cmt,!mba
@@@ -5740,9 -5730,9 +5741,9 @@@ retpoline,generic - Retpolines retpoline,lfence - LFENCE; indirect branch retpoline,amd - alias for retpoline,lfence - eibrs - enhanced IBRS - eibrs,retpoline - enhanced IBRS + Retpolines - eibrs,lfence - enhanced IBRS + LFENCE + eibrs - Enhanced/Auto IBRS + eibrs,retpoline - Enhanced/Auto IBRS + Retpolines + eibrs,lfence - Enhanced/Auto IBRS + LFENCE ibrs - use IBRS to protect kernel
Not specifying this option is equivalent to @@@ -6380,16 -6370,6 +6381,16 @@@ in situations with strict latency requirements (where interruptions from clocksource watchdog are not acceptable). + [x86] recalibrate: force recalibration against a HW timer + (HPET or PM timer) on systems whose TSC frequency was + obtained from HW or FW using either an MSR or CPUID(0x15). + Warn if the difference is more than 500 ppm. + [x86] watchdog: Use TSC as the watchdog clocksource with + which to check other HW timers (HPET or PM timer), but + only on systems where TSC has been deemed trustworthy. + This will be suppressed by an earlier tsc=nowatchdog and + can be overridden by a later tsc=nowatchdog. A console + message will flag any such suppression or overriding.
tsc_early_khz= [X86] Skip early TSC calibration and use the given value instead. Useful when the early TSC frequency discovery @@@ -7041,10 -7021,3 +7042,10 @@@ management firmware translates the requests into actual hardware states (core frequency, data fabric and memory clocks etc.) + active + Use amd_pstate_epp driver instance as the scaling driver, + driver provides a hint to the hardware if software wants + to bias toward performance (0x0) or energy efficiency (0xff) + to the CPPC firmware. then CPPC power algorithm will + calculate the runtime workload and adjust the realtime cores + frequency. diff --combined Documentation/devicetree/bindings/vendor-prefixes.yaml index 852910c0ce30,99bb8594753c..5c3c6abb983b --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@@ -69,8 -69,6 +69,8 @@@ patternProperties description: Annapurna Labs "^alcatel,.*": description: Alcatel + "^aldec,.*": + description: Aldec, Inc. "^alfa-network,.*": description: ALFA Network Inc. "^allegro,.*": @@@ -266,8 -264,6 +266,8 @@@ description: Cirrus Logic, Inc. "^cisco,.*": description: Cisco Systems, Inc. + "^clockwork,.*": + description: Clockwork Tech LLC "^cloos,.*": description: Carl Cloos Schweisstechnik GmbH. "^cloudengines,.*": @@@ -378,8 -374,6 +378,8 @@@ description: EBV Elektronik "^eckelmann,.*": description: Eckelmann AG + "^edgeble,.*": + description: Edgeble AI Technologies Pvt. Ltd. "^edimax,.*": description: EDIMAX Technology Co., Ltd "^edt,.*": @@@ -402,8 -396,6 +402,8 @@@ description: Elimo Engineering Ltd. "^elpida,.*": description: Elpida Memory, Inc. + "^embedfire,.*": + description: Dongguan EmbedFire Electronic Technology Co., Ltd. "^embest,.*": description: Shenzhen Embest Technology Co., Ltd. "^emlid,.*": @@@ -520,8 -512,6 +520,8 @@@ description: Shenzhen Huiding Technology Co., Ltd. "^google,.*": description: Google, Inc. + "^gplus,.*": + description: GPLUS "^grinn,.*": description: Grinn "^grmn,.*": @@@ -785,6 -775,8 +785,8 @@@ description: MaxBotix Inc. "^maxim,.*": description: Maxim Integrated Products + "^maxlinear,.*": + description: MaxLinear Inc. "^mbvl,.*": description: Mobiveil Inc. "^mcube,.*": @@@ -855,6 -847,8 +857,8 @@@ description: Moortec Semiconductor Ltd. "^mosaixtech,.*": description: Mosaix Technologies, Inc. + "^motorcomm,.*": + description: MotorComm, Inc. "^motorola,.*": description: Motorola, Inc. "^moxa,.*": @@@ -1035,8 -1029,6 +1039,8 @@@ description: PocketBook International SA "^polaroid,.*": description: Polaroid Corporation + "^polyhex,.*": + description: Polyhex Technology Co. Ltd. "^portwell,.*": description: Portwell Inc. "^poslab,.*": @@@ -1258,8 -1250,6 +1262,8 @@@ description: Starry Electronic Technology (ShenZhen) Co., LTD "^startek,.*": description: Startek + "^starterkit,.*": + description: Starterkit "^ste,.*": description: ST-Ericsson deprecated: true @@@ -1333,8 -1323,6 +1337,8 @@@ description: thingy.jp "^thundercomm,.*": description: Thundercomm Technology Co., Ltd. + "^thwc,.*": + description: Shenzhen Tong Heng Wei Chuang Technology Co., Ltd. "^ti,.*": description: Texas Instruments "^tianma,.*": @@@ -1388,8 -1376,6 +1392,8 @@@ description: uCRobotics "^udoo,.*": description: Udoo + "^ufispace,.*": + description: Ufi Space Co., Ltd. "^ugoos,.*": description: Ugoos Industrial Co., Ltd. "^uniwest,.*": @@@ -1462,8 -1448,6 +1466,8 @@@ description: Shenzhen whwave Electronics, Inc. "^wi2wi,.*": description: Wi2Wi, Inc. + "^widora,.*": + description: Beijing Widora Technology Co., Ltd. "^wiligear,.*": description: Wiligear, Ltd. "^willsemi,.*": diff --combined MAINTAINERS index b4d198cca5aa,4df1a6e89fe7..fbff490379ad --- a/MAINTAINERS +++ b/MAINTAINERS @@@ -361,8 -361,6 +361,8 @@@ T: git git://git.kernel.org/pub/scm/lin F: Documentation/ABI/testing/configfs-acpi F: Documentation/ABI/testing/sysfs-bus-acpi F: Documentation/firmware-guide/acpi/ +F: arch/x86/kernel/acpi/ +F: arch/x86/pci/acpi.c F: drivers/acpi/ F: drivers/pci/*/*acpi* F: drivers/pci/*acpi* @@@ -1853,6 -1851,21 +1853,6 @@@ F: include/dt-bindings/reset/actions, F: include/linux/soc/actions/ N: owl
-ARM/ADS SPHERE MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/AFEB9260 MACHINE SUPPORT -M: Sergey Lapin slapin@ossfans.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/AJECO 1ARM MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/Allwinner SoC Clock Support M: Emilio López emilio@elopez.com.ar S: Maintained @@@ -1873,7 -1886,7 +1873,7 @@@ F: drivers/pinctrl/sunxi F: drivers/soc/sunxi/ N: allwinner N: sun[x456789]i -N: sun50i +N: sun[25]0i
ARM/Amlogic Meson SoC CLOCK FRAMEWORK M: Neil Armstrong neil.armstrong@linaro.org @@@ -2043,6 -2056,11 +2043,6 @@@ F: arch/arm/boot/dts/ecx-*.dts F: arch/arm/boot/dts/highbank.dts F: arch/arm/mach-highbank/
-ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT -M: Krzysztof Halasa khalasa@piap.pl -S: Maintained -F: arch/arm/mach-cns3xxx/ - ARM/CAVIUM THUNDER NETWORK DRIVER M: Sunil Goutham sgoutham@marvell.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2071,8 -2089,8 +2071,8 @@@ M: Hartley Sweeten <hsweeten@visionengr M: Alexander Sverdlin alexander.sverdlin@gmail.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained +F: arch/arm/boot/compressed/misc-ep93xx.h F: arch/arm/mach-ep93xx/ -F: arch/arm/mach-ep93xx/include/mach/
ARM/CLKDEV SUPPORT M: Russell King linux@armlinux.org.uk @@@ -2088,6 -2106,11 +2088,6 @@@ S: Maintaine F: arch/arm/boot/dts/cx92755* N: digicolor
-ARM/CONTEC MICRO9 MACHINE SUPPORT -M: Hubert Feurstein hubert.feurstein@contec.at -S: Maintained -F: arch/arm/mach-ep93xx/micro9.c - ARM/CORESIGHT FRAMEWORK AND DRIVERS M: Mathieu Poirier mathieu.poirier@linaro.org M: Suzuki K Poulose suzuki.poulose@arm.com @@@ -2114,6 -2137,10 +2114,6 @@@ F: tools/perf/arch/arm/util/pmu. F: tools/perf/util/cs-etm-decoder/* F: tools/perf/util/cs-etm.*
-ARM/CORGI MACHINE SUPPORT -M: Richard Purdie rpurdie@rpsys.net -S: Maintained - ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE M: Hans Ulli Kroll ulli.kroll@googlemail.com M: Linus Walleij linus.walleij@linaro.org @@@ -2153,6 -2180,12 +2153,6 @@@ F: include/dt-bindings/bus/moxtet. F: include/linux/armada-37xx-rwtm-mailbox.h F: include/linux/moxtet.h
-ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) -M: Robert Jarzmik robert.jarzmik@free.fr -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/ezx.c - ARM/FARADAY FA526 PORT M: Hans Ulli Kroll ulli.kroll@googlemail.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2205,11 -2238,25 +2205,11 @@@ T: git git://git.kernel.org/pub/scm/lin F: arch/arm/boot/dts/vf* F: arch/arm/mach-imx/*vf610*
-ARM/GLOMATION GESBC9312SX MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/GUMSTIX MACHINE SUPPORT M: Steve Sakoman sakoman@gmail.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained
-ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT -M: Philipp Zabel philipp.zabel@gmail.com -M: Paul Parsons lost.distance@yahoo.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/hx4700.c -F: arch/arm/mach-pxa/include/mach/hx4700.h -F: sound/soc/pxa/hx4700.c - ARM/HISILICON SOC SUPPORT M: Wei Xu xuwei5@hisilicon.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2252,6 -2299,27 +2252,6 @@@ L: linux-arm-kernel@lists.infradead.or S: Maintained F: arch/arm/boot/dts/omap3-igep*
-ARM/INCOME PXA270 SUPPORT -M: Marek Vasut marek.vasut@gmail.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/colibri-pxa270-income.c - -ARM/INTEL IOP32X ARM ARCHITECTURE -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IQ81342EX MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IXDP2850 MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/INTEL IXP4XX ARM ARCHITECTURE M: Linus Walleij linusw@kernel.org M: Imre Kaloz kaloz@openwrt.org @@@ -2284,12 -2352,22 +2284,12 @@@ M: Lennert Buytenhek <kernel@wantstofly L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained
-ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/LG1K ARCHITECTURE M: Chanho Min chanho.min@lge.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: arch/arm64/boot/dts/lg/
-ARM/LOGICPD PXA270 MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/LPC18XX ARCHITECTURE M: Vladimir Zapolskiy vz@mleia.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2316,6 -2394,10 +2316,6 @@@ F: drivers/usb/host/ohci-nxp. F: drivers/watchdog/pnx4008_wdt.c N: lpc32xx
-ARM/MAGICIAN MACHINE SUPPORT -M: Philipp Zabel philipp.zabel@gmail.com -S: Maintained - ARM/Marvell Dove/MV78xx0/Orion SOC support M: Andrew Lunn andrew@lunn.ch M: Sebastian Hesselbarth sebastian.hesselbarth@gmail.com @@@ -2447,6 -2529,12 +2447,6 @@@ F: arch/arm/boot/dts/milbeaut F: arch/arm/mach-milbeaut/ N: milbeaut
-ARM/MIOA701 MACHINE SUPPORT -M: Robert Jarzmik robert.jarzmik@free.fr -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/mioa701.c - ARM/MStar/Sigmastar Armv7 SoC support M: Daniel Palmer daniel@thingy.jp M: Romain Perier romain.perier@gmail.com @@@ -2467,6 -2555,10 +2467,6 @@@ F: drivers/watchdog/msc313e_wdt. F: include/dt-bindings/clock/mstar-* F: include/dt-bindings/gpio/msc313-gpio.h
-ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT -M: Michael Petchkovsky mkpetch@internode.on.net -S: Maintained - ARM/NOMADIK/Ux500 ARCHITECTURES M: Linus Walleij linus.walleij@linaro.org L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2522,7 -2614,6 +2522,7 @@@ S: Maintaine W: https://github.com/neuschaefer/wpcm450/wiki F: Documentation/devicetree/bindings/*/*wpcm* F: arch/arm/boot/dts/nuvoton-wpcm450* +F: arch/arm/configs/wpcm450_defconfig F: arch/arm/mach-npcm/wpcm450.c F: drivers/*/*/*wpcm* F: drivers/*/*wpcm* @@@ -2536,6 -2627,13 +2536,6 @@@ L: linux-arm-kernel@lists.infradead.or S: Maintained F: arch/arm64/boot/dts/freescale/s32g*.dts*
-ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT -L: openmoko-kernel@lists.openmoko.org (subscribers-only) -S: Orphan -W: http://wiki.openmoko.org/wiki/Neo_FreeRunner -F: arch/arm/mach-s3c/gta02.h -F: arch/arm/mach-s3c/mach-gta02.c - ARM/Orion SoC/Technologic Systems TS-78xx platform support M: Alexander Clouter alex@digriz.org.uk L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2553,6 -2651,43 +2553,6 @@@ F: arch/arm/mach-oxnas F: drivers/power/reset/oxnas-restart.c N: oxnas
-ARM/PALM TREO SUPPORT -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Orphan -F: arch/arm/mach-pxa/palmtreo.* - -ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT -M: Marek Vasut marek.vasut@gmail.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -W: http://hackndev.com -F: arch/arm/mach-pxa/include/mach/palmld.h -F: arch/arm/mach-pxa/include/mach/palmtc.h -F: arch/arm/mach-pxa/include/mach/palmtx.h -F: arch/arm/mach-pxa/palmld.c -F: arch/arm/mach-pxa/palmt5.* -F: arch/arm/mach-pxa/palmtc.c -F: arch/arm/mach-pxa/palmte2.* -F: arch/arm/mach-pxa/palmtx.c - -ARM/PALMZ72 SUPPORT -M: Sergey Lapin slapin@ossfans.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -W: http://hackndev.com -F: arch/arm/mach-pxa/palmz72.* - -ARM/PLEB SUPPORT -M: Peter Chubb pleb@gelato.unsw.edu.au -S: Maintained -W: http://www.disy.cse.unsw.edu.au/Hardware/PLEB - -ARM/PT DIGITAL BOARD PORT -M: Stefan Eletzhofer stefan.eletzhofer@eletztrick.de -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -W: http://www.armlinux.org.uk/ - ARM/QUALCOMM SUPPORT M: Andy Gross agross@kernel.org M: Bjorn Andersson andersson@kernel.org @@@ -2596,6 -2731,11 +2596,6 @@@ F: include/dt-bindings/*/qcom F: include/linux/*/qcom* F: include/linux/soc/qcom/
-ARM/RADISYS ENP2611 MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/RDA MICRO ARCHITECTURE M: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2671,7 -2811,7 +2671,7 @@@ F: Documentation/devicetree/bindings/i2 F: Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.yaml F: Documentation/devicetree/bindings/spi/spi-rockchip.yaml F: arch/arm/boot/dts/rk3* -F: arch/arm/boot/dts/rv1108* +F: arch/arm/boot/dts/rv11* F: arch/arm/mach-rockchip/ F: drivers/*/*/*rockchip* F: drivers/*/*rockchip* @@@ -2716,6 -2856,7 +2716,6 @@@ F: include/linux/platform_data/*s3c F: include/linux/serial_s3c.h F: include/linux/soc/samsung/ N: exynos -N: s3c2410 N: s3c64xx N: s5pv210
@@@ -2873,7 -3014,7 +2873,7 @@@ M: linux-fsd@tesla.co L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-samsung-soc@vger.kernel.org S: Maintained -F: arch/arm64/boot/dts/tesla* +F: arch/arm64/boot/dts/tesla/
ARM/TETON BGA MACHINE SUPPORT M: "Mark F. Brown" mark.brown314@gmail.com @@@ -2926,6 -3067,16 +2926,6 @@@ F: arch/arm64/boot/dts/ti/Makefil F: arch/arm64/boot/dts/ti/k3-* F: include/dt-bindings/pinctrl/k3.h
-ARM/THECUS N2100 MACHINE SUPPORT -M: Lennert Buytenhek kernel@wantstofly.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/TOSA MACHINE SUPPORT -M: Dmitry Eremin-Solenikov dbaryshkov@gmail.com -M: Dirk Opfer dirk@opfer-online.de -S: Maintained - ARM/TOSHIBA VISCONTI ARCHITECTURE M: Nobuhiro Iwamatsu nobuhiro1.iwamatsu@toshiba.co.jp L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -2982,7 -3133,7 +2982,7 @@@ S: Maintaine F: */*/*/vexpress* F: */*/vexpress* F: arch/arm/boot/dts/vexpress* -F: arch/arm/mach-vexpress/ +F: arch/arm/mach-versatile/ F: arch/arm64/boot/dts/arm/ F: drivers/clk/versatile/clk-vexpress-osc.c F: drivers/clocksource/timer-versatile.c @@@ -2995,6 -3146,13 +2995,6 @@@ S: Maintaine W: http://www.armlinux.org.uk/ F: arch/arm/vfp/
-ARM/VOIPAC PXA270 SUPPORT -M: Marek Vasut marek.vasut@gmail.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/include/mach/vpac270.h -F: arch/arm/mach-pxa/vpac270.c - ARM/VT8500 ARM ARCHITECTURE L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Orphan @@@ -3012,6 -3170,13 +3012,6 @@@ F: drivers/video/fbdev/vt8500lcdfb. F: drivers/video/fbdev/wm8505fb* F: drivers/video/fbdev/wmt_ge_rops.*
-ARM/ZIPIT Z2 SUPPORT -M: Marek Vasut marek.vasut@gmail.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/include/mach/z2.h -F: arch/arm/mach-pxa/z2.c - ARM/ZYNQ ARCHITECTURE M: Michal Simek michal.simek@xilinx.com L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@@ -3149,7 -3314,7 +3149,7 @@@ ASPEED CRYPTO DRIVE M: Neal Liu neal_liu@aspeedtech.com L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) S: Maintained -F: Documentation/devicetree/bindings/crypto/aspeed,ast2500-hace.yaml +F: Documentation/devicetree/bindings/crypto/aspeed,* F: drivers/crypto/aspeed/
ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS @@@ -3858,6 -4023,13 +3858,13 @@@ L: bpf@vger.kernel.or S: Maintained F: tools/testing/selftests/bpf/
+ BPF [DOCUMENTATION] (Related to Standardization) + R: David Vernet void@manifault.com + L: bpf@vger.kernel.org + L: bpf@ietf.org + S: Maintained + F: Documentation/bpf/instruction-set.rst + BPF [MISC] L: bpf@vger.kernel.org S: Odd Fixes @@@ -4642,12 -4814,11 +4649,11 @@@ F: net/sched/sch_etf. F: net/sched/sch_taprio.c
CC2520 IEEE-802.15.4 RADIO DRIVER - M: Varka Bhadram varkabhadram@gmail.com + M: Stefan Schmidt stefan@datenfreihafen.org L: linux-wpan@vger.kernel.org - S: Maintained + S: Odd Fixes F: Documentation/devicetree/bindings/net/ieee802154/cc2520.txt F: drivers/net/ieee802154/cc2520.c - F: include/linux/spi/cc2520.h
CCREE ARM TRUSTZONE CRYPTOCELL REE DRIVER M: Gilad Ben-Yossef gilad@benyossef.com @@@ -4823,13 -4994,6 +4829,13 @@@ S: Maintaine F: Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml F: sound/soc/codecs/cros_ec_codec.*
+CHROMEOS EC UART DRIVER +M: Bhanu Prakash Maiya bhanumaiya@chromium.org +R: Benson Leung bleung@chromium.org +R: Tzung-Bi Shih tzungbi@kernel.org +S: Maintained +F: drivers/platform/chrome/cros_ec_uart.c + CHROMEOS EC SUBDRIVERS M: Benson Leung bleung@chromium.org R: Guenter Roeck groeck@chromium.org @@@ -4843,9 -5007,8 +4849,9 @@@ CHROMEOS EC USB TYPE-C DRIVE M: Prashant Malani pmalani@chromium.org L: chrome-platform@lists.linux.dev S: Maintained -F: drivers/platform/chrome/cros_ec_typec.c +F: drivers/platform/chrome/cros_ec_typec.* F: drivers/platform/chrome/cros_typec_switch.c +F: drivers/platform/chrome/cros_typec_vdm.*
CHROMEOS EC USB PD NOTIFY DRIVER M: Prashant Malani pmalani@chromium.org @@@ -5773,6 -5936,7 +5779,6 @@@ F: Documentation/ABI/testing/sysfs-plat F: drivers/platform/x86/dell/dell-wmi-ddv.c
DELL WMI SYSMAN DRIVER -M: Divya Bharathi divya.bharathi@dell.com M: Prasanth Ksr prasanth.ksr@dell.com L: Dell.Client.Kernel@dell.com L: platform-driver-x86@vger.kernel.org @@@ -5944,7 -6108,7 +5950,7 @@@ S: Supporte F: Documentation/networking/devlink F: include/net/devlink.h F: include/uapi/linux/devlink.h - F: net/core/devlink.c + F: net/devlink/
DH ELECTRONICS IMX6 DHCOM/DHCOR BOARD SUPPORT M: Christoph Niedermaier cniedermaier@dh-electronics.com @@@ -6267,7 -6431,6 +6273,7 @@@ T: git git://git.linbit.com/linux-drbd. T: git git://git.linbit.com/drbd-8.4.git F: Documentation/admin-guide/blockdev/ F: drivers/block/drbd/ +F: include/linux/drbd* F: lib/lru_cache.c
DRIVER COMPONENT FRAMEWORK @@@ -7590,7 -7753,6 +7596,7 @@@ R: Jeffle Xu <jefflexu@linux.alibaba.co L: linux-erofs@lists.ozlabs.org S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git +F: Documentation/ABI/testing/sysfs-fs-erofs F: Documentation/filesystems/erofs.rst F: fs/erofs/ F: include/trace/events/erofs.h @@@ -8046,7 -8208,7 +8052,7 @@@ F: drivers/fpga/microchip-spi. FPU EMULATOR M: Bill Metzenthen billm@melbpc.org.au S: Maintained -W: http://floatingpoint.sourceforge.net/emulator/index.html +W: https://floatingpoint.billm.au/ F: arch/x86/math-emu/
FRAMEBUFFER CORE @@@ -9840,7 -10002,7 +9846,7 @@@ S: Maintaine T: git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git F: Documentation/filesystems/idmappings.rst F: tools/testing/selftests/mount_setattr/ -F: include/linux/mnt_idmapping.h +F: include/linux/mnt_idmapping.*
IDT VersaClock 5 CLOCK DRIVER M: Luca Ceresoli luca@lucaceresoli.net @@@ -9851,6 -10013,7 +9857,7 @@@ F: drivers/clk/clk-versaclock5. IEEE 802.15.4 SUBSYSTEM M: Alexander Aring alex.aring@gmail.com M: Stefan Schmidt stefan@datenfreihafen.org + M: Miquel Raynal miquel.raynal@bootlin.com L: linux-wpan@vger.kernel.org S: Maintained W: https://linux-wpan.org/ @@@ -10534,13 -10697,6 +10541,13 @@@ S: Maintaine F: arch/x86/include/asm/intel_telemetry.h F: drivers/platform/x86/intel/telemetry/
+INTEL TPMI DRIVER +M: Srinivas Pandruvada srinivas.pandruvada@linux.intel.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/tpmi.c +F: include/linux/intel_tpmi.h + INTEL UNCORE FREQUENCY CONTROL M: Srinivas Pandruvada srinivas.pandruvada@linux.intel.com L: platform-driver-x86@vger.kernel.org @@@ -10793,8 -10949,6 +10800,8 @@@ L: linux-kernel@vger.kernel.or S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core F: kernel/irq/ +F: include/linux/group_cpus.h +F: lib/group_cpus.c
IRQCHIP DRIVERS M: Thomas Gleixner tglx@linutronix.de @@@ -12675,9 -12829,9 +12682,9 @@@ F: drivers/iio/potentiometer/mcp4018. F: drivers/iio/potentiometer/mcp4531.c
MCR20A IEEE-802.15.4 RADIO DRIVER - M: Xue Liu liuxuenetmail@gmail.com + M: Stefan Schmidt stefan@datenfreihafen.org L: linux-wpan@vger.kernel.org - S: Maintained + S: Odd Fixes W: https://github.com/xueliu/mcr20a-linux F: Documentation/devicetree/bindings/net/ieee802154/mcr20a.txt F: drivers/net/ieee802154/mcr20a.c @@@ -13570,6 -13724,7 +13577,7 @@@ S: Maintaine F: Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml F: Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml F: drivers/net/dsa/microchip/* + F: include/linux/dsa/ksz_common.h F: include/linux/platform_data/microchip-ksz.h F: net/dsa/tag_ksz.c
@@@ -14022,6 -14177,7 +14030,7 @@@ M: Peter Geis <pgwipeout@gmail.com M: Frank Frank.Sae@motor-comm.com L: netdev@vger.kernel.org S: Maintained + F: Documentation/devicetree/bindings/net/motorcomm,yt8xxx.yaml F: drivers/net/phy/motorcomm.c
MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD @@@ -14038,9 -14194,9 +14047,9 @@@ T: git git://linuxtv.org/media_tree.gi F: drivers/media/radio/radio-mr800.c
MRF24J40 IEEE 802.15.4 RADIO DRIVER - M: Alan Ott alan@signal11.us + M: Stefan Schmidt stefan@datenfreihafen.org L: linux-wpan@vger.kernel.org - S: Maintained + S: Odd Fixes F: Documentation/devicetree/bindings/net/ieee802154/mrf24j40.txt F: drivers/net/ieee802154/mrf24j40.c
@@@ -14402,6 -14558,8 +14411,8 @@@ M: Florian Fainelli <f.fainelli@gmail.c M: Vladimir Oltean olteanv@gmail.com S: Maintained F: Documentation/devicetree/bindings/net/dsa/ + F: Documentation/devicetree/bindings/net/ethernet-switch-port.yaml + F: Documentation/devicetree/bindings/net/ethernet-switch.yaml F: drivers/net/dsa/ F: include/linux/dsa/ F: include/linux/platform_data/dsa.h @@@ -14420,8 -14578,10 +14431,10 @@@ Q: https://patchwork.kernel.org/project B: mailto:netdev@vger.kernel.org T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git + F: Documentation/core-api/netlink.rst F: Documentation/networking/ F: Documentation/process/maintainer-netdev.rst + F: Documentation/userspace-api/netlink/ F: include/linux/in.h F: include/linux/net.h F: include/linux/netdevice.h @@@ -14433,6 -14593,7 +14446,7 @@@ F: include/uapi/linux/netdevice. F: lib/net_utils.c F: lib/random32.c F: net/ + F: tools/net/ F: tools/testing/selftests/net/
NETWORKING [IPSEC] @@@ -15010,6 -15171,7 +15024,7 @@@ M: Colin Foster <colin.foster@in-advant S: Supported F: Documentation/devicetree/bindings/mfd/mscc,ocelot.yaml F: drivers/mfd/ocelot* + F: drivers/net/dsa/ocelot/ocelot_ext.c F: include/linux/mfd/ocelot.h
OCXL (Open Coherent Accelerator Processor Interface OpenCAPI) DRIVER @@@ -15173,6 -15335,7 +15188,6 @@@ Q: http://patchwork.kernel.org/project/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git F: arch/arm/configs/omap1_defconfig F: arch/arm/mach-omap1/ -F: arch/arm/plat-omap/ F: drivers/i2c/busses/i2c-omap.c F: include/linux/platform_data/ams-delta-fiq.h F: include/linux/platform_data/i2c-omap.h @@@ -15187,6 -15350,7 +15202,6 @@@ Q: http://patchwork.kernel.org/project/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git F: arch/arm/configs/omap2plus_defconfig F: arch/arm/mach-omap2/ -F: arch/arm/plat-omap/ F: drivers/bus/ti-sysc.c F: drivers/i2c/busses/i2c-omap.c F: drivers/irqchip/irq-omap-intc.c @@@ -15441,6 -15605,13 +15456,13 @@@ L: linux-mips@vger.kernel.or S: Maintained F: arch/mips/boot/dts/ralink/omega2p.dts
+ ONSEMI ETHERNET PHY DRIVERS + M: Piergiorgio Beruto piergiorgio.beruto@gmail.com + L: netdev@vger.kernel.org + S: Supported + W: http://www.onsemi.com + F: drivers/net/phy/ncn* + OP-TEE DRIVER M: Jens Wiklander jens.wiklander@linaro.org L: op-tee@lists.trustedfirmware.org @@@ -16486,6 -16657,13 +16508,13 @@@ S: Maintaine F: Documentation/devicetree/bindings/iio/chemical/plantower,pms7003.yaml F: drivers/iio/chemical/pms7003.c
+ PLCA RECONCILIATION SUBLAYER (IEEE802.3 Clause 148) + M: Piergiorgio Beruto piergiorgio.beruto@gmail.com + L: netdev@vger.kernel.org + S: Maintained + F: drivers/net/phy/mdio-open-alliance.h + F: net/ethtool/plca.c + PLDMFW LIBRARY M: Jacob Keller jacob.e.keller@intel.com S: Maintained @@@ -17083,6 -17261,13 +17112,13 @@@ T: git git://git.kernel.org/pub/scm/lin F: Documentation/devicetree/bindings/net/wireless/qcom,ath11k.yaml F: drivers/net/wireless/ath/ath11k/
+ QUALCOMM ATH12K WIRELESS DRIVER + M: Kalle Valo kvalo@kernel.org + L: ath12k@lists.infradead.org + S: Supported + T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git + F: drivers/net/wireless/ath/ath12k/ + QUALCOMM ATHEROS ATH9K WIRELESS DRIVER M: Toke Høiland-Jørgensen toke@toke.dk L: linux-wireless@vger.kernel.org @@@ -18085,7 -18270,6 +18121,7 @@@ L: rust-for-linux@vger.kernel.or S: Supported W: https://github.com/Rust-for-Linux/linux B: https://github.com/Rust-for-Linux/linux/issues +C: zulip://rust-for-linux.zulipchat.com T: git https://github.com/Rust-for-Linux/linux.git rust-next F: Documentation/rust/ F: rust/ @@@ -18125,7 -18309,6 +18161,7 @@@ F: Documentation/driver-api/s390-driver F: Documentation/s390/ F: arch/s390/ F: drivers/s390/ +F: drivers/watchdog/diag288_wdt.c
S390 COMMON I/O LAYER M: Vineeth Vijayan vneethv@linux.ibm.com @@@ -18186,13 -18369,6 +18222,13 @@@ F: arch/s390/pci F: drivers/pci/hotplug/s390_pci_hpc.c F: Documentation/s390/pci.rst
+S390 SCM DRIVER +M: Vineeth Vijayan vneethv@linux.ibm.com +L: linux-s390@vger.kernel.org +S: Supported +F: drivers/s390/block/scm* +F: drivers/s390/cio/scm.c + S390 VFIO AP DRIVER M: Tony Krowiak akrowiak@linux.ibm.com M: Halil Pasic pasic@linux.ibm.com @@@ -18236,6 -18412,19 +18272,6 @@@ L: linux-s390@vger.kernel.or S: Supported F: drivers/s390/scsi/zfcp_*
-S3C ADC BATTERY DRIVER -M: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org -L: linux-samsung-soc@vger.kernel.org -S: Odd Fixes -F: drivers/power/supply/s3c_adc_battery.c -F: include/linux/s3c_adc_battery.h - -S3C24XX SD/MMC Driver -M: Ben Dooks ben-linux@fluff.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Supported -F: drivers/mmc/host/s3cmci.* - SAA6588 RDS RECEIVER DRIVER M: Hans Verkuil hverkuil@xs4all.nl L: linux-media@vger.kernel.org @@@ -18388,9 -18577,11 +18424,9 @@@ F: Documentation/devicetree/bindings/cl F: Documentation/devicetree/bindings/clock/samsung,s3c* F: drivers/clk/samsung/ F: include/dt-bindings/clock/exynos*.h -F: include/dt-bindings/clock/s3c*.h F: include/dt-bindings/clock/s5p*.h F: include/dt-bindings/clock/samsung,*.h F: include/linux/clk/samsung.h -F: include/linux/platform_data/clk-s3c2410.h
SAMSUNG SPI DRIVERS M: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org @@@ -18401,6 -18592,7 +18437,6 @@@ S: Maintaine F: Documentation/devicetree/bindings/spi/samsung,spi*.yaml F: drivers/spi/spi-s3c* F: include/linux/platform_data/spi-s3c64xx.h -F: include/linux/spi/s3c24xx-fiq.h
SAMSUNG SXGBE DRIVERS M: Byungho An bh74.an@samsung.com @@@ -18759,6 -18951,7 +18795,7 @@@ M: Edward Cree <ecree.xilinx@gmail.com M: Martin Habets habetsm.xilinx@gmail.com L: netdev@vger.kernel.org S: Supported + F: Documentation/networking/devlink/sfc.rst F: drivers/net/ethernet/sfc/
SFF/SFP/SFP+ MODULE SUPPORT @@@ -18970,6 -19163,14 +19007,6 @@@ M: Simtec Linux Team <linux@simtec.co.u S: Supported W: http://www.simtec.co.uk/products/EB110ATX/
-SIMTEC EB2410ITX (BAST) -M: Simtec Linux Team linux@simtec.co.uk -S: Supported -W: http://www.simtec.co.uk/products/EB2410ITX/ -F: arch/arm/mach-s3c/bast-ide.c -F: arch/arm/mach-s3c/bast-irq.c -F: arch/arm/mach-s3c/mach-bast.c - SIOX M: Thorsten Scherer t.scherer@eckelmann.de M: Uwe Kleine-König u.kleine-koenig@pengutronix.de @@@ -19769,12 -19970,6 +19806,12 @@@ F: Documentation/devicetree/bindings/re F: drivers/reset/reset-starfive-jh7100.c F: include/dt-bindings/reset/starfive-jh7100.h
+STARFIVE TRNG DRIVER +M: Jia Jie Ho jiajie.ho@starfivetech.com +S: Supported +F: Documentation/devicetree/bindings/rng/starfive* +F: drivers/char/hw_random/jh7110-trng.c + STATIC BRANCH/CALL M: Peter Zijlstra peterz@infradead.org M: Josh Poimboeuf jpoimboe@kernel.org @@@ -19948,8 -20143,7 +19985,8 @@@ L: linux-pm@vger.kernel.or S: Supported B: https://bugzilla.kernel.org F: Documentation/power/ -F: arch/x86/kernel/acpi/ +F: arch/x86/kernel/acpi/sleep* +F: arch/x86/kernel/acpi/wakeup* F: drivers/base/power/ F: include/linux/freezer.h F: include/linux/pm.h @@@ -20557,7 -20751,6 +20594,7 @@@ S: Supporte Q: https://patchwork.kernel.org/project/linux-pm/list/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal F: Documentation/ABI/testing/sysfs-class-thermal +F: Documentation/admin-guide/thermal/ F: Documentation/devicetree/bindings/thermal/ F: Documentation/driver-api/thermal/ F: drivers/thermal/ @@@ -20639,7 -20832,7 +20676,7 @@@ M: Mika Westerberg <mika.westerberg@lin M: Yehezkel Bernat YehezkelShB@gmail.com L: netdev@vger.kernel.org S: Maintained - F: drivers/net/thunderbolt.c + F: drivers/net/thunderbolt/
THUNDERX GPIO DRIVER M: Robert Richter rric@kernel.org @@@ -20714,6 -20907,7 +20751,6 @@@ W: https://linuxtv.or Q: http://patchwork.linuxtv.org/project/linux-media/list/ T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git F: drivers/media/platform/ti/davinci/ -F: drivers/staging/media/deprecated/vpfe_capture/ F: include/media/davinci/
TI ENHANCED CAPTURE (eCAP) DRIVER @@@ -22492,7 -22686,6 +22529,7 @@@ S: Maintaine T: git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git F: drivers/platform/olpc/ F: drivers/platform/x86/ +F: include/linux/platform_data/x86/
X86 PLATFORM DRIVERS - ARCH R: Darren Hart dvhart@infradead.org @@@ -22778,13 -22971,6 +22815,13 @@@ F: Documentation/devicetree/bindings/dm F: drivers/dma/xilinx/xilinx_dpdma.c F: include/dt-bindings/dma/xlnx-zynqmp-dpdma.h
+XILINX ZYNQMP OCM EDAC DRIVER +M: Shubhrajyoti Datta shubhrajyoti.datta@amd.com +M: Sai Krishna Potthuri sai.krishna.potthuri@amd.com +S: Maintained +F: Documentation/devicetree/bindings/memory-controllers/xlnx,zynqmp-ocmc-1.0.yaml +F: drivers/edac/zynqmp_edac.c + XILINX ZYNQMP PSGTR PHY DRIVER M: Anurag Kumar Vulisha anurag.kumar.vulisha@xilinx.com M: Laurent Pinchart laurent.pinchart@ideasonboard.com diff --combined arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts index c928b6824e41,cdcc5093c763..fefb93487291 --- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts @@@ -15,13 -15,6 +15,13 @@@ stdout-path = &lpuart1; };
+ reg_vref_1v8: regulator-adc-vref { + compatible = "regulator-fixed"; + regulator-name = "vref_1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + reg_usdhc2_vmmc: regulator-usdhc2 { compatible = "regulator-fixed"; pinctrl-names = "default"; @@@ -34,11 -27,6 +34,11 @@@ }; };
+&adc1 { + vref-supply = <®_vref_1v8>; + status = "okay"; +}; + &mu1 { status = "okay"; }; @@@ -47,6 -35,46 +47,46 @@@ status = "okay"; };
+ &eqos { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_eqos>; + phy-mode = "rgmii-id"; + phy-handle = <ðphy1>; + status = "okay"; + + mdio { + compatible = "snps,dwmac-mdio"; + #address-cells = <1>; + #size-cells = <0>; + clock-frequency = <5000000>; + + ethphy1: ethernet-phy@1 { + reg = <1>; + eee-broken-1000t; + }; + }; + }; + + &fec { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_fec>; + phy-mode = "rgmii-id"; + phy-handle = <ðphy2>; + fsl,magic-packet; + status = "okay"; + + mdio { + #address-cells = <1>; + #size-cells = <0>; + clock-frequency = <5000000>; + + ethphy2: ethernet-phy@2 { + reg = <2>; + eee-broken-1000t; + }; + }; + }; + &lpuart1 { /* console */ pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>; @@@ -77,6 -105,44 +117,44 @@@ };
&iomuxc { + pinctrl_eqos: eqosgrp { + fsl,pins = < + MX93_PAD_ENET1_MDC__ENET_QOS_MDC 0x57e + MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO 0x57e + MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0 0x57e + MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1 0x57e + MX93_PAD_ENET1_RD2__ENET_QOS_RGMII_RD2 0x57e + MX93_PAD_ENET1_RD3__ENET_QOS_RGMII_RD3 0x57e + MX93_PAD_ENET1_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x5fe + MX93_PAD_ENET1_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x57e + MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0 0x57e + MX93_PAD_ENET1_TD1__ENET_QOS_RGMII_TD1 0x57e + MX93_PAD_ENET1_TD2__ENET_QOS_RGMII_TD2 0x57e + MX93_PAD_ENET1_TD3__ENET_QOS_RGMII_TD3 0x57e + MX93_PAD_ENET1_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x5fe + MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x57e + >; + }; + + pinctrl_fec: fecgrp { + fsl,pins = < + MX93_PAD_ENET2_MDC__ENET1_MDC 0x57e + MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x57e + MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x57e + MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x57e + MX93_PAD_ENET2_RD2__ENET1_RGMII_RD2 0x57e + MX93_PAD_ENET2_RD3__ENET1_RGMII_RD3 0x57e + MX93_PAD_ENET2_RXC__ENET1_RGMII_RXC 0x5fe + MX93_PAD_ENET2_RX_CTL__ENET1_RGMII_RX_CTL 0x57e + MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x57e + MX93_PAD_ENET2_TD1__ENET1_RGMII_TD1 0x57e + MX93_PAD_ENET2_TD2__ENET1_RGMII_TD2 0x57e + MX93_PAD_ENET2_TD3__ENET1_RGMII_TD3 0x57e + MX93_PAD_ENET2_TXC__ENET1_RGMII_TXC 0x5fe + MX93_PAD_ENET2_TX_CTL__ENET1_RGMII_TX_CTL 0x57e + >; + }; + pinctrl_uart1: uart1grp { fsl,pins = < MX93_PAD_UART1_RXD__LPUART1_RX 0x31e diff --combined arch/arm64/boot/dts/freescale/imx93.dtsi index abb3fbe4ba22,22dd2ee70be7..2076f9c9983a --- a/arch/arm64/boot/dts/freescale/imx93.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93.dtsi @@@ -223,20 -223,6 +223,20 @@@ status = "disabled"; };
+ flexcan1: can@443a0000 { + compatible = "fsl,imx93-flexcan"; + reg = <0x443a0000 0x10000>; + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk IMX93_CLK_BUS_AON>, + <&clk IMX93_CLK_CAN1_GATE>; + clock-names = "ipg", "per"; + assigned-clocks = <&clk IMX93_CLK_CAN1>; + assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>; + assigned-clock-rates = <40000000>; + fsl,clk-source = /bits/ 8 <0>; + status = "disabled"; + }; + iomuxc: pinctrl@443c0000 { compatible = "fsl,imx93-iomuxc"; reg = <0x443c0000 0x10000>; @@@ -280,19 -266,6 +280,19 @@@ compatible = "fsl,imx93-anatop", "syscon"; reg = <0x44480000 0x10000>; }; + + adc1: adc@44530000 { + compatible = "nxp,imx93-adc"; + reg = <0x44530000 0x10000>; + interrupts = <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk IMX93_CLK_ADC1_GATE>; + clock-names = "ipg"; + #io-channel-cells = <1>; + status = "disabled"; + }; };
aips2: bus@42000000 { @@@ -420,20 -393,6 +420,20 @@@ status = "disabled"; };
+ flexcan2: can@425b0000 { + compatible = "fsl,imx93-flexcan"; + reg = <0x425b0000 0x10000>; + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk IMX93_CLK_BUS_WAKEUP>, + <&clk IMX93_CLK_CAN2_GATE>; + clock-names = "ipg", "per"; + assigned-clocks = <&clk IMX93_CLK_CAN2>; + assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>; + assigned-clock-rates = <40000000>; + fsl,clk-source = /bits/ 8 <0>; + status = "disabled"; + }; + lpuart7: serial@42690000 { compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart"; reg = <0x42690000 0x1000>; @@@ -577,6 -536,54 +577,54 @@@ status = "disabled"; };
+ eqos: ethernet@428a0000 { + compatible = "nxp,imx93-dwmac-eqos", "snps,dwmac-5.10a"; + reg = <0x428a0000 0x10000>; + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "eth_wake_irq", "macirq"; + clocks = <&clk IMX93_CLK_ENET_QOS_GATE>, + <&clk IMX93_CLK_ENET_QOS_GATE>, + <&clk IMX93_CLK_ENET_TIMER2>, + <&clk IMX93_CLK_ENET>, + <&clk IMX93_CLK_ENET_QOS_GATE>; + clock-names = "stmmaceth", "pclk", "ptp_ref", "tx", "mem"; + assigned-clocks = <&clk IMX93_CLK_ENET_TIMER2>, + <&clk IMX93_CLK_ENET>; + assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>, + <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>; + assigned-clock-rates = <100000000>, <250000000>; + intf_mode = <&wakeupmix_gpr 0x28>; + clk_csr = <0>; + status = "disabled"; + }; + + fec: ethernet@42890000 { + compatible = "fsl,imx93-fec", "fsl,imx8mq-fec", "fsl,imx6sx-fec"; + reg = <0x42890000 0x10000>; + interrupts = <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk IMX93_CLK_ENET1_GATE>, + <&clk IMX93_CLK_ENET1_GATE>, + <&clk IMX93_CLK_ENET_TIMER1>, + <&clk IMX93_CLK_ENET_REF>, + <&clk IMX93_CLK_ENET_REF_PHY>; + clock-names = "ipg", "ahb", "ptp", + "enet_clk_ref", "enet_out"; + assigned-clocks = <&clk IMX93_CLK_ENET_TIMER1>, + <&clk IMX93_CLK_ENET_REF>, + <&clk IMX93_CLK_ENET_REF_PHY>; + assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>, + <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>, + <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>; + assigned-clock-rates = <100000000>, <250000000>, <50000000>; + fsl,num-tx-queues = <3>; + fsl,num-rx-queues = <3>; + status = "disabled"; + }; + usdhc3: mmc@428b0000 { compatible = "fsl,imx93-usdhc", "fsl,imx8mm-usdhc"; reg = <0x428b0000 0x10000>; diff --combined drivers/net/Kconfig index 12910338ea1a,950a09f021dd..c34bd432da27 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@@ -334,6 -334,7 +334,6 @@@ config NETCONSOLE_DYNAMI
config NETPOLL def_bool NETCONSOLE - select SRCU
config NET_POLL_CONTROLLER def_bool NETPOLL @@@ -582,18 -583,7 +582,7 @@@ config FUJITSU_E This driver provides support for Extended Socket network device on Extended Partitioning of FUJITSU PRIMEQUEST 2000 E2 series.
- config USB4_NET - tristate "Networking over USB4 and Thunderbolt cables" - depends on USB4 && INET - help - Select this if you want to create network between two computers - over a USB4 and Thunderbolt cables. The driver supports Apple - ThunderboltIP protocol and allows communication with any host - supporting the same protocol including Windows and macOS. - - To compile this driver a module, choose M here. The module will be - called thunderbolt-net. - + source "drivers/net/thunderbolt/Kconfig" source "drivers/net/hyperv/Kconfig"
config NETDEVSIM diff --combined drivers/net/hyperv/netvsc_drv.c index 42162167b5b4,e34ccd47ae57..0103ff914024 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@@ -2559,6 -2559,9 +2559,9 @@@ static int netvsc_probe(struct hv_devic
netdev_lockdep_set_classes(net);
+ net->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT | + NETDEV_XDP_ACT_NDO_XMIT; + /* MTU range: 68 - 1500 or 65521 */ net->min_mtu = NETVSC_MTU_MIN; if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2) @@@ -2594,7 -2597,7 +2597,7 @@@ no_net return ret; }
-static int netvsc_remove(struct hv_device *dev) +static void netvsc_remove(struct hv_device *dev) { struct net_device_context *ndev_ctx; struct net_device *vf_netdev, *net; @@@ -2603,7 -2606,7 +2606,7 @@@ net = hv_get_drvdata(dev); if (net == NULL) { dev_err(&dev->device, "No net device to remove\n"); - return 0; + return; }
ndev_ctx = netdev_priv(net); @@@ -2637,6 -2640,7 +2640,6 @@@
free_percpu(ndev_ctx->vf_stats); free_netdev(net); - return 0; }
static int netvsc_suspend(struct hv_device *dev) diff --combined drivers/net/macsec.c index becb04123d3e,17452f818b0d..25616247d7a5 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@@ -528,9 -528,9 +528,9 @@@ static void count_tx(struct net_device } }
-static void macsec_encrypt_done(struct crypto_async_request *base, int err) +static void macsec_encrypt_done(void *data, int err) { - struct sk_buff *skb = base->data; + struct sk_buff *skb = data; struct net_device *dev = skb->dev; struct macsec_dev *macsec = macsec_priv(dev); struct macsec_tx_sa *sa = macsec_skb_cb(skb)->tx_sa; @@@ -835,9 -835,9 +835,9 @@@ static void count_rx(struct net_device u64_stats_update_end(&stats->syncp); }
-static void macsec_decrypt_done(struct crypto_async_request *base, int err) +static void macsec_decrypt_done(void *data, int err) { - struct sk_buff *skb = base->data; + struct sk_buff *skb = data; struct net_device *dev = skb->dev; struct macsec_dev *macsec = macsec_priv(dev); struct macsec_rx_sa *rx_sa = macsec_skb_cb(skb)->rx_sa; @@@ -2583,16 -2583,56 +2583,56 @@@ static bool macsec_is_configured(struc return false; }
+ static int macsec_update_offload(struct net_device *dev, enum macsec_offload offload) + { + enum macsec_offload prev_offload; + const struct macsec_ops *ops; + struct macsec_context ctx; + struct macsec_dev *macsec; + int ret = 0; + + macsec = macsec_priv(dev); + + /* Check if the offloading mode is supported by the underlying layers */ + if (offload != MACSEC_OFFLOAD_OFF && + !macsec_check_offload(offload, macsec)) + return -EOPNOTSUPP; + + /* Check if the net device is busy. */ + if (netif_running(dev)) + return -EBUSY; + + /* Check if the device already has rules configured: we do not support + * rules migration. + */ + if (macsec_is_configured(macsec)) + return -EBUSY; + + prev_offload = macsec->offload; + + ops = __macsec_get_ops(offload == MACSEC_OFFLOAD_OFF ? prev_offload : offload, + macsec, &ctx); + if (!ops) + return -EOPNOTSUPP; + + macsec->offload = offload; + + ctx.secy = &macsec->secy; + ret = offload == MACSEC_OFFLOAD_OFF ? macsec_offload(ops->mdo_del_secy, &ctx) + : macsec_offload(ops->mdo_add_secy, &ctx); + if (ret) + macsec->offload = prev_offload; + + return ret; + } + static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info) { struct nlattr *tb_offload[MACSEC_OFFLOAD_ATTR_MAX + 1]; - enum macsec_offload offload, prev_offload; - int (*func)(struct macsec_context *ctx); struct nlattr **attrs = info->attrs; - struct net_device *dev; - const struct macsec_ops *ops; - struct macsec_context ctx; + enum macsec_offload offload; struct macsec_dev *macsec; + struct net_device *dev; int ret = 0;
if (!attrs[MACSEC_ATTR_IFINDEX]) @@@ -2621,55 -2661,9 +2661,9 @@@ }
offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]); - if (macsec->offload == offload) - goto out; - - /* Check if the offloading mode is supported by the underlying layers */ - if (offload != MACSEC_OFFLOAD_OFF && - !macsec_check_offload(offload, macsec)) { - ret = -EOPNOTSUPP; - goto out; - } - - /* Check if the net device is busy. */ - if (netif_running(dev)) { - ret = -EBUSY; - goto out; - } - - prev_offload = macsec->offload; - macsec->offload = offload;
- /* Check if the device already has rules configured: we do not support - * rules migration. - */ - if (macsec_is_configured(macsec)) { - ret = -EBUSY; - goto rollback; - } - - ops = __macsec_get_ops(offload == MACSEC_OFFLOAD_OFF ? prev_offload : offload, - macsec, &ctx); - if (!ops) { - ret = -EOPNOTSUPP; - goto rollback; - } - - if (prev_offload == MACSEC_OFFLOAD_OFF) - func = ops->mdo_add_secy; - else - func = ops->mdo_del_secy; - - ctx.secy = &macsec->secy; - ret = macsec_offload(func, &ctx); - if (ret) - goto rollback; - - rtnl_unlock(); - return 0; - - rollback: - macsec->offload = prev_offload; + if (macsec->offload != offload) + ret = macsec_update_offload(dev, offload); out: rtnl_unlock(); return ret; @@@ -3817,6 -3811,8 +3811,8 @@@ static int macsec_changelink(struct net struct netlink_ext_ack *extack) { struct macsec_dev *macsec = macsec_priv(dev); + bool macsec_offload_state_change = false; + enum macsec_offload offload; struct macsec_tx_sc tx_sc; struct macsec_secy secy; int ret; @@@ -3840,8 -3836,18 +3836,18 @@@ if (ret) goto cleanup;
+ if (data[IFLA_MACSEC_OFFLOAD]) { + offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]); + if (macsec->offload != offload) { + macsec_offload_state_change = true; + ret = macsec_update_offload(dev, offload); + if (ret) + goto cleanup; + } + } + /* If h/w offloading is available, propagate to the device */ - if (macsec_is_offloaded(macsec)) { + if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) { const struct macsec_ops *ops; struct macsec_context ctx;
@@@ -4240,16 -4246,22 +4246,22 @@@ static size_t macsec_get_size(const str nla_total_size(1) + /* IFLA_MACSEC_SCB */ nla_total_size(1) + /* IFLA_MACSEC_REPLAY_PROTECT */ nla_total_size(1) + /* IFLA_MACSEC_VALIDATION */ + nla_total_size(1) + /* IFLA_MACSEC_OFFLOAD */ 0; }
static int macsec_fill_info(struct sk_buff *skb, const struct net_device *dev) { - struct macsec_secy *secy = &macsec_priv(dev)->secy; - struct macsec_tx_sc *tx_sc = &secy->tx_sc; + struct macsec_tx_sc *tx_sc; + struct macsec_dev *macsec; + struct macsec_secy *secy; u64 csid;
+ macsec = macsec_priv(dev); + secy = &macsec->secy; + tx_sc = &secy->tx_sc; + switch (secy->key_len) { case MACSEC_GCM_AES_128_SAK_LEN: csid = secy->xpn ? MACSEC_CIPHER_ID_GCM_AES_XPN_128 : MACSEC_DEFAULT_CIPHER_ID; @@@ -4274,6 -4286,7 +4286,7 @@@ nla_put_u8(skb, IFLA_MACSEC_SCB, tx_sc->scb) || nla_put_u8(skb, IFLA_MACSEC_REPLAY_PROTECT, secy->replay_protect) || nla_put_u8(skb, IFLA_MACSEC_VALIDATION, secy->validate_frames) || + nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) || 0) goto nla_put_failure;
diff --combined drivers/nvme/host/tcp.c index d6100a787d39,70e273b565de..1955c0ec209e --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@@ -14,6 -14,7 +14,7 @@@ #include <linux/blk-mq.h> #include <crypto/hash.h> #include <net/busy_poll.h> + #include <trace/events/sock.h>
#include "nvme.h" #include "fabrics.h" @@@ -905,6 -906,8 +906,8 @@@ static void nvme_tcp_data_ready(struct { struct nvme_tcp_queue *queue;
+ trace_sk_data_ready(sk); + read_lock_bh(&sk->sk_callback_lock); queue = sk->sk_user_data; if (likely(queue && queue->rd_enabled) && @@@ -2282,13 -2285,10 +2285,13 @@@ static enum blk_eh_timer_return nvme_tc struct nvme_tcp_request *req = blk_mq_rq_to_pdu(rq); struct nvme_ctrl *ctrl = &req->queue->ctrl->ctrl; struct nvme_tcp_cmd_pdu *pdu = req->pdu; + u8 opc = pdu->cmd.common.opcode, fctype = pdu->cmd.fabrics.fctype; + int qid = nvme_tcp_queue_id(req->queue);
dev_warn(ctrl->device, - "queue %d: timeout request %#x type %d\n", - nvme_tcp_queue_id(req->queue), rq->tag, pdu->hdr.type); + "queue %d: timeout cid %#x type %d opcode %#x (%s)\n", + nvme_tcp_queue_id(req->queue), nvme_cid(rq), pdu->hdr.type, + opc, nvme_opcode_str(qid, opc, fctype));
if (ctrl->state != NVME_CTRL_LIVE) { /* diff --combined drivers/nvme/target/tcp.c index c5759eb503d0,4a161c8cb531..66e8f9fd0ca7 --- a/drivers/nvme/target/tcp.c +++ b/drivers/nvme/target/tcp.c @@@ -14,6 -14,7 +14,7 @@@ #include <linux/inet.h> #include <linux/llist.h> #include <crypto/hash.h> + #include <trace/events/sock.h>
#include "nvmet.h"
@@@ -321,8 -322,9 +322,8 @@@ static void nvmet_tcp_build_pdu_iovec(s while (length) { u32 iov_len = min_t(u32, length, sg->length - sg_offset);
- iov->bv_page = sg_page(sg); - iov->bv_len = sg->length; - iov->bv_offset = sg->offset + sg_offset; + bvec_set_page(iov, sg_page(sg), sg->length, + sg->offset + sg_offset);
length -= iov_len; sg = sg_next(sg); @@@ -1469,6 -1471,8 +1470,8 @@@ static void nvmet_tcp_data_ready(struc { struct nvmet_tcp_queue *queue;
+ trace_sk_data_ready(sk); + read_lock_bh(&sk->sk_callback_lock); queue = sk->sk_user_data; if (likely(queue)) @@@ -1666,6 -1670,8 +1669,8 @@@ static void nvmet_tcp_listen_data_ready { struct nvmet_tcp_port *port;
+ trace_sk_data_ready(sk); + read_lock_bh(&sk->sk_callback_lock); port = sk->sk_user_data; if (!port) diff --combined drivers/xen/pvcalls-back.c index 7a464a541d91,e2abc3474d85..dcb00938de61 --- a/drivers/xen/pvcalls-back.c +++ b/drivers/xen/pvcalls-back.c @@@ -14,6 -14,7 +14,7 @@@ #include <net/inet_common.h> #include <net/inet_connection_sock.h> #include <net/request_sock.h> + #include <trace/events/sock.h>
#include <xen/events.h> #include <xen/grant_table.h> @@@ -173,8 -174,6 +174,8 @@@ static bool pvcalls_conn_back_write(str RING_IDX cons, prod, size, array_size; int ret;
+ atomic_set(&map->write, 0); + cons = intf->out_cons; prod = intf->out_prod; /* read the indexes before dealing with the data */ @@@ -199,6 -198,7 +200,6 @@@ iov_iter_kvec(&msg.msg_iter, ITER_SOURCE, vec, 2, size); }
- atomic_set(&map->write, 0); ret = inet_sendmsg(map->sock, &msg, size); if (ret == -EAGAIN) { atomic_inc(&map->write); @@@ -301,6 -301,8 +302,8 @@@ static void pvcalls_sk_data_ready(struc struct sock_mapping *map = sock->sk_user_data; struct pvcalls_ioworker *iow;
+ trace_sk_data_ready(sock); + if (map == NULL) return;
@@@ -589,6 -591,8 +592,8 @@@ static void pvcalls_pass_sk_data_ready( unsigned long flags; int notify;
+ trace_sk_data_ready(sock); + if (mappass == NULL) return;
diff --combined fs/dlm/lowcomms.c index 61cd6c2628fa,7920c655173c..a9b14f81d655 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c @@@ -54,6 -54,7 +54,7 @@@ #include <net/ipv6.h>
#include <trace/events/dlm.h> + #include <trace/events/sock.h>
#include "dlm_internal.h" #include "lowcomms.h" @@@ -61,7 -62,6 +62,7 @@@ #include "memory.h" #include "config.h"
+#define DLM_SHUTDOWN_WAIT_TIMEOUT msecs_to_jiffies(5000) #define NEEDED_RMEM (4*1024*1024)
struct connection { @@@ -100,7 -100,6 +101,7 @@@ struct connection *othercon; struct work_struct rwork; /* receive worker */ struct work_struct swork; /* send worker */ + wait_queue_head_t shutdown_wait; unsigned char rx_leftover_buf[DLM_MAX_SOCKET_BUFSIZE]; int rx_leftover; int mark; @@@ -284,7 -283,6 +285,7 @@@ static void dlm_con_init(struct connect INIT_WORK(&con->swork, process_send_sockets); INIT_WORK(&con->rwork, process_recv_sockets); spin_lock_init(&con->addrs_lock); + init_waitqueue_head(&con->shutdown_wait); }
/* @@@ -502,6 -500,8 +503,8 @@@ static void lowcomms_data_ready(struct { struct connection *con = sock2con(sk);
+ trace_sk_data_ready(sk); + set_bit(CF_RECV_INTR, &con->flags); lowcomms_queue_rwork(con); } @@@ -533,6 -533,8 +536,8 @@@ static void lowcomms_state_change(struc
static void lowcomms_listen_data_ready(struct sock *sk) { + trace_sk_data_ready(sk); + queue_work(io_workqueue, &listen_con.rwork); }
@@@ -793,43 -795,6 +798,43 @@@ static void close_connection(struct con up_write(&con->sock_lock); }
+static void shutdown_connection(struct connection *con, bool and_other) +{ + int ret; + + if (con->othercon && and_other) + shutdown_connection(con->othercon, false); + + flush_workqueue(io_workqueue); + down_read(&con->sock_lock); + /* nothing to shutdown */ + if (!con->sock) { + up_read(&con->sock_lock); + return; + } + + ret = kernel_sock_shutdown(con->sock, SHUT_WR); + up_read(&con->sock_lock); + if (ret) { + log_print("Connection %p failed to shutdown: %d will force close", + con, ret); + goto force_close; + } else { + ret = wait_event_timeout(con->shutdown_wait, !con->sock, + DLM_SHUTDOWN_WAIT_TIMEOUT); + if (ret == 0) { + log_print("Connection %p shutdown timed out, will force close", + con); + goto force_close; + } + } + + return; + +force_close: + close_connection(con, false); +} + static struct processqueue_entry *new_processqueue_entry(int nodeid, int buflen) { @@@ -1528,7 -1493,6 +1533,7 @@@ static void process_recv_sockets(struc break; case DLM_IO_EOF: close_connection(con, false); + wake_up(&con->shutdown_wait); /* CF_RECV_PENDING cleared */ break; case DLM_IO_RESCHED: @@@ -1736,9 -1700,6 +1741,9 @@@ static int work_start(void
void dlm_lowcomms_shutdown(void) { + struct connection *con; + int i, idx; + /* stop lowcomms_listen_data_ready calls */ lock_sock(listen_con.sock->sk); listen_con.sock->sk->sk_data_ready = listen_sock.sk_data_ready; @@@ -1747,20 -1708,29 +1752,20 @@@ cancel_work_sync(&listen_con.rwork); dlm_close_sock(&listen_con.sock);
- flush_workqueue(process_workqueue); -} - -void dlm_lowcomms_shutdown_node(int nodeid, bool force) -{ - struct connection *con; - int idx; - idx = srcu_read_lock(&connections_srcu); - con = nodeid2con(nodeid, 0); - if (WARN_ON_ONCE(!con)) { - srcu_read_unlock(&connections_srcu, idx); - return; + for (i = 0; i < CONN_HASH_SIZE; i++) { + hlist_for_each_entry_rcu(con, &connection_hash[i], list) { + shutdown_connection(con, true); + stop_connection_io(con); + flush_workqueue(process_workqueue); + close_connection(con, true); + + clean_one_writequeue(con); + if (con->othercon) + clean_one_writequeue(con->othercon); + allow_connection_io(con); + } } - - flush_work(&con->swork); - stop_connection_io(con); - WARN_ON_ONCE(!force && !list_empty(&con->writequeue)); - close_connection(con, true); - clean_one_writequeue(con); - if (con->othercon) - clean_one_writequeue(con->othercon); - allow_connection_io(con); srcu_read_unlock(&connections_srcu, idx); }
diff --combined include/linux/cpumask.h index d45e5de13721,7b16aede7ac5..10c92bd9b807 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@@ -391,6 -391,26 +391,26 @@@ unsigned int cpumask_nth_andnot(unsigne nr_cpumask_bits, cpumask_check(cpu)); }
+ /** + * cpumask_nth_and_andnot - get the Nth cpu set in 1st and 2nd cpumask, and clear in 3rd. + * @srcp1: the cpumask pointer + * @srcp2: the cpumask pointer + * @srcp3: the cpumask pointer + * @cpu: the N'th cpu to find, starting from 0 + * + * Returns >= nr_cpu_ids if such cpu doesn't exist. + */ + static __always_inline + unsigned int cpumask_nth_and_andnot(unsigned int cpu, const struct cpumask *srcp1, + const struct cpumask *srcp2, + const struct cpumask *srcp3) + { + return find_nth_and_andnot_bit(cpumask_bits(srcp1), + cpumask_bits(srcp2), + cpumask_bits(srcp3), + nr_cpumask_bits, cpumask_check(cpu)); + } + #define CPU_BITS_NONE \ { \ [0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \ @@@ -1017,9 -1037,9 +1037,9 @@@ static inline const struct cpumask *get * concurrent CPU hotplug operations unless invoked from a cpuhp_lock held * region. */ -static inline unsigned int num_online_cpus(void) +static __always_inline unsigned int num_online_cpus(void) { - return atomic_read(&__num_online_cpus); + return arch_atomic_read(&__num_online_cpus); } #define num_possible_cpus() cpumask_weight(cpu_possible_mask) #define num_present_cpus() cpumask_weight(cpu_present_mask) diff --combined include/linux/poison.h index 0e8a1f2ceb2f,2823f90fdab4..851a855d3868 --- a/include/linux/poison.h +++ b/include/linux/poison.h @@@ -81,10 -81,10 +81,13 @@@ /********** net/core/page_pool.c **********/ #define PP_SIGNATURE (0x40 + POISON_POINTER_DELTA)
+ /********** net/core/skbuff.c **********/ + #define SKB_LIST_POISON_NEXT ((void *)(0x800 + POISON_POINTER_DELTA)) + /********** kernel/bpf/ **********/ #define BPF_PTR_POISON ((void *)(0xeB9FUL + POISON_POINTER_DELTA))
+/********** VFS **********/ +#define VFS_PTR_POISON ((void *)(0xF5 + POISON_POINTER_DELTA)) + #endif diff --combined init/Kconfig index 18f0bf50c468,d88ffde2bbe1..77a4318a6043 --- a/init/Kconfig +++ b/init/Kconfig @@@ -1045,10 -1045,6 +1045,10 @@@ config RT_GROUP_SCHE
endif #CGROUP_SCHED
+config SCHED_MM_CID + def_bool y + depends on SMP && RSEQ + config UCLAMP_TASK_GROUP bool "Utilization clamping per group of tasks" depends on CGROUP_SCHED @@@ -1873,6 -1869,7 +1873,6 @@@ config PERF_EVENT default y if PROFILING depends on HAVE_PERF_EVENTS select IRQ_WORK - select SRCU help Enable kernel support for various performance events provided by software and hardware. @@@ -1942,7 -1939,7 +1942,7 @@@ config RUS depends on !MODVERSIONS depends on !GCC_PLUGINS depends on !RANDSTRUCT - depends on !DEBUG_INFO_BTF + depends on !DEBUG_INFO_BTF || PAHOLE_HAS_LANG_EXCLUDE select CONSTRUCTORS help Enables Rust support in the kernel. diff --combined kernel/bpf/core.c index 430c66d59ec7,3390961c4e10..933869983e2a --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@@ -35,6 -35,7 +35,7 @@@ #include <linux/bpf_verifier.h> #include <linux/nodemask.h> #include <linux/bpf_mem_alloc.h> + #include <linux/memcontrol.h>
#include <asm/barrier.h> #include <asm/unaligned.h> @@@ -87,7 -88,7 +88,7 @@@ void *bpf_internal_load_pointer_neg_hel
struct bpf_prog *bpf_prog_alloc_no_stats(unsigned int size, gfp_t gfp_extra_flags) { - gfp_t gfp_flags = GFP_KERNEL_ACCOUNT | __GFP_ZERO | gfp_extra_flags; + gfp_t gfp_flags = bpf_memcg_flags(GFP_KERNEL | __GFP_ZERO | gfp_extra_flags); struct bpf_prog_aux *aux; struct bpf_prog *fp;
@@@ -96,12 -97,12 +97,12 @@@ if (fp == NULL) return NULL;
- aux = kzalloc(sizeof(*aux), GFP_KERNEL_ACCOUNT | gfp_extra_flags); + aux = kzalloc(sizeof(*aux), bpf_memcg_flags(GFP_KERNEL | gfp_extra_flags)); if (aux == NULL) { vfree(fp); return NULL; } - fp->active = alloc_percpu_gfp(int, GFP_KERNEL_ACCOUNT | gfp_extra_flags); + fp->active = alloc_percpu_gfp(int, bpf_memcg_flags(GFP_KERNEL | gfp_extra_flags)); if (!fp->active) { vfree(fp); kfree(aux); @@@ -126,7 -127,7 +127,7 @@@
struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags) { - gfp_t gfp_flags = GFP_KERNEL_ACCOUNT | __GFP_ZERO | gfp_extra_flags; + gfp_t gfp_flags = bpf_memcg_flags(GFP_KERNEL | __GFP_ZERO | gfp_extra_flags); struct bpf_prog *prog; int cpu;
@@@ -159,7 -160,7 +160,7 @@@ int bpf_prog_alloc_jited_linfo(struct b
prog->aux->jited_linfo = kvcalloc(prog->aux->nr_linfo, sizeof(*prog->aux->jited_linfo), - GFP_KERNEL_ACCOUNT | __GFP_NOWARN); + bpf_memcg_flags(GFP_KERNEL | __GFP_NOWARN)); if (!prog->aux->jited_linfo) return -ENOMEM;
@@@ -234,7 -235,7 +235,7 @@@ void bpf_prog_fill_jited_linfo(struct b struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size, gfp_t gfp_extra_flags) { - gfp_t gfp_flags = GFP_KERNEL_ACCOUNT | __GFP_ZERO | gfp_extra_flags; + gfp_t gfp_flags = bpf_memcg_flags(GFP_KERNEL | __GFP_ZERO | gfp_extra_flags); struct bpf_prog *fp; u32 pages;
@@@ -1910,7 -1911,9 +1911,7 @@@ out * reuse preexisting logic from Spectre v1 mitigation that * happens to produce the required code on x86 for v4 as well. */ -#ifdef CONFIG_X86 barrier_nospec(); -#endif CONT; #define LDST(SIZEOP, SIZE) \ STX_MEM_##SIZEOP: \ @@@ -2094,6 -2097,14 +2095,14 @@@ bool bpf_prog_map_compatible(struct bpf if (fp->kprobe_override) return false;
+ /* XDP programs inserted into maps are not guaranteed to run on + * a particular netdev (and can run outside driver context entirely + * in the case of devmap and cpumap). Until device checks + * are implemented, prohibit adding dev-bound programs to program maps. + */ + if (bpf_prog_is_dev_bound(fp->aux)) + return false; + spin_lock(&map->owner.lock); if (!map->owner.type) { /* There's no owner yet where we could check for @@@ -2180,7 -2191,7 +2189,7 @@@ struct bpf_prog *bpf_prog_select_runtim * valid program, which in this case would simply not * be JITed, but falls back to the interpreter. */ - if (!bpf_prog_is_dev_bound(fp->aux)) { + if (!bpf_prog_is_offloaded(fp->aux)) { *err = bpf_prog_alloc_jited_linfo(fp); if (*err) return fp; @@@ -2552,7 -2563,7 +2561,7 @@@ static void bpf_prog_free_deferred(stru bpf_free_used_maps(aux); bpf_free_used_btfs(aux); if (bpf_prog_is_dev_bound(aux)) - bpf_prog_offload_destroy(aux->prog); + bpf_prog_dev_bound_destroy(aux->prog); #ifdef CONFIG_PERF_EVENTS if (aux->prog->has_callchain_buf) put_callchain_buffers(); diff --combined kernel/sched/topology.c index d93c3379e901,1a9ee8fcd477..051aaf65c749 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@@ -3,6 -3,8 +3,8 @@@ * Scheduler topology setup/handling methods */
+ #include <linux/bsearch.h> + DEFINE_MUTEX(sched_domains_mutex);
/* Protected by sched_domains_mutex: */ @@@ -578,7 -580,7 +580,7 @@@ out */ struct root_domain def_root_domain;
-void init_defrootdomain(void) +void __init init_defrootdomain(void) { init_rootdomain(&def_root_domain);
@@@ -2067,6 -2069,99 +2069,99 @@@ unlock return found; }
+ struct __cmp_key { + const struct cpumask *cpus; + struct cpumask ***masks; + int node; + int cpu; + int w; + }; + + static int hop_cmp(const void *a, const void *b) + { + struct cpumask **prev_hop, **cur_hop = *(struct cpumask ***)b; + struct __cmp_key *k = (struct __cmp_key *)a; + + if (cpumask_weight_and(k->cpus, cur_hop[k->node]) <= k->cpu) + return 1; + + if (b == k->masks) { + k->w = 0; + return 0; + } + + prev_hop = *((struct cpumask ***)b - 1); + k->w = cpumask_weight_and(k->cpus, prev_hop[k->node]); + if (k->w <= k->cpu) + return 0; + + return -1; + } + + /* + * sched_numa_find_nth_cpu() - given the NUMA topology, find the Nth next cpu + * closest to @cpu from @cpumask. + * cpumask: cpumask to find a cpu from + * cpu: Nth cpu to find + * + * returns: cpu, or nr_cpu_ids when nothing found. + */ + int sched_numa_find_nth_cpu(const struct cpumask *cpus, int cpu, int node) + { + struct __cmp_key k = { .cpus = cpus, .node = node, .cpu = cpu }; + struct cpumask ***hop_masks; + int hop, ret = nr_cpu_ids; + + rcu_read_lock(); + + k.masks = rcu_dereference(sched_domains_numa_masks); + if (!k.masks) + goto unlock; + + hop_masks = bsearch(&k, k.masks, sched_domains_numa_levels, sizeof(k.masks[0]), hop_cmp); + hop = hop_masks - k.masks; + + ret = hop ? + cpumask_nth_and_andnot(cpu - k.w, cpus, k.masks[hop][node], k.masks[hop-1][node]) : + cpumask_nth_and(cpu, cpus, k.masks[0][node]); + unlock: + rcu_read_unlock(); + return ret; + } + EXPORT_SYMBOL_GPL(sched_numa_find_nth_cpu); + + /** + * sched_numa_hop_mask() - Get the cpumask of CPUs at most @hops hops away from + * @node + * @node: The node to count hops from. + * @hops: Include CPUs up to that many hops away. 0 means local node. + * + * Return: On success, a pointer to a cpumask of CPUs at most @hops away from + * @node, an error value otherwise. + * + * Requires rcu_lock to be held. Returned cpumask is only valid within that + * read-side section, copy it if required beyond that. + * + * Note that not all hops are equal in distance; see sched_init_numa() for how + * distances and masks are handled. + * Also note that this is a reflection of sched_domains_numa_masks, which may change + * during the lifetime of the system (offline nodes are taken out of the masks). + */ + const struct cpumask *sched_numa_hop_mask(unsigned int node, unsigned int hops) + { + struct cpumask ***masks; + + if (node >= nr_node_ids || hops >= sched_domains_numa_levels) + return ERR_PTR(-EINVAL); + + masks = rcu_dereference(sched_domains_numa_masks); + if (!masks) + return ERR_PTR(-EBUSY); + + return masks[hops][node]; + } + EXPORT_SYMBOL_GPL(sched_numa_hop_mask); + #endif /* CONFIG_NUMA */
static int __sdt_alloc(const struct cpumask *cpu_map) @@@ -2451,7 -2546,7 +2546,7 @@@ void free_sched_domains(cpumask_var_t d * Set up scheduler domains and groups. For now this just excludes isolated * CPUs, but could be used to exclude other special cases in the future. */ -int sched_init_domains(const struct cpumask *cpu_map) +int __init sched_init_domains(const struct cpumask *cpu_map) { int err;
diff --combined kernel/trace/bpf_trace.c index b8ac8b09c86f,c58baf9983cc..e8da032bb6fc --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@@ -369,8 -369,6 +369,6 @@@ static const struct bpf_func_proto *bpf return &bpf_probe_write_user_proto; }
- static DEFINE_RAW_SPINLOCK(trace_printk_lock); - #define MAX_TRACE_PRINTK_VARARGS 3 #define BPF_TRACE_PRINTK_SIZE 1024
@@@ -378,23 -376,22 +376,22 @@@ BPF_CALL_5(bpf_trace_printk, char *, fm u64, arg2, u64, arg3) { u64 args[MAX_TRACE_PRINTK_VARARGS] = { arg1, arg2, arg3 }; - u32 *bin_args; - static char buf[BPF_TRACE_PRINTK_SIZE]; - unsigned long flags; + struct bpf_bprintf_data data = { + .get_bin_args = true, + .get_buf = true, + }; int ret;
- ret = bpf_bprintf_prepare(fmt, fmt_size, args, &bin_args, - MAX_TRACE_PRINTK_VARARGS); + ret = bpf_bprintf_prepare(fmt, fmt_size, args, + MAX_TRACE_PRINTK_VARARGS, &data); if (ret < 0) return ret;
- raw_spin_lock_irqsave(&trace_printk_lock, flags); - ret = bstr_printf(buf, sizeof(buf), fmt, bin_args); + ret = bstr_printf(data.buf, MAX_BPRINTF_BUF, fmt, data.bin_args);
- trace_bpf_trace_printk(buf); - raw_spin_unlock_irqrestore(&trace_printk_lock, flags); + trace_bpf_trace_printk(data.buf);
- bpf_bprintf_cleanup(); + bpf_bprintf_cleanup(&data);
return ret; } @@@ -427,30 -424,29 +424,29 @@@ const struct bpf_func_proto *bpf_get_tr return &bpf_trace_printk_proto; }
- BPF_CALL_4(bpf_trace_vprintk, char *, fmt, u32, fmt_size, const void *, data, + BPF_CALL_4(bpf_trace_vprintk, char *, fmt, u32, fmt_size, const void *, args, u32, data_len) { - static char buf[BPF_TRACE_PRINTK_SIZE]; - unsigned long flags; + struct bpf_bprintf_data data = { + .get_bin_args = true, + .get_buf = true, + }; int ret, num_args; - u32 *bin_args;
if (data_len & 7 || data_len > MAX_BPRINTF_VARARGS * 8 || - (data_len && !data)) + (data_len && !args)) return -EINVAL; num_args = data_len / 8;
- ret = bpf_bprintf_prepare(fmt, fmt_size, data, &bin_args, num_args); + ret = bpf_bprintf_prepare(fmt, fmt_size, args, num_args, &data); if (ret < 0) return ret;
- raw_spin_lock_irqsave(&trace_printk_lock, flags); - ret = bstr_printf(buf, sizeof(buf), fmt, bin_args); + ret = bstr_printf(data.buf, MAX_BPRINTF_BUF, fmt, data.bin_args);
- trace_bpf_trace_printk(buf); - raw_spin_unlock_irqrestore(&trace_printk_lock, flags); + trace_bpf_trace_printk(data.buf);
- bpf_bprintf_cleanup(); + bpf_bprintf_cleanup(&data);
return ret; } @@@ -472,23 -468,25 +468,25 @@@ const struct bpf_func_proto *bpf_get_tr }
BPF_CALL_5(bpf_seq_printf, struct seq_file *, m, char *, fmt, u32, fmt_size, - const void *, data, u32, data_len) + const void *, args, u32, data_len) { + struct bpf_bprintf_data data = { + .get_bin_args = true, + }; int err, num_args; - u32 *bin_args;
if (data_len & 7 || data_len > MAX_BPRINTF_VARARGS * 8 || - (data_len && !data)) + (data_len && !args)) return -EINVAL; num_args = data_len / 8;
- err = bpf_bprintf_prepare(fmt, fmt_size, data, &bin_args, num_args); + err = bpf_bprintf_prepare(fmt, fmt_size, args, num_args, &data); if (err < 0) return err;
- seq_bprintf(m, fmt, bin_args); + seq_bprintf(m, fmt, data.bin_args);
- bpf_bprintf_cleanup(); + bpf_bprintf_cleanup(&data);
return seq_has_overflowed(m) ? -EOVERFLOW : 0; } @@@ -687,7 -685,8 +685,7 @@@ BPF_CALL_5(bpf_perf_event_output, struc }
perf_sample_data_init(sd, 0, 0); - sd->raw = &raw; - sd->sample_flags |= PERF_SAMPLE_RAW; + perf_sample_save_raw_data(sd, &raw);
err = __bpf_perf_event_output(regs, map, flags, sd);
@@@ -745,7 -744,8 +743,7 @@@ u64 bpf_event_output(struct bpf_map *ma
perf_fetch_caller_regs(regs); perf_sample_data_init(sd, 0, 0); - sd->raw = &raw; - sd->sample_flags |= PERF_SAMPLE_RAW; + perf_sample_save_raw_data(sd, &raw);
ret = __bpf_perf_event_output(regs, map, flags, sd); out: @@@ -1237,7 -1237,7 +1235,7 @@@ __diag_ignore_all("-Wmissing-prototypes * Return: a bpf_key pointer with a valid key pointer if the key is found, a * NULL pointer otherwise. */ - struct bpf_key *bpf_lookup_user_key(u32 serial, u64 flags) + __bpf_kfunc struct bpf_key *bpf_lookup_user_key(u32 serial, u64 flags) { key_ref_t key_ref; struct bpf_key *bkey; @@@ -1286,7 -1286,7 +1284,7 @@@ * Return: a bpf_key pointer with an invalid key pointer set from the * pre-determined ID on success, a NULL pointer otherwise */ - struct bpf_key *bpf_lookup_system_key(u64 id) + __bpf_kfunc struct bpf_key *bpf_lookup_system_key(u64 id) { struct bpf_key *bkey;
@@@ -1310,7 -1310,7 +1308,7 @@@ * Decrement the reference count of the key inside *bkey*, if the pointer * is valid, and free *bkey*. */ - void bpf_key_put(struct bpf_key *bkey) + __bpf_kfunc void bpf_key_put(struct bpf_key *bkey) { if (bkey->has_ref) key_put(bkey->key); @@@ -1330,7 -1330,7 +1328,7 @@@ * * Return: 0 on success, a negative value on error. */ - int bpf_verify_pkcs7_signature(struct bpf_dynptr_kern *data_ptr, + __bpf_kfunc int bpf_verify_pkcs7_signature(struct bpf_dynptr_kern *data_ptr, struct bpf_dynptr_kern *sig_ptr, struct bpf_key *trusted_keyring) { @@@ -2686,69 -2686,77 +2684,77 @@@ static void symbols_swap_r(void *a, voi } }
- struct module_addr_args { - unsigned long *addrs; - u32 addrs_cnt; + struct modules_array { struct module **mods; int mods_cnt; int mods_cap; };
- static int module_callback(void *data, const char *name, - struct module *mod, unsigned long addr) + static int add_module(struct modules_array *arr, struct module *mod) { - struct module_addr_args *args = data; struct module **mods;
- /* We iterate all modules symbols and for each we: - * - search for it in provided addresses array - * - if found we check if we already have the module pointer stored - * (we iterate modules sequentially, so we can check just the last - * module pointer) - * - take module reference and store it - */ - if (!bsearch(&addr, args->addrs, args->addrs_cnt, sizeof(addr), - bpf_kprobe_multi_addrs_cmp)) - return 0; - - if (args->mods && args->mods[args->mods_cnt - 1] == mod) - return 0; - - if (args->mods_cnt == args->mods_cap) { - args->mods_cap = max(16, args->mods_cap * 3 / 2); - mods = krealloc_array(args->mods, args->mods_cap, sizeof(*mods), GFP_KERNEL); + if (arr->mods_cnt == arr->mods_cap) { + arr->mods_cap = max(16, arr->mods_cap * 3 / 2); + mods = krealloc_array(arr->mods, arr->mods_cap, sizeof(*mods), GFP_KERNEL); if (!mods) return -ENOMEM; - args->mods = mods; + arr->mods = mods; }
- if (!try_module_get(mod)) - return -EINVAL; - - args->mods[args->mods_cnt] = mod; - args->mods_cnt++; + arr->mods[arr->mods_cnt] = mod; + arr->mods_cnt++; return 0; }
+ static bool has_module(struct modules_array *arr, struct module *mod) + { + int i; + + for (i = arr->mods_cnt - 1; i >= 0; i--) { + if (arr->mods[i] == mod) + return true; + } + return false; + } + static int get_modules_for_addrs(struct module ***mods, unsigned long *addrs, u32 addrs_cnt) { - struct module_addr_args args = { - .addrs = addrs, - .addrs_cnt = addrs_cnt, - }; - int err; + struct modules_array arr = {}; + u32 i, err = 0; + + for (i = 0; i < addrs_cnt; i++) { + struct module *mod; + + preempt_disable(); + mod = __module_address(addrs[i]); + /* Either no module or we it's already stored */ + if (!mod || has_module(&arr, mod)) { + preempt_enable(); + continue; + } + if (!try_module_get(mod)) + err = -EINVAL; + preempt_enable(); + if (err) + break; + err = add_module(&arr, mod); + if (err) { + module_put(mod); + break; + } + }
/* We return either err < 0 in case of error, ... */ - err = module_kallsyms_on_each_symbol(module_callback, &args); if (err) { - kprobe_multi_put_modules(args.mods, args.mods_cnt); - kfree(args.mods); + kprobe_multi_put_modules(arr.mods, arr.mods_cnt); + kfree(arr.mods); return err; }
/* or number of modules found if everything is ok. */ - *mods = args.mods; - return args.mods_cnt; + *mods = arr.mods; + return arr.mods_cnt; }
int bpf_kprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *prog) @@@ -2861,13 -2869,6 +2867,6 @@@ bpf_kprobe_multi_cookie_cmp, bpf_kprobe_multi_cookie_swap, link); - } else { - /* - * We need to sort addrs array even if there are no cookies - * provided, to allow bsearch in get_modules_for_addrs. - */ - sort(addrs, cnt, sizeof(*addrs), - bpf_kprobe_multi_addrs_cmp, NULL); }
err = get_modules_for_addrs(&link->mods, addrs, cnt); diff --combined kernel/trace/ftrace.c index 51896b610414,49762ef50b72..29baa97d0d53 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@@ -125,33 -125,6 +125,33 @@@ struct ftrace_ops global_ops void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *op, struct ftrace_regs *fregs);
+#ifdef CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS +/* + * Stub used to invoke the list ops without requiring a separate trampoline. + */ +const struct ftrace_ops ftrace_list_ops = { + .func = ftrace_ops_list_func, + .flags = FTRACE_OPS_FL_STUB, +}; + +static void ftrace_ops_nop_func(unsigned long ip, unsigned long parent_ip, + struct ftrace_ops *op, + struct ftrace_regs *fregs) +{ + /* do nothing */ +} + +/* + * Stub used when a call site is disabled. May be called transiently by threads + * which have made it into ftrace_caller but haven't yet recovered the ops at + * the point the call site is disabled. + */ +const struct ftrace_ops ftrace_nop_ops = { + .func = ftrace_ops_nop_func, + .flags = FTRACE_OPS_FL_STUB, +}; +#endif + static inline void ftrace_ops_init(struct ftrace_ops *ops) { #ifdef CONFIG_DYNAMIC_FTRACE @@@ -1846,18 -1819,6 +1846,18 @@@ static bool __ftrace_hash_rec_update(st * if rec count is zero. */ } + + /* + * If the rec has a single associated ops, and ops->func can be + * called directly, allow the call site to call via the ops. + */ + if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS) && + ftrace_rec_count(rec) == 1 && + ftrace_ops_get_func(ops) == ops->func) + rec->flags |= FTRACE_FL_CALL_OPS; + else + rec->flags &= ~FTRACE_FL_CALL_OPS; + count++;
/* Must match FTRACE_UPDATE_CALLS in ftrace_modify_all_code() */ @@@ -2152,9 -2113,8 +2152,9 @@@ void ftrace_bug(int failed, struct dyn_ struct ftrace_ops *ops = NULL;
pr_info("ftrace record flags: %lx\n", rec->flags); - pr_cont(" (%ld)%s", ftrace_rec_count(rec), - rec->flags & FTRACE_FL_REGS ? " R" : " "); + pr_cont(" (%ld)%s%s", ftrace_rec_count(rec), + rec->flags & FTRACE_FL_REGS ? " R" : " ", + rec->flags & FTRACE_FL_CALL_OPS ? " O" : " "); if (rec->flags & FTRACE_FL_TRAMP_EN) { ops = ftrace_find_tramp_ops_any(rec); if (ops) { @@@ -2222,7 -2182,6 +2222,7 @@@ static int ftrace_check_record(struct d * want the direct enabled (it will be done via the * direct helper). But if DIRECT_EN is set, and * the count is not one, we need to clear it. + * */ if (ftrace_rec_count(rec) == 1) { if (!(rec->flags & FTRACE_FL_DIRECT) != @@@ -2231,19 -2190,6 +2231,19 @@@ } else if (rec->flags & FTRACE_FL_DIRECT_EN) { flag |= FTRACE_FL_DIRECT; } + + /* + * Ops calls are special, as count matters. + * As with direct calls, they must only be enabled when count + * is one, otherwise they'll be handled via the list ops. + */ + if (ftrace_rec_count(rec) == 1) { + if (!(rec->flags & FTRACE_FL_CALL_OPS) != + !(rec->flags & FTRACE_FL_CALL_OPS_EN)) + flag |= FTRACE_FL_CALL_OPS; + } else if (rec->flags & FTRACE_FL_CALL_OPS_EN) { + flag |= FTRACE_FL_CALL_OPS; + } }
/* If the state of this record hasn't changed, then do nothing */ @@@ -2288,21 -2234,6 +2288,21 @@@ rec->flags &= ~FTRACE_FL_DIRECT_EN; } } + + if (flag & FTRACE_FL_CALL_OPS) { + if (ftrace_rec_count(rec) == 1) { + if (rec->flags & FTRACE_FL_CALL_OPS) + rec->flags |= FTRACE_FL_CALL_OPS_EN; + else + rec->flags &= ~FTRACE_FL_CALL_OPS_EN; + } else { + /* + * Can only call directly if there's + * only one set of associated ops. + */ + rec->flags &= ~FTRACE_FL_CALL_OPS_EN; + } + } }
/* @@@ -2332,8 -2263,7 +2332,8 @@@ * and REGS states. The _EN flags must be disabled though. */ rec->flags &= ~(FTRACE_FL_ENABLED | FTRACE_FL_TRAMP_EN | - FTRACE_FL_REGS_EN | FTRACE_FL_DIRECT_EN); + FTRACE_FL_REGS_EN | FTRACE_FL_DIRECT_EN | + FTRACE_FL_CALL_OPS_EN); }
ftrace_bug_type = FTRACE_BUG_NOP; @@@ -2506,25 -2436,6 +2506,25 @@@ ftrace_find_tramp_ops_new(struct dyn_ft return NULL; }
+struct ftrace_ops * +ftrace_find_unique_ops(struct dyn_ftrace *rec) +{ + struct ftrace_ops *op, *found = NULL; + unsigned long ip = rec->ip; + + do_for_each_ftrace_op(op, ftrace_ops_list) { + + if (hash_contains_ip(ip, op->func_hash)) { + if (found) + return NULL; + found = op; + } + + } while_for_each_ftrace_op(op); + + return found; +} + #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS /* Protected by rcu_tasks for reading, and direct_mutex for writing */ static struct ftrace_hash *direct_functions = EMPTY_HASH; @@@ -3874,12 -3785,11 +3874,12 @@@ static int t_show(struct seq_file *m, v if (iter->flags & FTRACE_ITER_ENABLED) { struct ftrace_ops *ops;
- seq_printf(m, " (%ld)%s%s%s", + seq_printf(m, " (%ld)%s%s%s%s", ftrace_rec_count(rec), rec->flags & FTRACE_FL_REGS ? " R" : " ", rec->flags & FTRACE_FL_IPMODIFY ? " I" : " ", - rec->flags & FTRACE_FL_DIRECT ? " D" : " "); + rec->flags & FTRACE_FL_DIRECT ? " D" : " ", + rec->flags & FTRACE_FL_CALL_OPS ? " O" : " "); if (rec->flags & FTRACE_FL_TRAMP_EN) { ops = ftrace_find_tramp_ops_any(rec); if (ops) { @@@ -3895,15 -3805,6 +3895,15 @@@ } else { add_trampoline_func(m, NULL, rec); } + if (rec->flags & FTRACE_FL_CALL_OPS_EN) { + ops = ftrace_find_unique_ops(rec); + if (ops) { + seq_printf(m, "\tops: %pS (%pS)", + ops, ops->func); + } else { + seq_puts(m, "\tops: ERROR!"); + } + } if (rec->flags & FTRACE_FL_DIRECT) { unsigned long direct;
@@@ -8444,7 -8345,7 +8444,7 @@@ int ftrace_lookup_symbols(const char ** found_all = kallsyms_on_each_symbol(kallsyms_callback, &args); if (found_all) return 0; - found_all = module_kallsyms_on_each_symbol(kallsyms_callback, &args); + found_all = module_kallsyms_on_each_symbol(NULL, kallsyms_callback, &args); return found_all ? 0 : -ESRCH; }
diff --combined net/rxrpc/ar-internal.h index 3931a4bba8af,9e19688b0e06..67b0a894162d --- a/net/rxrpc/ar-internal.h +++ b/net/rxrpc/ar-internal.h @@@ -149,7 -149,7 +149,7 @@@ struct rxrpc_sock struct list_head sock_calls; /* List of calls owned by this socket */ struct list_head to_be_accepted; /* calls awaiting acceptance */ struct list_head recvmsg_q; /* Calls awaiting recvmsg's attention */ - rwlock_t recvmsg_lock; /* Lock for recvmsg_q */ + spinlock_t recvmsg_lock; /* Lock for recvmsg_q */ struct key *key; /* security for this socket */ struct key *securities; /* list of server security descriptors */ struct rb_root calls; /* User ID -> call mapping */ @@@ -284,7 -284,9 +284,9 @@@ struct rxrpc_local struct task_struct *io_thread; struct completion io_thread_ready; /* Indication that the I/O thread started */ struct rxrpc_sock *service; /* Service(s) listening on this endpoint */ - struct rw_semaphore defrag_sem; /* control re-enablement of IP DF bit */ + #ifdef CONFIG_AF_RXRPC_INJECT_RX_DELAY + struct sk_buff_head rx_delay_queue; /* Delay injection queue */ + #endif struct sk_buff_head rx_queue; /* Received packets */ struct list_head conn_attend_q; /* Conns requiring immediate attention */ struct list_head call_attend_q; /* Calls requiring immediate attention */ @@@ -688,9 -690,11 +690,11 @@@ struct rxrpc_call
/* Receive-phase ACK management (ACKs we send). */ u8 ackr_reason; /* reason to ACK */ + u16 ackr_sack_base; /* Starting slot in SACK table ring */ rxrpc_serial_t ackr_serial; /* serial of packet being ACK'd */ - atomic64_t ackr_window; /* Base (in LSW) and top (in MSW) of SACK window */ - atomic_t ackr_nr_unacked; /* Number of unacked packets */ + rxrpc_seq_t ackr_window; /* Base of SACK window */ + rxrpc_seq_t ackr_wtop; /* Base of SACK window */ + unsigned int ackr_nr_unacked; /* Number of unacked packets */ atomic_t ackr_nr_consumed; /* Number of packets needing hard ACK */ struct { #define RXRPC_SACK_SIZE 256 @@@ -795,7 -799,7 +799,7 @@@ struct rxrpc_txbuf u8 data[RXRPC_JUMBO_DATALEN]; /* Data packet */ struct { struct rxrpc_ackpacket ack; - u8 acks[0]; + DECLARE_FLEX_ARRAY(u8, acks); }; }; } __aligned(64); @@@ -1109,6 -1113,9 +1113,9 @@@ extern unsigned long rxrpc_idle_ack_del extern unsigned int rxrpc_rx_window_size; extern unsigned int rxrpc_rx_mtu; extern unsigned int rxrpc_rx_jumbo_max; + #ifdef CONFIG_AF_RXRPC_INJECT_RX_DELAY + extern unsigned long rxrpc_inject_rx_delay; + #endif
/* * net_ns.c diff --combined net/socket.c index c6c44e26e954,4080b4ba7daf..6bae8ce7059e --- a/net/socket.c +++ b/net/socket.c @@@ -106,6 -106,7 +106,7 @@@ #include <net/busy_poll.h> #include <linux/errqueue.h> #include <linux/ptp_clock_kernel.h> + #include <trace/events/sock.h>
#ifdef CONFIG_NET_RX_BUSY_POLL unsigned int sysctl_net_busy_read __read_mostly; @@@ -385,7 -386,7 +386,7 @@@ static const struct xattr_handler sockf };
static int sockfs_security_xattr_set(const struct xattr_handler *handler, - struct user_namespace *mnt_userns, + struct mnt_idmap *idmap, struct dentry *dentry, struct inode *inode, const char *suffix, const void *value, size_t size, int flags) @@@ -589,10 -590,10 +590,10 @@@ static ssize_t sockfs_listxattr(struct return used; }
-static int sockfs_setattr(struct user_namespace *mnt_userns, +static int sockfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr) { - int err = simple_setattr(&init_user_ns, dentry, iattr); + int err = simple_setattr(&nop_mnt_idmap, dentry, iattr);
if (!err && (iattr->ia_valid & ATTR_UID)) { struct socket *sock = SOCKET_I(d_inode(dentry)); @@@ -709,12 -710,22 +710,22 @@@ INDIRECT_CALLABLE_DECLARE(int inet_send size_t)); INDIRECT_CALLABLE_DECLARE(int inet6_sendmsg(struct socket *, struct msghdr *, size_t)); + + static noinline void call_trace_sock_send_length(struct sock *sk, int ret, + int flags) + { + trace_sock_send_length(sk, ret, 0); + } + static inline int sock_sendmsg_nosec(struct socket *sock, struct msghdr *msg) { int ret = INDIRECT_CALL_INET(sock->ops->sendmsg, inet6_sendmsg, inet_sendmsg, sock, msg, msg_data_left(msg)); BUG_ON(ret == -EIOCBQUEUED); + + if (trace_sock_send_length_enabled()) + call_trace_sock_send_length(sock->sk, ret, 0); return ret; }
@@@ -992,12 -1003,21 +1003,21 @@@ INDIRECT_CALLABLE_DECLARE(int inet_recv size_t, int)); INDIRECT_CALLABLE_DECLARE(int inet6_recvmsg(struct socket *, struct msghdr *, size_t, int)); + + static noinline void call_trace_sock_recv_length(struct sock *sk, int ret, int flags) + { + trace_sock_recv_length(sk, ret, flags); + } + static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg, int flags) { - return INDIRECT_CALL_INET(sock->ops->recvmsg, inet6_recvmsg, - inet_recvmsg, sock, msg, msg_data_left(msg), - flags); + int ret = INDIRECT_CALL_INET(sock->ops->recvmsg, inet6_recvmsg, + inet_recvmsg, sock, msg, + msg_data_left(msg), flags); + if (trace_sock_recv_length_enabled()) + call_trace_sock_recv_length(sock->sk, ret, flags); + return ret; }
/** @@@ -1047,6 -1067,7 +1067,7 @@@ static ssize_t sock_sendpage(struct fil { struct socket *sock; int flags; + int ret;
sock = file->private_data;
@@@ -1054,7 -1075,11 +1075,11 @@@ /* more is a combination of MSG_MORE and MSG_SENDPAGE_NOTLAST */ flags |= more;
- return kernel_sendpage(sock, page, offset, size, flags); + ret = kernel_sendpage(sock, page, offset, size, flags); + + if (trace_sock_send_length_enabled()) + call_trace_sock_send_length(sock->sk, ret, 0); + return ret; }
static ssize_t sock_splice_read(struct file *file, loff_t *ppos, diff --combined net/sunrpc/svcsock.c index 91252adcae46,99eafe87b1d5..8bcc8c3ffbfe --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@@ -55,6 -55,7 +55,7 @@@ #include <linux/sunrpc/stats.h> #include <linux/sunrpc/xprt.h>
+ #include <trace/events/sock.h> #include <trace/events/sunrpc.h>
#include "socklib.h" @@@ -252,8 -253,11 +253,8 @@@ static ssize_t svc_tcp_read_msg(struct
clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
- for (i = 0, t = 0; t < buflen; i++, t += PAGE_SIZE) { - bvec[i].bv_page = rqstp->rq_pages[i]; - bvec[i].bv_len = PAGE_SIZE; - bvec[i].bv_offset = 0; - } + for (i = 0, t = 0; t < buflen; i++, t += PAGE_SIZE) + bvec_set_page(&bvec[i], rqstp->rq_pages[i], PAGE_SIZE, 0); rqstp->rq_respages = &rqstp->rq_pages[i]; rqstp->rq_next_page = rqstp->rq_respages + 1;
@@@ -307,6 -311,8 +308,8 @@@ static void svc_data_ready(struct sock { struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
+ trace_sk_data_ready(sk); + if (svsk) { /* Refer to svc_setup_socket() for details. */ rmb(); @@@ -684,6 -690,8 +687,8 @@@ static void svc_tcp_listen_data_ready(s { struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
+ trace_sk_data_ready(sk); + if (svsk) { /* Refer to svc_setup_socket() for details. */ rmb(); diff --combined net/tls/tls_sw.c index 7c5de4afbe99,6d0a534b7baa..782d3701b86f --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@@ -38,12 -38,12 +38,13 @@@ #include <linux/bug.h> #include <linux/sched/signal.h> #include <linux/module.h> +#include <linux/kernel.h> #include <linux/splice.h> #include <crypto/aead.h>
#include <net/strparser.h> #include <net/tls.h> + #include <trace/events/sock.h>
#include "tls.h"
@@@ -58,7 -58,6 +59,7 @@@ struct tls_decrypt_arg };
struct tls_decrypt_ctx { + struct sock *sk; u8 iv[MAX_IV_SIZE]; u8 aad[TLS_MAX_AAD_SIZE]; u8 tail; @@@ -179,25 -178,18 +180,25 @@@ static int tls_padding_length(struct tl return sub; }
-static void tls_decrypt_done(struct crypto_async_request *req, int err) +static void tls_decrypt_done(void *data, int err) { - struct aead_request *aead_req = (struct aead_request *)req; + struct aead_request *aead_req = data; + struct crypto_aead *aead = crypto_aead_reqtfm(aead_req); struct scatterlist *sgout = aead_req->dst; struct scatterlist *sgin = aead_req->src; struct tls_sw_context_rx *ctx; + struct tls_decrypt_ctx *dctx; struct tls_context *tls_ctx; struct scatterlist *sg; unsigned int pages; struct sock *sk; + int aead_size; + + aead_size = sizeof(*aead_req) + crypto_aead_reqsize(aead); + aead_size = ALIGN(aead_size, __alignof__(*dctx)); + dctx = (void *)((u8 *)aead_req + aead_size);
- sk = (struct sock *)req->data; + sk = dctx->sk; tls_ctx = tls_get_ctx(sk); ctx = tls_sw_ctx_rx(tls_ctx);
@@@ -249,7 -241,7 +250,7 @@@ static int tls_do_decryption(struct soc if (darg->async) { aead_request_set_callback(aead_req, CRYPTO_TFM_REQ_MAY_BACKLOG, - tls_decrypt_done, sk); + tls_decrypt_done, aead_req); atomic_inc(&ctx->decrypt_pending); } else { aead_request_set_callback(aead_req, @@@ -345,8 -337,6 +346,8 @@@ static struct tls_rec *tls_get_rec(stru sg_set_buf(&rec->sg_aead_out[0], rec->aad_space, prot->aad_size); sg_unmark_end(&rec->sg_aead_out[1]);
+ rec->sk = sk; + return rec; }
@@@ -428,25 -418,22 +429,25 @@@ tx_err return rc; }
-static void tls_encrypt_done(struct crypto_async_request *req, int err) +static void tls_encrypt_done(void *data, int err) { - struct aead_request *aead_req = (struct aead_request *)req; - struct sock *sk = req->data; - struct tls_context *tls_ctx = tls_get_ctx(sk); - struct tls_prot_info *prot = &tls_ctx->prot_info; - struct tls_sw_context_tx *ctx = tls_sw_ctx_tx(tls_ctx); + struct tls_sw_context_tx *ctx; + struct tls_context *tls_ctx; + struct tls_prot_info *prot; + struct tls_rec *rec = data; struct scatterlist *sge; struct sk_msg *msg_en; - struct tls_rec *rec; bool ready = false; + struct sock *sk; int pending;
- rec = container_of(aead_req, struct tls_rec, aead_req); msg_en = &rec->msg_encrypted;
+ sk = rec->sk; + tls_ctx = tls_get_ctx(sk); + prot = &tls_ctx->prot_info; + ctx = tls_sw_ctx_tx(tls_ctx); + sge = sk_msg_elem(msg_en, msg_en->sg.curr); sge->offset -= prot->prepend_size; sge->length += prot->prepend_size; @@@ -534,7 -521,7 +535,7 @@@ static int tls_do_encryption(struct soc data_len, rec->iv_data);
aead_request_set_callback(aead_req, CRYPTO_TFM_REQ_MAY_BACKLOG, - tls_encrypt_done, sk); + tls_encrypt_done, rec);
/* Add the record in tx_list */ list_add_tail((struct list_head *)&rec->list, &ctx->tx_list); @@@ -1499,7 -1486,6 +1500,7 @@@ static int tls_decrypt_sg(struct sock * * Both structs are variable length. */ aead_size = sizeof(*aead_req) + crypto_aead_reqsize(ctx->aead_recv); + aead_size = ALIGN(aead_size, __alignof__(*dctx)); mem = kmalloc(aead_size + struct_size(dctx, sg, n_sgin + n_sgout), sk->sk_allocation); if (!mem) { @@@ -1510,7 -1496,6 +1511,7 @@@ /* Segment the allocated memory */ aead_req = (struct aead_request *)mem; dctx = (struct tls_decrypt_ctx *)(mem + aead_size); + dctx->sk = sk; sgin = &dctx->sg[0]; sgout = &dctx->sg[n_sgin];
@@@ -2300,6 -2285,8 +2301,8 @@@ static void tls_data_ready(struct sock struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx); struct sk_psock *psock;
+ trace_sk_data_ready(sk); + tls_strp_data_ready(&ctx->strp);
psock = sk_psock_get(sk); diff --combined net/unix/af_unix.c index 81ff98298996,0be25e712c28..347122c3575e --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@@ -112,6 -112,7 +112,7 @@@ #include <linux/mount.h> #include <net/checksum.h> #include <linux/security.h> + #include <linux/splice.h> #include <linux/freezer.h> #include <linux/file.h> #include <linux/btf_ids.h> @@@ -807,23 -808,23 +808,23 @@@ static int unix_count_nr_fds(struct soc static void unix_show_fdinfo(struct seq_file *m, struct socket *sock) { struct sock *sk = sock->sk; + unsigned char s_state; struct unix_sock *u; - int nr_fds; + int nr_fds = 0;
if (sk) { + s_state = READ_ONCE(sk->sk_state); u = unix_sk(sk); - if (sock->type == SOCK_DGRAM) { - nr_fds = atomic_read(&u->scm_stat.nr_fds); - goto out_print; - }
- unix_state_lock(sk); - if (sk->sk_state != TCP_LISTEN) + /* SOCK_STREAM and SOCK_SEQPACKET sockets never change their + * sk_state after switching to TCP_ESTABLISHED or TCP_LISTEN. + * SOCK_DGRAM is ordinary. So, no lock is needed. + */ + if (sock->type == SOCK_DGRAM || s_state == TCP_ESTABLISHED) nr_fds = atomic_read(&u->scm_stat.nr_fds); - else + else if (s_state == TCP_LISTEN) nr_fds = unix_count_nr_fds(sk); - unix_state_unlock(sk); - out_print: + seq_printf(m, "scm_fds: %u\n", nr_fds); } } @@@ -1190,7 -1191,7 +1191,7 @@@ static int unix_bind_bsd(struct sock *s unsigned int new_hash, old_hash = sk->sk_hash; struct unix_sock *u = unix_sk(sk); struct net *net = sock_net(sk); - struct user_namespace *ns; // barf... + struct mnt_idmap *idmap; struct unix_address *addr; struct dentry *dentry; struct path parent; @@@ -1217,10 -1218,10 +1218,10 @@@ /* * All right, let's create it. */ - ns = mnt_user_ns(parent.mnt); + idmap = mnt_idmap(parent.mnt); err = security_path_mknod(&parent, dentry, mode, 0); if (!err) - err = vfs_mknod(ns, d_inode(parent.dentry), dentry, mode, 0); + err = vfs_mknod(idmap, d_inode(parent.dentry), dentry, mode, 0); if (err) goto out_path; err = mutex_lock_interruptible(&u->bindlock); @@@ -1245,7 -1246,7 +1246,7 @@@ out_unlock err = -EINVAL; out_unlink: /* failed after successful mknod? unlink what we'd created... */ - vfs_unlink(ns, d_inode(parent.dentry), dentry, NULL); + vfs_unlink(idmap, d_inode(parent.dentry), dentry, NULL); out_path: done_path_create(&parent, dentry); out: diff --combined tools/testing/selftests/bpf/progs/profiler.inc.h index 7bd76b9e0f98,68a3fd7387a4..875513866032 --- a/tools/testing/selftests/bpf/progs/profiler.inc.h +++ b/tools/testing/selftests/bpf/progs/profiler.inc.h @@@ -156,10 -156,10 +156,10 @@@ probe_read_lim(void* dst, void* src, un { len = len < max ? len : max; if (len > 1) { - if (bpf_probe_read(dst, len, src)) + if (bpf_probe_read_kernel(dst, len, src)) return 0; } else if (len == 1) { - if (bpf_probe_read(dst, 1, src)) + if (bpf_probe_read_kernel(dst, 1, src)) return 0; } return len; @@@ -216,7 -216,8 +216,8 @@@ static INLINE void* read_full_cgroup_pa #endif for (int i = 0; i < MAX_CGROUPS_PATH_DEPTH; i++) { filepart_length = - bpf_probe_read_str(payload, MAX_PATH, BPF_CORE_READ(cgroup_node, name)); + bpf_probe_read_kernel_str(payload, MAX_PATH, + BPF_CORE_READ(cgroup_node, name)); if (!cgroup_node) return payload; if (cgroup_node == cgroup_root_node) @@@ -303,7 -304,8 +304,8 @@@ static INLINE void* populate_cgroup_inf cgroup_data->cgroup_full_length = 0;
size_t cgroup_root_length = - bpf_probe_read_str(payload, MAX_PATH, BPF_CORE_READ(root_kernfs, name)); + bpf_probe_read_kernel_str(payload, MAX_PATH, + BPF_CORE_READ(root_kernfs, name)); barrier_var(cgroup_root_length); if (cgroup_root_length <= MAX_PATH) { barrier_var(cgroup_root_length); @@@ -312,7 -314,8 +314,8 @@@ }
size_t cgroup_proc_length = - bpf_probe_read_str(payload, MAX_PATH, BPF_CORE_READ(proc_kernfs, name)); + bpf_probe_read_kernel_str(payload, MAX_PATH, + BPF_CORE_READ(proc_kernfs, name)); barrier_var(cgroup_proc_length); if (cgroup_proc_length <= MAX_PATH) { barrier_var(cgroup_proc_length); @@@ -395,7 -398,8 +398,8 @@@ static INLINE int trace_var_sys_kill(vo arr_struct = bpf_map_lookup_elem(&data_heap, &zero); if (arr_struct == NULL) return 0; - bpf_probe_read(&arr_struct->array[0], sizeof(arr_struct->array[0]), kill_data); + bpf_probe_read_kernel(&arr_struct->array[0], + sizeof(arr_struct->array[0]), kill_data); } else { int index = get_var_spid_index(arr_struct, spid);
@@@ -409,8 -413,9 +413,9 @@@ #endif for (int i = 0; i < ARRAY_SIZE(arr_struct->array); i++) if (arr_struct->array[i].meta.pid == 0) { - bpf_probe_read(&arr_struct->array[i], - sizeof(arr_struct->array[i]), kill_data); + bpf_probe_read_kernel(&arr_struct->array[i], + sizeof(arr_struct->array[i]), + kill_data); bpf_map_update_elem(&var_tpid_to_data, &tpid, arr_struct, 0);
@@@ -427,17 -432,17 +432,17 @@@ if (delta_sec < STALE_INFO) { kill_data->kill_count++; kill_data->last_kill_time = bpf_ktime_get_ns(); - bpf_probe_read(&arr_struct->array[index], - sizeof(arr_struct->array[index]), - kill_data); + bpf_probe_read_kernel(&arr_struct->array[index], + sizeof(arr_struct->array[index]), + kill_data); } else { struct var_kill_data_t* kill_data = get_var_kill_data(ctx, spid, tpid, sig); if (kill_data == NULL) return 0; - bpf_probe_read(&arr_struct->array[index], - sizeof(arr_struct->array[index]), - kill_data); + bpf_probe_read_kernel(&arr_struct->array[index], + sizeof(arr_struct->array[index]), + kill_data); } } bpf_map_update_elem(&var_tpid_to_data, &tpid, arr_struct, 0); @@@ -487,8 -492,9 +492,9 @@@ read_absolute_file_path_from_dentry(str #pragma unroll #endif for (int i = 0; i < MAX_PATH_DEPTH; i++) { - filepart_length = bpf_probe_read_str(payload, MAX_PATH, - BPF_CORE_READ(filp_dentry, d_name.name)); + filepart_length = + bpf_probe_read_kernel_str(payload, MAX_PATH, + BPF_CORE_READ(filp_dentry, d_name.name)); barrier_var(filepart_length); if (filepart_length > MAX_PATH) break; @@@ -572,7 -578,8 +578,8 @@@ ssize_t BPF_KPROBE(kprobe__proc_sys_wri sysctl_data->sysctl_val_length = 0; sysctl_data->sysctl_path_length = 0;
- size_t sysctl_val_length = bpf_probe_read_str(payload, CTL_MAXNAME, buf); + size_t sysctl_val_length = bpf_probe_read_kernel_str(payload, + CTL_MAXNAME, buf); barrier_var(sysctl_val_length); if (sysctl_val_length <= CTL_MAXNAME) { barrier_var(sysctl_val_length); @@@ -580,8 -587,10 +587,10 @@@ payload += sysctl_val_length; }
- size_t sysctl_path_length = bpf_probe_read_str(payload, MAX_PATH, - BPF_CORE_READ(filp, f_path.dentry, d_name.name)); + size_t sysctl_path_length = + bpf_probe_read_kernel_str(payload, MAX_PATH, + BPF_CORE_READ(filp, f_path.dentry, + d_name.name)); barrier_var(sysctl_path_length); if (sysctl_path_length <= MAX_PATH) { barrier_var(sysctl_path_length); @@@ -638,7 -647,8 +647,8 @@@ int raw_tracepoint__sched_process_exit( struct var_kill_data_t* past_kill_data = &arr_struct->array[i];
if (past_kill_data != NULL && past_kill_data->kill_target_pid == tpid) { - bpf_probe_read(kill_data, sizeof(*past_kill_data), past_kill_data); + bpf_probe_read_kernel(kill_data, sizeof(*past_kill_data), + past_kill_data); void* payload = kill_data->payload; size_t offset = kill_data->payload_length; if (offset >= MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN) @@@ -656,8 -666,10 +666,10 @@@ payload += comm_length; }
- size_t cgroup_proc_length = bpf_probe_read_str(payload, KILL_TARGET_LEN, - BPF_CORE_READ(proc_kernfs, name)); + size_t cgroup_proc_length = + bpf_probe_read_kernel_str(payload, + KILL_TARGET_LEN, + BPF_CORE_READ(proc_kernfs, name)); barrier_var(cgroup_proc_length); if (cgroup_proc_length <= KILL_TARGET_LEN) { barrier_var(cgroup_proc_length); @@@ -718,7 -730,8 +730,8 @@@ int raw_tracepoint__sched_process_exec( proc_exec_data->parent_start_time = BPF_CORE_READ(parent_task, start_time);
const char* filename = BPF_CORE_READ(bprm, filename); - size_t bin_path_length = bpf_probe_read_str(payload, MAX_FILENAME_LEN, filename); + size_t bin_path_length = + bpf_probe_read_kernel_str(payload, MAX_FILENAME_LEN, filename); barrier_var(bin_path_length); if (bin_path_length <= MAX_FILENAME_LEN) { barrier_var(bin_path_length); @@@ -826,7 -839,7 +839,7 @@@ out
SEC("kprobe/vfs_link") int BPF_KPROBE(kprobe__vfs_link, - struct dentry* old_dentry, struct user_namespace *mnt_userns, + struct dentry* old_dentry, struct mnt_idmap *idmap, struct inode* dir, struct dentry* new_dentry, struct inode** delegated_inode) { @@@ -922,7 -935,8 +935,8 @@@ int BPF_KPROBE(kprobe__vfs_symlink, str filemod_data->payload); payload = populate_cgroup_info(&filemod_data->cgroup_data, task, payload);
- size_t len = bpf_probe_read_str(payload, MAX_FILEPATH_LENGTH, oldname); + size_t len = bpf_probe_read_kernel_str(payload, MAX_FILEPATH_LENGTH, + oldname); barrier_var(len); if (len <= MAX_FILEPATH_LENGTH) { barrier_var(len);
linux-merge@lists.open-mesh.org