History

Merge 5.7-rc3 into driver-core-next

We need the driver core fixes in here as well.

Greg Kroah-Hartman committed 6 years ago

Commit 96fa72f2 parents fbc35b4 6a8b55e768 files · +8053 −4691Browse files

Unified · Split

768 files
  1. .clang-format +14 −4
  2. Documentation/admin-guide/kernel-parameters.txt +1 −2
  3. Documentation/admin-guide/sysctl/kernel.rst +19 −28
  4. Documentation/arm64/amu.rst +26 −21
  5. Documentation/core-api/timekeeping.rst +3 −3
  6. Documentation/devicetree/bindings/Makefile +12 −9
  7. Documentation/devicetree/bindings/arm/sunxi/allwinner,sun4i-a10-mbus.yaml +6 −0
  8. Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml +1 −1
  9. Documentation/devicetree/bindings/display/bridge/adi,adv7123.txt +2 −2
  10. Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt +2 −2
  11. Documentation/devicetree/bindings/display/panel/leadtek,ltk500hd1829.yaml +0 −1
  12. Documentation/devicetree/bindings/display/panel/lvds.yaml +9 −1
  13. Documentation/devicetree/bindings/display/panel/xinpeng,xpp055c272.yaml +0 −1
  14. Documentation/devicetree/bindings/dma/adi,axi-dmac.txt +1 −1
  15. Documentation/devicetree/bindings/hwmon/adi,axi-fan-control.yaml +2 −2
  16. Documentation/devicetree/bindings/hwmon/adt7475.yaml +1 −1
  17. Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml +1 −1
  18. Documentation/devicetree/bindings/iio/dac/ad5755.txt +1 −1
  19. Documentation/devicetree/bindings/iio/dac/adi,ad5770r.yaml +46 −51
  20. Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml +1 −1
  21. Documentation/devicetree/bindings/interrupt-controller/loongson,liointc.yaml +2 −3
  22. Documentation/devicetree/bindings/memory-controllers/nvidia,tegra186-mc.yaml +23 −18
  23. Documentation/devicetree/bindings/mfd/rohm,bd71837-pmic.yaml +3 −1
  24. Documentation/devicetree/bindings/mfd/rohm,bd71847-pmic.yaml +3 −1
  25. Documentation/devicetree/bindings/mfd/st,stpmic1.yaml +1 −3
  26. Documentation/devicetree/bindings/net/ethernet-phy.yaml +3 −0
  27. Documentation/devicetree/bindings/net/fsl-fec.txt +2 −0
  28. Documentation/devicetree/bindings/net/qcom,ipq8064-mdio.yaml +1 −0
  29. Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt +1 −1
  30. Documentation/devicetree/bindings/phy/qcom,qusb2-phy.yaml +3 −3
  31. Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml +1 −1
  32. Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.yaml +12 −5
  33. Documentation/devicetree/bindings/regulator/mps,mp5416.yaml +0 −1
  34. Documentation/devicetree/bindings/regulator/mps,mpq7920.yaml +2 −1
  35. Documentation/devicetree/bindings/regulator/rohm,bd71828-regulator.yaml +5 −1
  36. Documentation/devicetree/bindings/regulator/rohm,bd71837-regulator.yaml +5 −1
  37. Documentation/devicetree/bindings/regulator/rohm,bd71847-regulator.yaml +5 −1
  38. Documentation/devicetree/bindings/rng/brcm,bcm2835.yaml +1 −1
  39. Documentation/devicetree/bindings/sound/rockchip-i2s.yaml +3 −0
  40. Documentation/devicetree/bindings/sound/rockchip-spdif.txt +0 −45
  41. Documentation/devicetree/bindings/sound/rockchip-spdif.yaml +101 −0
  42. Documentation/devicetree/bindings/spi/qcom,spi-qcom-qspi.yaml +1 −1
  43. Documentation/devicetree/bindings/usb/ingenic,musb.yaml +1 −1
  44. Documentation/devicetree/bindings/usb/qcom,dwc3.txt +2 −2
  45. Documentation/devicetree/bindings/usb/renesas,usb3-peri.yaml +1 −0
  46. Documentation/devicetree/bindings/usb/renesas,usbhs.yaml +1 −0
  47. Documentation/devicetree/bindings/usb/rockchip,dwc3.txt +1 −1
  48. Documentation/devicetree/bindings/usb/usb-xhci.txt +2 −1
  49. Documentation/filesystems/debugfs.rst +2 −2
  50. Documentation/hwmon/isl68137.rst +38 −38
  51. Documentation/kbuild/makefiles.rst +2 −1
  52. Documentation/networking/devlink/devlink-trap.rst +2 −0
  53. Documentation/networking/index.rst +1 −0
  54. Documentation/networking/ip-sysctl.txt +8 −1
  55. Documentation/networking/net_dim.rst +49 −47
  56. Documentation/x86/boot.rst +18 −3
  57. MAINTAINERS +46 −35
  58. Makefile +1 −1
  59. arch/arc/include/asm/module.h +0 −5
  60. arch/arc/include/asm/vermagic.h +8 −0
  61. arch/arm/boot/compressed/head.S +2 −1
  62. arch/arm/boot/dts/bcm2835-rpi.dtsi +3 −0
  63. arch/arm/boot/dts/bcm283x.dtsi +1 −0
  64. arch/arm/boot/dts/imx6qdl.dtsi +3 −3
  65. arch/arm/boot/dts/imx6qp.dtsi +0 −1
  66. arch/arm/boot/dts/omap3-n950-n9.dtsi +5 −0
  67. arch/arm/include/asm/module.h +0 −24
  68. arch/arm/include/asm/vermagic.h +31 −0
  69. arch/arm/mach-imx/Makefile +2 −0
  70. arch/arm/net/bpf_jit_32.c +34 −18
  71. arch/arm/xen/enlighten.c +1 −1
  72. arch/arm64/include/asm/module.h +0 −2
  73. arch/arm64/include/asm/pointer_auth.h +6 −3
  74. arch/arm64/include/asm/sysreg.h +3 −1
  75. arch/arm64/include/asm/vermagic.h +10 −0
  76. arch/arm64/kernel/vdso.c +1 −12
  77. arch/h8300/kernel/.gitignore +2 −0
  78. arch/hexagon/include/asm/vermagic.h +4 −4
  79. arch/ia64/include/asm/module.h +0 −4
  80. arch/ia64/include/asm/vermagic.h +15 −0
  81. arch/m68k/include/asm/Kbuild +0 −1
  82. arch/mips/include/asm/module.h +0 −61
  83. arch/mips/include/asm/vermagic.h +66 −0
  84. arch/nds32/include/asm/vermagic.h +3 −5
  85. arch/powerpc/include/asm/module.h +0 −18
  86. arch/powerpc/include/asm/vermagic.h +20 −0
  87. arch/powerpc/kernel/entry_32.S +1 −1
  88. arch/powerpc/kernel/setup_64.c +2 −0
  89. arch/powerpc/kvm/book3s_64_mmu_hv.c +5 −4
  90. arch/powerpc/kvm/book3s_64_mmu_radix.c +5 −4
  91. arch/powerpc/mm/nohash/8xx.c +3 −0
  92. arch/powerpc/platforms/Kconfig.cputype +1 −1
  93. arch/riscv/Kconfig +1 −1
  94. arch/riscv/include/asm/module.h +0 −2
  95. arch/riscv/include/asm/vermagic.h +9 −0
  96. arch/riscv/net/bpf_jit_comp64.c +32 −17
  97. arch/s390/boot/uv.c +0 −2
  98. arch/s390/kernel/diag.c +1 −1
  99. arch/s390/kernel/smp.c +2 −2
  100. arch/s390/kernel/trace.c +1 −1
  101. arch/s390/kernel/uv.c +2 −1
  102. arch/s390/kvm/interrupt.c +1 −1
  103. arch/s390/kvm/kvm-s390.c +3 −0
  104. arch/s390/pci/pci_irq.c +3 −2
  105. arch/sh/include/asm/module.h +0 −28
  106. arch/sh/include/asm/vermagic.h +34 −0
  107. arch/sh/mm/init.c +1 −1
  108. arch/um/Makefile +1 −0
  109. arch/x86/Kconfig +1 −1
  110. arch/x86/events/intel/cstate.c +1 −0
  111. arch/x86/hyperv/hv_init.c +5 −1
  112. arch/x86/include/asm/efi.h +2 −0
  113. arch/x86/include/asm/microcode_amd.h +1 −1
  114. arch/x86/include/asm/module.h +0 −60
  115. arch/x86/include/asm/nospec-branch.h +0 −21
  116. arch/x86/include/asm/vermagic.h +68 −0
  117. arch/x86/kernel/cpu/intel.c +36 −18
  118. arch/x86/kernel/cpu/mshyperv.c +12 −2
  119. arch/x86/kernel/cpu/resctrl/core.c +2 −0
  120. arch/x86/kernel/cpu/resctrl/internal.h +1 −0
  121. arch/x86/kernel/cpu/resctrl/rdtgroup.c +15 −1
  122. arch/x86/kernel/smpboot.c +33 −14
  123. arch/x86/kernel/umip.c +1 −1
  124. arch/x86/kvm/Makefile +4 −0
  125. arch/x86/kvm/svm/sev.c +5 −1
  126. arch/x86/kvm/svm/svm.c +1 −9
  127. arch/x86/kvm/svm/vmenter.S +9 −1
  128. arch/x86/kvm/vmx/nested.c +19 −2
  129. arch/x86/kvm/vmx/vmx.c +1 −1
  130. arch/x86/kvm/x86.c +19 −2
  131. arch/x86/net/bpf_jit_comp.c +15 −3
  132. arch/x86/net/bpf_jit_comp32.c +22 −6
  133. arch/x86/platform/efi/efi_64.c +12 −4
  134. arch/xtensa/include/asm/vermagic.h +6 −9
  135. block/blk-iocost.c +2 −2
  136. block/blk-mq.c +3 −1
  137. block/blk-wbt.c +2 −2
  138. drivers/acpi/button.c +0 −12
  139. drivers/acpi/pci_link.c +2 −2
  140. drivers/ata/ahci.c +1 −0
  141. drivers/ata/sata_inic162x.c +1 −1
  142. drivers/base/firmware_loader/fallback_table.c +0 −1
  143. drivers/base/power/main.c +1 −1
  144. drivers/block/null_blk.h +19 −10
  145. drivers/block/null_blk_main.c +31 −31
  146. drivers/block/null_blk_zoned.c +33 −12
  147. drivers/block/rbd.c +19 −14
  148. drivers/block/virtio_blk.c +1 −0
  149. drivers/char/hw_random/virtio-rng.c +1 −0
  150. drivers/char/tpm/tpm-interface.c +1 −1
  151. drivers/char/tpm/tpm2-cmd.c +1 −0
  152. drivers/char/tpm/tpm_ibmvtpm.c +73 −63
  153. drivers/char/tpm/tpm_tis_core.c +7 −1
  154. drivers/clk/clk-asm9260.c +1 −1
  155. drivers/clk/mmp/clk-pll.c +32 −1
  156. drivers/clk/mmp/clk.c +0 −31
  157. drivers/clk/mmp/clk.h +0 −7
  158. drivers/clk/sprd/sc9863a-clk.c +2 −1
  159. drivers/counter/104-quad-8.c +160 −34
  160. drivers/crypto/chelsio/chcr_ktls.c +2 −4
  161. drivers/firmware/efi/cper.c +1 −1
  162. drivers/firmware/efi/libstub/efistub.h +1 −1
  163. drivers/firmware/efi/libstub/file.c +14 −13
  164. drivers/firmware/efi/libstub/x86-stub.c +11 −7
  165. drivers/firmware/imx/Kconfig +2 −2
  166. drivers/firmware/xilinx/zynqmp-debug.c +1 −1
  167. drivers/fpga/dfl-pci.c +4 −2
  168. drivers/fpga/zynq-fpga.c +2 −1
  169. drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +20 −2
  170. drivers/gpu/drm/amd/amdgpu/cik.c +0 −2
  171. drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +1 −1
  172. drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 −0
  173. drivers/gpu/drm/amd/amdgpu/nv.c +0 −4
  174. drivers/gpu/drm/amd/amdgpu/soc15.c +0 −4
  175. drivers/gpu/drm/amd/amdgpu/vi.c +0 −2
  176. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +12 −2
  177. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +9 −6
  178. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h +2 −1
  179. drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c +26 −0
  180. drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +4 −1
  181. drivers/gpu/drm/amd/powerplay/renoir_ppt.c +6 −1
  182. drivers/gpu/drm/amd/powerplay/smu_v11_0.c +6 −0
  183. drivers/gpu/drm/bridge/analogix/analogix-anx6345.c +3 −0
  184. drivers/gpu/drm/drm_dp_mst_topology.c +1 −0
  185. drivers/gpu/drm/i915/display/intel_ddi.c +11 −3
  186. drivers/gpu/drm/i915/display/intel_display_power.c +6 −6
  187. drivers/gpu/drm/i915/display/intel_dp.c +2 −3
  188. drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +1 −0
  189. drivers/gpu/drm/i915/display/intel_hdmi.c +2 −1
  190. drivers/gpu/drm/i915/display/intel_sprite.c +12 −5
  191. drivers/gpu/drm/i915/gt/intel_rps.c +6 −3
  192. drivers/gpu/drm/i915/gvt/kvmgt.c +22 −24
  193. drivers/gpu/drm/i915/i915_drv.h +2 −0
  194. drivers/gpu/drm/i915/i915_perf.c +11 −54
  195. drivers/gpu/drm/i915/i915_reg.h +2 −2
  196. drivers/gpu/drm/meson/meson_dw_hdmi.c +1 −3
  197. drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c +3 −0
  198. drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c +16 −0
  199. drivers/gpu/drm/scheduler/sched_main.c +1 −1
  200. drivers/gpu/drm/tidss/tidss_crtc.c +13 −3
  201. drivers/gpu/drm/tidss/tidss_encoder.c +11 −3
  202. drivers/gpu/drm/tidss/tidss_plane.c +18 −6
  203. drivers/gpu/drm/virtio/virtgpu_ioctl.c +1 −0
  204. drivers/gpu/drm/virtio/virtgpu_kms.c +1 −0
  205. drivers/hv/channel_mgmt.c +3 −0
  206. drivers/hv/hv_debugfs.c +1 −1
  207. drivers/hv/hyperv_vmbus.h +1 −1
  208. drivers/hv/vmbus_drv.c +44 −18
  209. drivers/hwmon/Kconfig +1 −1
  210. drivers/hwmon/drivetemp.c +6 −0
  211. drivers/hwmon/jc42.c +1 −1
  212. drivers/hwmon/k10temp.c +3 −3
  213. drivers/hwmon/pmbus/isl68137.c +85 −7
  214. drivers/i2c/busses/i2c-altera.c +4 −5
  215. drivers/i2c/busses/i2c-designware-platdrv.c +10 −4
  216. drivers/i2c/busses/i2c-tegra.c +24 −12
  217. drivers/i2c/i2c-core-base.c +0 −13
  218. drivers/iio/adc/ad7192.c +47 −16
  219. drivers/iio/adc/ad7793.c +1 −1
  220. drivers/iio/adc/stm32-adc.c +28 −3
  221. drivers/iio/adc/ti-ads8344.c +3 −3
  222. drivers/iio/adc/xilinx-xadc-core.c +74 −21
  223. drivers/iio/common/st_sensors/st_sensors_core.c +1 −1
  224. drivers/iio/dac/ad5770r.c +1 −1
  225. drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +10 −1
  226. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +3 −0
  227. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +16 −7
  228. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +23 −1
  229. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c +22 −7
  230. drivers/iio/industrialio-core.c +2 −5
  231. drivers/interconnect/qcom/bcm-voter.c +3 −2
  232. drivers/irqchip/irq-bcm7038-l1.c +1 −1
  233. drivers/irqchip/irq-gic-v3-its.c +20 −0
  234. drivers/irqchip/irq-gic-v3.c +7 −4
  235. drivers/irqchip/irq-mbigen.c +7 −1
  236. drivers/irqchip/irq-meson-gpio.c +10 −8
  237. drivers/irqchip/irq-mvebu-icu.c +1 −1
  238. drivers/irqchip/irq-sifive-plic.c +1 −1
  239. drivers/irqchip/irq-ti-sci-inta.c +2 −1
  240. drivers/isdn/hardware/mISDN/mISDNisar.c +2 −2
  241. drivers/misc/mei/pci-me.c +2 −1
  242. drivers/misc/mic/Kconfig +1 −1
  243. drivers/mtd/spi-nor/Makefile +2 −0
  244. drivers/net/caif/Kconfig +1 −1
  245. drivers/net/dsa/b53/b53_common.c +33 −5
  246. drivers/net/dsa/b53/b53_regs.h +6 −2
  247. drivers/net/dsa/mt7530.c +12 −91
  248. drivers/net/dsa/mt7530.h +7 −10
  249. drivers/net/dsa/mv88e6xxx/chip.c +3 −2
  250. drivers/net/dsa/ocelot/felix.c +1 −4
  251. drivers/net/ethernet/amd/xgbe/xgbe-drv.c +1 −1
  252. drivers/net/ethernet/broadcom/bcmsysport.c +2 −2
  253. drivers/net/ethernet/broadcom/bgmac-platform.c +11 −22
  254. drivers/net/ethernet/broadcom/genet/bcmgenet.c +5 −1
  255. drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c +20 −7
  256. drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c +6 −21
  257. drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +1 −1
  258. drivers/net/ethernet/chelsio/cxgb4/t4_regs.h +3 −0
  259. drivers/net/ethernet/dec/tulip/tulip_core.c +1 −1
  260. drivers/net/ethernet/freescale/fec.h +7 −0
  261. drivers/net/ethernet/freescale/fec_main.c +120 −29
  262. drivers/net/ethernet/intel/e1000/e1000_main.c +1 −1
  263. drivers/net/ethernet/intel/i40e/i40e_main.c +2 −2
  264. drivers/net/ethernet/marvell/mvneta.c +1 −1
  265. drivers/net/ethernet/mediatek/mtk_eth_soc.c +23 −1
  266. drivers/net/ethernet/mediatek/mtk_eth_soc.h +8 −0
  267. drivers/net/ethernet/mellanox/mlx4/en_tx.c +13 −1
  268. drivers/net/ethernet/mellanox/mlx5/core/Kconfig +4 −4
  269. drivers/net/ethernet/mellanox/mlx5/core/devlink.c +4 −1
  270. drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +3 −3
  271. drivers/net/ethernet/mellanox/mlx5/core/en.h +2 −1
  272. drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +19 −23
  273. drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c +3 −0
  274. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +7 −2
  275. drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +5 −4
  276. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +5 −3
  277. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +5 −3
  278. drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c +5 −1
  279. drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +0 −1
  280. drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +3 −9
  281. drivers/net/ethernet/mellanox/mlx5/core/health.c +1 −1
  282. drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c +2 −2
  283. drivers/net/ethernet/mellanox/mlxsw/spectrum2_acl_tcam.c +2 −2
  284. drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c +1 −1
  285. drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c +2 −2
  286. drivers/net/ethernet/mscc/ocelot.c +43 −41
  287. drivers/net/ethernet/mscc/ocelot.h +0 −2
  288. drivers/net/ethernet/neterion/s2io.c +1 −1
  289. drivers/net/ethernet/pensando/ionic/ionic_lif.c +27 −17
  290. drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c +43 −10
  291. drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h +1 −1
  292. drivers/net/ethernet/sgi/meth.h +0 −16
  293. drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +189 −0
  294. drivers/net/ethernet/stmicro/stmmac/dwmac-intel.h +23 −0
  295. drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +1 −0
  296. drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c +8 −3
  297. drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c +2 −0
  298. drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c +8 −4
  299. drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +23 −0
  300. drivers/net/ethernet/ti/am65-cpsw-nuss.c +3 −3
  301. drivers/net/ethernet/xscale/ixp4xx_eth.c +2 −0
  302. drivers/net/geneve.c +1 −1
  303. drivers/net/ipa/ipa_modem.c +2 −3
  304. drivers/net/macsec.c +9 −5
  305. drivers/net/macvlan.c +1 −1
  306. drivers/net/phy/bcm84881.c +3 −3
  307. drivers/net/phy/marvell.c +24 −22
  308. drivers/net/phy/marvell10g.c +34 −3
  309. drivers/net/phy/mdio_bus.c +1 −1
  310. drivers/net/phy/micrel.c +1 −1
  311. drivers/net/phy/microchip_t1.c +171 −0
  312. drivers/net/team/team.c +4 −0
  313. drivers/net/tun.c +2 −1
  314. drivers/net/vrf.c +6 −4
  315. drivers/net/vxlan.c +3 −3
  316. drivers/net/wimax/i2400m/usb-fw.c +1 −0
  317. drivers/net/wireless/ath/ath11k/thermal.h +2 −1
  318. drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +9 −0
  319. drivers/net/wireless/intel/iwlegacy/3945-rs.c +1 −1
  320. drivers/net/wireless/intel/iwlegacy/4965-rs.c +1 −1
  321. drivers/net/wireless/intel/iwlwifi/dvm/rs.c +1 −1
  322. drivers/net/wireless/intel/iwlwifi/fw/acpi.c +7 −2
  323. drivers/net/wireless/intel/iwlwifi/fw/api/txq.h +3 −3
  324. drivers/net/wireless/intel/iwlwifi/iwl-drv.c +1 −1
  325. drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +2 −4
  326. drivers/net/wireless/intel/iwlwifi/mvm/fw.c +11 −14
  327. drivers/net/wireless/intel/iwlwifi/mvm/rs.c +1 −1
  328. drivers/net/wireless/intel/iwlwifi/mvm/rx.c +11 −2
  329. drivers/net/wireless/intel/iwlwifi/mvm/sta.c +7 −2
  330. drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c +14 −4
  331. drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c +3 −0
  332. drivers/net/wireless/mac80211_hwsim.c +7 −7
  333. drivers/net/wireless/realtek/rtlwifi/rc.c +1 −1
  334. drivers/net/wireless/realtek/rtw88/pci.c +3 −8
  335. drivers/of/overlay.c +2 −0
  336. drivers/of/unittest-data/overlay_bad_add_dup_prop.dts +19 −4
  337. drivers/of/unittest.c +19 −9
  338. drivers/opp/core.c +14 −0
  339. drivers/pci/quirks.c +7 −0
  340. drivers/phy/tegra/Kconfig +2 −1
  341. drivers/platform/chrome/cros_ec_sensorhub_ring.c +4 −4
  342. drivers/ptp/ptp_ines.c +2 −2
  343. drivers/remoteproc/mtk_common.h +1 −1
  344. drivers/remoteproc/mtk_scp.c +3 −3
  345. drivers/remoteproc/qcom_q6v5_mss.c +20 −13
  346. drivers/remoteproc/remoteproc_sysfs.c +1 −0
  347. drivers/remoteproc/stm32_rproc.c +1 −0
  348. drivers/rpmsg/mtk_rpmsg.c +1 −0
  349. drivers/s390/block/Kconfig +0 −1
  350. drivers/scsi/Kconfig +1 −1
  351. drivers/scsi/hisi_sas/Kconfig +1 −0
  352. drivers/scsi/qla2xxx/qla_dbg.c +2 −1
  353. drivers/scsi/qla2xxx/qla_init.c +0 −2
  354. drivers/scsi/qla2xxx/qla_isr.c +0 −1
  355. drivers/scsi/qla2xxx/qla_mbx.c +0 −2
  356. drivers/scsi/sg.c +6 −2
  357. drivers/soc/fsl/dpio/dpio-service.c +14 −5
  358. drivers/soc/fsl/dpio/qbman-portal.c +2 −4
  359. drivers/soc/imx/Kconfig +1 −0
  360. drivers/soc/xilinx/Kconfig +2 −2
  361. drivers/staging/comedi/comedi_fops.c +3 −1
  362. drivers/staging/comedi/drivers/dt2815.c +3 −0
  363. drivers/staging/gasket/apex_driver.c +0 −7
  364. drivers/staging/gasket/gasket_sysfs.c +1 −2
  365. drivers/staging/gasket/gasket_sysfs.h +0 −4
  366. drivers/staging/vt6656/key.c +3 −11
  367. drivers/staging/vt6656/main_usb.c +17 −14
  368. drivers/staging/vt6656/usbpipe.c +2 −1
  369. drivers/target/target_core_fabric_lib.c +3 −2
  370. drivers/target/target_core_user.c +1 −0
  371. drivers/tty/hvc/hvc_console.c +14 −9
  372. drivers/tty/rocket.c +14 −11
  373. drivers/tty/serial/bcm63xx_uart.c +3 −1
  374. drivers/tty/serial/owl-uart.c +7 −0
  375. drivers/tty/serial/sh-sci.c +10 −3
  376. drivers/tty/serial/sunhv.c +3 −0
  377. drivers/tty/serial/xilinx_uartps.c +49 −162
  378. drivers/tty/sysrq.c +2 −0
  379. drivers/tty/vt/vt.c +4 −3
  380. drivers/usb/class/cdc-acm.c +31 −5
  381. drivers/usb/class/cdc-acm.h +4 −1
  382. drivers/usb/core/hub.c +15 −3
  383. drivers/usb/core/message.c +8 −1
  384. drivers/usb/core/quirks.c +4 −0
  385. drivers/usb/dwc3/core.h +6 −2
  386. drivers/usb/dwc3/gadget.c +47 −29
  387. drivers/usb/early/xhci-dbc.c +4 −4
  388. drivers/usb/early/xhci-dbc.h +16 −2
  389. drivers/usb/gadget/function/f_fs.c +4 −0
  390. drivers/usb/gadget/legacy/raw_gadget.c +42 −29
  391. drivers/usb/gadget/udc/atmel_usba_udc.c +2 −2
  392. drivers/usb/gadget/udc/bdc/bdc_ep.c +1 −1
  393. drivers/usb/host/xhci-hub.c +9 −0
  394. drivers/usb/host/xhci-ring.c +40 −6
  395. drivers/usb/host/xhci.c +7 −7
  396. drivers/usb/host/xhci.h +3 −2
  397. drivers/usb/misc/sisusbvga/sisusb.c +10 −10
  398. drivers/usb/misc/sisusbvga/sisusb_init.h +7 −7
  399. drivers/usb/storage/uas.c +43 −3
  400. drivers/usb/storage/unusual_devs.h +7 −0
  401. drivers/usb/typec/bus.c +4 −1
  402. drivers/usb/typec/mux/pi3usb30532.c +2 −2
  403. drivers/usb/typec/tcpm/tcpm.c +26 −0
  404. drivers/vdpa/Kconfig +6 −12
  405. drivers/vdpa/ifcvf/ifcvf_base.c +0 −2
  406. drivers/vdpa/ifcvf/ifcvf_main.c +1 −3
  407. drivers/vdpa/vdpa.c +1 −1
  408. drivers/vdpa/vdpa_sim/vdpa_sim.c +2 −2
  409. drivers/vhost/Kconfig +16 −5
  410. drivers/vhost/net.c +15 −13
  411. drivers/vhost/scsi.c +7 −7
  412. drivers/vhost/test.c +7 −7
  413. drivers/vhost/vdpa.c +0 −5
  414. drivers/vhost/vhost.h +27 −0
  415. drivers/vhost/vringh.c +5 −0
  416. drivers/vhost/vsock.c +7 −7
  417. drivers/virtio/Kconfig +1 −1
  418. drivers/virtio/virtio_balloon.c +2 −2
  419. drivers/virtio/virtio_input.c +1 −0
  420. drivers/watchdog/sp805_wdt.c +4 −0
  421. drivers/xen/xenbus/xenbus_client.c +8 −1
  422. fs/afs/cmservice.c +1 −1
  423. fs/afs/dir.c +67 −41
  424. fs/afs/dir_silly.c +15 −7
  425. fs/afs/fs_probe.c +1 −4
  426. fs/afs/fsclient.c +16 −11
  427. fs/afs/internal.h +1 −3
  428. fs/afs/rotate.c +3 −3
  429. fs/afs/server.c +2 −5
  430. fs/afs/vl_rotate.c +2 −2
  431. fs/afs/volume.c +5 −3
  432. fs/afs/yfsclient.c +14 −12
  433. fs/block_dev.c +10 −1
  434. fs/btrfs/block-group.c +1 −0
  435. fs/btrfs/file.c +15 −0
  436. fs/btrfs/reflink.c +1 −0
  437. fs/btrfs/relocation.c +19 −4
  438. fs/btrfs/space-info.c +14 −6
  439. fs/btrfs/tree-log.c +14 −79
  440. fs/buffer.c +12 −1
  441. fs/ceph/dir.c +2 −2
  442. fs/ceph/file.c +2 −2
  443. fs/ceph/mds_client.h +1 −1
  444. fs/cifs/cifsglob.h +2 −1
  445. fs/cifs/cifssmb.c +4 −0
  446. fs/cifs/connect.c +6 −0
  447. fs/cifs/inode.c +1 −1
  448. fs/cifs/misc.c +65 −17
  449. fs/cifs/smb2ops.c +5 −0
  450. fs/cifs/smb2pdu.c +15 −0
  451. fs/cifs/smb2transport.c +2 −2
  452. fs/coredump.c +2 −0
  453. fs/debugfs/file.c +3 −12
  454. fs/exfat/balloc.c +0 −3
  455. fs/exfat/exfat_fs.h +1 −0
  456. fs/exfat/file.c +2 −0
  457. fs/exfat/misc.c +13 −1
  458. fs/exfat/namei.c +7 −0
  459. fs/exfat/super.c +22 −31
  460. fs/ext4/balloc.c +2 −2
  461. fs/ext4/ext4_jbd2.c +0 −3
  462. fs/ext4/extents.c +4 −4
  463. fs/ext4/ialloc.c +2 −2
  464. fs/ext4/inode.c +2 −2
  465. fs/ext4/mballoc.c +4 −2
  466. fs/ext4/super.c +1 −3
  467. fs/io_uring.c +162 −139
  468. fs/nfs/pnfs.c +2 −1
  469. fs/nfsd/nfs4callback.c +3 −1
  470. fs/nfsd/nfs4state.c +2 −0
  471. fs/proc/base.c +13 −2
  472. fs/proc/root.c +7 −0
  473. fs/proc/vmcore.c +3 −2
  474. fs/xfs/xfs_icache.c +10 −0
  475. fs/xfs/xfs_ioctl.c +4 −1
  476. fs/xfs/xfs_mount.h +5 −1
  477. fs/xfs/xfs_reflink.c +1 −0
  478. fs/xfs/xfs_super.c +22 −18
  479. include/asm-generic/Kbuild +1 −0
  480. include/asm-generic/mshyperv.h +1 −1
  481. include/asm-generic/vermagic.h +7 −0
  482. include/linux/backing-dev-defs.h +0 −1
  483. include/linux/bio.h +1 −1
  484. include/linux/blk-mq.h +1 −1
  485. include/linux/blk_types.h +1 −1
  486. include/linux/buffer_head.h +8 −0
  487. include/linux/can/dev/peak_canfd.h +2 −2
  488. include/linux/cpu_rmap.h +1 −1
  489. include/linux/debugfs.h +4 −8
  490. include/linux/digsig.h +2 −2
  491. include/linux/dirent.h +1 −1
  492. include/linux/enclosure.h +1 −1
  493. include/linux/energy_model.h +1 −1
  494. include/linux/ethtool.h +2 −2
  495. include/linux/genalloc.h +1 −1
  496. include/linux/i2c.h +0 −6
  497. include/linux/igmp.h +1 −1
  498. include/linux/ihex.h +1 −1
  499. include/linux/iio/iio.h +1 −1
  500. include/linux/irq.h +2 −4
  501. include/linux/irqchip/arm-gic-v3.h +2 −0
  502. include/linux/kvm_host.h +1 −1
  503. include/linux/list_lru.h +1 −1
  504. include/linux/memcontrol.h +2 −2
  505. include/linux/platform_data/wilco-ec.h +1 −1
  506. include/linux/pnp.h +9 −20
  507. include/linux/posix_acl.h +1 −1
  508. include/linux/rio.h +2 −2
  509. include/linux/rslib.h +1 −1
  510. include/linux/sched/topology.h +1 −1
  511. include/linux/skbuff.h +1 −1
  512. include/linux/stmmac.h +2 −0
  513. include/linux/sunrpc/svc_rdma.h +1 −0
  514. include/linux/swap.h +1 −1
  515. include/linux/ti_wilink_st.h +3 −3
  516. include/linux/tpm_eventlog.h +3 −3
  517. include/linux/tracepoint.h +1 −21
  518. include/linux/vdpa.h +1 −1
  519. include/linux/vermagic.h +5 −3
  520. include/linux/virtio.h +0 −1
  521. include/linux/vmalloc.h +1 −1
  522. include/linux/vringh.h +6 −0
  523. include/linux/xattr.h +1 −1
  524. include/net/cfg80211.h +10 −0
  525. include/net/ip6_route.h +1 −0
  526. include/net/mac80211.h +3 −1
  527. include/net/ndisc.h +1 −1
  528. include/net/netfilter/nf_tables.h +1 −1
  529. include/net/sock.h +3 −3
  530. include/net/tcp.h +1 −1
  531. include/soc/mscc/ocelot.h +3 −1
  532. include/soc/tegra/pmc.h +9 −6
  533. include/sound/hda_codec.h +5 −0
  534. include/sound/soc-dai.h +0 −1
  535. include/sound/soc.h +3 −0
  536. include/trace/events/iocost.h +3 −3
  537. include/trace/events/rpcrdma.h +36 −14
  538. include/trace/events/wbt.h +4 −4
  539. include/trace/events/writeback.h +0 −1
  540. include/uapi/linux/bpf.h +1 −1
  541. include/uapi/linux/btrfs.h +4 −6
  542. include/uapi/linux/dlm_device.h +2 −2
  543. include/uapi/linux/fiemap.h +1 −1
  544. include/uapi/linux/netfilter/nf_tables.h +2 −0
  545. include/uapi/linux/netfilter/xt_IDLETIMER.h +1 −0
  546. include/uapi/linux/virtio_balloon.h +9 −2
  547. include/vdso/datapage.h +2 −2
  548. kernel/audit.c +3 −0
  549. kernel/bpf/bpf_lru_list.h +1 −1
  550. kernel/bpf/cpumap.c +1 −1
  551. kernel/bpf/syscall.c +17 −12
  552. kernel/bpf/verifier.c +29 −12
  553. kernel/events/core.c +10 −3
  554. kernel/exit.c +1 −0
  555. kernel/fork.c +10 −1
  556. kernel/irq/manage.c +0 −44
  557. kernel/rcu/tree.c +1 −1
  558. kernel/sched/core.c +2 −7
  559. kernel/sched/cputime.c +2 −2
  560. kernel/sched/isolation.c +19 −2
  561. kernel/signal.c +10 −10
  562. kernel/time/namespace.c +14 −1
  563. kernel/trace/ftrace.c +1 −0
  564. kernel/trace/trace_events_hist.c +7 −0
  565. kernel/trace/trace_events_trigger.c +3 −7
  566. kernel/trace/tracing_map.c +3 −3
  567. lib/Kconfig.debug +2 −0
  568. lib/mpi/longlong.h +17 −17
  569. mm/gup.c +1 −1
  570. mm/hugetlb.c +8 −6
  571. mm/ksm.c +10 −2
  572. mm/madvise.c +18 −0
  573. mm/mremap.c +12 −1
  574. mm/shmem.c +8 −5
  575. mm/slub.c +10 −2
  576. mm/vmalloc.c +13 −3
  577. net/core/dev.c +4 −2
  578. net/core/filter.c +1 −1
  579. net/core/net-sysfs.c +1 −1
  580. net/core/netclassid_cgroup.c +1 −3
  581. net/core/sock.c +1 −1
  582. net/dsa/port.c +6 −1
  583. net/dsa/slave.c +3 −5
  584. net/hsr/hsr_netlink.c +8 −2
  585. net/ipv4/devinet.c +9 −4
  586. net/ipv4/fib_semantics.c +3 −3
  587. net/ipv4/xfrm4_output.c +0 −2
  588. net/ipv6/icmp.c +20 −1
  589. net/ipv6/ipv6_sockglue.c +6 −7
  590. net/ipv6/rpl.c +4 −3
  591. net/ipv6/seg6.c +1 −1
  592. net/ipv6/xfrm6_output.c +0 −2
  593. net/l2tp/l2tp_netlink.c +8 −8
  594. net/mac80211/main.c +16 −13
  595. net/mac80211/mesh.c +7 −4
  596. net/mac80211/rate.c +4 −11
  597. net/mac80211/rate.h +23 −0
  598. net/mac80211/rc80211_minstrel_ht.c +13 −6
  599. net/mac80211/sta_info.c +2 −1
  600. net/mptcp/options.c +1 −2
  601. net/mptcp/pm_netlink.c +7 −5
  602. net/mptcp/protocol.c +27 −17
  603. net/mptcp/protocol.h +4 −4
  604. net/mptcp/subflow.c +71 −28
  605. net/netfilter/ipset/ip_set_core.c +2 −1
  606. net/netfilter/nf_flow_table_core.c +4 −2
  607. net/netfilter/nf_nat_proto.c +2 −2
  608. net/netfilter/nf_tables_api.c +4 −3
  609. net/netfilter/nft_lookup.c +7 −5
  610. net/netfilter/nft_set_bitmap.c +0 −1
  611. net/netfilter/nft_set_rbtree.c +11 −12
  612. net/netfilter/xt_IDLETIMER.c +3 −0
  613. net/netlabel/Kconfig +1 −1
  614. net/netrom/nr_route.c +1 −0
  615. net/openvswitch/conntrack.c +2 −1
  616. net/openvswitch/datapath.c +3 −1
  617. net/qrtr/qrtr.c +4 −3
  618. net/rds/message.c +9 −16
  619. net/rds/rdma.c +35 −30
  620. net/rds/rds.h +3 −17
  621. net/rds/send.c +4 −2
  622. net/rxrpc/local_object.c +0 −9
  623. net/rxrpc/output.c +12 −32
  624. net/sched/cls_api.c +1 −0
  625. net/sched/sch_etf.c +4 −3
  626. net/sctp/sm_make_chunk.c +5 −1
  627. net/sctp/sm_statefuns.c +3 −3
  628. net/sunrpc/cache.c +3 −2
  629. net/sunrpc/svc_xprt.c +2 −3
  630. net/sunrpc/svcsock.c +4 −0
  631. net/sunrpc/xprtrdma/svc_rdma_backchannel.c +2 −0
  632. net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +22 −0
  633. net/sunrpc/xprtrdma/svc_rdma_rw.c +1 −2
  634. net/sunrpc/xprtrdma/svc_rdma_sendto.c +12 −17
  635. net/sunrpc/xprtrdma/svc_rdma_transport.c +0 −5
  636. net/sunrpc/xprtsock.c +1 −0
  637. net/tipc/crypto.c +1 −0
  638. net/tipc/link.c +1 −1
  639. net/tipc/node.c +3 −1
  640. net/tls/tls_main.c +2 −2
  641. net/wireless/nl80211.c +2 −4
  642. net/x25/x25_dev.c +3 −1
  643. net/xdp/xdp_umem.c +2 −3
  644. net/xdp/xsk.c +3 −2
  645. samples/vfio-mdev/mdpy.c +1 −1
  646. scripts/Makefile.lib +1 −1
  647. scripts/checkpatch.pl +1 −1
  648. scripts/config +4 −1
  649. scripts/documentation-file-ref-check +1 −1
  650. scripts/dtc/Makefile +1 −1
  651. scripts/kernel-doc +1 −1
  652. security/keys/proc.c +2 −0
  653. security/selinux/ss/policydb.c +4 −4
  654. sound/hda/Kconfig +4 −3
  655. sound/pci/ctxfi/cthw20k1.c +7 −7
  656. sound/pci/hda/hda_codec.c +17 −11
  657. sound/pci/hda/hda_intel.c +51 −46
  658. sound/pci/hda/hda_intel.h +1 −0
  659. sound/pci/hda/patch_hdmi.c +9 −0
  660. sound/pci/hda/patch_realtek.c +9 −3
  661. sound/soc/amd/acp3x-rt5682-max9836.c +3 −3
  662. sound/soc/codecs/Kconfig +3 −0
  663. sound/soc/codecs/hdac_hdmi.c +3 −3
  664. sound/soc/codecs/madera.c +0 −4
  665. sound/soc/codecs/sgtl5000.c +34 −0
  666. sound/soc/codecs/sgtl5000.h +1 −0
  667. sound/soc/codecs/tas571x.c +15 −5
  668. sound/soc/codecs/wm8960.c +1 −2
  669. sound/soc/codecs/wsa881x.c +4 −0
  670. sound/soc/intel/common/soc-acpi-intel-cml-match.c +0 −8
  671. sound/soc/intel/common/soc-acpi-intel-icl-match.c +0 −8
  672. sound/soc/meson/axg-card.c +3 −1
  673. sound/soc/meson/gx-card.c +3 −1
  674. sound/soc/qcom/apq8096.c +1 −3
  675. sound/soc/qcom/qdsp6/q6afe-dai.c +16 −0
  676. sound/soc/qcom/sdm845.c +1 −3
  677. sound/soc/samsung/s3c-i2s-v2.c +0 −57
  678. sound/soc/samsung/s3c2412-i2s.c +56 −0
  679. sound/soc/sh/rcar/ssi.c +10 −1
  680. sound/soc/sh/rcar/ssiu.c +1 −1
  681. sound/soc/soc-dai.c +2 −9
  682. sound/soc/soc-dapm.c +75 −72
  683. sound/soc/soc-pcm.c +11 −2
  684. sound/soc/soc-topology.c +89 −26
  685. sound/soc/sof/intel/bdw.c +16 −0
  686. sound/soc/sof/intel/byt.c +48 −0
  687. sound/soc/stm/stm32_sai_sub.c +6 −8
  688. sound/usb/format.c +51 −0
  689. sound/usb/mixer.c +52 −14
  690. sound/usb/mixer.h +10 −0
  691. sound/usb/mixer_maps.c +37 −4
  692. sound/usb/mixer_quirks.c +8 −4
  693. sound/usb/quirks-table.h +14 −84
  694. sound/usb/quirks.c +14 −0
  695. sound/usb/usx2y/usbusx2yaudio.c +2 −0
  696. tools/arch/x86/include/asm/cpufeatures.h +4 −1
  697. tools/arch/x86/include/asm/msr-index.h +9 −0
  698. tools/bpf/bpftool/struct_ops.c +10 −2
  699. tools/bpf/runqslower/Makefile +1 −1
  700. tools/build/feature/test-sync-compare-and-swap.c +1 −1
  701. tools/include/linux/bits.h +21 −3
  702. tools/include/linux/build_bug.h +82 −0
  703. tools/include/linux/compiler.h +26 −0
  704. tools/include/linux/const.h +1 −4
  705. tools/include/linux/kernel.h +1 −3
  706. tools/include/uapi/drm/drm.h +2 −0
  707. tools/include/uapi/drm/i915_drm.h +21 −0
  708. tools/include/uapi/linux/bpf.h +1 −1
  709. tools/include/uapi/linux/fscrypt.h +1 −0
  710. tools/include/uapi/linux/kvm.h +45 −2
  711. tools/include/uapi/linux/mman.h +3 −2
  712. tools/include/uapi/linux/sched.h +5 −0
  713. tools/include/uapi/linux/vhost.h +24 −0
  714. tools/include/vdso/bits.h +9 −0
  715. tools/include/vdso/const.h +10 −0
  716. tools/lib/bpf/libbpf.c +82 −44
  717. tools/lib/bpf/libbpf.h +1 −1
  718. tools/lib/bpf/netlink.c +5 −3
  719. tools/objtool/check.c +18 −8
  720. tools/objtool/elf.c +1 −1
  721. tools/objtool/elf.h +1 −1
  722. tools/objtool/orc_dump.c +27 −17
  723. tools/objtool/orc_gen.c +26 −7
  724. tools/perf/arch/x86/entry/syscalls/syscall_64.tbl +370 −370
  725. tools/perf/check-headers.sh +3 −0
  726. tools/perf/trace/beauty/clone.c +1 −0
  727. tools/perf/trace/beauty/mmap.c +1 −0
  728. tools/perf/util/setup.py +2 −0
  729. tools/perf/util/stat-shadow.c +5 −2
  730. tools/power/pm-graph/Makefile +4 −0
  731. tools/power/pm-graph/README +114 −10
  732. tools/power/pm-graph/bootgraph.py +1 −1
  733. tools/power/pm-graph/sleepgraph.8 +49 −16
  734. tools/power/pm-graph/sleepgraph.py +451 −344
  735. tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c +24 −6
  736. tools/testing/selftests/bpf/prog_tests/mmap.c +60 −2
  737. tools/testing/selftests/bpf/prog_tests/section_names.c +27 −15
  738. tools/testing/selftests/bpf/prog_tests/test_lsm.c +9 −9
  739. tools/testing/selftests/bpf/prog_tests/xdp_attach.c +29 −1
  740. tools/testing/selftests/bpf/prog_tests/xdp_info.c +68 −0
  741. tools/testing/selftests/bpf/progs/connect4_prog.c +16 −12
  742. tools/testing/selftests/bpf/progs/freplace_connect4.c +18 −0
  743. tools/testing/selftests/bpf/progs/lsm.c +4 −4
  744. tools/testing/selftests/bpf/progs/test_btf_haskv.c +5 −13
  745. tools/testing/selftests/bpf/progs/test_btf_newkv.c +5 −13
  746. tools/testing/selftests/bpf/progs/test_btf_nokv.c +5 −13
  747. tools/testing/selftests/bpf/test_btf.c +1 −1
  748. tools/testing/selftests/bpf/verifier/bounds.c +2 −2
  749. tools/testing/selftests/bpf/verifier/stack_ptr.c +40 −0
  750. tools/testing/selftests/bpf/verifier/value_illegal_alu.c +1 −0
  751. tools/testing/selftests/ftrace/config +1 −0
  752. tools/testing/selftests/ipc/msgque.c +1 −1
  753. tools/testing/selftests/kselftest/runner.sh +1 −1
  754. tools/testing/selftests/kselftest_harness.h +3 −3
  755. tools/testing/selftests/memfd/Makefile +2 −1
  756. tools/testing/selftests/net/fib_nexthops.sh +23 −0
  757. tools/testing/selftests/net/fib_tests.sh +8 −2
  758. tools/testing/selftests/seccomp/seccomp_bpf.c +8 −6
  759. tools/testing/selftests/tc-testing/tdc.py +2 −3
  760. tools/testing/selftests/tpm2/test_smoke.sh +2 −11
  761. tools/testing/selftests/tpm2/test_space.sh +1 −8
  762. tools/testing/selftests/vm/Makefile +2 −2
  763. tools/testing/selftests/vm/run_vmtests +1 −1
  764. tools/virtio/Makefile +3 −2
  765. tools/virtio/asm/barrier.h +1 −0
  766. tools/virtio/generated/autoconf.h +0 −0
  767. tools/virtio/linux/compiler.h +1 −0
  768. tools/vm/Makefile +2 −0
.clang-format+14−4
@@ -142,10 +142,13 @@ ForEachMacros: · 141 unmodified lines
142142 - 'for_each_card_auxs'
143143 - 'for_each_card_auxs_safe'
144144 - 'for_each_card_components'
145+ - 'for_each_card_dapms'
145146 - 'for_each_card_pre_auxs'
146147 - 'for_each_card_prelinks'
147148 - 'for_each_card_rtds'
148149 - 'for_each_card_rtds_safe'
150+ - 'for_each_card_widgets'
151+ - 'for_each_card_widgets_safe'
149152 - 'for_each_cgroup_storage_type'
150153 - 'for_each_child_of_node'
151154 - 'for_each_clear_bit'
@@ -160,6 +163,7 @@ ForEachMacros: · 8 unmodified lines
160163 - 'for_each_cpu_and'
161164 - 'for_each_cpu_not'
162165 - 'for_each_cpu_wrap'
166+ - 'for_each_dapm_widgets'
163167 - 'for_each_dev_addr'
164168 - 'for_each_dev_scope'
165169 - 'for_each_displayid_db'
@@ -170,7 +174,6 @@ ForEachMacros: · 4 unmodified lines
170174 - 'for_each_dpcm_fe'
171175 - 'for_each_drhd_unit'
172176 - 'for_each_dss_dev'
173− - 'for_each_efi_handle'
174177 - 'for_each_efi_memory_desc'
175178 - 'for_each_efi_memory_desc_in_map'
176179 - 'for_each_element'
@@ -191,6 +194,7 @@ ForEachMacros: · 14 unmodified lines
191194 - 'for_each_ip_tunnel_rcu'
192195 - 'for_each_irq_nr'
193196 - 'for_each_link_codecs'
197+ - 'for_each_link_cpus'
194198 - 'for_each_link_platforms'
195199 - 'for_each_lru'
196200 - 'for_each_matching_node'
@@ -250,6 +254,7 @@ ForEachMacros: · 53 unmodified lines
250254 - 'for_each_pci_bridge'
251255 - 'for_each_pci_dev'
252256 - 'for_each_pci_msi_entry'
257+ - 'for_each_pcm_streams'
253258 - 'for_each_populated_zone'
254259 - 'for_each_possible_cpu'
255260 - 'for_each_present_cpu'
@@ -260,9 +265,12 @@ ForEachMacros: · 4 unmodified lines
260265 - 'for_each_property_of_node'
261266 - 'for_each_registered_fb'
262267 - 'for_each_reserved_mem_region'
263− - 'for_each_rtd_codec_dai'
264− - 'for_each_rtd_codec_dai_rollback'
268+ - 'for_each_rtd_codec_dais'
269+ - 'for_each_rtd_codec_dais_rollback'
265270 - 'for_each_rtd_components'
271+ - 'for_each_rtd_cpu_dais'
272+ - 'for_each_rtd_cpu_dais_rollback'
273+ - 'for_each_rtd_dais'
266274 - 'for_each_set_bit'
267275 - 'for_each_set_bit_from'
268276 - 'for_each_set_clump8'
@@ -334,6 +342,7 @@ ForEachMacros: · 65 unmodified lines
334342 - 'klp_for_each_object'
335343 - 'klp_for_each_object_safe'
336344 - 'klp_for_each_object_static'
345+ - 'kunit_suite_for_each_test_case'
337346 - 'kvm_for_each_memslot'
338347 - 'kvm_for_each_vcpu'
339348 - 'list_for_each'
@@ -387,6 +396,7 @@ ForEachMacros: · 47 unmodified lines
387396 - 'of_property_for_each_string'
388397 - 'of_property_for_each_u32'
389398 - 'pci_bus_for_each_resource'
399+ - 'pcm_for_each_format'
390400 - 'ping_portaddr_for_each_entry'
391401 - 'plist_for_each'
392402 - 'plist_for_each_continue'
@@ -482,7 +492,7 @@ KeepEmptyLinesAtTheStartOfBlocks: false · 89 unmodified lines
482492 MacroBlockBegin: ''
483493 MacroBlockEnd: ''
484494 MaxEmptyLinesToKeep: 1
485−NamespaceIndentation: Inner
495+NamespaceIndentation: None
486496 #ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0
487497 ObjCBlockIndentWidth: 8
488498 ObjCSpaceAfterProperty: true
Documentation/admin-guide/kernel-parameters.txt+1−2
@@ -5187,8 +5187,7 @@ · 5186 unmodified lines
51875187
51885188 usbcore.old_scheme_first=
51895189 [USB] Start with the old device initialization
5190− scheme, applies only to low and full-speed devices
5191− (default 0 = off).
5190+ scheme (default 0 = off).
51925191
51935192 usbcore.usbfs_memory_mb=
51945193 [USB] Memory limit (in MB) for buffers allocated by
Documentation/admin-guide/sysctl/kernel.rst+19−28
@@ -390,9 +390,17 @@ When ``kptr_restrict`` is set to 2, kernel pointers printed using · 389 unmodified lines
390390 modprobe
391391 ========
392392
393−This gives the full path of the modprobe command which the kernel will
394−use to load modules. This can be used to debug module loading
395−requests::
393+The full path to the usermode helper for autoloading kernel modules,
394+by default "/sbin/modprobe". This binary is executed when the kernel
395+requests a module. For example, if userspace passes an unknown
396+filesystem type to mount(), then the kernel will automatically request
397+the corresponding filesystem module by executing this usermode helper.
398+This usermode helper should insert the needed module into the kernel.
399+
400+This sysctl only affects module autoloading. It has no effect on the
401+ability to explicitly insert modules.
402+
403+This sysctl can be used to debug module loading requests::
396404
397405 echo '#! /bin/sh' > /tmp/modprobe
398406 echo 'echo "$@" >> /tmp/modprobe.log' >> /tmp/modprobe
@@ -400,10 +408,15 @@ requests:: · 1 unmodified line
400408 chmod a+x /tmp/modprobe
401409 echo /tmp/modprobe > /proc/sys/kernel/modprobe
402410
403−This only applies when the *kernel* is requesting that the module be
404−loaded; it won't have any effect if the module is being loaded
405−explicitly using ``modprobe`` from userspace.
411+Alternatively, if this sysctl is set to the empty string, then module
412+autoloading is completely disabled. The kernel will not try to
413+execute a usermode helper at all, nor will it call the
414+kernel_module_request LSM hook.
406415
416+If CONFIG_STATIC_USERMODEHELPER=y is set in the kernel configuration,
417+then the configured static usermode helper overrides this sysctl,
418+except that the empty string is still accepted to completely disable
419+module autoloading as described above.
407420
408421 modules_disabled
409422 ================
@@ -446,28 +459,6 @@ Notes: · 36 unmodified lines
446459 successful IPC object allocation. If an IPC object allocation syscall
447460 fails, it is undefined if the value remains unmodified or is reset to -1.
448461
449−modprobe:
450−=========
451−
452−The path to the usermode helper for autoloading kernel modules, by
453−default "/sbin/modprobe". This binary is executed when the kernel
454−requests a module. For example, if userspace passes an unknown
455−filesystem type to mount(), then the kernel will automatically request
456−the corresponding filesystem module by executing this usermode helper.
457−This usermode helper should insert the needed module into the kernel.
458−
459−This sysctl only affects module autoloading. It has no effect on the
460−ability to explicitly insert modules.
461−
462−If this sysctl is set to the empty string, then module autoloading is
463−completely disabled. The kernel will not try to execute a usermode
464−helper at all, nor will it call the kernel_module_request LSM hook.
465−
466−If CONFIG_STATIC_USERMODEHELPER=y is set in the kernel configuration,
467−then the configured static usermode helper overrides this sysctl,
468−except that the empty string is still accepted to completely disable
469−module autoloading as described above.
470−
471462 nmi_watchdog
472463 ============
473464
Documentation/arm64/amu.rst+26−21
@@ -23,13 +23,14 @@ optional external memory-mapped interface. · 22 unmodified lines
2323
2424 Version 1 of the Activity Monitors architecture implements a counter group
2525 of four fixed and architecturally defined 64-bit event counters.
26− - CPU cycle counter: increments at the frequency of the CPU.
27− - Constant counter: increments at the fixed frequency of the system
28− clock.
29− - Instructions retired: increments with every architecturally executed
30− instruction.
31− - Memory stall cycles: counts instruction dispatch stall cycles caused by
32− misses in the last level cache within the clock domain.
26+
27+- CPU cycle counter: increments at the frequency of the CPU.
28+- Constant counter: increments at the fixed frequency of the system
29+ clock.
30+- Instructions retired: increments with every architecturally executed
31+ instruction.
32+- Memory stall cycles: counts instruction dispatch stall cycles caused by
33+ misses in the last level cache within the clock domain.
3334
3435 When in WFI or WFE these counters do not increment.
3536
@@ -57,11 +58,12 @@ counters, only the presence of the extension. · 21 unmodified lines
5758
5859 Firmware (code running at higher exception levels, e.g. arm-tf) support is
5960 needed to:
60− - Enable access for lower exception levels (EL2 and EL1) to the AMU
61− registers.
62− - Enable the counters. If not enabled these will read as 0.
63− - Save/restore the counters before/after the CPU is being put/brought up
64− from the 'off' power state.
61+
62+- Enable access for lower exception levels (EL2 and EL1) to the AMU
63+ registers.
64+- Enable the counters. If not enabled these will read as 0.
65+- Save/restore the counters before/after the CPU is being put/brought up
66+ from the 'off' power state.
6567
6668 When using kernels that have this feature enabled but boot with broken
6769 firmware the user may experience panics or lockups when accessing the
@@ -78,10 +80,11 @@ are not trapped in EL2/EL3. · 10 unmodified lines
7880
7981 The fixed counters of AMUv1 are accessible though the following system
8082 register definitions:
81− - SYS_AMEVCNTR0_CORE_EL0
82− - SYS_AMEVCNTR0_CONST_EL0
83− - SYS_AMEVCNTR0_INST_RET_EL0
84− - SYS_AMEVCNTR0_MEM_STALL_EL0
83+
84+- SYS_AMEVCNTR0_CORE_EL0
85+- SYS_AMEVCNTR0_CONST_EL0
86+- SYS_AMEVCNTR0_INST_RET_EL0
87+- SYS_AMEVCNTR0_MEM_STALL_EL0
8588
8689 Auxiliary platform specific counters can be accessed using
8790 SYS_AMEVCNTR1_EL0(n), where n is a value between 0 and 15.
@@ -93,9 +96,10 @@ Userspace access · 5 unmodified lines
9396 ----------------
9497
9598 Currently, access from userspace to the AMU registers is disabled due to:
96− - Security reasons: they might expose information about code executed in
97− secure mode.
98− - Purpose: AMU counters are intended for system management use.
99+
100+- Security reasons: they might expose information about code executed in
101+ secure mode.
102+- Purpose: AMU counters are intended for system management use.
99103
100104 Also, the presence of the feature is not visible to userspace.
101105
@@ -105,8 +109,9 @@ Virtualization · 3 unmodified lines
105109
106110 Currently, access from userspace (EL0) and kernelspace (EL1) on the KVM
107111 guest side is disabled due to:
108− - Security reasons: they might expose information about code executed
109− by other guests or the host.
112+
113+- Security reasons: they might expose information about code executed
114+ by other guests or the host.
110115
111116 Any attempt to access the AMU registers will result in an UNDEFINED
112117 exception being injected into the guest.
Documentation/core-api/timekeeping.rst+3−3
@@ -154,9 +154,9 @@ architectures. These are the recommended replacements: · 153 unmodified lines
154154
155155 Use ktime_get() or ktime_get_ts64() instead.
156156
157−.. c:function:: struct timeval do_gettimeofday( void )
158− struct timespec getnstimeofday( void )
159− struct timespec64 getnstimeofday64( void )
157+.. c:function:: void do_gettimeofday( struct timeval * )
158+ void getnstimeofday( struct timespec * )
159+ void getnstimeofday64( struct timespec64 * )
160160 void ktime_get_real_ts( struct timespec * )
161161
162162 ktime_get_real_ts64() is a direct replacement, but consider using
Documentation/devicetree/bindings/Makefile+12−9
@@ -2,6 +2,7 @@ · 1 unmodified line
22 DT_DOC_CHECKER ?= dt-doc-validate
33 DT_EXTRACT_EX ?= dt-extract-example
44 DT_MK_SCHEMA ?= dt-mk-schema
5+DT_MK_SCHEMA_USERONLY_FLAG := $(if $(DT_SCHEMA_FILES), -u)
56
67 quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<)
78 cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
@@ -13,16 +14,18 @@ $(obj)/%.example.dts: $(src)/%.yaml FORCE · 5 unmodified lines
1314 # Use full schemas when checking %.example.dts
1415 DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
1516
17+find_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \
18+ -name 'processed-schema*' ! \
19+ -name '*.example.dt.yaml' \)
20+
1621 quiet_cmd_mk_schema = SCHEMA $@
17− cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
22+ cmd_mk_schema = rm -f $@ ; \
23+ $(if $(DT_MK_SCHEMA_FLAGS), \
24+ echo $(real-prereqs), \
25+ $(find_cmd)) | \
26+ xargs $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) >> $@
1827
19−DT_DOCS = $(addprefix $(src)/, \
20− $(shell \
21− cd $(srctree)/$(src) && \
22− find * \( -name '*.yaml' ! \
23− -name 'processed-schema*' ! \
24− -name '*.example.dt.yaml' \) \
25− ))
28+DT_DOCS = $(shell $(find_cmd) | sed -e 's|^$(srctree)/||')
2629
2730 DT_SCHEMA_FILES ?= $(DT_DOCS)
2831
@@ -37,7 +40,7 @@ override DTC_FLAGS := \ · 8 unmodified lines
3740 $(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
3841 $(call if_changed,mk_schema)
3942
40−$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
43+$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := $(DT_MK_SCHEMA_USERONLY_FLAG)
4144 $(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
4245 $(call if_changed,mk_schema)
4346
Documentation/devicetree/bindings/arm/sunxi/allwinner,sun4i-a10-mbus.yaml+6−0
@@ -42,6 +42,10 @@ properties: · 41 unmodified lines
4242 description:
4343 See section 2.3.9 of the DeviceTree Specification.
4444
45+ '#address-cells': true
46+
47+ '#size-cells': true
48+
4549 required:
4650 - "#interconnect-cells"
4751 - compatible
@@ -59,6 +63,8 @@ examples: · 11 unmodified lines
5963 compatible = "allwinner,sun5i-a13-mbus";
6064 reg = <0x01c01000 0x1000>;
6165 clocks = <&ccu CLK_MBUS>;
66+ #address-cells = <1>;
67+ #size-cells = <1>;
6268 dma-ranges = <0x00000000 0x40000000 0x20000000>;
6369 #interconnect-cells = <1>;
6470 };
Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml+1−1
@@ -91,7 +91,7 @@ required: · 90 unmodified lines
9191
9292 examples:
9393 - |
94− vco1: clock@00 {
94+ vco1: clock {
9595 compatible = "arm,impd1-vco1";
9696 #clock-cells = <0>;
9797 lock-offset = <0x08>;
Documentation/devicetree/bindings/display/bridge/adi,adv7123.txt+2−2
@@ -1,5 +1,5 @@
1−Analog Device ADV7123 Video DAC
2−-------------------------------
1+Analog Devices ADV7123 Video DAC
2+--------------------------------
33
44 The ADV7123 is a digital-to-analog converter that outputs VGA signals from a
55 parallel video input.
Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt+2−2
@@ -1,5 +1,5 @@
1−Analog Device ADV7511(W)/13/33/35 HDMI Encoders
2−-----------------------------------------
1+Analog Devices ADV7511(W)/13/33/35 HDMI Encoders
2+------------------------------------------------
33
44 The ADV7511, ADV7511W, ADV7513, ADV7533 and ADV7535 are HDMI audio and video
55 transmitters compatible with HDMI 1.4 and DVI 1.0. They support color space
Documentation/devicetree/bindings/display/panel/leadtek,ltk500hd1829.yaml+0−1
@@ -37,7 +37,6 @@ examples: · 36 unmodified lines
3737 dsi {
3838 #address-cells = <1>;
3939 #size-cells = <0>;
40− reg = <0xff450000 0x1000>;
4140
4241 panel@0 {
4342 compatible = "leadtek,ltk500hd1829";
Documentation/devicetree/bindings/display/panel/lvds.yaml+9−1
@@ -96,12 +96,20 @@ properties: · 95 unmodified lines
9696 If set, reverse the bit order described in the data mappings below on all
9797 data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
9898
99+ port: true
100+ ports: true
101+
99102 required:
100103 - compatible
101104 - data-mapping
102105 - width-mm
103106 - height-mm
104107 - panel-timing
105− - port
108+
109+oneOf:
110+ - required:
111+ - port
112+ - required:
113+ - ports
106114
107115 ...
Documentation/devicetree/bindings/display/panel/xinpeng,xpp055c272.yaml+0−1
@@ -37,7 +37,6 @@ examples: · 36 unmodified lines
3737 dsi {
3838 #address-cells = <1>;
3939 #size-cells = <0>;
40− reg = <0xff450000 0x1000>;
4140
4241 panel@0 {
4342 compatible = "xinpeng,xpp055c272";
Documentation/devicetree/bindings/dma/adi,axi-dmac.txt+1−1
@@ -1,4 +1,4 @@
1−Analog Device AXI-DMAC DMA controller
1+Analog Devices AXI-DMAC DMA controller
22
33 Required properties:
44 - compatible: Must be "adi,axi-dmac-1.00.a".
Documentation/devicetree/bindings/hwmon/adi,axi-fan-control.yaml+2−2
@@ -2,7 +2,7 @@ · 1 unmodified line
22 # Copyright 2019 Analog Devices Inc.
33 %YAML 1.2
44 ---
5−$id: http://devicetree.org/schemas/bindings/hwmon/adi,axi-fan-control.yaml#
5+$id: http://devicetree.org/schemas/hwmon/adi,axi-fan-control.yaml#
66 $schema: http://devicetree.org/meta-schemas/core.yaml#
77
88 title: Analog Devices AXI FAN Control Device Tree Bindings
@@ -47,7 +47,7 @@ required: · 38 unmodified lines
4747
4848 examples:
4949 - |
50− fpga_axi: fpga-axi@0 {
50+ fpga_axi: fpga-axi {
5151 #address-cells = <0x2>;
5252 #size-cells = <0x1>;
5353
Documentation/devicetree/bindings/hwmon/adt7475.yaml+1−1
@@ -1,7 +1,7 @@
11 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
22 %YAML 1.2
33 ---
4−$id: http://devicetree.org/schemas/adt7475.yaml#
4+$id: http://devicetree.org/schemas/hwmon/adt7475.yaml#
55 $schema: http://devicetree.org/meta-schemas/core.yaml#
66
77 title: ADT7475 hwmon sensor
Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml+1−1
@@ -1,7 +1,7 @@
11 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
22 %YAML 1.2
33 ---
4−$id: "http://devicetree.org/schemas/bindings/iio/adc/st,stm32-adc.yaml#"
4+$id: "http://devicetree.org/schemas/iio/adc/st,stm32-adc.yaml#"
55 $schema: "http://devicetree.org/meta-schemas/core.yaml#"
66
77 title: STMicroelectronics STM32 ADC bindings
Documentation/devicetree/bindings/iio/dac/ad5755.txt+1−1
@@ -1,4 +1,4 @@
1−* Analog Device AD5755 IIO Multi-Channel DAC Linux Driver
1+* Analog Devices AD5755 IIO Multi-Channel DAC Linux Driver
22
33 Required properties:
44 - compatible: Has to contain one of the following:
Documentation/devicetree/bindings/iio/dac/adi,ad5770r.yaml+46−51
@@ -2,7 +2,7 @@ · 1 unmodified line
22 # Copyright 2020 Analog Devices Inc.
33 %YAML 1.2
44 ---
5−$id: http://devicetree.org/schemas/bindings/iio/dac/adi,ad5770r.yaml#
5+$id: http://devicetree.org/schemas/iio/dac/adi,ad5770r.yaml#
66 $schema: http://devicetree.org/meta-schemas/core.yaml#
77
88 title: Analog Devices AD5770R DAC device driver
@@ -49,93 +49,86 @@ properties: · 40 unmodified lines
4949 asserted during driver probe.
5050 maxItems: 1
5151
52− channel0:
52+ channel@0:
5353 description: Represents an external channel which are
5454 connected to the DAC. Channel 0 can act both as a current
5555 source and sink.
5656 type: object
5757
5858 properties:
59− num:
59+ reg:
6060 description: This represents the channel number.
61− items:
62− const: 0
61+ const: 0
6362
6463 adi,range-microamp:
6564 description: Output range of the channel.
6665 oneOf:
67− - $ref: /schemas/types.yaml#/definitions/int32-array
6866 - items:
69− - enum: [0 300000]
70− - enum: [-60000 0]
71− - enum: [-60000 300000]
67+ - const: 0
68+ - const: 300000
69+ - items:
70+ - const: -60000
71+ - const: 0
72+ - items:
73+ - const: -60000
74+ - const: 300000
7275
73− channel1:
76+ channel@1:
7477 description: Represents an external channel which are
7578 connected to the DAC.
7679 type: object
7780
7881 properties:
79− num:
82+ reg:
8083 description: This represents the channel number.
81− items:
82− const: 1
84+ const: 1
8385
8486 adi,range-microamp:
8587 description: Output range of the channel.
86− oneOf:
87− - $ref: /schemas/types.yaml#/definitions/uint32-array
88− - items:
89− - enum: [0 140000]
90− - enum: [0 250000]
88+ items:
89+ - const: 0
90+ - enum: [ 140000, 250000 ]
9191
92− channel2:
92+ channel@2:
9393 description: Represents an external channel which are
9494 connected to the DAC.
9595 type: object
9696
9797 properties:
98− num:
98+ reg:
9999 description: This represents the channel number.
100− items:
101− const: 2
100+ const: 2
102101
103102 adi,range-microamp:
104103 description: Output range of the channel.
105− oneOf:
106− - $ref: /schemas/types.yaml#/definitions/uint32-array
107− - items:
108− - enum: [0 140000]
109− - enum: [0 250000]
104+ items:
105+ - const: 0
106+ - enum: [ 55000, 150000 ]
110107
111108 patternProperties:
112109 "^channel@([3-5])$":
113110 type: object
114111 description: Represents the external channels which are connected to the DAC.
115112 properties:
116− num:
113+ reg:
117114 description: This represents the channel number.
118− items:
119− minimum: 3
120− maximum: 5
115+ minimum: 3
116+ maximum: 5
121117
122118 adi,range-microamp:
123119 description: Output range of the channel.
124− oneOf:
125− - $ref: /schemas/types.yaml#/definitions/uint32-array
126− - items:
127− - enum: [0 45000]
128− - enum: [0 100000]
120+ items:
121+ - const: 0
122+ - enum: [ 45000, 100000 ]
129123
130124 required:
131125 - reg
132−- diff-channels
133−- channel0
134−- channel1
135−- channel2
136−- channel3
137−- channel4
138−- channel5
126+- channel@0
127+- channel@1
128+- channel@2
129+- channel@3
130+- channel@4
131+- channel@5
139132
140133 examples:
141134 - |
@@ -144,40 +137,42 @@ examples: · 2 unmodified lines
144137 #size-cells = <0>;
145138
146139 ad5770r@0 {
147− compatible = "ad5770r";
140+ compatible = "adi,ad5770r";
148141 reg = <0>;
149142 spi-max-frequency = <1000000>;
150143 vref-supply = <&vref>;
151144 adi,external-resistor;
152145 reset-gpios = <&gpio 22 0>;
146+ #address-cells = <1>;
147+ #size-cells = <0>;
153148
154149 channel@0 {
155− num = <0>;
156− adi,range-microamp = <(-60000) 300000>;
150+ reg = <0>;
151+ adi,range-microamp = <0 300000>;
157152 };
158153
159154 channel@1 {
160− num = <1>;
155+ reg = <1>;
161156 adi,range-microamp = <0 140000>;
162157 };
163158
164159 channel@2 {
165− num = <2>;
160+ reg = <2>;
166161 adi,range-microamp = <0 55000>;
167162 };
168163
169164 channel@3 {
170− num = <3>;
165+ reg = <3>;
171166 adi,range-microamp = <0 45000>;
172167 };
173168
174169 channel@4 {
175− num = <4>;
170+ reg = <4>;
176171 adi,range-microamp = <0 45000>;
177172 };
178173
179174 channel@5 {
180− num = <5>;
175+ reg = <5>;
181176 adi,range-microamp = <0 45000>;
182177 };
183178 };
Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.yaml+1−1
@@ -109,7 +109,7 @@ examples: · 108 unmodified lines
109109 - |
110110 #include <dt-bindings/gpio/gpio.h>
111111 #include <dt-bindings/interrupt-controller/arm-gic.h>
112− i2c@00000000 {
112+ i2c {
113113 #address-cells = <1>;
114114 #size-cells = <0>;
115115 edt-ft5x06@38 {
Documentation/devicetree/bindings/interrupt-controller/loongson,liointc.yaml+2−3
@@ -56,9 +56,8 @@ properties: · 55 unmodified lines
5656 cell with zero.
5757 allOf:
5858 - $ref: /schemas/types.yaml#/definitions/uint32-array
59− - items:
60− minItems: 4
61− maxItems: 4
59+ - minItems: 4
60+ maxItems: 4
6261
6362
6463 required:
Documentation/devicetree/bindings/memory-controllers/nvidia,tegra186-mc.yaml+23−18
@@ -97,30 +97,35 @@ examples: · 96 unmodified lines
9797 #include <dt-bindings/clock/tegra186-clock.h>
9898 #include <dt-bindings/interrupt-controller/arm-gic.h>
9999
100− memory-controller@2c00000 {
101− compatible = "nvidia,tegra186-mc";
102− reg = <0x0 0x02c00000 0x0 0xb0000>;
103− interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
104−
100+ bus {
105101 #address-cells = <2>;
106102 #size-cells = <2>;
107103
108− ranges = <0x0 0x02c00000 0x02c00000 0x0 0xb0000>;
104+ memory-controller@2c00000 {
105+ compatible = "nvidia,tegra186-mc";
106+ reg = <0x0 0x02c00000 0x0 0xb0000>;
107+ interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
108+
109+ #address-cells = <2>;
110+ #size-cells = <2>;
111+
112+ ranges = <0x0 0x02c00000 0x0 0x02c00000 0x0 0xb0000>;
109113
110− /*
111− * Memory clients have access to all 40 bits that the memory
112− * controller can address.
113− */
114− dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
114+ /*
115+ * Memory clients have access to all 40 bits that the memory
116+ * controller can address.
117+ */
118+ dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
115119
116− external-memory-controller@2c60000 {
117− compatible = "nvidia,tegra186-emc";
118− reg = <0x0 0x02c60000 0x0 0x50000>;
119− interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
120− clocks = <&bpmp TEGRA186_CLK_EMC>;
121− clock-names = "emc";
120+ external-memory-controller@2c60000 {
121+ compatible = "nvidia,tegra186-emc";
122+ reg = <0x0 0x02c60000 0x0 0x50000>;
123+ interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
124+ clocks = <&bpmp TEGRA186_CLK_EMC>;
125+ clock-names = "emc";
122126
123− nvidia,bpmp = <&bpmp>;
127+ nvidia,bpmp = <&bpmp>;
128+ };
124129 };
125130 };
126131
Documentation/devicetree/bindings/mfd/rohm,bd71837-pmic.yaml+3−1
@@ -123,7 +123,9 @@ examples: · 122 unmodified lines
123123 #include <dt-bindings/leds/common.h>
124124
125125 i2c {
126− pmic: pmic@4b {
126+ #address-cells = <1>;
127+ #size-cells = <0>;
128+ pmic: pmic@4b {
127129 compatible = "rohm,bd71837";
128130 reg = <0x4b>;
129131 interrupt-parent = <&gpio1>;
Documentation/devicetree/bindings/mfd/rohm,bd71847-pmic.yaml+3−1
@@ -128,7 +128,9 @@ examples: · 127 unmodified lines
128128 #include <dt-bindings/leds/common.h>
129129
130130 i2c {
131− pmic: pmic@4b {
131+ #address-cells = <1>;
132+ #size-cells = <0>;
133+ pmic: pmic@4b {
132134 compatible = "rohm,bd71847";
133135 reg = <0x4b>;
134136 interrupt-parent = <&gpio1>;
Documentation/devicetree/bindings/mfd/st,stpmic1.yaml+1−3
@@ -259,8 +259,6 @@ properties: · 258 unmodified lines
259259
260260 additionalProperties: false
261261
262− additionalProperties: false
263−
264262 additionalProperties: false
265263
266264 required:
@@ -274,7 +272,7 @@ examples: · 7 unmodified lines
274272 - |
275273 #include <dt-bindings/mfd/st,stpmic1.h>
276274 #include <dt-bindings/interrupt-controller/arm-gic.h>
277− i2c@0 {
275+ i2c {
278276 #address-cells = <1>;
279277 #size-cells = <0>;
280278 pmic@33 {
Documentation/devicetree/bindings/net/ethernet-phy.yaml+3−0
@@ -43,6 +43,9 @@ properties: · 42 unmodified lines
4343 second group of digits is the Phy Identifier 2 register,
4444 this is the chip vendor OUI bits 19:24, followed by 10
4545 bits of a vendor specific ID.
46+ - items:
47+ - pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
48+ - const: ethernet-phy-ieee802.3-c22
4649 - items:
4750 - pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
4851 - const: ethernet-phy-ieee802.3-c45
Documentation/devicetree/bindings/net/fsl-fec.txt+2−0
@@ -22,6 +22,8 @@ Optional properties: · 21 unmodified lines
2222 - fsl,err006687-workaround-present: If present indicates that the system has
2323 the hardware workaround for ERR006687 applied and does not need a software
2424 workaround.
25+- gpr: phandle of SoC general purpose register mode. Required for wake on LAN
26+ on some SoCs
2527 -interrupt-names: names of the interrupts listed in interrupts property in
2628 the same order. The defaults if not specified are
2729 __Number of interrupts__ __Default__
Documentation/devicetree/bindings/net/qcom,ipq8064-mdio.yaml+1−0
@@ -48,6 +48,7 @@ examples: · 47 unmodified lines
4848
4949 switch@10 {
5050 compatible = "qca,qca8337";
51+ reg = <0x10>;
5152 /* ... */
5253 };
5354 };
Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt+1−1
@@ -29,7 +29,7 @@ Required properties for compatible string qcom,wcn399x-bt: · 28 unmodified lines
2929
3030 Optional properties for compatible string qcom,wcn399x-bt:
3131
32− - max-speed: see Documentation/devicetree/bindings/serial/slave-device.txt
32+ - max-speed: see Documentation/devicetree/bindings/serial/serial.yaml
3333 - firmware-name: specify the name of nvm firmware to load
3434 - clocks: clock provided to the controller
3535
Documentation/devicetree/bindings/phy/qcom,qusb2-phy.yaml+3−3
@@ -97,7 +97,7 @@ then: · 96 unmodified lines
9797 - $ref: /schemas/types.yaml#/definitions/uint32
9898 - minimum: 0
9999 maximum: 63
100− default: 0
100+ default: 32
101101
102102 qcom,charge-ctrl-value:
103103 description:
@@ -130,7 +130,7 @@ then: · 26 unmodified lines
130130 - $ref: /schemas/types.yaml#/definitions/uint32
131131 - minimum: 0
132132 maximum: 3
133− default: 2
133+ default: 0
134134
135135 qcom,preemphasis-width:
136136 description:
@@ -152,7 +152,7 @@ then: · 15 unmodified lines
152152 - $ref: /schemas/types.yaml#/definitions/uint32
153153 - minimum: 0
154154 maximum: 3
155− default: 0
155+ default: 1
156156
157157 required:
158158 - compatible
Documentation/devicetree/bindings/phy/ti,phy-j721e-wiz.yaml+1−1
@@ -146,7 +146,7 @@ patternProperties: · 145 unmodified lines
146146 bindings specified in
147147 Documentation/devicetree/bindings/phy/phy-cadence-sierra.txt
148148 Torrent SERDES should follow the bindings specified in
149− Documentation/devicetree/bindings/phy/phy-cadence-dp.txt
149+ Documentation/devicetree/bindings/phy/phy-cadence-torrent.yaml
150150
151151 required:
152152 - compatible
Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.yaml+12−5
@@ -31,10 +31,17 @@ additionalProperties: false · 30 unmodified lines
3131
3232 examples:
3333 - |
34− cros-ec@0 {
35− compatible = "google,cros-ec-spi";
36− cros_ec_pwm: ec-pwm {
37− compatible = "google,cros-ec-pwm";
38− #pwm-cells = <1>;
34+ spi {
35+ #address-cells = <1>;
36+ #size-cells = <0>;
37+
38+ cros-ec@0 {
39+ compatible = "google,cros-ec-spi";
40+ reg = <0>;
41+
42+ cros_ec_pwm: ec-pwm {
43+ compatible = "google,cros-ec-pwm";
44+ #pwm-cells = <1>;
45+ };
3946 };
4047 };
Documentation/devicetree/bindings/regulator/mps,mp5416.yaml+0−1
@@ -37,7 +37,6 @@ properties: · 36 unmodified lines
3737 type: object
3838
3939 additionalProperties: false
40− additionalProperties: false
4140
4241 required:
4342 - compatible
Documentation/devicetree/bindings/regulator/mps,mpq7920.yaml+2−1
@@ -75,7 +75,8 @@ properties: · 74 unmodified lines
7575 description: |
7676 disables over voltage protection of this buck
7777
78− additionalProperties: false
78+ unevaluatedProperties: false
79+
7980 additionalProperties: false
8081
8182 required:
Documentation/devicetree/bindings/regulator/rohm,bd71828-regulator.yaml+5−1
@@ -35,6 +35,8 @@ patternProperties: · 34 unmodified lines
3535 description:
3636 should be "ldo1", ..., "ldo7"
3737
38+ unevaluatedProperties: false
39+
3840 "^BUCK[1-7]$":
3941 type: object
4042 allOf:
@@ -103,5 +105,7 @@ patternProperties: · 62 unmodified lines
103105
104106 required:
105107 - regulator-name
106− additionalProperties: false
108+
109+ unevaluatedProperties: false
110+
107111 additionalProperties: false
Documentation/devicetree/bindings/regulator/rohm,bd71837-regulator.yaml+5−1
@@ -41,6 +41,8 @@ patternProperties: · 40 unmodified lines
4141 description:
4242 should be "ldo1", ..., "ldo7"
4343
44+ unevaluatedProperties: false
45+
4446 "^BUCK[1-8]$":
4547 type: object
4648 allOf:
@@ -99,5 +101,7 @@ patternProperties: · 52 unmodified lines
99101
100102 required:
101103 - regulator-name
102− additionalProperties: false
104+
105+ unevaluatedProperties: false
106+
103107 additionalProperties: false
Documentation/devicetree/bindings/regulator/rohm,bd71847-regulator.yaml+5−1
@@ -40,6 +40,8 @@ patternProperties: · 39 unmodified lines
4040 description:
4141 should be "ldo1", ..., "ldo6"
4242
43+ unevaluatedProperties: false
44+
4345 "^BUCK[1-6]$":
4446 type: object
4547 allOf:
@@ -93,5 +95,7 @@ patternProperties: · 47 unmodified lines
9395
9496 required:
9597 - regulator-name
96− additionalProperties: false
98+
99+ unevaluatedProperties: false
100+
97101 additionalProperties: false
Documentation/devicetree/bindings/rng/brcm,bcm2835.yaml+1−1
@@ -39,7 +39,7 @@ additionalProperties: false · 38 unmodified lines
3939
4040 examples:
4141 - |
42− rng {
42+ rng@7e104000 {
4343 compatible = "brcm,bcm2835-rng";
4444 reg = <0x7e104000 0x10>;
4545 interrupts = <2 29>;
Documentation/devicetree/bindings/sound/rockchip-i2s.yaml+3−0
@@ -56,6 +56,9 @@ properties: · 55 unmodified lines
5656 - const: tx
5757 - const: rx
5858
59+ power-domains:
60+ maxItems: 1
61+
5962 rockchip,capture-channels:
6063 allOf:
6164 - $ref: /schemas/types.yaml#/definitions/uint32
Documentation/devicetree/bindings/sound/rockchip-spdif.txt+0−45
@@ -1,45 +0,0 @@
1−* Rockchip SPDIF transceiver
2−
3−The S/PDIF audio block is a stereo transceiver that allows the
4−processor to receive and transmit digital audio via an coaxial cable or
5−a fibre cable.
6−
7−Required properties:
8−
9−- compatible: should be one of the following:
10− - "rockchip,rk3066-spdif"
11− - "rockchip,rk3188-spdif"
12− - "rockchip,rk3228-spdif"
13− - "rockchip,rk3288-spdif"
14− - "rockchip,rk3328-spdif"
15− - "rockchip,rk3366-spdif"
16− - "rockchip,rk3368-spdif"
17− - "rockchip,rk3399-spdif"
18−- reg: physical base address of the controller and length of memory mapped
19− region.
20−- interrupts: should contain the SPDIF interrupt.
21−- dmas: DMA specifiers for tx dma. See the DMA client binding,
22− Documentation/devicetree/bindings/dma/dma.txt
23−- dma-names: should be "tx"
24−- clocks: a list of phandle + clock-specifier pairs, one for each entry
25− in clock-names.
26−- clock-names: should contain following:
27− - "hclk": clock for SPDIF controller
28− - "mclk" : clock for SPDIF bus
29−
30−Required properties on RK3288:
31− - rockchip,grf: the phandle of the syscon node for the general register
32− file (GRF)
33−
34−Example for the rk3188 SPDIF controller:
35−
36−spdif: spdif@1011e000 {
37− compatible = "rockchip,rk3188-spdif", "rockchip,rk3066-spdif";
38− reg = <0x1011e000 0x2000>;
39− interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
40− dmas = <&dmac1_s 8>;
41− dma-names = "tx";
42− clock-names = "hclk", "mclk";
43− clocks = <&cru HCLK_SPDIF>, <&cru SCLK_SPDIF>;
44− #sound-dai-cells = <0>;
45−};
Documentation/devicetree/bindings/sound/rockchip-spdif.yaml+101−0
@@ -0,0 +1,101 @@
1+# SPDX-License-Identifier: GPL-2.0
2+%YAML 1.2
3+---
4+$id: http://devicetree.org/schemas/sound/rockchip-spdif.yaml#
5+$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+title: Rockchip SPDIF transceiver
8+
9+description:
10+ The S/PDIF audio block is a stereo transceiver that allows the
11+ processor to receive and transmit digital audio via a coaxial or
12+ fibre cable.
13+
14+maintainers:
15+ - Heiko Stuebner <heiko@sntech.de>
16+
17+properties:
18+ compatible:
19+ oneOf:
20+ - const: rockchip,rk3066-spdif
21+ - const: rockchip,rk3228-spdif
22+ - const: rockchip,rk3328-spdif
23+ - const: rockchip,rk3366-spdif
24+ - const: rockchip,rk3368-spdif
25+ - const: rockchip,rk3399-spdif
26+ - items:
27+ - enum:
28+ - rockchip,rk3188-spdif
29+ - rockchip,rk3288-spdif
30+ - const: rockchip,rk3066-spdif
31+
32+ reg:
33+ maxItems: 1
34+
35+ interrupts:
36+ maxItems: 1
37+
38+ clocks:
39+ items:
40+ - description: clock for SPDIF bus
41+ - description: clock for SPDIF controller
42+
43+ clock-names:
44+ items:
45+ - const: mclk
46+ - const: hclk
47+
48+ dmas:
49+ maxItems: 1
50+
51+ dma-names:
52+ const: tx
53+
54+ power-domains:
55+ maxItems: 1
56+
57+ rockchip,grf:
58+ $ref: /schemas/types.yaml#/definitions/phandle
59+ description:
60+ The phandle of the syscon node for the GRF register.
61+ Required property on RK3288.
62+
63+ "#sound-dai-cells":
64+ const: 0
65+
66+required:
67+ - compatible
68+ - reg
69+ - interrupts
70+ - clocks
71+ - clock-names
72+ - dmas
73+ - dma-names
74+ - "#sound-dai-cells"
75+
76+if:
77+ properties:
78+ compatible:
79+ contains:
80+ const: rockchip,rk3288-spdif
81+
82+then:
83+ required:
84+ - rockchip,grf
85+
86+additionalProperties: false
87+
88+examples:
89+ - |
90+ #include <dt-bindings/clock/rk3188-cru.h>
91+ #include <dt-bindings/interrupt-controller/arm-gic.h>
92+ spdif: spdif@1011e000 {
93+ compatible = "rockchip,rk3188-spdif", "rockchip,rk3066-spdif";
94+ reg = <0x1011e000 0x2000>;
95+ interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
96+ clocks = <&cru SCLK_SPDIF>, <&cru HCLK_SPDIF>;
97+ clock-names = "mclk", "hclk";
98+ dmas = <&dmac1_s 8>;
99+ dma-names = "tx";
100+ #sound-dai-cells = <0>;
101+ };
Documentation/devicetree/bindings/spi/qcom,spi-qcom-qspi.yaml+1−1
@@ -61,7 +61,7 @@ examples: · 60 unmodified lines
6161 #include <dt-bindings/clock/qcom,gcc-sdm845.h>
6262 #include <dt-bindings/interrupt-controller/arm-gic.h>
6363
64− soc: soc@0 {
64+ soc: soc {
6565 #address-cells = <2>;
6666 #size-cells = <2>;
6767
Documentation/devicetree/bindings/usb/ingenic,musb.yaml+1−1
@@ -56,7 +56,7 @@ additionalProperties: false · 55 unmodified lines
5656 examples:
5757 - |
5858 #include <dt-bindings/clock/jz4740-cgu.h>
59− usb_phy: usb-phy@0 {
59+ usb_phy: usb-phy {
6060 compatible = "usb-nop-xceiv";
6161 #phy-cells = <0>;
6262 };
Documentation/devicetree/bindings/usb/qcom,dwc3.txt+2−2
@@ -52,8 +52,8 @@ A child node must exist to represent the core DWC3 IP block. The name of · 51 unmodified lines
5252 the node is not important. The content of the node is defined in dwc3.txt.
5353
5454 Phy documentation is provided in the following places:
55−Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt - USB3 QMP PHY
56−Documentation/devicetree/bindings/phy/qcom-qusb2-phy.txt - USB2 QUSB2 PHY
55+Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt - USB3 QMP PHY
56+Documentation/devicetree/bindings/phy/qcom,qusb2-phy.yaml - USB2 QUSB2 PHY
5757
5858 Example device nodes:
5959
Documentation/devicetree/bindings/usb/renesas,usb3-peri.yaml+1−0
@@ -18,6 +18,7 @@ properties: · 17 unmodified lines
1818 - renesas,r8a774c0-usb3-peri # RZ/G2E
1919 - renesas,r8a7795-usb3-peri # R-Car H3
2020 - renesas,r8a7796-usb3-peri # R-Car M3-W
21+ - renesas,r8a77961-usb3-peri # R-Car M3-W+
2122 - renesas,r8a77965-usb3-peri # R-Car M3-N
2223 - renesas,r8a77990-usb3-peri # R-Car E3
2324 - const: renesas,rcar-gen3-usb3-peri
Documentation/devicetree/bindings/usb/renesas,usbhs.yaml+1−0
@@ -40,6 +40,7 @@ properties: · 39 unmodified lines
4040 - renesas,usbhs-r8a774c0 # RZ/G2E
4141 - renesas,usbhs-r8a7795 # R-Car H3
4242 - renesas,usbhs-r8a7796 # R-Car M3-W
43+ - renesas,usbhs-r8a77961 # R-Car M3-W+
4344 - renesas,usbhs-r8a77965 # R-Car M3-N
4445 - renesas,usbhs-r8a77990 # R-Car E3
4546 - renesas,usbhs-r8a77995 # R-Car D3
Documentation/devicetree/bindings/usb/rockchip,dwc3.txt+1−1
@@ -16,7 +16,7 @@ A child node must exist to represent the core DWC3 IP block. The name of · 15 unmodified lines
1616 the node is not important. The content of the node is defined in dwc3.txt.
1717
1818 Phy documentation is provided in the following places:
19−Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.txt - USB2.0 PHY
19+Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yaml - USB2.0 PHY
2020 Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt - Type-C PHY
2121
2222 Example device nodes:
Documentation/devicetree/bindings/usb/usb-xhci.txt+2−1
@@ -16,7 +16,8 @@ Required properties: · 15 unmodified lines
1616 - "renesas,xhci-r8a7791" for r8a7791 SoC
1717 - "renesas,xhci-r8a7793" for r8a7793 SoC
1818 - "renesas,xhci-r8a7795" for r8a7795 SoC
19− - "renesas,xhci-r8a7796" for r8a7796 SoC
19+ - "renesas,xhci-r8a7796" for r8a77960 SoC
20+ - "renesas,xhci-r8a77961" for r8a77961 SoC
2021 - "renesas,xhci-r8a77965" for r8a77965 SoC
2122 - "renesas,xhci-r8a77990" for r8a77990 SoC
2223 - "renesas,rcar-gen2-xhci" for a generic R-Car Gen2 or RZ/G1 compatible
Documentation/filesystems/debugfs.rst+2−2
@@ -79,8 +79,8 @@ created with any of:: · 78 unmodified lines
7979 struct dentry *parent, u8 *value);
8080 void debugfs_create_u16(const char *name, umode_t mode,
8181 struct dentry *parent, u16 *value);
82− struct dentry *debugfs_create_u32(const char *name, umode_t mode,
83− struct dentry *parent, u32 *value);
82+ void debugfs_create_u32(const char *name, umode_t mode,
83+ struct dentry *parent, u32 *value);
8484 void debugfs_create_u64(const char *name, umode_t mode,
8585 struct dentry *parent, u64 *value);
8686
Documentation/hwmon/isl68137.rst+38−38
@@ -16,7 +16,7 @@ Supported chips: · 15 unmodified lines
1616
1717 * Renesas ISL68220
1818
19− Prefix: 'raa_dmpvr2_2rail'
19+ Prefix: 'isl68220'
2020
2121 Addresses scanned: -
2222
@@ -26,7 +26,7 @@ Supported chips: · 3 unmodified lines
2626
2727 * Renesas ISL68221
2828
29− Prefix: 'raa_dmpvr2_3rail'
29+ Prefix: 'isl68221'
3030
3131 Addresses scanned: -
3232
@@ -36,7 +36,7 @@ Supported chips: · 3 unmodified lines
3636
3737 * Renesas ISL68222
3838
39− Prefix: 'raa_dmpvr2_2rail'
39+ Prefix: 'isl68222'
4040
4141 Addresses scanned: -
4242
@@ -46,7 +46,7 @@ Supported chips: · 3 unmodified lines
4646
4747 * Renesas ISL68223
4848
49− Prefix: 'raa_dmpvr2_2rail'
49+ Prefix: 'isl68223'
5050
5151 Addresses scanned: -
5252
@@ -56,7 +56,7 @@ Supported chips: · 3 unmodified lines
5656
5757 * Renesas ISL68224
5858
59− Prefix: 'raa_dmpvr2_3rail'
59+ Prefix: 'isl68224'
6060
6161 Addresses scanned: -
6262
@@ -66,7 +66,7 @@ Supported chips: · 3 unmodified lines
6666
6767 * Renesas ISL68225
6868
69− Prefix: 'raa_dmpvr2_2rail'
69+ Prefix: 'isl68225'
7070
7171 Addresses scanned: -
7272
@@ -76,7 +76,7 @@ Supported chips: · 3 unmodified lines
7676
7777 * Renesas ISL68226
7878
79− Prefix: 'raa_dmpvr2_3rail'
79+ Prefix: 'isl68226'
8080
8181 Addresses scanned: -
8282
@@ -86,7 +86,7 @@ Supported chips: · 3 unmodified lines
8686
8787 * Renesas ISL68227
8888
89− Prefix: 'raa_dmpvr2_1rail'
89+ Prefix: 'isl68227'
9090
9191 Addresses scanned: -
9292
@@ -96,7 +96,7 @@ Supported chips: · 3 unmodified lines
9696
9797 * Renesas ISL68229
9898
99− Prefix: 'raa_dmpvr2_3rail'
99+ Prefix: 'isl68229'
100100
101101 Addresses scanned: -
102102
@@ -106,7 +106,7 @@ Supported chips: · 3 unmodified lines
106106
107107 * Renesas ISL68233
108108
109− Prefix: 'raa_dmpvr2_2rail'
109+ Prefix: 'isl68233'
110110
111111 Addresses scanned: -
112112
@@ -116,7 +116,7 @@ Supported chips: · 3 unmodified lines
116116
117117 * Renesas ISL68239
118118
119− Prefix: 'raa_dmpvr2_3rail'
119+ Prefix: 'isl68239'
120120
121121 Addresses scanned: -
122122
@@ -126,7 +126,7 @@ Supported chips: · 3 unmodified lines
126126
127127 * Renesas ISL69222
128128
129− Prefix: 'raa_dmpvr2_2rail'
129+ Prefix: 'isl69222'
130130
131131 Addresses scanned: -
132132
@@ -136,7 +136,7 @@ Supported chips: · 3 unmodified lines
136136
137137 * Renesas ISL69223
138138
139− Prefix: 'raa_dmpvr2_3rail'
139+ Prefix: 'isl69223'
140140
141141 Addresses scanned: -
142142
@@ -146,7 +146,7 @@ Supported chips: · 3 unmodified lines
146146
147147 * Renesas ISL69224
148148
149− Prefix: 'raa_dmpvr2_2rail'
149+ Prefix: 'isl69224'
150150
151151 Addresses scanned: -
152152
@@ -156,7 +156,7 @@ Supported chips: · 3 unmodified lines
156156
157157 * Renesas ISL69225
158158
159− Prefix: 'raa_dmpvr2_2rail'
159+ Prefix: 'isl69225'
160160
161161 Addresses scanned: -
162162
@@ -166,7 +166,7 @@ Supported chips: · 3 unmodified lines
166166
167167 * Renesas ISL69227
168168
169− Prefix: 'raa_dmpvr2_3rail'
169+ Prefix: 'isl69227'
170170
171171 Addresses scanned: -
172172
@@ -176,7 +176,7 @@ Supported chips: · 3 unmodified lines
176176
177177 * Renesas ISL69228
178178
179− Prefix: 'raa_dmpvr2_3rail'
179+ Prefix: 'isl69228'
180180
181181 Addresses scanned: -
182182
@@ -186,7 +186,7 @@ Supported chips: · 3 unmodified lines
186186
187187 * Renesas ISL69234
188188
189− Prefix: 'raa_dmpvr2_2rail'
189+ Prefix: 'isl69234'
190190
191191 Addresses scanned: -
192192
@@ -196,7 +196,7 @@ Supported chips: · 3 unmodified lines
196196
197197 * Renesas ISL69236
198198
199− Prefix: 'raa_dmpvr2_2rail'
199+ Prefix: 'isl69236'
200200
201201 Addresses scanned: -
202202
@@ -206,7 +206,7 @@ Supported chips: · 3 unmodified lines
206206
207207 * Renesas ISL69239
208208
209− Prefix: 'raa_dmpvr2_3rail'
209+ Prefix: 'isl69239'
210210
211211 Addresses scanned: -
212212
@@ -216,7 +216,7 @@ Supported chips: · 3 unmodified lines
216216
217217 * Renesas ISL69242
218218
219− Prefix: 'raa_dmpvr2_2rail'
219+ Prefix: 'isl69242'
220220
221221 Addresses scanned: -
222222
@@ -226,7 +226,7 @@ Supported chips: · 3 unmodified lines
226226
227227 * Renesas ISL69243
228228
229− Prefix: 'raa_dmpvr2_1rail'
229+ Prefix: 'isl69243'
230230
231231 Addresses scanned: -
232232
@@ -236,7 +236,7 @@ Supported chips: · 3 unmodified lines
236236
237237 * Renesas ISL69247
238238
239− Prefix: 'raa_dmpvr2_2rail'
239+ Prefix: 'isl69247'
240240
241241 Addresses scanned: -
242242
@@ -246,7 +246,7 @@ Supported chips: · 3 unmodified lines
246246
247247 * Renesas ISL69248
248248
249− Prefix: 'raa_dmpvr2_2rail'
249+ Prefix: 'isl69248'
250250
251251 Addresses scanned: -
252252
@@ -256,7 +256,7 @@ Supported chips: · 3 unmodified lines
256256
257257 * Renesas ISL69254
258258
259− Prefix: 'raa_dmpvr2_2rail'
259+ Prefix: 'isl69254'
260260
261261 Addresses scanned: -
262262
@@ -266,7 +266,7 @@ Supported chips: · 3 unmodified lines
266266
267267 * Renesas ISL69255
268268
269− Prefix: 'raa_dmpvr2_2rail'
269+ Prefix: 'isl69255'
270270
271271 Addresses scanned: -
272272
@@ -276,7 +276,7 @@ Supported chips: · 3 unmodified lines
276276
277277 * Renesas ISL69256
278278
279− Prefix: 'raa_dmpvr2_2rail'
279+ Prefix: 'isl69256'
280280
281281 Addresses scanned: -
282282
@@ -286,7 +286,7 @@ Supported chips: · 3 unmodified lines
286286
287287 * Renesas ISL69259
288288
289− Prefix: 'raa_dmpvr2_2rail'
289+ Prefix: 'isl69259'
290290
291291 Addresses scanned: -
292292
@@ -296,7 +296,7 @@ Supported chips: · 3 unmodified lines
296296
297297 * Renesas ISL69260
298298
299− Prefix: 'raa_dmpvr2_2rail'
299+ Prefix: 'isl69260'
300300
301301 Addresses scanned: -
302302
@@ -306,7 +306,7 @@ Supported chips: · 3 unmodified lines
306306
307307 * Renesas ISL69268
308308
309− Prefix: 'raa_dmpvr2_2rail'
309+ Prefix: 'isl69268'
310310
311311 Addresses scanned: -
312312
@@ -316,7 +316,7 @@ Supported chips: · 3 unmodified lines
316316
317317 * Renesas ISL69269
318318
319− Prefix: 'raa_dmpvr2_3rail'
319+ Prefix: 'isl69269'
320320
321321 Addresses scanned: -
322322
@@ -326,7 +326,7 @@ Supported chips: · 3 unmodified lines
326326
327327 * Renesas ISL69298
328328
329− Prefix: 'raa_dmpvr2_2rail'
329+ Prefix: 'isl69298'
330330
331331 Addresses scanned: -
332332
@@ -336,7 +336,7 @@ Supported chips: · 3 unmodified lines
336336
337337 * Renesas RAA228000
338338
339− Prefix: 'raa_dmpvr2_hv'
339+ Prefix: 'raa228000'
340340
341341 Addresses scanned: -
342342
@@ -346,7 +346,7 @@ Supported chips: · 3 unmodified lines
346346
347347 * Renesas RAA228004
348348
349− Prefix: 'raa_dmpvr2_hv'
349+ Prefix: 'raa228004'
350350
351351 Addresses scanned: -
352352
@@ -356,7 +356,7 @@ Supported chips: · 3 unmodified lines
356356
357357 * Renesas RAA228006
358358
359− Prefix: 'raa_dmpvr2_hv'
359+ Prefix: 'raa228006'
360360
361361 Addresses scanned: -
362362
@@ -366,7 +366,7 @@ Supported chips: · 3 unmodified lines
366366
367367 * Renesas RAA228228
368368
369− Prefix: 'raa_dmpvr2_2rail'
369+ Prefix: 'raa228228'
370370
371371 Addresses scanned: -
372372
@@ -376,7 +376,7 @@ Supported chips: · 3 unmodified lines
376376
377377 * Renesas RAA229001
378378
379− Prefix: 'raa_dmpvr2_2rail'
379+ Prefix: 'raa229001'
380380
381381 Addresses scanned: -
382382
@@ -386,7 +386,7 @@ Supported chips: · 3 unmodified lines
386386
387387 * Renesas RAA229004
388388
389− Prefix: 'raa_dmpvr2_2rail'
389+ Prefix: 'raa229004'
390390
391391 Addresses scanned: -
392392
Documentation/kbuild/makefiles.rst+2−1
@@ -1241,7 +1241,8 @@ When kbuild executes, the following steps are followed (roughly): · 1240 unmodified lines
12411241 will be displayed with "make KBUILD_VERBOSE=0".
12421242
12431243
1244−--- 6.9 Preprocessing linker scripts
1244+6.9 Preprocessing linker scripts
1245+--------------------------------
12451246
12461247 When the vmlinux image is built, the linker script
12471248 arch/$(ARCH)/kernel/vmlinux.lds is used.
Documentation/networking/devlink/devlink-trap.rst+2−0
@@ -257,6 +257,8 @@ drivers: · 256 unmodified lines
257257 * :doc:`netdevsim`
258258 * :doc:`mlxsw`
259259
260+.. _Generic-Packet-Trap-Groups:
261+
260262 Generic Packet Trap Groups
261263 ==========================
262264
Documentation/networking/index.rst+1−0
@@ -22,6 +22,7 @@ Contents: · 21 unmodified lines
2222 z8530book
2323 msg_zerocopy
2424 failover
25+ net_dim
2526 net_failover
2627 phy
2728 sfp-phylink
Documentation/networking/ip-sysctl.txt+8−1
@@ -812,7 +812,7 @@ tcp_limit_output_bytes - INTEGER · 811 unmodified lines
812812 tcp_challenge_ack_limit - INTEGER
813813 Limits number of Challenge ACK sent per second, as recommended
814814 in RFC 5961 (Improving TCP's Robustness to Blind In-Window Attacks)
815− Default: 100
815+ Default: 1000
816816
817817 tcp_rx_skb_cache - BOOLEAN
818818 Controls a per TCP socket cache of one skb, that might help
@@ -983,6 +983,13 @@ ip_early_demux - BOOLEAN · 164 unmodified lines
983983 reduces overall throughput, in such case you should disable it.
984984 Default: 1
985985
986+ping_group_range - 2 INTEGERS
987+ Restrict ICMP_PROTO datagram sockets to users in the group range.
988+ The default is "1 0", meaning, that nobody (not even root) may
989+ create ping sockets. Setting it to "100 100" would grant permissions
990+ to the single group. "0 4294967295" would enable it for the world, "100
991+ 4294967295" would enable it for the users, but not daemons.
992+
986993 tcp_early_demux - BOOLEAN
987994 Enable early demux for established TCP sockets.
988995 Default: 1
Documentation/networking/net_dim.rstrenamed from Documentation/networking/net_dim.txt+49−47
@@ -1,28 +1,20 @@
1+======================================================
12 Net DIM - Generic Network Dynamic Interrupt Moderation
23 ======================================================
34
4−Author:
5− Tal Gilboa <talgi@mellanox.com>
6−
7−
8−Contents
9−=========
5+:Author: Tal Gilboa <talgi@mellanox.com>
106
11−- Assumptions
12−- Introduction
13−- The Net DIM Algorithm
14−- Registering a Network Device to DIM
15−- Example
7+.. contents:: :depth: 2
168
17−Part 0: Assumptions
18−======================
9+Assumptions
10+===========
1911
2012 This document assumes the reader has basic knowledge in network drivers
2113 and in general interrupt moderation.
2214
2315
24−Part I: Introduction
25−======================
16+Introduction
17+============
2618
2719 Dynamic Interrupt Moderation (DIM) (in networking) refers to changing the
2820 interrupt moderation configuration of a channel in order to optimize packet
@@ -41,14 +33,15 @@ number of wanted packets per event. The Net DIM algorithm ascribes importance to · 12 unmodified lines
4133 increase bandwidth over reducing interrupt rate.
4234
4335
44−Part II: The Net DIM Algorithm
45−===============================
36+Net DIM Algorithm
37+=================
4638
4739 Each iteration of the Net DIM algorithm follows these steps:
48−1. Calculates new data sample.
49−2. Compares it to previous sample.
50−3. Makes a decision - suggests interrupt moderation configuration fields.
51−4. Applies a schedule work function, which applies suggested configuration.
40+
41+#. Calculates new data sample.
42+#. Compares it to previous sample.
43+#. Makes a decision - suggests interrupt moderation configuration fields.
44+#. Applies a schedule work function, which applies suggested configuration.
5245
5346 The first two steps are straightforward, both the new and the previous data are
5447 supplied by the driver registered to Net DIM. The previous data is the new data
@@ -89,19 +82,21 @@ manoeuvre as it may provide partial data or ignore the algorithm suggestion · 34 unmodified lines
8982 under some conditions.
9083
9184
92−Part III: Registering a Network Device to DIM
93−==============================================
85+Registering a Network Device to DIM
86+===================================
9487
95−Net DIM API exposes the main function net_dim(struct dim *dim,
96−struct dim_sample end_sample). This function is the entry point to the Net
88+Net DIM API exposes the main function net_dim().
89+This function is the entry point to the Net
9790 DIM algorithm and has to be called every time the driver would like to check if
9891 it should change interrupt moderation parameters. The driver should provide two
99−data structures: struct dim and struct dim_sample. Struct dim
92+data structures: :c:type:`struct dim <dim>` and
93+:c:type:`struct dim_sample <dim_sample>`. :c:type:`struct dim <dim>`
10094 describes the state of DIM for a specific object (RX queue, TX queue,
10195 other queues, etc.). This includes the current selected profile, previous data
10296 samples, the callback function provided by the driver and more.
103−Struct dim_sample describes a data sample, which will be compared to the
104−data sample stored in struct dim in order to decide on the algorithm's next
97+:c:type:`struct dim_sample <dim_sample>` describes a data sample,
98+which will be compared to the data sample stored in :c:type:`struct dim <dim>`
99+in order to decide on the algorithm's next
105100 step. The sample should include bytes, packets and interrupts, measured by
106101 the driver.
107102
@@ -110,9 +105,10 @@ main net_dim() function. The recommended method is to call net_dim() on each · 2 unmodified lines
110105 interrupt. Since Net DIM has a built-in moderation and it might decide to skip
111106 iterations under certain conditions, there is no need to moderate the net_dim()
112107 calls as well. As mentioned above, the driver needs to provide an object of type
113−struct dim to the net_dim() function call. It is advised for each entity
114−using Net DIM to hold a struct dim as part of its data structure and use it
115−as the main Net DIM API object. The struct dim_sample should hold the latest
108+:c:type:`struct dim <dim>` to the net_dim() function call. It is advised for
109+each entity using Net DIM to hold a :c:type:`struct dim <dim>` as part of its
110+data structure and use it as the main Net DIM API object.
111+The :c:type:`struct dim_sample <dim_sample>` should hold the latest
116112 bytes, packets and interrupts count. No need to perform any calculations, just
117113 include the raw data.
118114
@@ -124,19 +120,19 @@ the data flow. After the work is done, Net DIM algorithm needs to be set to · 5 unmodified lines
124120 the proper state in order to move to the next iteration.
125121
126122
127−Part IV: Example
128−=================
123+Example
124+=======
129125
130126 The following code demonstrates how to register a driver to Net DIM. The actual
131127 usage is not complete but it should make the outline of the usage clear.
132128
133−my_driver.c:
129+.. code-block:: c
134130
135−#include <linux/dim.h>
131+ #include <linux/dim.h>
136132
137−/* Callback for net DIM to schedule on a decision to change moderation */
138−void my_driver_do_dim_work(struct work_struct *work)
139−{
133+ /* Callback for net DIM to schedule on a decision to change moderation */
134+ void my_driver_do_dim_work(struct work_struct *work)
135+ {
140136 /* Get struct dim from struct work_struct */
141137 struct dim *dim = container_of(work, struct dim,
142138 work);
@@ -145,11 +141,11 @@ void my_driver_do_dim_work(struct work_struct *work) · 2 unmodified lines
145141
146142 /* Signal net DIM work is done and it should move to next iteration */
147143 dim->state = DIM_START_MEASURE;
148−}
144+ }
149145
150−/* My driver's interrupt handler */
151−int my_driver_handle_interrupt(struct my_driver_entity *my_entity, ...)
152−{
146+ /* My driver's interrupt handler */
147+ int my_driver_handle_interrupt(struct my_driver_entity *my_entity, ...)
148+ {
153149 ...
154150 /* A struct to hold current measured data */
155151 struct dim_sample dim_sample;
@@ -162,13 +158,19 @@ int my_driver_handle_interrupt(struct my_driver_entity *my_entity, ...) · 6 unmodified lines
162158 /* Call net DIM */
163159 net_dim(&my_entity->dim, dim_sample);
164160 ...
165−}
161+ }
166162
167−/* My entity's initialization function (my_entity was already allocated) */
168−int my_driver_init_my_entity(struct my_driver_entity *my_entity, ...)
169−{
163+ /* My entity's initialization function (my_entity was already allocated) */
164+ int my_driver_init_my_entity(struct my_driver_entity *my_entity, ...)
165+ {
170166 ...
171167 /* Initiate struct work_struct with my driver's callback function */
172168 INIT_WORK(&my_entity->dim.work, my_driver_do_dim_work);
173169 ...
174−}
170+ }
171+
172+Dynamic Interrupt Moderation (DIM) library API
173+==============================================
174+
175+.. kernel-doc:: include/linux/dim.h
176+ :internal:
Documentation/x86/boot.rst+18−3
@@ -1399,8 +1399,8 @@ must have read/write permission; CS must be __BOOT_CS and DS, ES, SS · 1398 unmodified lines
13991399 must be __BOOT_DS; interrupt must be disabled; %rsi must hold the base
14001400 address of the struct boot_params.
14011401
1402−EFI Handover Protocol
1403−=====================
1402+EFI Handover Protocol (deprecated)
1403+==================================
14041404
14051405 This protocol allows boot loaders to defer initialisation to the EFI
14061406 boot stub. The boot loader is required to load the kernel/initrd(s)
@@ -1408,6 +1408,12 @@ from the boot media and jump to the EFI handover protocol entry point · 1 unmodified line
14081408 which is hdr->handover_offset bytes from the beginning of
14091409 startup_{32,64}.
14101410
1411+The boot loader MUST respect the kernel's PE/COFF metadata when it comes
1412+to section alignment, the memory footprint of the executable image beyond
1413+the size of the file itself, and any other aspect of the PE/COFF header
1414+that may affect correct operation of the image as a PE/COFF binary in the
1415+execution context provided by the EFI firmware.
1416+
14111417 The function prototype for the handover entry point looks like this::
14121418
14131419 efi_main(void *handle, efi_system_table_t *table, struct boot_params *bp)
@@ -1419,9 +1425,18 @@ UEFI specification. 'bp' is the boot loader-allocated boot params. · 5 unmodified lines
14191425
14201426 The boot loader *must* fill out the following fields in bp::
14211427
1422− - hdr.code32_start
14231428 - hdr.cmd_line_ptr
14241429 - hdr.ramdisk_image (if applicable)
14251430 - hdr.ramdisk_size (if applicable)
14261431
14271432 All other fields should be zero.
1433+
1434+NOTE: The EFI Handover Protocol is deprecated in favour of the ordinary PE/COFF
1435+ entry point, combined with the LINUX_EFI_INITRD_MEDIA_GUID based initrd
1436+ loading protocol (refer to [0] for an example of the bootloader side of
1437+ this), which removes the need for any knowledge on the part of the EFI
1438+ bootloader regarding the internal representation of boot_params or any
1439+ requirements/limitations regarding the placement of the command line
1440+ and ramdisk in memory, or the placement of the kernel image itself.
1441+
1442+[0] https://github.com/u-boot/u-boot/commit/ec80b4735a593961fe701cc3a5d717d4739b0fd0
MAINTAINERS+46−35
@@ -189,7 +189,7 @@ F: drivers/net/hamradio/6pack.c · 188 unmodified lines
189189 M: Johannes Berg <johannes@sipsolutions.net>
190190 L: linux-wireless@vger.kernel.org
191191 S: Maintained
192−W: http://wireless.kernel.org/
192+W: https://wireless.wiki.kernel.org/
193193 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
194194 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
195195 F: Documentation/driver-api/80211/cfg80211.rst
@@ -505,7 +505,7 @@ F: drivers/hwmon/adm1029.c · 309 unmodified lines
505505 ADM8211 WIRELESS DRIVER
506506 L: linux-wireless@vger.kernel.org
507507 S: Orphan
508−W: http://wireless.kernel.org/
508+W: https://wireless.wiki.kernel.org/
509509 F: drivers/net/wireless/admtek/adm8211.*
510510
511511 ADP1653 FLASH CONTROLLER DRIVER
@@ -570,7 +570,7 @@ F: Documentation/devicetree/bindings/iio/accel/adi,adxl345.yaml · 58 unmodified lines
570570 F: drivers/input/misc/adxl34x.c
571571
572572 ADXL372 THREE-AXIS DIGITAL ACCELEROMETER DRIVER
573−M: Stefan Popa <stefan.popa@analog.com>
573+M: Michael Hennerich <michael.hennerich@analog.com>
574574 S: Supported
575575 W: http://ez.analog.com/community/linux-device-drivers
576576 F: Documentation/devicetree/bindings/iio/accel/adi,adxl372.yaml
@@ -922,7 +922,7 @@ F: arch/arm64/boot/dts/amd/amd-seattle-xgbe*.dtsi · 345 unmodified lines
922922 F: drivers/net/ethernet/amd/xgbe/
923923
924924 ANALOG DEVICES INC AD5686 DRIVER
925−M: Stefan Popa <stefan.popa@analog.com>
925+M: Michael Hennerich <Michael.Hennerich@analog.com>
926926 L: linux-pm@vger.kernel.org
927927 S: Supported
928928 W: http://ez.analog.com/community/linux-device-drivers
@@ -930,7 +930,7 @@ F: drivers/iio/dac/ad5686* · 1 unmodified line
930930 F: drivers/iio/dac/ad5696*
931931
932932 ANALOG DEVICES INC AD5758 DRIVER
933−M: Stefan Popa <stefan.popa@analog.com>
933+M: Michael Hennerich <Michael.Hennerich@analog.com>
934934 L: linux-iio@vger.kernel.org
935935 S: Supported
936936 W: http://ez.analog.com/community/linux-device-drivers
@@ -946,7 +946,7 @@ F: Documentation/devicetree/bindings/iio/adc/adi,ad7091r5.yaml · 9 unmodified lines
946946 F: drivers/iio/adc/ad7091r5.c
947947
948948 ANALOG DEVICES INC AD7124 DRIVER
949−M: Stefan Popa <stefan.popa@analog.com>
949+M: Michael Hennerich <Michael.Hennerich@analog.com>
950950 L: linux-iio@vger.kernel.org
951951 S: Supported
952952 W: http://ez.analog.com/community/linux-device-drivers
@@ -970,7 +970,7 @@ F: Documentation/devicetree/bindings/iio/adc/adi,ad7292.yaml · 17 unmodified lines
970970 F: drivers/iio/adc/ad7292.c
971971
972972 ANALOG DEVICES INC AD7606 DRIVER
973−M: Stefan Popa <stefan.popa@analog.com>
973+M: Michael Hennerich <Michael.Hennerich@analog.com>
974974 M: Beniamin Bia <beniamin.bia@analog.com>
975975 L: linux-iio@vger.kernel.org
976976 S: Supported
@@ -979,7 +979,7 @@ F: Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml · 2 unmodified lines
979979 F: drivers/iio/adc/ad7606.c
980980
981981 ANALOG DEVICES INC AD7768-1 DRIVER
982−M: Stefan Popa <stefan.popa@analog.com>
982+M: Michael Hennerich <Michael.Hennerich@analog.com>
983983 L: linux-iio@vger.kernel.org
984984 S: Supported
985985 W: http://ez.analog.com/community/linux-device-drivers
@@ -1040,7 +1040,7 @@ F: Documentation/devicetree/bindings/hwmon/adi,adm1177.yaml · 54 unmodified lines
10401040 F: drivers/hwmon/adm1177.c
10411041
10421042 ANALOG DEVICES INC ADP5061 DRIVER
1043−M: Stefan Popa <stefan.popa@analog.com>
1043+M: Michael Hennerich <Michael.Hennerich@analog.com>
10441044 L: linux-pm@vger.kernel.org
10451045 S: Supported
10461046 W: http://ez.analog.com/community/linux-device-drivers
@@ -1109,7 +1109,6 @@ F: drivers/iio/amplifiers/hmc425a.c · 62 unmodified lines
11091109 ANALOG DEVICES INC IIO DRIVERS
11101110 M: Lars-Peter Clausen <lars@metafoo.de>
11111111 M: Michael Hennerich <Michael.Hennerich@analog.com>
1112−M: Stefan Popa <stefan.popa@analog.com>
11131112 S: Supported
11141113 W: http://wiki.analog.com/
11151114 W: http://ez.analog.com/community/linux-device-drivers
@@ -1323,7 +1322,10 @@ ARM INTEGRATOR, VERSATILE AND REALVIEW SUPPORT · 207 unmodified lines
13231322 M: Linus Walleij <linus.walleij@linaro.org>
13241323 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
13251324 S: Maintained
1326−F: Documentation/devicetree/bindings/arm/arm-boards
1325+F: Documentation/devicetree/bindings/arm/arm,integrator.yaml
1326+F: Documentation/devicetree/bindings/arm/arm,realview.yaml
1327+F: Documentation/devicetree/bindings/arm/arm,versatile.yaml
1328+F: Documentation/devicetree/bindings/arm/arm,vexpress-juno.yaml
13271329 F: Documentation/devicetree/bindings/auxdisplay/arm-charlcd.txt
13281330 F: Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml
13291331 F: Documentation/devicetree/bindings/i2c/i2c-versatile.txt
@@ -2847,14 +2849,14 @@ M: Nick Kossifidis <mickflemm@gmail.com> · 1517 unmodified lines
28472849 M: Luis Chamberlain <mcgrof@kernel.org>
28482850 L: linux-wireless@vger.kernel.org
28492851 S: Maintained
2850−W: http://wireless.kernel.org/en/users/Drivers/ath5k
2852+W: https://wireless.wiki.kernel.org/en/users/Drivers/ath5k
28512853 F: drivers/net/wireless/ath/ath5k/
28522854
28532855 ATHEROS ATH6KL WIRELESS DRIVER
28542856 M: Kalle Valo <kvalo@codeaurora.org>
28552857 L: linux-wireless@vger.kernel.org
28562858 S: Supported
2857−W: http://wireless.kernel.org/en/users/Drivers/ath6kl
2859+W: https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl
28582860 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
28592861 F: drivers/net/wireless/ath/ath6kl/
28602862
@@ -3017,7 +3019,7 @@ B43 WIRELESS DRIVER · 156 unmodified lines
30173019 L: linux-wireless@vger.kernel.org
30183020 L: b43-dev@lists.infradead.org
30193021 S: Odd Fixes
3020−W: http://wireless.kernel.org/en/users/Drivers/b43
3022+W: https://wireless.wiki.kernel.org/en/users/Drivers/b43
30213023 F: drivers/net/wireless/broadcom/b43/
30223024
30233025 B43LEGACY WIRELESS DRIVER
@@ -3025,7 +3027,7 @@ M: Larry Finger <Larry.Finger@lwfinger.net> · 1 unmodified line
30253027 L: linux-wireless@vger.kernel.org
30263028 L: b43-dev@lists.infradead.org
30273029 S: Maintained
3028−W: http://wireless.kernel.org/en/users/Drivers/b43
3030+W: https://wireless.wiki.kernel.org/en/users/Drivers/b43
30293031 F: drivers/net/wireless/broadcom/b43legacy/
30303032
30313033 BACKLIGHT CLASS/SUBSYSTEM
@@ -3840,7 +3842,7 @@ CARL9170 LINUX COMMUNITY WIRELESS DRIVER · 808 unmodified lines
38403842 M: Christian Lamparter <chunkeey@googlemail.com>
38413843 L: linux-wireless@vger.kernel.org
38423844 S: Maintained
3843−W: http://wireless.kernel.org/en/users/Drivers/carl9170
3845+W: https://wireless.wiki.kernel.org/en/users/Drivers/carl9170
38443846 F: drivers/net/wireless/ath/carl9170/
38453847
38463848 CAVIUM I2C DRIVER
@@ -5173,6 +5175,7 @@ S: Maintained · 1326 unmodified lines
51735175 F: drivers/soc/fsl/dpio
51745176
51755177 DPAA2 ETHERNET DRIVER
5178+M: Ioana Ciornei <ioana.ciornei@nxp.com>
51765179 M: Ioana Radulescu <ruxandra.radulescu@nxp.com>
51775180 L: netdev@vger.kernel.org
51785181 S: Maintained
@@ -5552,7 +5555,7 @@ M: Chen-Yu Tsai <wens@csie.org> · 373 unmodified lines
55525555 L: dri-devel@lists.freedesktop.org
55535556 S: Supported
55545557 T: git git://anongit.freedesktop.org/drm/drm-misc
5555−F: Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
5558+F: Documentation/devicetree/bindings/display/allwinner*
55565559 F: drivers/gpu/drm/sun4i/
55575560
55585561 DRM DRIVERS FOR AMLOGIC SOCS
@@ -5934,6 +5937,7 @@ M: Tal Gilboa <talgi@mellanox.com> · 375 unmodified lines
59345937 S: Maintained
59355938 F: include/linux/dim.h
59365939 F: lib/dim/
5940+F: Documentation/networking/net_dim.rst
59375941
59385942 DZ DECSTATION DZ11 SERIAL DRIVER
59395943 M: "Maciej W. Rozycki" <macro@linux-mips.org>
@@ -9325,6 +9329,7 @@ M: Christian Borntraeger <borntraeger@de.ibm.com> · 3385 unmodified lines
93259329 M: Janosch Frank <frankja@linux.ibm.com>
93269330 R: David Hildenbrand <david@redhat.com>
93279331 R: Cornelia Huck <cohuck@redhat.com>
9332+R: Claudio Imbrenda <imbrenda@linux.ibm.com>
93289333 L: kvm@vger.kernel.org
93299334 S: Supported
93309335 W: http://www.ibm.com/developerworks/linux/linux390/
@@ -9412,6 +9417,13 @@ F: include/linux/keyctl.h · 81 unmodified lines
94129417 F: include/uapi/linux/keyctl.h
94139418 F: security/keys/
94149419
9420+KFIFO
9421+M: Stefani Seibold <stefani@seibold.net>
9422+S: Maintained
9423+F: include/linux/kfifo.h
9424+F: lib/kfifo.c
9425+F: samples/kfifo/
9426+
94159427 KGDB / KDB /debug_core
94169428 M: Jason Wessel <jason.wessel@windriver.com>
94179429 M: Daniel Thompson <daniel.thompson@linaro.org>
@@ -10063,7 +10075,7 @@ MAC80211 · 645 unmodified lines
1006310075 M: Johannes Berg <johannes@sipsolutions.net>
1006410076 L: linux-wireless@vger.kernel.org
1006510077 S: Maintained
10066−W: http://wireless.kernel.org/
10078+W: https://wireless.wiki.kernel.org/
1006710079 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
1006810080 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
1006910081 F: Documentation/networking/mac80211-injection.txt
@@ -10693,7 +10705,6 @@ MEDIATEK MT76 WIRELESS LAN DRIVER · 623 unmodified lines
1069310705 M: Felix Fietkau <nbd@nbd.name>
1069410706 M: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
1069510707 R: Ryder Lee <ryder.lee@mediatek.com>
10696−R: Roy Luo <royluo@google.com>
1069710708 L: linux-wireless@vger.kernel.org
1069810709 S: Maintained
1069910710 F: drivers/net/wireless/mediatek/mt76/
@@ -12644,7 +12655,7 @@ F: fs/orangefs/ · 1944 unmodified lines
1264412655 ORINOCO DRIVER
1264512656 L: linux-wireless@vger.kernel.org
1264612657 S: Orphan
12647−W: http://wireless.kernel.org/en/users/Drivers/orinoco
12658+W: https://wireless.wiki.kernel.org/en/users/Drivers/orinoco
1264812659 W: http://www.nongnu.org/orinoco/
1264912660 F: drivers/net/wireless/intersil/orinoco/
1265012661
@@ -12670,7 +12681,7 @@ P54 WIRELESS DRIVER · 19 unmodified lines
1267012681 M: Christian Lamparter <chunkeey@googlemail.com>
1267112682 L: linux-wireless@vger.kernel.org
1267212683 S: Maintained
12673−W: http://wireless.kernel.org/en/users/Drivers/p54
12684+W: https://wireless.wiki.kernel.org/en/users/Drivers/p54
1267412685 F: drivers/net/wireless/intersil/p54/
1267512686
1267612687 PACKING
@@ -13038,7 +13049,7 @@ F: drivers/pci/controller/pci-xgene-msi.c · 361 unmodified lines
1303813049
1303913050 PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS
1304013051 M: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
13041−R: Andrew Murray <amurray@thegoodpenguin.co.uk>
13052+R: Rob Herring <robh@kernel.org>
1304213053 L: linux-pci@vger.kernel.org
1304313054 S: Supported
1304413055 Q: http://patchwork.ozlabs.org/project/linux-pci/list/
@@ -13591,7 +13602,7 @@ PRISM54 WIRELESS DRIVER · 546 unmodified lines
1359113602 M: Luis Chamberlain <mcgrof@kernel.org>
1359213603 L: linux-wireless@vger.kernel.org
1359313604 S: Obsolete
13594−W: http://wireless.kernel.org/en/users/Drivers/p54
13605+W: https://wireless.wiki.kernel.org/en/users/Drivers/p54
1359513606 F: drivers/net/wireless/intersil/prism54/
1359613607
1359713608 PROC FILESYSTEM
@@ -13853,7 +13864,8 @@ S: Maintained · 255 unmodified lines
1385313864 F: drivers/scsi/qla1280.[ch]
1385413865
1385513866 QLOGIC QLA2XXX FC-SCSI DRIVER
13856−M: hmadhani@marvell.com
13867+M: Nilesh Javali <njavali@marvell.com>
13868+M: GR-QLogic-Storage-Upstream@marvell.com
1385713869 L: linux-scsi@vger.kernel.org
1385813870 S: Supported
1385913871 F: Documentation/scsi/LICENSE.qla2xxx
@@ -13931,7 +13943,7 @@ QUALCOMM ATHEROS ATH10K WIRELESS DRIVER · 71 unmodified lines
1393113943 M: Kalle Valo <kvalo@codeaurora.org>
1393213944 L: ath10k@lists.infradead.org
1393313945 S: Supported
13934−W: http://wireless.kernel.org/en/users/Drivers/ath10k
13946+W: https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
1393513947 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
1393613948 F: drivers/net/wireless/ath/ath10k/
1393713949
@@ -13946,7 +13958,7 @@ QUALCOMM ATHEROS ATH9K WIRELESS DRIVER · 8 unmodified lines
1394613958 M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com>
1394713959 L: linux-wireless@vger.kernel.org
1394813960 S: Supported
13949−W: http://wireless.kernel.org/en/users/Drivers/ath9k
13961+W: https://wireless.wiki.kernel.org/en/users/Drivers/ath9k
1395013962 F: drivers/net/wireless/ath/ath9k/
1395113963
1395213964 QUALCOMM CAMERA SUBSYSTEM DRIVER
@@ -14043,13 +14055,12 @@ QUALCOMM WCN36XX WIRELESS DRIVER · 90 unmodified lines
1404314055 M: Kalle Valo <kvalo@codeaurora.org>
1404414056 L: wcn36xx@lists.infradead.org
1404514057 S: Supported
14046−W: http://wireless.kernel.org/en/users/Drivers/wcn36xx
14058+W: https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx
1404714059 T: git git://github.com/KrasnikovEugene/wcn36xx.git
1404814060 F: drivers/net/wireless/ath/wcn36xx/
1404914061
1405014062 QUANTENNA QTNFMAC WIRELESS DRIVER
1405114063 M: Igor Mitsyanko <imitsyanko@quantenna.com>
14052−M: Avinash Patil <avinashp@quantenna.com>
1405314064 M: Sergey Matyukevich <smatyukevich@quantenna.com>
1405414065 L: linux-wireless@vger.kernel.org
1405514066 S: Maintained
@@ -14271,7 +14282,7 @@ REALTEK WIRELESS DRIVER (rtlwifi family) · 215 unmodified lines
1427114282 M: Ping-Ke Shih <pkshih@realtek.com>
1427214283 L: linux-wireless@vger.kernel.org
1427314284 S: Maintained
14274−W: http://wireless.kernel.org/
14285+W: https://wireless.wiki.kernel.org/
1427514286 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
1427614287 F: drivers/net/wireless/realtek/rtlwifi/
1427714288
@@ -14406,7 +14417,7 @@ RFKILL · 128 unmodified lines
1440614417 M: Johannes Berg <johannes@sipsolutions.net>
1440714418 L: linux-wireless@vger.kernel.org
1440814419 S: Maintained
14409−W: http://wireless.kernel.org/
14420+W: https://wireless.wiki.kernel.org/
1441014421 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
1441114422 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
1441214423 F: Documentation/ABI/stable/sysfs-class-rfkill
@@ -14555,7 +14566,7 @@ F: drivers/media/dvb-frontends/rtl2832_sdr* · 142 unmodified lines
1455514566 RTL8180 WIRELESS DRIVER
1455614567 L: linux-wireless@vger.kernel.org
1455714568 S: Orphan
14558−W: http://wireless.kernel.org/
14569+W: https://wireless.wiki.kernel.org/
1455914570 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
1456014571 F: drivers/net/wireless/realtek/rtl818x/rtl8180/
1456114572
@@ -14565,7 +14576,7 @@ M: Hin-Tak Leung <htl10@users.sourceforge.net> · 3 unmodified lines
1456514576 M: Larry Finger <Larry.Finger@lwfinger.net>
1456614577 L: linux-wireless@vger.kernel.org
1456714578 S: Maintained
14568−W: http://wireless.kernel.org/
14579+W: https://wireless.wiki.kernel.org/
1456914580 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
1457014581 F: drivers/net/wireless/realtek/rtl818x/rtl8187/
1457114582
@@ -16920,8 +16931,8 @@ F: drivers/media/platform/ti-vpe/ · 2348 unmodified lines
1692016931 TI WILINK WIRELESS DRIVERS
1692116932 L: linux-wireless@vger.kernel.org
1692216933 S: Orphan
16923−W: http://wireless.kernel.org/en/users/Drivers/wl12xx
16924−W: http://wireless.kernel.org/en/users/Drivers/wl1251
16934+W: https://wireless.wiki.kernel.org/en/users/Drivers/wl12xx
16935+W: https://wireless.wiki.kernel.org/en/users/Drivers/wl1251
1692516936 T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
1692616937 F: drivers/net/wireless/ti/
1692716938 F: include/linux/wl12xx.h
@@ -18203,7 +18214,7 @@ M: Maya Erez <merez@codeaurora.org> · 1275 unmodified lines
1820318214 L: linux-wireless@vger.kernel.org
1820418215 L: wil6210@qti.qualcomm.com
1820518216 S: Supported
18206−W: http://wireless.kernel.org/en/users/Drivers/wil6210
18217+W: https://wireless.wiki.kernel.org/en/users/Drivers/wil6210
1820718218 F: drivers/net/wireless/ath/wil6210/
1820818219
1820918220 WIMAX STACK
Makefile+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22 VERSION = 5
33 PATCHLEVEL = 7
44 SUBLEVEL = 0
5−EXTRAVERSION = -rc1
5+EXTRAVERSION = -rc3
66 NAME = Kleptomaniac Octopus
77
88 # *DOCUMENTATION*
arch/arc/include/asm/module.h+0−5
@@ -3,7 +3,6 @@ · 2 unmodified lines
33 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
44 *
55 * Amit Bhor, Sameer Dhavale: Codito Technologies 2004
6−
76 */
87
98 #ifndef _ASM_ARC_MODULE_H
@@ -19,8 +18,4 @@ struct mod_arch_specific { · 9 unmodified lines
1918 const char *secstr;
2019 };
2120
22−#define MODULE_PROC_FAMILY "ARC700"
23−
24−#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
25−
2621 #endif /* _ASM_ARC_MODULE_H */
arch/arc/include/asm/vermagic.h+8−0
@@ -0,0 +1,8 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+
3+#ifndef _ASM_VERMAGIC_H
4+#define _ASM_VERMAGIC_H
5+
6+#define MODULE_ARCH_VERMAGIC "ARC700"
7+
8+#endif /* _ASM_VERMAGIC_H */
arch/arm/boot/compressed/head.S+2−1
@@ -1450,7 +1450,8 @@ ENTRY(efi_enter_kernel) · 1449 unmodified lines
14501450 @ running beyond the PoU, and so calling cache_off below from
14511451 @ inside the PE/COFF loader allocated region is unsafe unless
14521452 @ we explicitly clean it to the PoC.
1453− adr r0, call_cache_fn @ region of code we will
1453+ ARM( adrl r0, call_cache_fn )
1454+ THUMB( adr r0, call_cache_fn ) @ region of code we will
14541455 adr r1, 0f @ run with MMU off
14551456 bl cache_clean_flush
14561457 bl cache_off
arch/arm/boot/dts/bcm2835-rpi.dtsi+3−0
@@ -14,6 +14,9 @@ · 13 unmodified lines
1414 soc {
1515 firmware: firmware {
1616 compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
17+ #address-cells = <1>;
18+ #size-cells = <1>;
19+
1720 mboxes = <&mailbox>;
1821 dma-ranges;
1922 };
arch/arm/boot/dts/bcm283x.dtsi+1−0
@@ -372,6 +372,7 @@ · 371 unmodified lines
372372 "dsi0_ddr2",
373373 "dsi0_ddr";
374374
375+ status = "disabled";
375376 };
376377
377378 aux: aux@7e215000 {
arch/arm/boot/dts/imx6qdl.dtsi+3−3
@@ -1039,13 +1039,13 @@ · 1038 unmodified lines
10391039 compatible = "fsl,imx6q-fec";
10401040 reg = <0x02188000 0x4000>;
10411041 interrupt-names = "int0", "pps";
1042− interrupts-extended =
1043− <&intc 0 118 IRQ_TYPE_LEVEL_HIGH>,
1044− <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
1042+ interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
1043+ <0 119 IRQ_TYPE_LEVEL_HIGH>;
10451044 clocks = <&clks IMX6QDL_CLK_ENET>,
10461045 <&clks IMX6QDL_CLK_ENET>,
10471046 <&clks IMX6QDL_CLK_ENET_REF>;
10481047 clock-names = "ipg", "ahb", "ptp";
1048+ gpr = <&gpr>;
10491049 status = "disabled";
10501050 };
10511051
arch/arm/boot/dts/imx6qp.dtsi+0−1
@@ -77,7 +77,6 @@ · 76 unmodified lines
7777 };
7878
7979 &fec {
80− /delete-property/interrupts-extended;
8180 interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
8281 <0 119 IRQ_TYPE_LEVEL_HIGH>;
8382 };
arch/arm/boot/dts/omap3-n950-n9.dtsi+5−0
@@ -341,6 +341,11 @@ · 340 unmodified lines
341341 status = "disabled";
342342 };
343343
344+/* RNG not directly accessible on N950/N9. */
345+&rng_target {
346+ status = "disabled";
347+};
348+
344349 &usb_otg_hs {
345350 interface-type = <0>;
346351 usb-phy = <&usb2_phy>;
arch/arm/include/asm/module.h+0−24
@@ -37,30 +37,6 @@ struct mod_arch_specific { · 36 unmodified lines
3737 struct module;
3838 u32 get_module_plt(struct module *mod, unsigned long loc, Elf32_Addr val);
3939
40−/*
41− * Add the ARM architecture version to the version magic string
42− */
43−#define MODULE_ARCH_VERMAGIC_ARMVSN "ARMv" __stringify(__LINUX_ARM_ARCH__) " "
44−
45−/* Add __virt_to_phys patching state as well */
46−#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
47−#define MODULE_ARCH_VERMAGIC_P2V "p2v8 "
48−#else
49−#define MODULE_ARCH_VERMAGIC_P2V ""
50−#endif
51−
52−/* Add instruction set architecture tag to distinguish ARM/Thumb kernels */
53−#ifdef CONFIG_THUMB2_KERNEL
54−#define MODULE_ARCH_VERMAGIC_ARMTHUMB "thumb2 "
55−#else
56−#define MODULE_ARCH_VERMAGIC_ARMTHUMB ""
57−#endif
58−
59−#define MODULE_ARCH_VERMAGIC \
60− MODULE_ARCH_VERMAGIC_ARMVSN \
61− MODULE_ARCH_VERMAGIC_ARMTHUMB \
62− MODULE_ARCH_VERMAGIC_P2V
63−
6440 #ifdef CONFIG_THUMB2_KERNEL
6541 #define HAVE_ARCH_KALLSYMS_SYMBOL_VALUE
6642 static inline unsigned long kallsyms_symbol_value(const Elf_Sym *sym)
arch/arm/include/asm/vermagic.h+31−0
@@ -0,0 +1,31 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _ASM_VERMAGIC_H
3+#define _ASM_VERMAGIC_H
4+
5+#include <linux/stringify.h>
6+
7+/*
8+ * Add the ARM architecture version to the version magic string
9+ */
10+#define MODULE_ARCH_VERMAGIC_ARMVSN "ARMv" __stringify(__LINUX_ARM_ARCH__) " "
11+
12+/* Add __virt_to_phys patching state as well */
13+#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
14+#define MODULE_ARCH_VERMAGIC_P2V "p2v8 "
15+#else
16+#define MODULE_ARCH_VERMAGIC_P2V ""
17+#endif
18+
19+/* Add instruction set architecture tag to distinguish ARM/Thumb kernels */
20+#ifdef CONFIG_THUMB2_KERNEL
21+#define MODULE_ARCH_VERMAGIC_ARMTHUMB "thumb2 "
22+#else
23+#define MODULE_ARCH_VERMAGIC_ARMTHUMB ""
24+#endif
25+
26+#define MODULE_ARCH_VERMAGIC \
27+ MODULE_ARCH_VERMAGIC_ARMVSN \
28+ MODULE_ARCH_VERMAGIC_ARMTHUMB \
29+ MODULE_ARCH_VERMAGIC_P2V
30+
31+#endif /* _ASM_VERMAGIC_H */
arch/arm/mach-imx/Makefile+2−0
@@ -91,8 +91,10 @@ AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a · 90 unmodified lines
9191 obj-$(CONFIG_SOC_IMX6) += suspend-imx6.o
9292 obj-$(CONFIG_SOC_IMX53) += suspend-imx53.o
9393 endif
94+ifeq ($(CONFIG_ARM_CPU_SUSPEND),y)
9495 AFLAGS_resume-imx6.o :=-Wa,-march=armv7-a
9596 obj-$(CONFIG_SOC_IMX6) += resume-imx6.o
97+endif
9698 obj-$(CONFIG_SOC_IMX6) += pm-imx6.o
9799
98100 obj-$(CONFIG_SOC_IMX1) += mach-imx1.o
arch/arm/net/bpf_jit_32.c+34−18
@@ -929,7 +929,11 @@ static inline void emit_a32_rsh_i64(const s8 dst[], · 928 unmodified lines
929929 rd = arm_bpf_get_reg64(dst, tmp, ctx);
930930
931931 /* Do LSR operation */
932− if (val < 32) {
932+ if (val == 0) {
933+ /* An immediate value of 0 encodes a shift amount of 32
934+ * for LSR. To shift by 0, don't do anything.
935+ */
936+ } else if (val < 32) {
933937 emit(ARM_MOV_SI(tmp2[1], rd[1], SRTYPE_LSR, val), ctx);
934938 emit(ARM_ORR_SI(rd[1], tmp2[1], rd[0], SRTYPE_ASL, 32 - val), ctx);
935939 emit(ARM_MOV_SI(rd[0], rd[0], SRTYPE_LSR, val), ctx);
@@ -955,7 +959,11 @@ static inline void emit_a32_arsh_i64(const s8 dst[], · 19 unmodified lines
955959 rd = arm_bpf_get_reg64(dst, tmp, ctx);
956960
957961 /* Do ARSH operation */
958− if (val < 32) {
962+ if (val == 0) {
963+ /* An immediate value of 0 encodes a shift amount of 32
964+ * for ASR. To shift by 0, don't do anything.
965+ */
966+ } else if (val < 32) {
959967 emit(ARM_MOV_SI(tmp2[1], rd[1], SRTYPE_LSR, val), ctx);
960968 emit(ARM_ORR_SI(rd[1], tmp2[1], rd[0], SRTYPE_ASL, 32 - val), ctx);
961969 emit(ARM_MOV_SI(rd[0], rd[0], SRTYPE_ASR, val), ctx);
@@ -992,21 +1000,35 @@ static inline void emit_a32_mul_r64(const s8 dst[], const s8 src[], · 30 unmodified lines
9921000 arm_bpf_put_reg32(dst_hi, rd[0], ctx);
9931001 }
9941002
1003+static bool is_ldst_imm(s16 off, const u8 size)
1004+{
1005+ s16 off_max = 0;
1006+
1007+ switch (size) {
1008+ case BPF_B:
1009+ case BPF_W:
1010+ off_max = 0xfff;
1011+ break;
1012+ case BPF_H:
1013+ off_max = 0xff;
1014+ break;
1015+ case BPF_DW:
1016+ /* Need to make sure off+4 does not overflow. */
1017+ off_max = 0xfff - 4;
1018+ break;
1019+ }
1020+ return -off_max <= off && off <= off_max;
1021+}
1022+
9951023 /* *(size *)(dst + off) = src */
9961024 static inline void emit_str_r(const s8 dst, const s8 src[],
997− s32 off, struct jit_ctx *ctx, const u8 sz){
1025+ s16 off, struct jit_ctx *ctx, const u8 sz){
9981026 const s8 *tmp = bpf2a32[TMP_REG_1];
999− s32 off_max;
10001027 s8 rd;
10011028
10021029 rd = arm_bpf_get_reg32(dst, tmp[1], ctx);
10031030
1004− if (sz == BPF_H)
1005− off_max = 0xff;
1006− else
1007− off_max = 0xfff;
1008−
1009− if (off < 0 || off > off_max) {
1031+ if (!is_ldst_imm(off, sz)) {
10101032 emit_a32_mov_i(tmp[0], off, ctx);
10111033 emit(ARM_ADD_R(tmp[0], tmp[0], rd), ctx);
10121034 rd = tmp[0];
@@ -1035,18 +1057,12 @@ static inline void emit_str_r(const s8 dst, const s8 src[], · 22 unmodified lines
10351057
10361058 /* dst = *(size*)(src + off) */
10371059 static inline void emit_ldx_r(const s8 dst[], const s8 src,
1038− s32 off, struct jit_ctx *ctx, const u8 sz){
1060+ s16 off, struct jit_ctx *ctx, const u8 sz){
10391061 const s8 *tmp = bpf2a32[TMP_REG_1];
10401062 const s8 *rd = is_stacked(dst_lo) ? tmp : dst;
10411063 s8 rm = src;
1042− s32 off_max;
1043−
1044− if (sz == BPF_H)
1045− off_max = 0xff;
1046− else
1047− off_max = 0xfff;
10481064
1049− if (off < 0 || off > off_max) {
1065+ if (!is_ldst_imm(off, sz)) {
10501066 emit_a32_mov_i(tmp[0], off, ctx);
10511067 emit(ARM_ADD_R(tmp[0], tmp[0], src), ctx);
10521068 rm = tmp[0];
arch/arm/xen/enlighten.c+1−1
@@ -36,7 +36,7 @@ · 35 unmodified lines
3636
3737 #include <linux/mm.h>
3838
39−struct start_info _xen_start_info;
39+static struct start_info _xen_start_info;
4040 struct start_info *xen_start_info = &_xen_start_info;
4141 EXPORT_SYMBOL(xen_start_info);
4242
arch/arm64/include/asm/module.h+0−2
@@ -7,8 +7,6 @@ · 6 unmodified lines
77
88 #include <asm-generic/module.h>
99
10−#define MODULE_ARCH_VERMAGIC "aarch64"
11−
1210 #ifdef CONFIG_ARM64_MODULE_PLTS
1311 struct mod_plt_sec {
1412 int plt_shndx;
arch/arm64/include/asm/pointer_auth.h+6−3
@@ -47,7 +47,7 @@ static inline void ptrauth_keys_init_user(struct ptrauth_keys_user *keys) · 46 unmodified lines
4747 get_random_bytes(&keys->apga, sizeof(keys->apga));
4848 }
4949
50−#define __ptrauth_key_install(k, v) \
50+#define __ptrauth_key_install_nosync(k, v) \
5151 do { \
5252 struct ptrauth_key __pki_v = (v); \
5353 write_sysreg_s(__pki_v.lo, SYS_ ## k ## KEYLO_EL1); \
@@ -62,8 +62,11 @@ static __always_inline void ptrauth_keys_init_kernel(struct ptrauth_keys_kernel · 8 unmodified lines
6262
6363 static __always_inline void ptrauth_keys_switch_kernel(struct ptrauth_keys_kernel *keys)
6464 {
65− if (system_supports_address_auth())
66− __ptrauth_key_install(APIA, keys->apia);
65+ if (!system_supports_address_auth())
66+ return;
67+
68+ __ptrauth_key_install_nosync(APIA, keys->apia);
69+ isb();
6770 }
6871
6972 extern int ptrauth_prctl_reset_keys(struct task_struct *tsk, unsigned long arg);
arch/arm64/include/asm/sysreg.h+3−1
@@ -49,7 +49,9 @@ · 48 unmodified lines
4949 #ifndef CONFIG_BROKEN_GAS_INST
5050
5151 #ifdef __ASSEMBLY__
52−#define __emit_inst(x) .inst (x)
52+// The space separator is omitted so that __emit_inst(x) can be parsed as
53+// either an assembler directive or an assembler macro argument.
54+#define __emit_inst(x) .inst(x)
5355 #else
5456 #define __emit_inst(x) ".inst " __stringify((x)) "\n\t"
5557 #endif
arch/arm64/include/asm/vermagic.h+10−0
@@ -0,0 +1,10 @@
1+/* SPDX-License-Identifier: GPL-2.0-only */
2+/*
3+ * Copyright (C) 2012 ARM Ltd.
4+ */
5+#ifndef _ASM_VERMAGIC_H
6+#define _ASM_VERMAGIC_H
7+
8+#define MODULE_ARCH_VERMAGIC "aarch64"
9+
10+#endif /* _ASM_VERMAGIC_H */
arch/arm64/kernel/vdso.c+1−12
@@ -260,18 +260,7 @@ static int __aarch32_alloc_vdso_pages(void) · 259 unmodified lines
260260 if (ret)
261261 return ret;
262262
263− ret = aarch32_alloc_kuser_vdso_page();
264− if (ret) {
265− unsigned long c_vvar =
266− (unsigned long)page_to_virt(aarch32_vdso_pages[C_VVAR]);
267− unsigned long c_vdso =
268− (unsigned long)page_to_virt(aarch32_vdso_pages[C_VDSO]);
269−
270− free_page(c_vvar);
271− free_page(c_vdso);
272− }
273−
274− return ret;
263+ return aarch32_alloc_kuser_vdso_page();
275264 }
276265 #else
277266 static int __aarch32_alloc_vdso_pages(void)
arch/h8300/kernel/.gitignore+2−0
@@ -0,0 +1,2 @@
1+# SPDX-License-Identifier: GPL-2.0-only
2+vmlinux.lds
arch/hexagon/include/asm/vermagic.hrenamed from arch/hexagon/include/asm/module.h+4−4
@@ -3,11 +3,11 @@ · 2 unmodified lines
33 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
44 */
55
6−#ifndef _ASM_MODULE_H
7−#define _ASM_MODULE_H
6+#ifndef _ASM_VERMAGIC_H
7+#define _ASM_VERMAGIC_H
88
9−#include <asm-generic/module.h>
9+#include <linux/stringify.h>
1010
1111 #define MODULE_ARCH_VERMAGIC __stringify(PROCESSOR_MODEL_NAME) " "
1212
13−#endif
13+#endif /* _ASM_VERMAGIC_H */
arch/ia64/include/asm/module.h+0−4
@@ -26,10 +26,6 @@ struct mod_arch_specific { · 25 unmodified lines
2626 unsigned int next_got_entry; /* index of next available got entry */
2727 };
2828
29−#define MODULE_PROC_FAMILY "ia64"
30−#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY \
31− "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__)
32−
3329 #define ARCH_SHF_SMALL SHF_IA_64_SHORT
3430
3531 #endif /* _ASM_IA64_MODULE_H */
arch/ia64/include/asm/vermagic.h+15−0
@@ -0,0 +1,15 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+/*
3+ * Copyright (C) 2003 Hewlett-Packard Co
4+ * David Mosberger-Tang <davidm@hpl.hp.com>
5+ */
6+
7+#ifndef _ASM_VERMAGIC_H
8+#define _ASM_VERMAGIC_H
9+
10+#include <linux/stringify.h>
11+
12+#define MODULE_ARCH_VERMAGIC "ia64" \
13+ "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__)
14+
15+#endif /* _ASM_VERMAGIC_H */
arch/m68k/include/asm/Kbuild+0−1
@@ -1,7 +1,6 @@
11 # SPDX-License-Identifier: GPL-2.0
22 generated-y += syscall_table.h
33 generic-y += extable.h
4−generic-y += hardirq.h
54 generic-y += kvm_para.h
65 generic-y += local64.h
76 generic-y += mcs_spinlock.h
arch/mips/include/asm/module.h+0−61
@@ -83,65 +83,4 @@ search_module_dbetables(unsigned long addr) · 82 unmodified lines
8383 }
8484 #endif
8585
86−#ifdef CONFIG_CPU_BMIPS
87−#define MODULE_PROC_FAMILY "BMIPS "
88−#elif defined CONFIG_CPU_MIPS32_R1
89−#define MODULE_PROC_FAMILY "MIPS32_R1 "
90−#elif defined CONFIG_CPU_MIPS32_R2
91−#define MODULE_PROC_FAMILY "MIPS32_R2 "
92−#elif defined CONFIG_CPU_MIPS32_R6
93−#define MODULE_PROC_FAMILY "MIPS32_R6 "
94−#elif defined CONFIG_CPU_MIPS64_R1
95−#define MODULE_PROC_FAMILY "MIPS64_R1 "
96−#elif defined CONFIG_CPU_MIPS64_R2
97−#define MODULE_PROC_FAMILY "MIPS64_R2 "
98−#elif defined CONFIG_CPU_MIPS64_R6
99−#define MODULE_PROC_FAMILY "MIPS64_R6 "
100−#elif defined CONFIG_CPU_R3000
101−#define MODULE_PROC_FAMILY "R3000 "
102−#elif defined CONFIG_CPU_TX39XX
103−#define MODULE_PROC_FAMILY "TX39XX "
104−#elif defined CONFIG_CPU_VR41XX
105−#define MODULE_PROC_FAMILY "VR41XX "
106−#elif defined CONFIG_CPU_R4X00
107−#define MODULE_PROC_FAMILY "R4X00 "
108−#elif defined CONFIG_CPU_TX49XX
109−#define MODULE_PROC_FAMILY "TX49XX "
110−#elif defined CONFIG_CPU_R5000
111−#define MODULE_PROC_FAMILY "R5000 "
112−#elif defined CONFIG_CPU_R5500
113−#define MODULE_PROC_FAMILY "R5500 "
114−#elif defined CONFIG_CPU_NEVADA
115−#define MODULE_PROC_FAMILY "NEVADA "
116−#elif defined CONFIG_CPU_R10000
117−#define MODULE_PROC_FAMILY "R10000 "
118−#elif defined CONFIG_CPU_RM7000
119−#define MODULE_PROC_FAMILY "RM7000 "
120−#elif defined CONFIG_CPU_SB1
121−#define MODULE_PROC_FAMILY "SB1 "
122−#elif defined CONFIG_CPU_LOONGSON32
123−#define MODULE_PROC_FAMILY "LOONGSON32 "
124−#elif defined CONFIG_CPU_LOONGSON2EF
125−#define MODULE_PROC_FAMILY "LOONGSON2EF "
126−#elif defined CONFIG_CPU_LOONGSON64
127−#define MODULE_PROC_FAMILY "LOONGSON64 "
128−#elif defined CONFIG_CPU_CAVIUM_OCTEON
129−#define MODULE_PROC_FAMILY "OCTEON "
130−#elif defined CONFIG_CPU_XLR
131−#define MODULE_PROC_FAMILY "XLR "
132−#elif defined CONFIG_CPU_XLP
133−#define MODULE_PROC_FAMILY "XLP "
134−#else
135−#error MODULE_PROC_FAMILY undefined for your processor configuration
136−#endif
137−
138−#ifdef CONFIG_32BIT
139−#define MODULE_KERNEL_TYPE "32BIT "
140−#elif defined CONFIG_64BIT
141−#define MODULE_KERNEL_TYPE "64BIT "
142−#endif
143−
144−#define MODULE_ARCH_VERMAGIC \
145− MODULE_PROC_FAMILY MODULE_KERNEL_TYPE
146−
14786 #endif /* _ASM_MODULE_H */
arch/mips/include/asm/vermagic.h+66−0
@@ -0,0 +1,66 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _ASM_VERMAGIC_H
3+#define _ASM_VERMAGIC_H
4+
5+#ifdef CONFIG_CPU_BMIPS
6+#define MODULE_PROC_FAMILY "BMIPS "
7+#elif defined CONFIG_CPU_MIPS32_R1
8+#define MODULE_PROC_FAMILY "MIPS32_R1 "
9+#elif defined CONFIG_CPU_MIPS32_R2
10+#define MODULE_PROC_FAMILY "MIPS32_R2 "
11+#elif defined CONFIG_CPU_MIPS32_R6
12+#define MODULE_PROC_FAMILY "MIPS32_R6 "
13+#elif defined CONFIG_CPU_MIPS64_R1
14+#define MODULE_PROC_FAMILY "MIPS64_R1 "
15+#elif defined CONFIG_CPU_MIPS64_R2
16+#define MODULE_PROC_FAMILY "MIPS64_R2 "
17+#elif defined CONFIG_CPU_MIPS64_R6
18+#define MODULE_PROC_FAMILY "MIPS64_R6 "
19+#elif defined CONFIG_CPU_R3000
20+#define MODULE_PROC_FAMILY "R3000 "
21+#elif defined CONFIG_CPU_TX39XX
22+#define MODULE_PROC_FAMILY "TX39XX "
23+#elif defined CONFIG_CPU_VR41XX
24+#define MODULE_PROC_FAMILY "VR41XX "
25+#elif defined CONFIG_CPU_R4X00
26+#define MODULE_PROC_FAMILY "R4X00 "
27+#elif defined CONFIG_CPU_TX49XX
28+#define MODULE_PROC_FAMILY "TX49XX "
29+#elif defined CONFIG_CPU_R5000
30+#define MODULE_PROC_FAMILY "R5000 "
31+#elif defined CONFIG_CPU_R5500
32+#define MODULE_PROC_FAMILY "R5500 "
33+#elif defined CONFIG_CPU_NEVADA
34+#define MODULE_PROC_FAMILY "NEVADA "
35+#elif defined CONFIG_CPU_R10000
36+#define MODULE_PROC_FAMILY "R10000 "
37+#elif defined CONFIG_CPU_RM7000
38+#define MODULE_PROC_FAMILY "RM7000 "
39+#elif defined CONFIG_CPU_SB1
40+#define MODULE_PROC_FAMILY "SB1 "
41+#elif defined CONFIG_CPU_LOONGSON32
42+#define MODULE_PROC_FAMILY "LOONGSON32 "
43+#elif defined CONFIG_CPU_LOONGSON2EF
44+#define MODULE_PROC_FAMILY "LOONGSON2EF "
45+#elif defined CONFIG_CPU_LOONGSON64
46+#define MODULE_PROC_FAMILY "LOONGSON64 "
47+#elif defined CONFIG_CPU_CAVIUM_OCTEON
48+#define MODULE_PROC_FAMILY "OCTEON "
49+#elif defined CONFIG_CPU_XLR
50+#define MODULE_PROC_FAMILY "XLR "
51+#elif defined CONFIG_CPU_XLP
52+#define MODULE_PROC_FAMILY "XLP "
53+#else
54+#error MODULE_PROC_FAMILY undefined for your processor configuration
55+#endif
56+
57+#ifdef CONFIG_32BIT
58+#define MODULE_KERNEL_TYPE "32BIT "
59+#elif defined CONFIG_64BIT
60+#define MODULE_KERNEL_TYPE "64BIT "
61+#endif
62+
63+#define MODULE_ARCH_VERMAGIC \
64+ MODULE_PROC_FAMILY MODULE_KERNEL_TYPE
65+
66+#endif /* _ASM_VERMAGIC_H */
arch/nds32/include/asm/vermagic.hrenamed from arch/nds32/include/asm/module.h+3−5
@@ -1,11 +1,9 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 // Copyright (C) 2005-2017 Andes Technology Corporation
33
4−#ifndef _ASM_NDS32_MODULE_H
5−#define _ASM_NDS32_MODULE_H
6−
7−#include <asm-generic/module.h>
4+#ifndef _ASM_VERMAGIC_H
5+#define _ASM_VERMAGIC_H
86
97 #define MODULE_ARCH_VERMAGIC "NDS32v3"
108
11−#endif /* _ASM_NDS32_MODULE_H */
9+#endif /* _ASM_VERMAGIC_H */
arch/powerpc/include/asm/module.h+0−18
@@ -3,28 +3,10 @@ · 2 unmodified lines
33 #define _ASM_POWERPC_MODULE_H
44 #ifdef __KERNEL__
55
6−/*
7− */
8−
96 #include <linux/list.h>
107 #include <asm/bug.h>
118 #include <asm-generic/module.h>
129
13−
14−#ifdef CONFIG_MPROFILE_KERNEL
15−#define MODULE_ARCH_VERMAGIC_FTRACE "mprofile-kernel "
16−#else
17−#define MODULE_ARCH_VERMAGIC_FTRACE ""
18−#endif
19−
20−#ifdef CONFIG_RELOCATABLE
21−#define MODULE_ARCH_VERMAGIC_RELOCATABLE "relocatable "
22−#else
23−#define MODULE_ARCH_VERMAGIC_RELOCATABLE ""
24−#endif
25−
26−#define MODULE_ARCH_VERMAGIC MODULE_ARCH_VERMAGIC_FTRACE MODULE_ARCH_VERMAGIC_RELOCATABLE
27−
2810 #ifndef __powerpc64__
2911 /*
3012 * Thanks to Paul M for explaining this.
arch/powerpc/include/asm/vermagic.h+20−0
@@ -0,0 +1,20 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _ASM_VERMAGIC_H
3+#define _ASM_VERMAGIC_H
4+
5+#ifdef CONFIG_MPROFILE_KERNEL
6+#define MODULE_ARCH_VERMAGIC_FTRACE "mprofile-kernel "
7+#else
8+#define MODULE_ARCH_VERMAGIC_FTRACE ""
9+#endif
10+
11+#ifdef CONFIG_RELOCATABLE
12+#define MODULE_ARCH_VERMAGIC_RELOCATABLE "relocatable "
13+#else
14+#define MODULE_ARCH_VERMAGIC_RELOCATABLE ""
15+#endif
16+
17+#define MODULE_ARCH_VERMAGIC \
18+ MODULE_ARCH_VERMAGIC_FTRACE MODULE_ARCH_VERMAGIC_RELOCATABLE
19+
20+#endif /* _ASM_VERMAGIC_H */
arch/powerpc/kernel/entry_32.S+1−1
@@ -732,7 +732,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPE) · 731 unmodified lines
732732 stw r10,_CCR(r1)
733733 stw r1,KSP(r3) /* Set old stack pointer */
734734
735− kuap_check r2, r4
735+ kuap_check r2, r0
736736 #ifdef CONFIG_SMP
737737 /* We need a sync somewhere here to make sure that if the
738738 * previous task gets rescheduled on another CPU, it sees all
arch/powerpc/kernel/setup_64.c+2−0
@@ -534,6 +534,8 @@ static bool __init parse_cache_info(struct device_node *np, · 533 unmodified lines
534534 lsizep = of_get_property(np, propnames[3], NULL);
535535 if (bsizep == NULL)
536536 bsizep = lsizep;
537+ if (lsizep == NULL)
538+ lsizep = bsizep;
537539 if (lsizep != NULL)
538540 lsize = be32_to_cpu(*lsizep);
539541 if (bsizep != NULL)
arch/powerpc/kvm/book3s_64_mmu_hv.c+5−4
@@ -604,18 +604,19 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 603 unmodified lines
604604 */
605605 local_irq_disable();
606606 ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift);
607+ pte = __pte(0);
608+ if (ptep)
609+ pte = *ptep;
610+ local_irq_enable();
607611 /*
608612 * If the PTE disappeared temporarily due to a THP
609613 * collapse, just return and let the guest try again.
610614 */
611− if (!ptep) {
612− local_irq_enable();
615+ if (!pte_present(pte)) {
613616 if (page)
614617 put_page(page);
615618 return RESUME_GUEST;
616619 }
617− pte = *ptep;
618− local_irq_enable();
619620 hpa = pte_pfn(pte) << PAGE_SHIFT;
620621 pte_size = PAGE_SIZE;
621622 if (shift)
arch/powerpc/kvm/book3s_64_mmu_radix.c+5−4
@@ -815,18 +815,19 @@ int kvmppc_book3s_instantiate_page(struct kvm_vcpu *vcpu, · 814 unmodified lines
815815 */
816816 local_irq_disable();
817817 ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift);
818+ pte = __pte(0);
819+ if (ptep)
820+ pte = *ptep;
821+ local_irq_enable();
818822 /*
819823 * If the PTE disappeared temporarily due to a THP
820824 * collapse, just return and let the guest try again.
821825 */
822− if (!ptep) {
823− local_irq_enable();
826+ if (!pte_present(pte)) {
824827 if (page)
825828 put_page(page);
826829 return RESUME_GUEST;
827830 }
828− pte = *ptep;
829− local_irq_enable();
830831
831832 /* If we're logging dirty pages, always map single pages */
832833 large_enable = !(memslot->flags & KVM_MEM_LOG_DIRTY_PAGES);
arch/powerpc/mm/nohash/8xx.c+3−0
@@ -185,6 +185,7 @@ void mmu_mark_initmem_nx(void) · 184 unmodified lines
185185 mmu_mapin_ram_chunk(etext8, einittext8, PAGE_KERNEL);
186186 }
187187 }
188+ _tlbil_all();
188189 }
189190
190191 #ifdef CONFIG_STRICT_KERNEL_RWX
@@ -199,6 +200,8 @@ void mmu_mark_rodata_ro(void) · 8 unmodified lines
199200 ~(LARGE_PAGE_SIZE_8M - 1)));
200201 mmu_patch_addis(&patch__dtlbmiss_romem_top, -__pa(_sinittext));
201202
203+ _tlbil_all();
204+
202205 /* Update page tables for PTDUMP and BDI */
203206 mmu_mapin_ram_chunk(0, sinittext, __pgprot(0));
204207 mmu_mapin_ram_chunk(0, etext, PAGE_KERNEL_ROX);
arch/powerpc/platforms/Kconfig.cputype+1−1
@@ -397,7 +397,7 @@ config PPC_KUAP · 396 unmodified lines
397397
398398 config PPC_KUAP_DEBUG
399399 bool "Extra debugging for Kernel Userspace Access Protection"
400− depends on PPC_KUAP && (PPC_RADIX_MMU || PPC_32)
400+ depends on PPC_KUAP && (PPC_RADIX_MMU || PPC32)
401401 help
402402 Add extra debugging for Kernel Userspace Access Protection (KUAP)
403403 If you're unsure, say N.
arch/riscv/Kconfig+1−1
@@ -55,7 +55,7 @@ config RISCV · 54 unmodified lines
5555 select ARCH_HAS_PTE_SPECIAL
5656 select ARCH_HAS_MMIOWB
5757 select ARCH_HAS_DEBUG_VIRTUAL
58− select HAVE_EBPF_JIT
58+ select HAVE_EBPF_JIT if MMU
5959 select EDAC_SUPPORT
6060 select ARCH_HAS_GIGANTIC_PAGE
6161 select ARCH_HAS_SET_DIRECT_MAP
arch/riscv/include/asm/module.h+0−2
@@ -6,8 +6,6 @@ · 5 unmodified lines
66
77 #include <asm-generic/module.h>
88
9−#define MODULE_ARCH_VERMAGIC "riscv"
10−
119 struct module;
1210 unsigned long module_emit_got_entry(struct module *mod, unsigned long val);
1311 unsigned long module_emit_plt_entry(struct module *mod, unsigned long val);
arch/riscv/include/asm/vermagic.h+9−0
@@ -0,0 +1,9 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+/* Copyright (C) 2017 Andes Technology Corporation */
3+
4+#ifndef _ASM_VERMAGIC_H
5+#define _ASM_VERMAGIC_H
6+
7+#define MODULE_ARCH_VERMAGIC "riscv"
8+
9+#endif /* _ASM_VERMAGIC_H */
arch/riscv/net/bpf_jit_comp64.c+32−17
@@ -110,6 +110,16 @@ static bool is_32b_int(s64 val) · 109 unmodified lines
110110 return -(1L << 31) <= val && val < (1L << 31);
111111 }
112112
113+static bool in_auipc_jalr_range(s64 val)
114+{
115+ /*
116+ * auipc+jalr can reach any signed PC-relative offset in the range
117+ * [-2^31 - 2^11, 2^31 - 2^11).
118+ */
119+ return (-(1L << 31) - (1L << 11)) <= val &&
120+ val < ((1L << 31) - (1L << 11));
121+}
122+
113123 static void emit_imm(u8 rd, s64 val, struct rv_jit_context *ctx)
114124 {
115125 /* Note that the immediate from the add is sign-extended,
@@ -380,20 +390,24 @@ static void emit_sext_32_rd(u8 *rd, struct rv_jit_context *ctx) · 264 unmodified lines
380390 *rd = RV_REG_T2;
381391 }
382392
383−static void emit_jump_and_link(u8 rd, s64 rvoff, bool force_jalr,
384− struct rv_jit_context *ctx)
393+static int emit_jump_and_link(u8 rd, s64 rvoff, bool force_jalr,
394+ struct rv_jit_context *ctx)
385395 {
386396 s64 upper, lower;
387397
388398 if (rvoff && is_21b_int(rvoff) && !force_jalr) {
389399 emit(rv_jal(rd, rvoff >> 1), ctx);
390− return;
400+ return 0;
401+ } else if (in_auipc_jalr_range(rvoff)) {
402+ upper = (rvoff + (1 << 11)) >> 12;
403+ lower = rvoff & 0xfff;
404+ emit(rv_auipc(RV_REG_T1, upper), ctx);
405+ emit(rv_jalr(rd, RV_REG_T1, lower), ctx);
406+ return 0;
391407 }
392408
393− upper = (rvoff + (1 << 11)) >> 12;
394− lower = rvoff & 0xfff;
395− emit(rv_auipc(RV_REG_T1, upper), ctx);
396− emit(rv_jalr(rd, RV_REG_T1, lower), ctx);
409+ pr_err("bpf-jit: target offset 0x%llx is out of range\n", rvoff);
410+ return -ERANGE;
397411 }
398412
399413 static bool is_signed_bpf_cond(u8 cond)
@@ -407,18 +421,16 @@ static int emit_call(bool fixed, u64 addr, struct rv_jit_context *ctx) · 7 unmodified lines
407421 s64 off = 0;
408422 u64 ip;
409423 u8 rd;
424+ int ret;
410425
411426 if (addr && ctx->insns) {
412427 ip = (u64)(long)(ctx->insns + ctx->ninsns);
413428 off = addr - ip;
414− if (!is_32b_int(off)) {
415− pr_err("bpf-jit: target call addr %pK is out of range\n",
416− (void *)addr);
417− return -ERANGE;
418− }
419429 }
420430
421− emit_jump_and_link(RV_REG_RA, off, !fixed, ctx);
431+ ret = emit_jump_and_link(RV_REG_RA, off, !fixed, ctx);
432+ if (ret)
433+ return ret;
422434 rd = bpf_to_rv_reg(BPF_REG_0, ctx);
423435 emit(rv_addi(rd, RV_REG_A0, 0), ctx);
424436 return 0;
@@ -429,7 +441,7 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx, · 4 unmodified lines
429441 {
430442 bool is64 = BPF_CLASS(insn->code) == BPF_ALU64 ||
431443 BPF_CLASS(insn->code) == BPF_JMP;
432− int s, e, rvoff, i = insn - ctx->prog->insnsi;
444+ int s, e, rvoff, ret, i = insn - ctx->prog->insnsi;
433445 struct bpf_prog_aux *aux = ctx->prog->aux;
434446 u8 rd = -1, rs = -1, code = insn->code;
435447 s16 off = insn->off;
@@ -699,7 +711,9 @@ out_be: · 263 unmodified lines
699711 /* JUMP off */
700712 case BPF_JMP | BPF_JA:
701713 rvoff = rv_offset(i, off, ctx);
702− emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx);
714+ ret = emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx);
715+ if (ret)
716+ return ret;
703717 break;
704718
705719 /* IF (dst COND src) JUMP off */
@@ -801,7 +815,6 @@ out_be: · 95 unmodified lines
801815 case BPF_JMP | BPF_CALL:
802816 {
803817 bool fixed;
804− int ret;
805818 u64 addr;
806819
807820 mark_call(ctx);
@@ -826,7 +839,9 @@ out_be: · 18 unmodified lines
826839 break;
827840
828841 rvoff = epilogue_offset(ctx);
829− emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx);
842+ ret = emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx);
843+ if (ret)
844+ return ret;
830845 break;
831846
832847 /* dst = imm64 */
arch/s390/boot/uv.c+0−2
@@ -7,9 +7,7 @@ · 6 unmodified lines
77 #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
88 int __bootdata_preserved(prot_virt_guest);
99 #endif
10−#if IS_ENABLED(CONFIG_KVM)
1110 struct uv_info __bootdata_preserved(uv_info);
12−#endif
1311
1412 void uv_query_info(void)
1513 {
arch/s390/kernel/diag.c+1−1
@@ -133,7 +133,7 @@ void diag_stat_inc(enum diag_stat_enum nr) · 132 unmodified lines
133133 }
134134 EXPORT_SYMBOL(diag_stat_inc);
135135
136−void diag_stat_inc_norecursion(enum diag_stat_enum nr)
136+void notrace diag_stat_inc_norecursion(enum diag_stat_enum nr)
137137 {
138138 this_cpu_inc(diag_stat.counter[nr]);
139139 trace_s390_diagnose_norecursion(diag_map[nr].code);
arch/s390/kernel/smp.c+2−2
@@ -403,7 +403,7 @@ int smp_find_processor_id(u16 address) · 402 unmodified lines
403403 return -1;
404404 }
405405
406−bool arch_vcpu_is_preempted(int cpu)
406+bool notrace arch_vcpu_is_preempted(int cpu)
407407 {
408408 if (test_cpu_flag_of(CIF_ENABLED_WAIT, cpu))
409409 return false;
@@ -413,7 +413,7 @@ bool arch_vcpu_is_preempted(int cpu) · 3 unmodified lines
413413 }
414414 EXPORT_SYMBOL(arch_vcpu_is_preempted);
415415
416−void smp_yield_cpu(int cpu)
416+void notrace smp_yield_cpu(int cpu)
417417 {
418418 if (!MACHINE_HAS_DIAG9C)
419419 return;
arch/s390/kernel/trace.c+1−1
@@ -14,7 +14,7 @@ EXPORT_TRACEPOINT_SYMBOL(s390_diagnose); · 13 unmodified lines
1414
1515 static DEFINE_PER_CPU(unsigned int, diagnose_trace_depth);
1616
17−void trace_s390_diagnose_norecursion(int diag_nr)
17+void notrace trace_s390_diagnose_norecursion(int diag_nr)
1818 {
1919 unsigned long flags;
2020 unsigned int *depth;
arch/s390/kernel/uv.c+2−1
@@ -23,10 +23,11 @@ · 22 unmodified lines
2323 int __bootdata_preserved(prot_virt_guest);
2424 #endif
2525
26+struct uv_info __bootdata_preserved(uv_info);
27+
2628 #if IS_ENABLED(CONFIG_KVM)
2729 int prot_virt_host;
2830 EXPORT_SYMBOL(prot_virt_host);
29−struct uv_info __bootdata_preserved(uv_info);
3031 EXPORT_SYMBOL(uv_info);
3132
3233 static int __init prot_virt_setup(char *val)
arch/s390/kvm/interrupt.c+1−1
@@ -393,7 +393,7 @@ static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu) · 392 unmodified lines
393393 if (psw_mchk_disabled(vcpu))
394394 active_mask &= ~IRQ_PEND_MCHK_MASK;
395395 /* PV guest cpus can have a single interruption injected at a time. */
396− if (kvm_s390_pv_cpu_is_protected(vcpu) &&
396+ if (kvm_s390_pv_cpu_get_handle(vcpu) &&
397397 vcpu->arch.sie_block->iictl != IICTL_CODE_NONE)
398398 active_mask &= ~(IRQ_PEND_EXT_II_MASK |
399399 IRQ_PEND_IO_MASK |
arch/s390/kvm/kvm-s390.c+3−0
@@ -1939,6 +1939,9 @@ static int gfn_to_memslot_approx(struct kvm_memslots *slots, gfn_t gfn) · 1938 unmodified lines
19391939 start = slot + 1;
19401940 }
19411941
1942+ if (start >= slots->used_slots)
1943+ return slots->used_slots - 1;
1944+
19421945 if (gfn >= memslots[start].base_gfn &&
19431946 gfn < memslots[start].base_gfn + memslots[start].npages) {
19441947 atomic_set(&slots->lru_slot, start);
arch/s390/pci/pci_irq.c+3−2
@@ -115,7 +115,6 @@ static struct irq_chip zpci_irq_chip = { · 114 unmodified lines
115115 .name = "PCI-MSI",
116116 .irq_unmask = pci_msi_unmask_irq,
117117 .irq_mask = pci_msi_mask_irq,
118− .irq_set_affinity = zpci_set_irq_affinity,
119118 };
120119
121120 static void zpci_handle_cpu_local_irq(bool rescan)
@@ -276,7 +275,9 @@ int arch_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) · 154 unmodified lines
276275 rc = -EIO;
277276 if (hwirq - bit >= msi_vecs)
278277 break;
279− irq = __irq_alloc_descs(-1, 0, 1, 0, THIS_MODULE, msi->affinity);
278+ irq = __irq_alloc_descs(-1, 0, 1, 0, THIS_MODULE,
279+ (irq_delivery == DIRECTED) ?
280+ msi->affinity : NULL);
280281 if (irq < 0)
281282 return -ENOMEM;
282283 rc = irq_set_msi_desc(irq, msi);
arch/sh/include/asm/module.h+0−28
@@ -11,32 +11,4 @@ struct mod_arch_specific { · 10 unmodified lines
1111 };
1212 #endif
1313
14−#ifdef CONFIG_CPU_LITTLE_ENDIAN
15−# ifdef CONFIG_CPU_SH2
16−# define MODULE_PROC_FAMILY "SH2LE "
17−# elif defined CONFIG_CPU_SH3
18−# define MODULE_PROC_FAMILY "SH3LE "
19−# elif defined CONFIG_CPU_SH4
20−# define MODULE_PROC_FAMILY "SH4LE "
21−# elif defined CONFIG_CPU_SH5
22−# define MODULE_PROC_FAMILY "SH5LE "
23−# else
24−# error unknown processor family
25−# endif
26−#else
27−# ifdef CONFIG_CPU_SH2
28−# define MODULE_PROC_FAMILY "SH2BE "
29−# elif defined CONFIG_CPU_SH3
30−# define MODULE_PROC_FAMILY "SH3BE "
31−# elif defined CONFIG_CPU_SH4
32−# define MODULE_PROC_FAMILY "SH4BE "
33−# elif defined CONFIG_CPU_SH5
34−# define MODULE_PROC_FAMILY "SH5BE "
35−# else
36−# error unknown processor family
37−# endif
38−#endif
39−
40−#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
41−
4214 #endif /* _ASM_SH_MODULE_H */
arch/sh/include/asm/vermagic.h+34−0
@@ -0,0 +1,34 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+
3+#ifndef _ASM_VERMAGIC_H
4+#define _ASM_VERMAGIC_H
5+
6+#ifdef CONFIG_CPU_LITTLE_ENDIAN
7+# ifdef CONFIG_CPU_SH2
8+# define MODULE_PROC_FAMILY "SH2LE "
9+# elif defined CONFIG_CPU_SH3
10+# define MODULE_PROC_FAMILY "SH3LE "
11+# elif defined CONFIG_CPU_SH4
12+# define MODULE_PROC_FAMILY "SH4LE "
13+# elif defined CONFIG_CPU_SH5
14+# define MODULE_PROC_FAMILY "SH5LE "
15+# else
16+# error unknown processor family
17+# endif
18+#else
19+# ifdef CONFIG_CPU_SH2
20+# define MODULE_PROC_FAMILY "SH2BE "
21+# elif defined CONFIG_CPU_SH3
22+# define MODULE_PROC_FAMILY "SH3BE "
23+# elif defined CONFIG_CPU_SH4
24+# define MODULE_PROC_FAMILY "SH4BE "
25+# elif defined CONFIG_CPU_SH5
26+# define MODULE_PROC_FAMILY "SH5BE "
27+# else
28+# error unknown processor family
29+# endif
30+#endif
31+
32+#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
33+
34+#endif /* _ASM_VERMAGIC_H */
arch/sh/mm/init.c+1−1
@@ -412,7 +412,7 @@ int arch_add_memory(int nid, u64 start, u64 size, · 411 unmodified lines
412412 unsigned long nr_pages = size >> PAGE_SHIFT;
413413 int ret;
414414
415− if (WARN_ON_ONCE(params->pgprot.pgprot != PAGE_KERNEL.pgprot)
415+ if (WARN_ON_ONCE(params->pgprot.pgprot != PAGE_KERNEL.pgprot))
416416 return -EINVAL;
417417
418418 /* We only have ZONE_NORMAL, so this is easy.. */
arch/um/Makefile+1−0
@@ -140,6 +140,7 @@ export CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) · 139 unmodified lines
140140 # When cleaning we don't include .config, so we don't include
141141 # TT or skas makefiles and don't clean skas_ptregs.h.
142142 CLEAN_FILES += linux x.i gmon.out
143+MRPROPER_DIRS += arch/$(SUBARCH)/include/generated
143144
144145 archclean:
145146 @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
arch/x86/Kconfig+1−1
@@ -149,7 +149,7 @@ config X86 · 148 unmodified lines
149149 select HAVE_ARCH_TRACEHOOK
150150 select HAVE_ARCH_TRANSPARENT_HUGEPAGE
151151 select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD if X86_64
152− select HAVE_ARCH_USERFAULTFD_WP if USERFAULTFD
152+ select HAVE_ARCH_USERFAULTFD_WP if X86_64 && USERFAULTFD
153153 select HAVE_ARCH_VMAP_STACK if X86_64
154154 select HAVE_ARCH_WITHIN_STACK_FRAMES
155155 select HAVE_ASM_MODVERSIONS
arch/x86/events/intel/cstate.c+1−0
@@ -643,6 +643,7 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = { · 642 unmodified lines
643643 X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_PLUS, &glm_cstates),
644644 X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_D, &glm_cstates),
645645 X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT, &glm_cstates),
646+ X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_L, &glm_cstates),
646647
647648 X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_L, &icl_cstates),
648649 X86_MATCH_INTEL_FAM6_MODEL(ICELAKE, &icl_cstates),
arch/x86/hyperv/hv_init.c+5−1
@@ -20,6 +20,7 @@ · 19 unmodified lines
2020 #include <linux/mm.h>
2121 #include <linux/hyperv.h>
2222 #include <linux/slab.h>
23+#include <linux/kernel.h>
2324 #include <linux/cpuhotplug.h>
2425 #include <linux/syscore_ops.h>
2526 #include <clocksource/hyperv_timer.h>
@@ -419,11 +420,14 @@ void hyperv_cleanup(void) · 393 unmodified lines
419420 }
420421 EXPORT_SYMBOL_GPL(hyperv_cleanup);
421422
422−void hyperv_report_panic(struct pt_regs *regs, long err)
423+void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die)
423424 {
424425 static bool panic_reported;
425426 u64 guest_id;
426427
428+ if (in_die && !panic_on_oops)
429+ return;
430+
427431 /*
428432 * We prefer to report panic on 'die' chain as we have proper
429433 * registers to report, but if we miss it (e.g. on BUG()) we need
arch/x86/include/asm/efi.h+2−0
@@ -178,8 +178,10 @@ extern void efi_free_boot_services(void); · 177 unmodified lines
178178 extern pgd_t * __init efi_uv1_memmap_phys_prolog(void);
179179 extern void __init efi_uv1_memmap_phys_epilog(pgd_t *save_pgd);
180180
181+/* kexec external ABI */
181182 struct efi_setup_data {
182183 u64 fw_vendor;
184+ u64 __unused;
183185 u64 tables;
184186 u64 smbios;
185187 u64 reserved[8];
arch/x86/include/asm/microcode_amd.h+1−1
@@ -41,7 +41,7 @@ struct microcode_amd { · 40 unmodified lines
4141 unsigned int mpb[0];
4242 };
4343
44−#define PATCH_MAX_SIZE PAGE_SIZE
44+#define PATCH_MAX_SIZE (3 * PAGE_SIZE)
4545
4646 #ifdef CONFIG_MICROCODE_AMD
4747 extern void __init load_ucode_amd_bsp(unsigned int family);
arch/x86/include/asm/module.h+0−60
@@ -13,64 +13,4 @@ struct mod_arch_specific { · 12 unmodified lines
1313 #endif
1414 };
1515
16−#ifdef CONFIG_X86_64
17−/* X86_64 does not define MODULE_PROC_FAMILY */
18−#elif defined CONFIG_M486SX
19−#define MODULE_PROC_FAMILY "486SX "
20−#elif defined CONFIG_M486
21−#define MODULE_PROC_FAMILY "486 "
22−#elif defined CONFIG_M586
23−#define MODULE_PROC_FAMILY "586 "
24−#elif defined CONFIG_M586TSC
25−#define MODULE_PROC_FAMILY "586TSC "
26−#elif defined CONFIG_M586MMX
27−#define MODULE_PROC_FAMILY "586MMX "
28−#elif defined CONFIG_MCORE2
29−#define MODULE_PROC_FAMILY "CORE2 "
30−#elif defined CONFIG_MATOM
31−#define MODULE_PROC_FAMILY "ATOM "
32−#elif defined CONFIG_M686
33−#define MODULE_PROC_FAMILY "686 "
34−#elif defined CONFIG_MPENTIUMII
35−#define MODULE_PROC_FAMILY "PENTIUMII "
36−#elif defined CONFIG_MPENTIUMIII
37−#define MODULE_PROC_FAMILY "PENTIUMIII "
38−#elif defined CONFIG_MPENTIUMM
39−#define MODULE_PROC_FAMILY "PENTIUMM "
40−#elif defined CONFIG_MPENTIUM4
41−#define MODULE_PROC_FAMILY "PENTIUM4 "
42−#elif defined CONFIG_MK6
43−#define MODULE_PROC_FAMILY "K6 "
44−#elif defined CONFIG_MK7
45−#define MODULE_PROC_FAMILY "K7 "
46−#elif defined CONFIG_MK8
47−#define MODULE_PROC_FAMILY "K8 "
48−#elif defined CONFIG_MELAN
49−#define MODULE_PROC_FAMILY "ELAN "
50−#elif defined CONFIG_MCRUSOE
51−#define MODULE_PROC_FAMILY "CRUSOE "
52−#elif defined CONFIG_MEFFICEON
53−#define MODULE_PROC_FAMILY "EFFICEON "
54−#elif defined CONFIG_MWINCHIPC6
55−#define MODULE_PROC_FAMILY "WINCHIPC6 "
56−#elif defined CONFIG_MWINCHIP3D
57−#define MODULE_PROC_FAMILY "WINCHIP3D "
58−#elif defined CONFIG_MCYRIXIII
59−#define MODULE_PROC_FAMILY "CYRIXIII "
60−#elif defined CONFIG_MVIAC3_2
61−#define MODULE_PROC_FAMILY "VIAC3-2 "
62−#elif defined CONFIG_MVIAC7
63−#define MODULE_PROC_FAMILY "VIAC7 "
64−#elif defined CONFIG_MGEODEGX1
65−#define MODULE_PROC_FAMILY "GEODEGX1 "
66−#elif defined CONFIG_MGEODE_LX
67−#define MODULE_PROC_FAMILY "GEODE "
68−#else
69−#error unknown processor family
70−#endif
71−
72−#ifdef CONFIG_X86_32
73−# define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
74−#endif
75−
7616 #endif /* _ASM_X86_MODULE_H */
arch/x86/include/asm/nospec-branch.h+0−21
@@ -237,27 +237,6 @@ enum ssb_mitigation { · 236 unmodified lines
237237 extern char __indirect_thunk_start[];
238238 extern char __indirect_thunk_end[];
239239
240−/*
241− * On VMEXIT we must ensure that no RSB predictions learned in the guest
242− * can be followed in the host, by overwriting the RSB completely. Both
243− * retpoline and IBRS mitigations for Spectre v2 need this; only on future
244− * CPUs with IBRS_ALL *might* it be avoided.
245− */
246−static inline void vmexit_fill_RSB(void)
247−{
248−#ifdef CONFIG_RETPOLINE
249− unsigned long loops;
250−
251− asm volatile (ANNOTATE_NOSPEC_ALTERNATIVE
252− ALTERNATIVE("jmp 910f",
253− __stringify(__FILL_RETURN_BUFFER(%0, RSB_CLEAR_LOOPS, %1)),
254− X86_FEATURE_RETPOLINE)
255− "910:"
256− : "=r" (loops), ASM_CALL_CONSTRAINT
257− : : "memory" );
258−#endif
259−}
260−
261240 static __always_inline
262241 void alternative_msr_write(unsigned int msr, u64 val, unsigned int feature)
263242 {
arch/x86/include/asm/vermagic.h+68−0
@@ -0,0 +1,68 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+
3+#ifndef _ASM_VERMAGIC_H
4+#define _ASM_VERMAGIC_H
5+
6+#ifdef CONFIG_X86_64
7+/* X86_64 does not define MODULE_PROC_FAMILY */
8+#elif defined CONFIG_M486SX
9+#define MODULE_PROC_FAMILY "486SX "
10+#elif defined CONFIG_M486
11+#define MODULE_PROC_FAMILY "486 "
12+#elif defined CONFIG_M586
13+#define MODULE_PROC_FAMILY "586 "
14+#elif defined CONFIG_M586TSC
15+#define MODULE_PROC_FAMILY "586TSC "
16+#elif defined CONFIG_M586MMX
17+#define MODULE_PROC_FAMILY "586MMX "
18+#elif defined CONFIG_MCORE2
19+#define MODULE_PROC_FAMILY "CORE2 "
20+#elif defined CONFIG_MATOM
21+#define MODULE_PROC_FAMILY "ATOM "
22+#elif defined CONFIG_M686
23+#define MODULE_PROC_FAMILY "686 "
24+#elif defined CONFIG_MPENTIUMII
25+#define MODULE_PROC_FAMILY "PENTIUMII "
26+#elif defined CONFIG_MPENTIUMIII
27+#define MODULE_PROC_FAMILY "PENTIUMIII "
28+#elif defined CONFIG_MPENTIUMM
29+#define MODULE_PROC_FAMILY "PENTIUMM "
30+#elif defined CONFIG_MPENTIUM4
31+#define MODULE_PROC_FAMILY "PENTIUM4 "
32+#elif defined CONFIG_MK6
33+#define MODULE_PROC_FAMILY "K6 "
34+#elif defined CONFIG_MK7
35+#define MODULE_PROC_FAMILY "K7 "
36+#elif defined CONFIG_MK8
37+#define MODULE_PROC_FAMILY "K8 "
38+#elif defined CONFIG_MELAN
39+#define MODULE_PROC_FAMILY "ELAN "
40+#elif defined CONFIG_MCRUSOE
41+#define MODULE_PROC_FAMILY "CRUSOE "
42+#elif defined CONFIG_MEFFICEON
43+#define MODULE_PROC_FAMILY "EFFICEON "
44+#elif defined CONFIG_MWINCHIPC6
45+#define MODULE_PROC_FAMILY "WINCHIPC6 "
46+#elif defined CONFIG_MWINCHIP3D
47+#define MODULE_PROC_FAMILY "WINCHIP3D "
48+#elif defined CONFIG_MCYRIXIII
49+#define MODULE_PROC_FAMILY "CYRIXIII "
50+#elif defined CONFIG_MVIAC3_2
51+#define MODULE_PROC_FAMILY "VIAC3-2 "
52+#elif defined CONFIG_MVIAC7
53+#define MODULE_PROC_FAMILY "VIAC7 "
54+#elif defined CONFIG_MGEODEGX1
55+#define MODULE_PROC_FAMILY "GEODEGX1 "
56+#elif defined CONFIG_MGEODE_LX
57+#define MODULE_PROC_FAMILY "GEODE "
58+#else
59+#error unknown processor family
60+#endif
61+
62+#ifdef CONFIG_X86_32
63+# define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
64+#else
65+# define MODULE_ARCH_VERMAGIC ""
66+#endif
67+
68+#endif /* _ASM_VERMAGIC_H */
arch/x86/kernel/cpu/intel.c+36−18
@@ -1119,35 +1119,53 @@ void switch_to_sld(unsigned long tifn) · 1118 unmodified lines
11191119 sld_update_msr(!(tifn & _TIF_SLD));
11201120 }
11211121
1122−#define SPLIT_LOCK_CPU(model) {X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY}
1123−
11241122 /*
1125− * The following processors have the split lock detection feature. But
1126− * since they don't have the IA32_CORE_CAPABILITIES MSR, the feature cannot
1127− * be enumerated. Enable it by family and model matching on these
1128− * processors.
1123+ * Bits in the IA32_CORE_CAPABILITIES are not architectural, so they should
1124+ * only be trusted if it is confirmed that a CPU model implements a
1125+ * specific feature at a particular bit position.
1126+ *
1127+ * The possible driver data field values:
1128+ *
1129+ * - 0: CPU models that are known to have the per-core split-lock detection
1130+ * feature even though they do not enumerate IA32_CORE_CAPABILITIES.
1131+ *
1132+ * - 1: CPU models which may enumerate IA32_CORE_CAPABILITIES and if so use
1133+ * bit 5 to enumerate the per-core split-lock detection feature.
11291134 */
11301135 static const struct x86_cpu_id split_lock_cpu_ids[] __initconst = {
1131− SPLIT_LOCK_CPU(INTEL_FAM6_ICELAKE_X),
1132− SPLIT_LOCK_CPU(INTEL_FAM6_ICELAKE_L),
1136+ X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_X, 0),
1137+ X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_L, 0),
1138+ X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT, 1),
1139+ X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_D, 1),
1140+ X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_L, 1),
11331141 {}
11341142 };
11351143
11361144 void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c)
11371145 {
1138− u64 ia32_core_caps = 0;
1146+ const struct x86_cpu_id *m;
1147+ u64 ia32_core_caps;
1148+
1149+ if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
1150+ return;
11391151
1140− if (c->x86_vendor != X86_VENDOR_INTEL)
1152+ m = x86_match_cpu(split_lock_cpu_ids);
1153+ if (!m)
11411154 return;
1142− if (cpu_has(c, X86_FEATURE_CORE_CAPABILITIES)) {
1143− /* Enumerate features reported in IA32_CORE_CAPABILITIES MSR. */
1155+
1156+ switch (m->driver_data) {
1157+ case 0:
1158+ break;
1159+ case 1:
1160+ if (!cpu_has(c, X86_FEATURE_CORE_CAPABILITIES))
1161+ return;
11441162 rdmsrl(MSR_IA32_CORE_CAPS, ia32_core_caps);
1145− } else if (!boot_cpu_has(X86_FEATURE_HYPERVISOR)) {
1146− /* Enumerate split lock detection by family and model. */
1147− if (x86_match_cpu(split_lock_cpu_ids))
1148− ia32_core_caps |= MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT;
1163+ if (!(ia32_core_caps & MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT))
1164+ return;
1165+ break;
1166+ default:
1167+ return;
11491168 }
11501169
1151− if (ia32_core_caps & MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT)
1152− split_lock_setup();
1170+ split_lock_setup();
11531171 }
arch/x86/kernel/cpu/mshyperv.c+12−2
@@ -227,8 +227,8 @@ static void __init ms_hyperv_init_platform(void) · 226 unmodified lines
227227 ms_hyperv.misc_features = cpuid_edx(HYPERV_CPUID_FEATURES);
228228 ms_hyperv.hints = cpuid_eax(HYPERV_CPUID_ENLIGHTMENT_INFO);
229229
230− pr_info("Hyper-V: features 0x%x, hints 0x%x\n",
231− ms_hyperv.features, ms_hyperv.hints);
230+ pr_info("Hyper-V: features 0x%x, hints 0x%x, misc 0x%x\n",
231+ ms_hyperv.features, ms_hyperv.hints, ms_hyperv.misc_features);
232232
233233 ms_hyperv.max_vp_index = cpuid_eax(HYPERV_CPUID_IMPLEMENT_LIMITS);
234234 ms_hyperv.max_lp_index = cpuid_ebx(HYPERV_CPUID_IMPLEMENT_LIMITS);
@@ -263,6 +263,16 @@ static void __init ms_hyperv_init_platform(void) · 28 unmodified lines
263263 cpuid_eax(HYPERV_CPUID_NESTED_FEATURES);
264264 }
265265
266+ /*
267+ * Hyper-V expects to get crash register data or kmsg when
268+ * crash enlightment is available and system crashes. Set
269+ * crash_kexec_post_notifiers to be true to make sure that
270+ * calling crash enlightment interface before running kdump
271+ * kernel.
272+ */
273+ if (ms_hyperv.misc_features & HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE)
274+ crash_kexec_post_notifiers = true;
275+
266276 #ifdef CONFIG_X86_LOCAL_APIC
267277 if (ms_hyperv.features & HV_X64_ACCESS_FREQUENCY_MSRS &&
268278 ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) {
arch/x86/kernel/cpu/resctrl/core.c+2−0
@@ -578,6 +578,8 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r) · 577 unmodified lines
578578 d->id = id;
579579 cpumask_set_cpu(cpu, &d->cpu_mask);
580580
581+ rdt_domain_reconfigure_cdp(r);
582+
581583 if (r->alloc_capable && domain_setup_ctrlval(r, d)) {
582584 kfree(d);
583585 return;
arch/x86/kernel/cpu/resctrl/internal.h+1−0
@@ -601,5 +601,6 @@ bool has_busy_rmid(struct rdt_resource *r, struct rdt_domain *d); · 600 unmodified lines
601601 void __check_limbo(struct rdt_domain *d, bool force_free);
602602 bool cbm_validate_intel(char *buf, u32 *data, struct rdt_resource *r);
603603 bool cbm_validate_amd(char *buf, u32 *data, struct rdt_resource *r);
604+void rdt_domain_reconfigure_cdp(struct rdt_resource *r);
604605
605606 #endif /* _ASM_X86_RESCTRL_INTERNAL_H */
arch/x86/kernel/cpu/resctrl/rdtgroup.c+15−1
@@ -1859,6 +1859,19 @@ static int set_cache_qos_cfg(int level, bool enable) · 1858 unmodified lines
18591859 return 0;
18601860 }
18611861
1862+/* Restore the qos cfg state when a domain comes online */
1863+void rdt_domain_reconfigure_cdp(struct rdt_resource *r)
1864+{
1865+ if (!r->alloc_capable)
1866+ return;
1867+
1868+ if (r == &rdt_resources_all[RDT_RESOURCE_L2DATA])
1869+ l2_qos_cfg_update(&r->alloc_enabled);
1870+
1871+ if (r == &rdt_resources_all[RDT_RESOURCE_L3DATA])
1872+ l3_qos_cfg_update(&r->alloc_enabled);
1873+}
1874+
18621875 /*
18631876 * Enable or disable the MBA software controller
18641877 * which helps user specify bandwidth in MBps.
@@ -3072,7 +3085,8 @@ static int rdtgroup_rmdir(struct kernfs_node *kn) · 1207 unmodified lines
30723085 * If the rdtgroup is a mon group and parent directory
30733086 * is a valid "mon_groups" directory, remove the mon group.
30743087 */
3075− if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn) {
3088+ if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn &&
3089+ rdtgrp != &rdtgroup_default) {
30763090 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP ||
30773091 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) {
30783092 ret = rdtgroup_ctrl_remove(kn, rdtgrp);
arch/x86/kernel/smpboot.c+33−14
@@ -147,7 +147,7 @@ static inline void smpboot_restore_warm_reset_vector(void) · 146 unmodified lines
147147 *((volatile u32 *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) = 0;
148148 }
149149
150−static void init_freq_invariance(void);
150+static void init_freq_invariance(bool secondary);
151151
152152 /*
153153 * Report back to the Boot Processor during boot time or to the caller processor
@@ -185,7 +185,7 @@ static void smp_callin(void) · 31 unmodified lines
185185 */
186186 set_cpu_sibling_map(raw_smp_processor_id());
187187
188− init_freq_invariance();
188+ init_freq_invariance(true);
189189
190190 /*
191191 * Get our bogomips.
@@ -1341,7 +1341,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) · 1149 unmodified lines
13411341 set_sched_topology(x86_topology);
13421342
13431343 set_cpu_sibling_map(0);
1344− init_freq_invariance();
1344+ init_freq_invariance(false);
13451345 smp_sanity_check();
13461346
13471347 switch (apic_intr_mode) {
@@ -1877,9 +1877,6 @@ static bool knl_set_max_freq_ratio(u64 *base_freq, u64 *turbo_freq, · 529 unmodified lines
18771877 int err, i;
18781878 u64 msr;
18791879
1880− if (!x86_match_cpu(has_knl_turbo_ratio_limits))
1881− return false;
1882−
18831880 err = rdmsrl_safe(MSR_PLATFORM_INFO, base_freq);
18841881 if (err)
18851882 return false;
@@ -1945,18 +1942,23 @@ static bool skx_set_max_freq_ratio(u64 *base_freq, u64 *turbo_freq, int size) · 59 unmodified lines
19451942
19461943 static bool core_set_max_freq_ratio(u64 *base_freq, u64 *turbo_freq)
19471944 {
1945+ u64 msr;
19481946 int err;
19491947
19501948 err = rdmsrl_safe(MSR_PLATFORM_INFO, base_freq);
19511949 if (err)
19521950 return false;
19531951
1954− err = rdmsrl_safe(MSR_TURBO_RATIO_LIMIT, turbo_freq);
1952+ err = rdmsrl_safe(MSR_TURBO_RATIO_LIMIT, &msr);
19551953 if (err)
19561954 return false;
19571955
1958− *base_freq = (*base_freq >> 8) & 0xFF; /* max P state */
1959− *turbo_freq = (*turbo_freq >> 24) & 0xFF; /* 4C turbo */
1956+ *base_freq = (*base_freq >> 8) & 0xFF; /* max P state */
1957+ *turbo_freq = (msr >> 24) & 0xFF; /* 4C turbo */
1958+
1959+ /* The CPU may have less than 4 cores */
1960+ if (!*turbo_freq)
1961+ *turbo_freq = msr & 0xFF; /* 1C turbo */
19601962
19611963 return true;
19621964 }
@@ -1972,7 +1974,8 @@ static bool intel_set_max_freq_ratio(void) · 9 unmodified lines
19721974 skx_set_max_freq_ratio(&base_freq, &turbo_freq, 1))
19731975 goto out;
19741976
1975− if (knl_set_max_freq_ratio(&base_freq, &turbo_freq, 1))
1977+ if (x86_match_cpu(has_knl_turbo_ratio_limits) &&
1978+ knl_set_max_freq_ratio(&base_freq, &turbo_freq, 1))
19761979 goto out;
19771980
19781981 if (x86_match_cpu(has_skx_turbo_ratio_limits) &&
@@ -1985,13 +1988,22 @@ static bool intel_set_max_freq_ratio(void) · 6 unmodified lines
19851988 return false;
19861989
19871990 out:
1991+ /*
1992+ * Some hypervisors advertise X86_FEATURE_APERFMPERF
1993+ * but then fill all MSR's with zeroes.
1994+ */
1995+ if (!base_freq) {
1996+ pr_debug("Couldn't determine cpu base frequency, necessary for scale-invariant accounting.\n");
1997+ return false;
1998+ }
1999+
19882000 arch_turbo_freq_ratio = div_u64(turbo_freq * SCHED_CAPACITY_SCALE,
19892001 base_freq);
19902002 arch_set_max_freq_ratio(turbo_disabled());
19912003 return true;
19922004 }
19932005
1994−static void init_counter_refs(void *arg)
2006+static void init_counter_refs(void)
19952007 {
19962008 u64 aperf, mperf;
19972009
@@ -2002,18 +2014,25 @@ static void init_counter_refs(void *arg) · 4 unmodified lines
20022014 this_cpu_write(arch_prev_mperf, mperf);
20032015 }
20042016
2005−static void init_freq_invariance(void)
2017+static void init_freq_invariance(bool secondary)
20062018 {
20072019 bool ret = false;
20082020
2009− if (smp_processor_id() != 0 || !boot_cpu_has(X86_FEATURE_APERFMPERF))
2021+ if (!boot_cpu_has(X86_FEATURE_APERFMPERF))
20102022 return;
20112023
2024+ if (secondary) {
2025+ if (static_branch_likely(&arch_scale_freq_key)) {
2026+ init_counter_refs();
2027+ }
2028+ return;
2029+ }
2030+
20122031 if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
20132032 ret = intel_set_max_freq_ratio();
20142033
20152034 if (ret) {
2016− on_each_cpu(init_counter_refs, NULL, 1);
2035+ init_counter_refs();
20172036 static_branch_enable(&arch_scale_freq_key);
20182037 } else {
20192038 pr_debug("Couldn't determine max cpu frequency, necessary for scale-invariant accounting.\n");
arch/x86/kernel/umip.c+1−1
@@ -81,7 +81,7 @@ · 80 unmodified lines
8181 #define UMIP_INST_SLDT 3 /* 0F 00 /0 */
8282 #define UMIP_INST_STR 4 /* 0F 00 /1 */
8383
84−const char * const umip_insns[5] = {
84+static const char * const umip_insns[5] = {
8585 [UMIP_INST_SGDT] = "SGDT",
8686 [UMIP_INST_SIDT] = "SIDT",
8787 [UMIP_INST_SMSW] = "SMSW",
arch/x86/kvm/Makefile+4−0
@@ -3,6 +3,10 @@ · 2 unmodified lines
33 ccflags-y += -Iarch/x86/kvm
44 ccflags-$(CONFIG_KVM_WERROR) += -Werror
55
6+ifeq ($(CONFIG_FRAME_POINTER),y)
7+OBJECT_FILES_NON_STANDARD_vmenter.o := y
8+endif
9+
610 KVM := ../../../virt/kvm
711
812 kvm-y += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o \
arch/x86/kvm/svm/sev.c+5−1
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <linux/kernel.h>
1313 #include <linux/highmem.h>
1414 #include <linux/psp-sev.h>
15+#include <linux/pagemap.h>
1516 #include <linux/swap.h>
1617
1718 #include "x86.h"
@@ -1117,7 +1118,7 @@ int __init sev_hardware_setup(void) · 1099 unmodified lines
11171118 /* Maximum number of encrypted guests supported simultaneously */
11181119 max_sev_asid = cpuid_ecx(0x8000001F);
11191120
1120− if (!max_sev_asid)
1121+ if (!svm_sev_enabled())
11211122 return 1;
11221123
11231124 /* Minimum ASID value that should be used for SEV guest */
@@ -1156,6 +1157,9 @@ err: · 32 unmodified lines
11561157
11571158 void sev_hardware_teardown(void)
11581159 {
1160+ if (!svm_sev_enabled())
1161+ return;
1162+
11591163 bitmap_free(sev_asid_bitmap);
11601164 bitmap_free(sev_reclaim_asid_bitmap);
11611165
arch/x86/kvm/svm/svm.c+1−9
@@ -3276,7 +3276,7 @@ static void svm_cancel_injection(struct kvm_vcpu *vcpu) · 3275 unmodified lines
32763276 svm_complete_interrupts(svm);
32773277 }
32783278
3279−bool __svm_vcpu_run(unsigned long vmcb_pa, unsigned long *regs);
3279+void __svm_vcpu_run(unsigned long vmcb_pa, unsigned long *regs);
32803280
32813281 static void svm_vcpu_run(struct kvm_vcpu *vcpu)
32823282 {
@@ -3330,13 +3330,8 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) · 47 unmodified lines
33303330 */
33313331 x86_spec_ctrl_set_guest(svm->spec_ctrl, svm->virt_spec_ctrl);
33323332
3333− local_irq_enable();
3334−
33353333 __svm_vcpu_run(svm->vmcb_pa, (unsigned long *)&svm->vcpu.arch.regs);
33363334
3337− /* Eliminate branch target predictions from guest mode */
3338− vmexit_fill_RSB();
3339−
33403335 #ifdef CONFIG_X86_64
33413336 wrmsrl(MSR_GS_BASE, svm->host.gs_base);
33423337 #else
@@ -3366,8 +3361,6 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) · 23 unmodified lines
33663361
33673362 reload_tss(vcpu);
33683363
3369− local_irq_disable();
3370−
33713364 x86_spec_ctrl_restore_host(svm->spec_ctrl, svm->virt_spec_ctrl);
33723365
33733366 vcpu->arch.cr2 = svm->vmcb->save.cr2;
@@ -3411,7 +3404,6 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) · 37 unmodified lines
34113404
34123405 mark_all_clean(svm->vmcb);
34133406 }
3414−STACK_FRAME_NON_STANDARD(svm_vcpu_run);
34153407
34163408 static void svm_load_mmu_pgd(struct kvm_vcpu *vcpu, unsigned long root)
34173409 {
arch/x86/kvm/svm/vmenter.S+9−1
@@ -3,6 +3,7 @@ · 2 unmodified lines
33 #include <asm/asm.h>
44 #include <asm/bitsperlong.h>
55 #include <asm/kvm_vcpu_regs.h>
6+#include <asm/nospec-branch.h>
67
78 #define WORD_SIZE (BITS_PER_LONG / 8)
89
@@ -35,7 +36,6 @@ · 26 unmodified lines
3536 */
3637 SYM_FUNC_START(__svm_vcpu_run)
3738 push %_ASM_BP
38− mov %_ASM_SP, %_ASM_BP
3939 #ifdef CONFIG_X86_64
4040 push %r15
4141 push %r14
@@ -78,6 +78,7 @@ SYM_FUNC_START(__svm_vcpu_run) · 36 unmodified lines
7878 pop %_ASM_AX
7979
8080 /* Enter guest mode */
81+ sti
8182 1: vmload %_ASM_AX
8283 jmp 3f
8384 2: cmpb $0, kvm_rebooting
@@ -99,6 +100,13 @@ SYM_FUNC_START(__svm_vcpu_run) · 15 unmodified lines
99100 ud2
100101 _ASM_EXTABLE(5b, 6b)
101102 7:
103+ cli
104+
105+#ifdef CONFIG_RETPOLINE
106+ /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */
107+ FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE
108+#endif
109+
102110 /* "POP" @regs to RAX. */
103111 pop %_ASM_AX
104112
arch/x86/kvm/vmx/nested.c+19−2
@@ -5533,8 +5533,25 @@ static bool nested_vmx_exit_handled_vmcs_access(struct kvm_vcpu *vcpu, · 5532 unmodified lines
55335533 return 1 & (b >> (field & 7));
55345534 }
55355535
5536+static bool nested_vmx_exit_handled_mtf(struct vmcs12 *vmcs12)
5537+{
5538+ u32 entry_intr_info = vmcs12->vm_entry_intr_info_field;
5539+
5540+ if (nested_cpu_has_mtf(vmcs12))
5541+ return true;
5542+
5543+ /*
5544+ * An MTF VM-exit may be injected into the guest by setting the
5545+ * interruption-type to 7 (other event) and the vector field to 0. Such
5546+ * is the case regardless of the 'monitor trap flag' VM-execution
5547+ * control.
5548+ */
5549+ return entry_intr_info == (INTR_INFO_VALID_MASK
5550+ | INTR_TYPE_OTHER_EVENT);
5551+}
5552+
55365553 /*
5537− * Return 1 if we should exit from L2 to L1 to handle an exit, or 0 if we
5554+ * Return true if we should exit from L2 to L1 to handle an exit, or false if we
55385555 * should handle it ourselves in L0 (and then continue L2). Only call this
55395556 * when in is_guest_mode (L2).
55405557 */
@@ -5633,7 +5650,7 @@ bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason) · 92 unmodified lines
56335650 case EXIT_REASON_MWAIT_INSTRUCTION:
56345651 return nested_cpu_has(vmcs12, CPU_BASED_MWAIT_EXITING);
56355652 case EXIT_REASON_MONITOR_TRAP_FLAG:
5636− return nested_cpu_has_mtf(vmcs12);
5653+ return nested_vmx_exit_handled_mtf(vmcs12);
56375654 case EXIT_REASON_MONITOR_INSTRUCTION:
56385655 return nested_cpu_has(vmcs12, CPU_BASED_MONITOR_EXITING);
56395656 case EXIT_REASON_PAUSE_INSTRUCTION:
arch/x86/kvm/vmx/vmx.c+1−1
@@ -4572,7 +4572,7 @@ static int handle_rmode_exception(struct kvm_vcpu *vcpu, · 4571 unmodified lines
45724572 */
45734573 static void kvm_machine_check(void)
45744574 {
4575−#if defined(CONFIG_X86_MCE) && defined(CONFIG_X86_64)
4575+#if defined(CONFIG_X86_MCE)
45764576 struct pt_regs regs = {
45774577 .cs = 3, /* Fake ring 3 no matter what the guest ran on */
45784578 .flags = X86_EFLAGS_IF,
arch/x86/kvm/x86.c+19−2
@@ -3060,6 +3060,17 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) · 3059 unmodified lines
30603060 case MSR_IA32_PERF_CTL:
30613061 case MSR_AMD64_DC_CFG:
30623062 case MSR_F15H_EX_CFG:
3063+ /*
3064+ * Intel Sandy Bridge CPUs must support the RAPL (running average power
3065+ * limit) MSRs. Just return 0, as we do not want to expose the host
3066+ * data here. Do not conditionalize this on CPUID, as KVM does not do
3067+ * so for existing CPU-specific MSRs.
3068+ */
3069+ case MSR_RAPL_POWER_UNIT:
3070+ case MSR_PP0_ENERGY_STATUS: /* Power plane 0 (core) */
3071+ case MSR_PP1_ENERGY_STATUS: /* Power plane 1 (graphics uncore) */
3072+ case MSR_PKG_ENERGY_STATUS: /* Total package */
3073+ case MSR_DRAM_ENERGY_STATUS: /* DRAM controller */
30633074 msr_info->data = 0;
30643075 break;
30653076 case MSR_F15H_PERF_CTL0 ... MSR_F15H_PERF_CTR5:
@@ -5049,10 +5060,13 @@ set_identity_unlock: · 1983 unmodified lines
50495060 r = -EFAULT;
50505061 if (copy_from_user(&u.ps, argp, sizeof(u.ps)))
50515062 goto out;
5063+ mutex_lock(&kvm->lock);
50525064 r = -ENXIO;
50535065 if (!kvm->arch.vpit)
5054− goto out;
5066+ goto set_pit_out;
50555067 r = kvm_vm_ioctl_set_pit(kvm, &u.ps);
5068+set_pit_out:
5069+ mutex_unlock(&kvm->lock);
50565070 break;
50575071 }
50585072 case KVM_GET_PIT2: {
@@ -5072,10 +5086,13 @@ set_identity_unlock: · 13 unmodified lines
50725086 r = -EFAULT;
50735087 if (copy_from_user(&u.ps2, argp, sizeof(u.ps2)))
50745088 goto out;
5089+ mutex_lock(&kvm->lock);
50755090 r = -ENXIO;
50765091 if (!kvm->arch.vpit)
5077− goto out;
5092+ goto set_pit2_out;
50785093 r = kvm_vm_ioctl_set_pit2(kvm, &u.ps2);
5094+set_pit2_out:
5095+ mutex_unlock(&kvm->lock);
50795096 break;
50805097 }
50815098 case KVM_REINJECT_CONTROL: {
arch/x86/net/bpf_jit_comp.c+15−3
@@ -158,6 +158,19 @@ static bool is_ereg(u32 reg) · 157 unmodified lines
158158 BIT(BPF_REG_AX));
159159 }
160160
161+/*
162+ * is_ereg_8l() == true if BPF register 'reg' is mapped to access x86-64
163+ * lower 8-bit registers dil,sil,bpl,spl,r8b..r15b, which need extra byte
164+ * of encoding. al,cl,dl,bl have simpler encoding.
165+ */
166+static bool is_ereg_8l(u32 reg)
167+{
168+ return is_ereg(reg) ||
169+ (1 << reg) & (BIT(BPF_REG_1) |
170+ BIT(BPF_REG_2) |
171+ BIT(BPF_REG_FP));
172+}
173+
161174 static bool is_axreg(u32 reg)
162175 {
163176 return reg == BPF_REG_0;
@@ -598,9 +611,8 @@ static void emit_stx(u8 **pprog, u32 size, u32 dst_reg, u32 src_reg, int off) · 434 unmodified lines
598611 switch (size) {
599612 case BPF_B:
600613 /* Emit 'mov byte ptr [rax + off], al' */
601− if (is_ereg(dst_reg) || is_ereg(src_reg) ||
602− /* We have to add extra byte for x86 SIL, DIL regs */
603− src_reg == BPF_REG_1 || src_reg == BPF_REG_2)
614+ if (is_ereg(dst_reg) || is_ereg_8l(src_reg))
615+ /* Add extra byte for eregs or SIL,DIL,BPL in src_reg */
604616 EMIT2(add_2mod(0x40, dst_reg, src_reg), 0x88);
605617 else
606618 EMIT1(0x88);
arch/x86/net/bpf_jit_comp32.c+22−6
@@ -1847,14 +1847,16 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 1846 unmodified lines
18471847 case BPF_B:
18481848 case BPF_H:
18491849 case BPF_W:
1850− if (!bpf_prog->aux->verifier_zext)
1850+ if (bpf_prog->aux->verifier_zext)
18511851 break;
18521852 if (dstk) {
18531853 EMIT3(0xC7, add_1reg(0x40, IA32_EBP),
18541854 STACK_VAR(dst_hi));
18551855 EMIT(0x0, 4);
18561856 } else {
1857− EMIT3(0xC7, add_1reg(0xC0, dst_hi), 0);
1857+ /* xor dst_hi,dst_hi */
1858+ EMIT2(0x33,
1859+ add_2reg(0xC0, dst_hi, dst_hi));
18581860 }
18591861 break;
18601862 case BPF_DW:
@@ -2013,8 +2015,8 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 152 unmodified lines
20132015 case BPF_JMP | BPF_JSET | BPF_X:
20142016 case BPF_JMP32 | BPF_JSET | BPF_X: {
20152017 bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2016− u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2017− u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2018+ u8 dreg_lo = IA32_EAX;
2019+ u8 dreg_hi = IA32_EDX;
20182020 u8 sreg_lo = sstk ? IA32_ECX : src_lo;
20192021 u8 sreg_hi = sstk ? IA32_EBX : src_hi;
20202022
@@ -2026,6 +2028,13 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 5 unmodified lines
20262028 add_2reg(0x40, IA32_EBP,
20272029 IA32_EDX),
20282030 STACK_VAR(dst_hi));
2031+ } else {
2032+ /* mov dreg_lo,dst_lo */
2033+ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dst_lo));
2034+ if (is_jmp64)
2035+ /* mov dreg_hi,dst_hi */
2036+ EMIT2(0x89,
2037+ add_2reg(0xC0, dreg_hi, dst_hi));
20292038 }
20302039
20312040 if (sstk) {
@@ -2050,8 +2059,8 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 18 unmodified lines
20502059 case BPF_JMP | BPF_JSET | BPF_K:
20512060 case BPF_JMP32 | BPF_JSET | BPF_K: {
20522061 bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2053− u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2054− u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2062+ u8 dreg_lo = IA32_EAX;
2063+ u8 dreg_hi = IA32_EDX;
20552064 u8 sreg_lo = IA32_ECX;
20562065 u8 sreg_hi = IA32_EBX;
20572066 u32 hi;
@@ -2064,6 +2073,13 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 6 unmodified lines
20642073 add_2reg(0x40, IA32_EBP,
20652074 IA32_EDX),
20662075 STACK_VAR(dst_hi));
2076+ } else {
2077+ /* mov dreg_lo,dst_lo */
2078+ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dst_lo));
2079+ if (is_jmp64)
2080+ /* mov dreg_hi,dst_hi */
2081+ EMIT2(0x89,
2082+ add_2reg(0xC0, dreg_hi, dst_hi));
20672083 }
20682084
20692085 /* mov ecx,imm32 */
arch/x86/platform/efi/efi_64.c+12−4
@@ -202,7 +202,7 @@ virt_to_phys_or_null_size(void *va, unsigned long size) · 201 unmodified lines
202202
203203 int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
204204 {
205− unsigned long pfn, text, pf;
205+ unsigned long pfn, text, pf, rodata;
206206 struct page *page;
207207 unsigned npages;
208208 pgd_t *pgd = efi_mm.pgd;
@@ -256,7 +256,7 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 47 unmodified lines
256256
257257 efi_scratch.phys_stack = page_to_phys(page + 1); /* stack grows down */
258258
259− npages = (__end_rodata_aligned - _text) >> PAGE_SHIFT;
259+ npages = (_etext - _text) >> PAGE_SHIFT;
260260 text = __pa(_text);
261261 pfn = text >> PAGE_SHIFT;
262262
@@ -266,6 +266,14 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 3 unmodified lines
266266 return 1;
267267 }
268268
269+ npages = (__end_rodata - __start_rodata) >> PAGE_SHIFT;
270+ rodata = __pa(__start_rodata);
271+ pfn = rodata >> PAGE_SHIFT;
272+ if (kernel_map_pages_in_pgd(pgd, pfn, rodata, npages, pf)) {
273+ pr_err("Failed to map kernel rodata 1:1\n");
274+ return 1;
275+ }
276+
269277 return 0;
270278 }
271279
@@ -638,7 +646,7 @@ efi_thunk_set_variable(efi_char16_t *name, efi_guid_t *vendor, · 366 unmodified lines
638646 phys_vendor = virt_to_phys_or_null(vnd);
639647 phys_data = virt_to_phys_or_null_size(data, data_size);
640648
641− if (!phys_name || !phys_data)
649+ if (!phys_name || (data && !phys_data))
642650 status = EFI_INVALID_PARAMETER;
643651 else
644652 status = efi_thunk(set_variable, phys_name, phys_vendor,
@@ -669,7 +677,7 @@ efi_thunk_set_variable_nonblocking(efi_char16_t *name, efi_guid_t *vendor, · 24 unmodified lines
669677 phys_vendor = virt_to_phys_or_null(vnd);
670678 phys_data = virt_to_phys_or_null_size(data, data_size);
671679
672− if (!phys_name || !phys_data)
680+ if (!phys_name || (data && !phys_data))
673681 status = EFI_INVALID_PARAMETER;
674682 else
675683 status = efi_thunk(set_variable, phys_name, phys_vendor,
arch/xtensa/include/asm/vermagic.hrenamed from arch/xtensa/include/asm/module.h+6−9
@@ -1,8 +1,4 @@
11 /*
2− * include/asm-xtensa/module.h
3− *
4− * This file contains the module code specific to the Xtensa architecture.
5− *
62 * This file is subject to the terms and conditions of the GNU General Public
73 * License. See the file "COPYING" in the main directory of this archive
84 * for more details.
@@ -10,11 +6,12 @@ · 1 unmodified line
106 * Copyright (C) 2001 - 2005 Tensilica Inc.
117 */
128
13−#ifndef _XTENSA_MODULE_H
14−#define _XTENSA_MODULE_H
9+#ifndef _ASM_VERMAGIC_H
10+#define _ASM_VERMAGIC_H
1511
16−#define MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " "
12+#include <linux/stringify.h>
13+#include <variant/core.h>
1714
18−#include <asm-generic/module.h>
15+#define MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " "
1916
20−#endif /* _XTENSA_MODULE_H */
17+#endif /* _ASM_VERMAGIC_H */
block/blk-iocost.c+2−2
@@ -1591,7 +1591,7 @@ skip_surplus_transfers: · 1590 unmodified lines
15911591 vrate_min, vrate_max);
15921592 }
15931593
1594− trace_iocost_ioc_vrate_adj(ioc, vrate, &missed_ppm, rq_wait_pct,
1594+ trace_iocost_ioc_vrate_adj(ioc, vrate, missed_ppm, rq_wait_pct,
15951595 nr_lagging, nr_shortages,
15961596 nr_surpluses);
15971597
@@ -1600,7 +1600,7 @@ skip_surplus_transfers: · 2 unmodified lines
16001600 ioc->period_us * vrate * INUSE_MARGIN_PCT, 100);
16011601 } else if (ioc->busy_level != prev_busy_level || nr_lagging) {
16021602 trace_iocost_ioc_vrate_adj(ioc, atomic64_read(&ioc->vtime_rate),
1603− &missed_ppm, rq_wait_pct, nr_lagging,
1603+ missed_ppm, rq_wait_pct, nr_lagging,
16041604 nr_shortages, nr_surpluses);
16051605 }
16061606
block/blk-mq.c+3−1
@@ -1222,8 +1222,10 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, · 1221 unmodified lines
12221222 rq = list_first_entry(list, struct request, queuelist);
12231223
12241224 hctx = rq->mq_hctx;
1225− if (!got_budget && !blk_mq_get_dispatch_budget(hctx))
1225+ if (!got_budget && !blk_mq_get_dispatch_budget(hctx)) {
1226+ blk_mq_put_driver_tag(rq);
12261227 break;
1228+ }
12271229
12281230 if (!blk_mq_get_driver_tag(rq)) {
12291231 /*
block/blk-wbt.c+2−2
@@ -313,7 +313,7 @@ static void scale_up(struct rq_wb *rwb) · 312 unmodified lines
313313 calc_wb_limits(rwb);
314314 rwb->unknown_cnt = 0;
315315 rwb_wake_all(rwb);
316− rwb_trace_step(rwb, "scale up");
316+ rwb_trace_step(rwb, tracepoint_string("scale up"));
317317 }
318318
319319 static void scale_down(struct rq_wb *rwb, bool hard_throttle)
@@ -322,7 +322,7 @@ static void scale_down(struct rq_wb *rwb, bool hard_throttle) · 2 unmodified lines
322322 return;
323323 calc_wb_limits(rwb);
324324 rwb->unknown_cnt = 0;
325− rwb_trace_step(rwb, "scale down");
325+ rwb_trace_step(rwb, tracepoint_string("scale down"));
326326 }
327327
328328 static void rwb_arm_timer(struct rq_wb *rwb)
drivers/acpi/button.c+0−12
@@ -87,18 +87,6 @@ static const struct dmi_system_id dmi_lid_quirks[] = { · 86 unmodified lines
8787 },
8888 .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_DISABLED,
8989 },
90− {
91− /*
92− * Asus T200TA, _LID keeps reporting closed after every second
93− * openening of the lid. Causing immediate re-suspend after
94− * opening every other open. Using LID_INIT_OPEN fixes this.
95− */
96− .matches = {
97− DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
98− DMI_MATCH(DMI_PRODUCT_NAME, "T200TA"),
99− },
100− .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
101− },
10290 {
10391 /* GP-electronic T701, _LID method points to a floating GPIO */
10492 .matches = {
drivers/acpi/pci_link.c+2−2
@@ -322,10 +322,10 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq) · 321 unmodified lines
322322 resource->res.data.extended_irq.polarity =
323323 link->irq.polarity;
324324 if (link->irq.triggering == ACPI_EDGE_SENSITIVE)
325− resource->res.data.irq.shareable =
325+ resource->res.data.extended_irq.shareable =
326326 ACPI_EXCLUSIVE;
327327 else
328− resource->res.data.irq.shareable = ACPI_SHARED;
328+ resource->res.data.extended_irq.shareable = ACPI_SHARED;
329329 resource->res.data.extended_irq.interrupt_count = 1;
330330 resource->res.data.extended_irq.interrupts[0] = irq;
331331 /* ignore resource_source, it's optional */
drivers/ata/ahci.c+1−0
@@ -410,6 +410,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { · 409 unmodified lines
410410 { PCI_VDEVICE(INTEL, 0x22a3), board_ahci_mobile }, /* Cherry Tr. AHCI */
411411 { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci_mobile }, /* ApolloLake AHCI */
412412 { PCI_VDEVICE(INTEL, 0x34d3), board_ahci_mobile }, /* Ice Lake LP AHCI */
413+ { PCI_VDEVICE(INTEL, 0x02d3), board_ahci_mobile }, /* Comet Lake PCH-U AHCI */
413414 { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_mobile }, /* Comet Lake PCH RAID */
414415
415416 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
drivers/ata/sata_inic162x.c+1−1
@@ -145,7 +145,7 @@ enum { · 144 unmodified lines
145145
146146 /* PORT_IDMA_CTL bits */
147147 IDMA_CTL_RST_ATA = (1 << 2), /* hardreset ATA bus */
148− IDMA_CTL_RST_IDMA = (1 << 5), /* reset IDMA machinary */
148+ IDMA_CTL_RST_IDMA = (1 << 5), /* reset IDMA machinery */
149149 IDMA_CTL_GO = (1 << 7), /* IDMA mode go */
150150 IDMA_CTL_ATA_NIEN = (1 << 8), /* ATA IRQ disable */
151151
drivers/base/firmware_loader/fallback_table.c+0−1
@@ -45,5 +45,4 @@ struct ctl_table firmware_config_table[] = { · 44 unmodified lines
4545 },
4646 { }
4747 };
48−EXPORT_SYMBOL_GPL(firmware_config_table);
4948 #endif
drivers/base/power/main.c+1−1
@@ -730,7 +730,7 @@ static bool dpm_async_fn(struct device *dev, async_func_t func) · 729 unmodified lines
730730
731731 if (is_async(dev)) {
732732 get_device(dev);
733− async_schedule(func, dev);
733+ async_schedule_dev(func, dev);
734734 return true;
735735 }
736736
drivers/block/null_blk.h+19−10
@@ -85,26 +85,35 @@ struct nullb { · 84 unmodified lines
8585 char disk_name[DISK_NAME_LEN];
8686 };
8787
88+blk_status_t null_process_cmd(struct nullb_cmd *cmd,
89+ enum req_opf op, sector_t sector,
90+ unsigned int nr_sectors);
91+
8892 #ifdef CONFIG_BLK_DEV_ZONED
89−int null_zone_init(struct nullb_device *dev);
90−void null_zone_exit(struct nullb_device *dev);
93+int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q);
94+int null_register_zoned_dev(struct nullb *nullb);
95+void null_free_zoned_dev(struct nullb_device *dev);
9196 int null_report_zones(struct gendisk *disk, sector_t sector,
9297 unsigned int nr_zones, report_zones_cb cb, void *data);
93−blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
94− enum req_opf op, sector_t sector,
95− sector_t nr_sectors);
98+blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd,
99+ enum req_opf op, sector_t sector,
100+ sector_t nr_sectors);
96101 size_t null_zone_valid_read_len(struct nullb *nullb,
97102 sector_t sector, unsigned int len);
98103 #else
99−static inline int null_zone_init(struct nullb_device *dev)
104+static inline int null_init_zoned_dev(struct nullb_device *dev,
105+ struct request_queue *q)
100106 {
101107 pr_err("CONFIG_BLK_DEV_ZONED not enabled\n");
102108 return -EINVAL;
103109 }
104−static inline void null_zone_exit(struct nullb_device *dev) {}
105−static inline blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
106− enum req_opf op, sector_t sector,
107− sector_t nr_sectors)
110+static inline int null_register_zoned_dev(struct nullb *nullb)
111+{
112+ return -ENODEV;
113+}
114+static inline void null_free_zoned_dev(struct nullb_device *dev) {}
115+static inline blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd,
116+ enum req_opf op, sector_t sector, sector_t nr_sectors)
108117 {
109118 return BLK_STS_NOTSUPP;
110119 }
drivers/block/null_blk_main.c+31−31
@@ -580,7 +580,7 @@ static void null_free_dev(struct nullb_device *dev) · 579 unmodified lines
580580 if (!dev)
581581 return;
582582
583− null_zone_exit(dev);
583+ null_free_zoned_dev(dev);
584584 badblocks_exit(&dev->badblocks);
585585 kfree(dev);
586586 }
@@ -1276,6 +1276,25 @@ static inline void nullb_complete_cmd(struct nullb_cmd *cmd) · 689 unmodified lines
12761276 }
12771277 }
12781278
1279+blk_status_t null_process_cmd(struct nullb_cmd *cmd,
1280+ enum req_opf op, sector_t sector,
1281+ unsigned int nr_sectors)
1282+{
1283+ struct nullb_device *dev = cmd->nq->dev;
1284+ blk_status_t ret;
1285+
1286+ if (dev->badblocks.shift != -1) {
1287+ ret = null_handle_badblocks(cmd, sector, nr_sectors);
1288+ if (ret != BLK_STS_OK)
1289+ return ret;
1290+ }
1291+
1292+ if (dev->memory_backed)
1293+ return null_handle_memory_backed(cmd, op);
1294+
1295+ return BLK_STS_OK;
1296+}
1297+
12791298 static blk_status_t null_handle_cmd(struct nullb_cmd *cmd, sector_t sector,
12801299 sector_t nr_sectors, enum req_opf op)
12811300 {
@@ -1294,17 +1313,11 @@ static blk_status_t null_handle_cmd(struct nullb_cmd *cmd, sector_t sector, · 12 unmodified lines
12941313 goto out;
12951314 }
12961315
1297− if (nullb->dev->badblocks.shift != -1) {
1298− cmd->error = null_handle_badblocks(cmd, sector, nr_sectors);
1299− if (cmd->error != BLK_STS_OK)
1300− goto out;
1301− }
1302−
1303− if (dev->memory_backed)
1304− cmd->error = null_handle_memory_backed(cmd, op);
1305−
1306− if (!cmd->error && dev->zoned)
1307− cmd->error = null_handle_zoned(cmd, op, sector, nr_sectors);
1316+ if (dev->zoned)
1317+ cmd->error = null_process_zoned_cmd(cmd, op,
1318+ sector, nr_sectors);
1319+ else
1320+ cmd->error = null_process_cmd(cmd, op, sector, nr_sectors);
13081321
13091322 out:
13101323 nullb_complete_cmd(cmd);
@@ -1605,19 +1618,12 @@ static int null_gendisk_register(struct nullb *nullb) · 294 unmodified lines
16051618 disk->queue = nullb->q;
16061619 strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN);
16071620
1608−#ifdef CONFIG_BLK_DEV_ZONED
16091621 if (nullb->dev->zoned) {
1610− if (queue_is_mq(nullb->q)) {
1611− int ret = blk_revalidate_disk_zones(disk);
1612− if (ret)
1613− return ret;
1614− } else {
1615− blk_queue_chunk_sectors(nullb->q,
1616− nullb->dev->zone_size_sects);
1617− nullb->q->nr_zones = blkdev_nr_zones(disk);
1618− }
1622+ int ret = null_register_zoned_dev(nullb);
1623+
1624+ if (ret)
1625+ return ret;
16191626 }
1620−#endif
16211627
16221628 add_disk(disk);
16231629 return 0;
@@ -1773,14 +1779,9 @@ static int null_add_dev(struct nullb_device *dev) · 149 unmodified lines
17731779 }
17741780
17751781 if (dev->zoned) {
1776− rv = null_zone_init(dev);
1782+ rv = null_init_zoned_dev(dev, nullb->q);
17771783 if (rv)
17781784 goto out_cleanup_blk_queue;
1779−
1780− nullb->q->limits.zoned = BLK_ZONED_HM;
1781− blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, nullb->q);
1782− blk_queue_required_elevator_features(nullb->q,
1783− ELEVATOR_F_ZBD_SEQ_WRITE);
17841785 }
17851786
17861787 nullb->q->queuedata = nullb;
@@ -1809,8 +1810,7 @@ static int null_add_dev(struct nullb_device *dev) · 22 unmodified lines
18091810
18101811 return 0;
18111812 out_cleanup_zone:
1812− if (dev->zoned)
1813− null_zone_exit(dev);
1813+ null_free_zoned_dev(dev);
18141814 out_cleanup_blk_queue:
18151815 blk_cleanup_queue(nullb->q);
18161816 out_cleanup_tags:
drivers/block/null_blk_zoned.c+33−12
@@ -13,7 +13,7 @@ static inline unsigned int null_zone_no(struct nullb_device *dev, sector_t sect) · 12 unmodified lines
1313 return sect >> ilog2(dev->zone_size_sects);
1414 }
1515
16−int null_zone_init(struct nullb_device *dev)
16+int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q)
1717 {
1818 sector_t dev_size = (sector_t)dev->size * 1024 * 1024;
1919 sector_t sector = 0;
@@ -61,10 +61,27 @@ int null_zone_init(struct nullb_device *dev) · 41 unmodified lines
6161 sector += dev->zone_size_sects;
6262 }
6363
64+ q->limits.zoned = BLK_ZONED_HM;
65+ blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
66+ blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE);
67+
68+ return 0;
69+}
70+
71+int null_register_zoned_dev(struct nullb *nullb)
72+{
73+ struct request_queue *q = nullb->q;
74+
75+ if (queue_is_mq(q))
76+ return blk_revalidate_disk_zones(nullb->disk);
77+
78+ blk_queue_chunk_sectors(q, nullb->dev->zone_size_sects);
79+ q->nr_zones = blkdev_nr_zones(nullb->disk);
80+
6481 return 0;
6582 }
6683
67−void null_zone_exit(struct nullb_device *dev)
84+void null_free_zoned_dev(struct nullb_device *dev)
6885 {
6986 kvfree(dev->zones);
7087 }
@@ -126,11 +143,16 @@ static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector, · 55 unmodified lines
126143 struct nullb_device *dev = cmd->nq->dev;
127144 unsigned int zno = null_zone_no(dev, sector);
128145 struct blk_zone *zone = &dev->zones[zno];
146+ blk_status_t ret;
147+
148+ trace_nullb_zone_op(cmd, zno, zone->cond);
149+
150+ if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
151+ return null_process_cmd(cmd, REQ_OP_WRITE, sector, nr_sectors);
129152
130153 switch (zone->cond) {
131154 case BLK_ZONE_COND_FULL:
132155 /* Cannot write to a full zone */
133− cmd->error = BLK_STS_IOERR;
134156 return BLK_STS_IOERR;
135157 case BLK_ZONE_COND_EMPTY:
136158 case BLK_ZONE_COND_IMP_OPEN:
@@ -143,19 +165,18 @@ static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector, · 6 unmodified lines
143165 if (zone->cond != BLK_ZONE_COND_EXP_OPEN)
144166 zone->cond = BLK_ZONE_COND_IMP_OPEN;
145167
168+ ret = null_process_cmd(cmd, REQ_OP_WRITE, sector, nr_sectors);
169+ if (ret != BLK_STS_OK)
170+ return ret;
171+
146172 zone->wp += nr_sectors;
147173 if (zone->wp == zone->start + zone->len)
148174 zone->cond = BLK_ZONE_COND_FULL;
149− break;
150− case BLK_ZONE_COND_NOT_WP:
151− break;
175+ return BLK_STS_OK;
152176 default:
153177 /* Invalid zone condition */
154178 return BLK_STS_IOERR;
155179 }
156−
157− trace_nullb_zone_op(cmd, zno, zone->cond);
158− return BLK_STS_OK;
159180 }
160181
161182 static blk_status_t null_zone_mgmt(struct nullb_cmd *cmd, enum req_opf op,
@@ -216,8 +237,8 @@ static blk_status_t null_zone_mgmt(struct nullb_cmd *cmd, enum req_opf op, · 54 unmodified lines
216237 return BLK_STS_OK;
217238 }
218239
219−blk_status_t null_handle_zoned(struct nullb_cmd *cmd, enum req_opf op,
220− sector_t sector, sector_t nr_sectors)
240+blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, enum req_opf op,
241+ sector_t sector, sector_t nr_sectors)
221242 {
222243 switch (op) {
223244 case REQ_OP_WRITE:
@@ -229,6 +250,6 @@ blk_status_t null_handle_zoned(struct nullb_cmd *cmd, enum req_opf op, · 5 unmodified lines
229250 case REQ_OP_ZONE_FINISH:
230251 return null_zone_mgmt(cmd, op, sector);
231252 default:
232− return BLK_STS_OK;
253+ return null_process_cmd(cmd, op, sector, nr_sectors);
233254 }
234255 }
drivers/block/rbd.c+19−14
@@ -3754,11 +3754,7 @@ static int __rbd_notify_op_lock(struct rbd_device *rbd_dev, · 3753 unmodified lines
37543754 static void rbd_notify_op_lock(struct rbd_device *rbd_dev,
37553755 enum rbd_notify_op notify_op)
37563756 {
3757− struct page **reply_pages;
3758− size_t reply_len;
3759−
3760− __rbd_notify_op_lock(rbd_dev, notify_op, &reply_pages, &reply_len);
3761− ceph_release_page_vector(reply_pages, calc_pages_for(0, reply_len));
3757+ __rbd_notify_op_lock(rbd_dev, notify_op, NULL, NULL);
37623758 }
37633759
37643760 static void rbd_notify_acquired_lock(struct work_struct *work)
@@ -4527,6 +4523,10 @@ static void cancel_tasks_sync(struct rbd_device *rbd_dev) · 762 unmodified lines
45274523 cancel_work_sync(&rbd_dev->unlock_work);
45284524 }
45294525
4526+/*
4527+ * header_rwsem must not be held to avoid a deadlock with
4528+ * rbd_dev_refresh() when flushing notifies.
4529+ */
45304530 static void rbd_unregister_watch(struct rbd_device *rbd_dev)
45314531 {
45324532 cancel_tasks_sync(rbd_dev);
@@ -6894,9 +6894,10 @@ static void rbd_print_dne(struct rbd_device *rbd_dev, bool is_snap) · 2361 unmodified lines
68946894
68956895 static void rbd_dev_image_release(struct rbd_device *rbd_dev)
68966896 {
6897− rbd_dev_unprobe(rbd_dev);
6898− if (rbd_dev->opts)
6897+ if (!rbd_is_ro(rbd_dev))
68996898 rbd_unregister_watch(rbd_dev);
6899+
6900+ rbd_dev_unprobe(rbd_dev);
69006901 rbd_dev->image_format = 0;
69016902 kfree(rbd_dev->spec->image_id);
69026903 rbd_dev->spec->image_id = NULL;
@@ -6907,6 +6908,9 @@ static void rbd_dev_image_release(struct rbd_device *rbd_dev) · 4 unmodified lines
69076908 * device. If this image is the one being mapped (i.e., not a
69086909 * parent), initiate a watch on its header object before using that
69096910 * object to get detailed information about the rbd image.
6911+ *
6912+ * On success, returns with header_rwsem held for write if called
6913+ * with @depth == 0.
69106914 */
69116915 static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth)
69126916 {
@@ -6936,11 +6940,14 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) · 23 unmodified lines
69366940 }
69376941 }
69386942
6943+ if (!depth)
6944+ down_write(&rbd_dev->header_rwsem);
6945+
69396946 ret = rbd_dev_header_info(rbd_dev);
69406947 if (ret) {
69416948 if (ret == -ENOENT && !need_watch)
69426949 rbd_print_dne(rbd_dev, false);
6943− goto err_out_watch;
6950+ goto err_out_probe;
69446951 }
69456952
69466953 /*
@@ -6985,10 +6992,11 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) · 38 unmodified lines
69856992 return 0;
69866993
69876994 err_out_probe:
6988− rbd_dev_unprobe(rbd_dev);
6989−err_out_watch:
6995+ if (!depth)
6996+ up_write(&rbd_dev->header_rwsem);
69906997 if (need_watch)
69916998 rbd_unregister_watch(rbd_dev);
6999+ rbd_dev_unprobe(rbd_dev);
69927000 err_out_format:
69937001 rbd_dev->image_format = 0;
69947002 kfree(rbd_dev->spec->image_id);
@@ -7050,12 +7058,9 @@ static ssize_t do_rbd_add(struct bus_type *bus, · 55 unmodified lines
70507058 goto err_out_rbd_dev;
70517059 }
70527060
7053− down_write(&rbd_dev->header_rwsem);
70547061 rc = rbd_dev_image_probe(rbd_dev, 0);
7055− if (rc < 0) {
7056− up_write(&rbd_dev->header_rwsem);
7062+ if (rc < 0)
70577063 goto err_out_rbd_dev;
7058− }
70597064
70607065 if (rbd_dev->opts->alloc_size > rbd_dev->layout.object_size) {
70617066 rbd_warn(rbd_dev, "alloc_size adjusted to %u",
drivers/block/virtio_blk.c+1−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 #include <linux/blk-mq.h>
1616 #include <linux/blk-mq-virtio.h>
1717 #include <linux/numa.h>
18+#include <uapi/linux/virtio_ring.h>
1819
1920 #define PART_BITS 4
2021 #define VQ_NAME_LEN 16
drivers/char/hw_random/virtio-rng.c+1−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
1111 #include <linux/virtio.h>
1212 #include <linux/virtio_rng.h>
1313 #include <linux/module.h>
14+#include <linux/slab.h>
1415
1516 static DEFINE_IDA(rng_index_ida);
1617
drivers/char/tpm/tpm-interface.c+1−1
@@ -323,7 +323,7 @@ int tpm_pcr_extend(struct tpm_chip *chip, u32 pcr_idx, · 322 unmodified lines
323323
324324 for (i = 0; i < chip->nr_allocated_banks; i++) {
325325 if (digests[i].alg_id != chip->allocated_banks[i].alg_id) {
326− rc = EINVAL;
326+ rc = -EINVAL;
327327 goto out;
328328 }
329329 }
drivers/char/tpm/tpm2-cmd.c+1−0
@@ -681,6 +681,7 @@ out: · 680 unmodified lines
681681 rc = -ENODEV;
682682 return rc;
683683 }
684+EXPORT_SYMBOL_GPL(tpm2_get_cc_attrs_tbl);
684685
685686 /**
686687 * tpm2_startup - turn on the TPM
drivers/char/tpm/tpm_ibmvtpm.c+73−63
@@ -1,6 +1,6 @@
11 // SPDX-License-Identifier: GPL-2.0-only
22 /*
3− * Copyright (C) 2012 IBM Corporation
3+ * Copyright (C) 2012-2020 IBM Corporation
44 *
55 * Author: Ashley Lai <ashleydlai@gmail.com>
66 *
@@ -134,6 +134,64 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) · 127 unmodified lines
134134 return len;
135135 }
136136
137+/**
138+ * ibmvtpm_crq_send_init - Send a CRQ initialize message
139+ * @ibmvtpm: vtpm device struct
140+ *
141+ * Return:
142+ * 0 on success.
143+ * Non-zero on failure.
144+ */
145+static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm)
146+{
147+ int rc;
148+
149+ rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_CMD);
150+ if (rc != H_SUCCESS)
151+ dev_err(ibmvtpm->dev,
152+ "%s failed rc=%d\n", __func__, rc);
153+
154+ return rc;
155+}
156+
157+/**
158+ * tpm_ibmvtpm_resume - Resume from suspend
159+ *
160+ * @dev: device struct
161+ *
162+ * Return: Always 0.
163+ */
164+static int tpm_ibmvtpm_resume(struct device *dev)
165+{
166+ struct tpm_chip *chip = dev_get_drvdata(dev);
167+ struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
168+ int rc = 0;
169+
170+ do {
171+ if (rc)
172+ msleep(100);
173+ rc = plpar_hcall_norets(H_ENABLE_CRQ,
174+ ibmvtpm->vdev->unit_address);
175+ } while (rc == H_IN_PROGRESS || rc == H_BUSY || H_IS_LONG_BUSY(rc));
176+
177+ if (rc) {
178+ dev_err(dev, "Error enabling ibmvtpm rc=%d\n", rc);
179+ return rc;
180+ }
181+
182+ rc = vio_enable_interrupts(ibmvtpm->vdev);
183+ if (rc) {
184+ dev_err(dev, "Error vio_enable_interrupts rc=%d\n", rc);
185+ return rc;
186+ }
187+
188+ rc = ibmvtpm_crq_send_init(ibmvtpm);
189+ if (rc)
190+ dev_err(dev, "Error send_init rc=%d\n", rc);
191+
192+ return rc;
193+}
194+
137195 /**
138196 * tpm_ibmvtpm_send() - Send a TPM command
139197 * @chip: tpm chip struct
@@ -147,6 +205,7 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) · 7 unmodified lines
147205 static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
148206 {
149207 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
208+ bool retry = true;
150209 int rc, sig;
151210
152211 if (!ibmvtpm->rtce_buf) {
@@ -180,18 +239,27 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) · 27 unmodified lines
180239 */
181240 ibmvtpm->tpm_processing_cmd = true;
182241
242+again:
183243 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
184244 IBMVTPM_VALID_CMD, VTPM_TPM_COMMAND,
185245 count, ibmvtpm->rtce_dma_handle);
186246 if (rc != H_SUCCESS) {
247+ /*
248+ * H_CLOSED can be returned after LPM resume. Call
249+ * tpm_ibmvtpm_resume() to re-enable the CRQ then retry
250+ * ibmvtpm_send_crq() once before failing.
251+ */
252+ if (rc == H_CLOSED && retry) {
253+ tpm_ibmvtpm_resume(ibmvtpm->dev);
254+ retry = false;
255+ goto again;
256+ }
187257 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
188− rc = 0;
189258 ibmvtpm->tpm_processing_cmd = false;
190− } else
191− rc = 0;
259+ }
192260
193261 spin_unlock(&ibmvtpm->rtce_lock);
194− return rc;
262+ return 0;
195263 }
196264
197265 static void tpm_ibmvtpm_cancel(struct tpm_chip *chip)
@@ -269,26 +337,6 @@ static int ibmvtpm_crq_send_init_complete(struct ibmvtpm_dev *ibmvtpm) · 71 unmodified lines
269337 return rc;
270338 }
271339
272−/**
273− * ibmvtpm_crq_send_init - Send a CRQ initialize message
274− * @ibmvtpm: vtpm device struct
275− *
276− * Return:
277− * 0 on success.
278− * Non-zero on failure.
279− */
280−static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm)
281−{
282− int rc;
283−
284− rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_CMD);
285− if (rc != H_SUCCESS)
286− dev_err(ibmvtpm->dev,
287− "ibmvtpm_crq_send_init failed rc=%d\n", rc);
288−
289− return rc;
290−}
291−
292340 /**
293341 * tpm_ibmvtpm_remove - ibm vtpm remove entry point
294342 * @vdev: vio device struct
@@ -401,44 +449,6 @@ static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm) · 106 unmodified lines
401449 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE);
402450 }
403451
404−/**
405− * tpm_ibmvtpm_resume - Resume from suspend
406− *
407− * @dev: device struct
408− *
409− * Return: Always 0.
410− */
411−static int tpm_ibmvtpm_resume(struct device *dev)
412−{
413− struct tpm_chip *chip = dev_get_drvdata(dev);
414− struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
415− int rc = 0;
416−
417− do {
418− if (rc)
419− msleep(100);
420− rc = plpar_hcall_norets(H_ENABLE_CRQ,
421− ibmvtpm->vdev->unit_address);
422− } while (rc == H_IN_PROGRESS || rc == H_BUSY || H_IS_LONG_BUSY(rc));
423−
424− if (rc) {
425− dev_err(dev, "Error enabling ibmvtpm rc=%d\n", rc);
426− return rc;
427− }
428−
429− rc = vio_enable_interrupts(ibmvtpm->vdev);
430− if (rc) {
431− dev_err(dev, "Error vio_enable_interrupts rc=%d\n", rc);
432− return rc;
433− }
434−
435− rc = ibmvtpm_crq_send_init(ibmvtpm);
436− if (rc)
437− dev_err(dev, "Error send_init rc=%d\n", rc);
438−
439− return rc;
440−}
441−
442452 static bool tpm_ibmvtpm_req_canceled(struct tpm_chip *chip, u8 status)
443453 {
444454 return (status == 0);
drivers/char/tpm/tpm_tis_core.c+7−1
@@ -433,6 +433,9 @@ static void disable_interrupts(struct tpm_chip *chip) · 432 unmodified lines
433433 u32 intmask;
434434 int rc;
435435
436+ if (priv->irq == 0)
437+ return;
438+
436439 rc = tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask);
437440 if (rc < 0)
438441 intmask = 0;
@@ -1062,9 +1065,12 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, · 623 unmodified lines
10621065 if (irq) {
10631066 tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
10641067 irq);
1065− if (!(chip->flags & TPM_CHIP_FLAG_IRQ))
1068+ if (!(chip->flags & TPM_CHIP_FLAG_IRQ)) {
10661069 dev_err(&chip->dev, FW_BUG
10671070 "TPM interrupt not working, polling instead\n");
1071+
1072+ disable_interrupts(chip);
1073+ }
10681074 } else {
10691075 tpm_tis_probe_irq(chip, intmask);
10701076 }
drivers/clk/clk-asm9260.c+1−1
@@ -276,7 +276,7 @@ static void __init asm9260_acc_init(struct device_node *np) · 275 unmodified lines
276276
277277 /* TODO: Convert to DT parent scheme */
278278 ref_clk = of_clk_get_parent_name(np, 0);
279− hw = __clk_hw_register_fixed_rate_with_accuracy(NULL, NULL, pll_clk,
279+ hw = __clk_hw_register_fixed_rate(NULL, NULL, pll_clk,
280280 ref_clk, NULL, NULL, 0, rate, 0,
281281 CLK_FIXED_RATE_PARENT_ACCURACY);
282282
drivers/clk/mmp/clk-pll.c+32−1
@@ -97,7 +97,7 @@ static const struct clk_ops mmp_clk_pll_ops = { · 96 unmodified lines
9797 .recalc_rate = mmp_clk_pll_recalc_rate,
9898 };
9999
100−struct clk *mmp_clk_register_pll(char *name,
100+static struct clk *mmp_clk_register_pll(char *name,
101101 unsigned long default_rate,
102102 void __iomem *enable_reg, u32 enable,
103103 void __iomem *reg, u8 shift,
@@ -137,3 +137,34 @@ struct clk *mmp_clk_register_pll(char *name, · 33 unmodified lines
137137
138138 return clk;
139139 }
140+
141+void mmp_register_pll_clks(struct mmp_clk_unit *unit,
142+ struct mmp_param_pll_clk *clks,
143+ void __iomem *base, int size)
144+{
145+ struct clk *clk;
146+ int i;
147+
148+ for (i = 0; i < size; i++) {
149+ void __iomem *reg = NULL;
150+
151+ if (clks[i].offset)
152+ reg = base + clks[i].offset;
153+
154+ clk = mmp_clk_register_pll(clks[i].name,
155+ clks[i].default_rate,
156+ base + clks[i].enable_offset,
157+ clks[i].enable,
158+ reg, clks[i].shift,
159+ clks[i].input_rate,
160+ base + clks[i].postdiv_offset,
161+ clks[i].postdiv_shift);
162+ if (IS_ERR(clk)) {
163+ pr_err("%s: failed to register clock %s\n",
164+ __func__, clks[i].name);
165+ continue;
166+ }
167+ if (clks[i].id)
168+ unit->clk_table[clks[i].id] = clk;
169+ }
170+}
drivers/clk/mmp/clk.c+0−31
@@ -176,37 +176,6 @@ void mmp_register_div_clks(struct mmp_clk_unit *unit, · 175 unmodified lines
176176 }
177177 }
178178
179−void mmp_register_pll_clks(struct mmp_clk_unit *unit,
180− struct mmp_param_pll_clk *clks,
181− void __iomem *base, int size)
182−{
183− struct clk *clk;
184− int i;
185−
186− for (i = 0; i < size; i++) {
187− void __iomem *reg = NULL;
188−
189− if (clks[i].offset)
190− reg = base + clks[i].offset;
191−
192− clk = mmp_clk_register_pll(clks[i].name,
193− clks[i].default_rate,
194− base + clks[i].enable_offset,
195− clks[i].enable,
196− reg, clks[i].shift,
197− clks[i].input_rate,
198− base + clks[i].postdiv_offset,
199− clks[i].postdiv_shift);
200− if (IS_ERR(clk)) {
201− pr_err("%s: failed to register clock %s\n",
202− __func__, clks[i].name);
203− continue;
204− }
205− if (clks[i].id)
206− unit->clk_table[clks[i].id] = clk;
207− }
208−}
209−
210179 void mmp_clk_add(struct mmp_clk_unit *unit, unsigned int id,
211180 struct clk *clk)
212181 {
drivers/clk/mmp/clk.h+0−7
@@ -238,13 +238,6 @@ void mmp_register_pll_clks(struct mmp_clk_unit *unit, · 237 unmodified lines
238238 struct mmp_param_pll_clk *clks,
239239 void __iomem *base, int size);
240240
241−extern struct clk *mmp_clk_register_pll(char *name,
242− unsigned long default_rate,
243− void __iomem *enable_reg, u32 enable,
244− void __iomem *reg, u8 shift,
245− unsigned long input_rate,
246− void __iomem *postdiv_reg, u8 postdiv_shift);
247−
248241 #define DEFINE_MIX_REG_INFO(w_d, s_d, w_m, s_m, fc) \
249242 { \
250243 .width_div = (w_d), \
drivers/clk/sprd/sc9863a-clk.c+2−1
@@ -1641,8 +1641,9 @@ static SPRD_SC_GATE_CLK_FW_NAME(i2c4_eb, "i2c4-eb", "ext-26m", 0x0, · 1640 unmodified lines
16411641 0x1000, BIT(12), 0, 0);
16421642 static SPRD_SC_GATE_CLK_FW_NAME(uart0_eb, "uart0-eb", "ext-26m", 0x0,
16431643 0x1000, BIT(13), 0, 0);
1644+/* uart1_eb is for console, don't gate even if unused */
16441645 static SPRD_SC_GATE_CLK_FW_NAME(uart1_eb, "uart1-eb", "ext-26m", 0x0,
1645− 0x1000, BIT(14), 0, 0);
1646+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
16461647 static SPRD_SC_GATE_CLK_FW_NAME(uart2_eb, "uart2-eb", "ext-26m", 0x0,
16471648 0x1000, BIT(15), 0, 0);
16481649 static SPRD_SC_GATE_CLK_FW_NAME(uart3_eb, "uart3-eb", "ext-26m", 0x0,
drivers/counter/104-quad-8.c+160−34
@@ -44,6 +44,7 @@ MODULE_PARM_DESC(base, "ACCES 104-QUAD-8 base addresses"); · 43 unmodified lines
4444 * @base: base port address of the IIO device
4545 */
4646 struct quad8_iio {
47+ struct mutex lock;
4748 struct counter_device counter;
4849 unsigned int fck_prescaler[QUAD8_NUM_COUNTERS];
4950 unsigned int preset[QUAD8_NUM_COUNTERS];
@@ -123,6 +124,8 @@ static int quad8_read_raw(struct iio_dev *indio_dev, · 73 unmodified lines
123124 /* Borrow XOR Carry effectively doubles count range */
124125 *val = (borrow ^ carry) << 24;
125126
127+ mutex_lock(&priv->lock);
128+
126129 /* Reset Byte Pointer; transfer Counter to Output Latch */
127130 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP | QUAD8_RLD_CNTR_OUT,
128131 base_offset + 1);
@@ -130,6 +133,8 @@ static int quad8_read_raw(struct iio_dev *indio_dev, · 1 unmodified line
130133 for (i = 0; i < 3; i++)
131134 *val |= (unsigned int)inb(base_offset) << (8 * i);
132135
136+ mutex_unlock(&priv->lock);
137+
133138 return IIO_VAL_INT;
134139 case IIO_CHAN_INFO_ENABLE:
135140 *val = priv->ab_enable[chan->channel];
@@ -160,6 +165,8 @@ static int quad8_write_raw(struct iio_dev *indio_dev, · 24 unmodified lines
160165 if ((unsigned int)val > 0xFFFFFF)
161166 return -EINVAL;
162167
168+ mutex_lock(&priv->lock);
169+
163170 /* Reset Byte Pointer */
164171 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP, base_offset + 1);
165172
@@ -183,12 +190,16 @@ static int quad8_write_raw(struct iio_dev *indio_dev, · 17 unmodified lines
183190 /* Reset Error flag */
184191 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_E, base_offset + 1);
185192
193+ mutex_unlock(&priv->lock);
194+
186195 return 0;
187196 case IIO_CHAN_INFO_ENABLE:
188197 /* only boolean values accepted */
189198 if (val < 0 || val > 1)
190199 return -EINVAL;
191200
201+ mutex_lock(&priv->lock);
202+
192203 priv->ab_enable[chan->channel] = val;
193204
194205 ior_cfg = val | priv->preset_enable[chan->channel] << 1;
@@ -196,11 +207,18 @@ static int quad8_write_raw(struct iio_dev *indio_dev, · 1 unmodified line
196207 /* Load I/O control configuration */
197208 outb(QUAD8_CTR_IOR | ior_cfg, base_offset + 1);
198209
210+ mutex_unlock(&priv->lock);
211+
199212 return 0;
200213 case IIO_CHAN_INFO_SCALE:
214+ mutex_lock(&priv->lock);
215+
201216 /* Quadrature scaling only available in quadrature mode */
202− if (!priv->quadrature_mode[chan->channel] && (val2 || val != 1))
217+ if (!priv->quadrature_mode[chan->channel] &&
218+ (val2 || val != 1)) {
219+ mutex_unlock(&priv->lock);
203220 return -EINVAL;
221+ }
204222
205223 /* Only three gain states (1, 0.5, 0.25) */
206224 if (val == 1 && !val2)
@@ -214,11 +232,15 @@ static int quad8_write_raw(struct iio_dev *indio_dev, · 7 unmodified lines
214232 priv->quadrature_scale[chan->channel] = 2;
215233 break;
216234 default:
235+ mutex_unlock(&priv->lock);
217236 return -EINVAL;
218237 }
219− else
238+ else {
239+ mutex_unlock(&priv->lock);
220240 return -EINVAL;
241+ }
221242
243+ mutex_unlock(&priv->lock);
222244 return 0;
223245 }
224246
@@ -255,6 +277,8 @@ static ssize_t quad8_write_preset(struct iio_dev *indio_dev, uintptr_t private, · 30 unmodified lines
255277 if (preset > 0xFFFFFF)
256278 return -EINVAL;
257279
280+ mutex_lock(&priv->lock);
281+
258282 priv->preset[chan->channel] = preset;
259283
260284 /* Reset Byte Pointer */
@@ -264,6 +288,8 @@ static ssize_t quad8_write_preset(struct iio_dev *indio_dev, uintptr_t private, · 3 unmodified lines
264288 for (i = 0; i < 3; i++)
265289 outb(preset >> (8 * i), base_offset);
266290
291+ mutex_unlock(&priv->lock);
292+
267293 return len;
268294 }
269295
@@ -293,6 +319,8 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, · 23 unmodified lines
293319 /* Preset enable is active low in Input/Output Control register */
294320 preset_enable = !preset_enable;
295321
322+ mutex_lock(&priv->lock);
323+
296324 priv->preset_enable[chan->channel] = preset_enable;
297325
298326 ior_cfg = priv->ab_enable[chan->channel] |
@@ -301,6 +329,8 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, · 2 unmodified lines
301329 /* Load I/O control configuration to Input / Output Control Register */
302330 outb(QUAD8_CTR_IOR | ior_cfg, base_offset);
303331
332+ mutex_unlock(&priv->lock);
333+
304334 return len;
305335 }
306336
@@ -358,6 +388,8 @@ static int quad8_set_count_mode(struct iio_dev *indio_dev, · 51 unmodified lines
358388 unsigned int mode_cfg = cnt_mode << 1;
359389 const int base_offset = priv->base + 2 * chan->channel + 1;
360390
391+ mutex_lock(&priv->lock);
392+
361393 priv->count_mode[chan->channel] = cnt_mode;
362394
363395 /* Add quadrature mode configuration */
@@ -367,6 +399,8 @@ static int quad8_set_count_mode(struct iio_dev *indio_dev, · 3 unmodified lines
367399 /* Load mode configuration to Counter Mode Register */
368400 outb(QUAD8_CTR_CMR | mode_cfg, base_offset);
369401
402+ mutex_unlock(&priv->lock);
403+
370404 return 0;
371405 }
372406
@@ -394,19 +428,26 @@ static int quad8_set_synchronous_mode(struct iio_dev *indio_dev, · 21 unmodified lines
394428 const struct iio_chan_spec *chan, unsigned int synchronous_mode)
395429 {
396430 struct quad8_iio *const priv = iio_priv(indio_dev);
397− const unsigned int idr_cfg = synchronous_mode |
398− priv->index_polarity[chan->channel] << 1;
399431 const int base_offset = priv->base + 2 * chan->channel + 1;
432+ unsigned int idr_cfg = synchronous_mode;
433+
434+ mutex_lock(&priv->lock);
435+
436+ idr_cfg |= priv->index_polarity[chan->channel] << 1;
400437
401438 /* Index function must be non-synchronous in non-quadrature mode */
402− if (synchronous_mode && !priv->quadrature_mode[chan->channel])
439+ if (synchronous_mode && !priv->quadrature_mode[chan->channel]) {
440+ mutex_unlock(&priv->lock);
403441 return -EINVAL;
442+ }
404443
405444 priv->synchronous_mode[chan->channel] = synchronous_mode;
406445
407446 /* Load Index Control configuration to Index Control Register */
408447 outb(QUAD8_CTR_IDR | idr_cfg, base_offset);
409448
449+ mutex_unlock(&priv->lock);
450+
410451 return 0;
411452 }
412453
@@ -434,8 +475,12 @@ static int quad8_set_quadrature_mode(struct iio_dev *indio_dev, · 21 unmodified lines
434475 const struct iio_chan_spec *chan, unsigned int quadrature_mode)
435476 {
436477 struct quad8_iio *const priv = iio_priv(indio_dev);
437− unsigned int mode_cfg = priv->count_mode[chan->channel] << 1;
438478 const int base_offset = priv->base + 2 * chan->channel + 1;
479+ unsigned int mode_cfg;
480+
481+ mutex_lock(&priv->lock);
482+
483+ mode_cfg = priv->count_mode[chan->channel] << 1;
439484
440485 if (quadrature_mode)
441486 mode_cfg |= (priv->quadrature_scale[chan->channel] + 1) << 3;
@@ -453,6 +498,8 @@ static int quad8_set_quadrature_mode(struct iio_dev *indio_dev, · 11 unmodified lines
453498 /* Load mode configuration to Counter Mode Register */
454499 outb(QUAD8_CTR_CMR | mode_cfg, base_offset);
455500
501+ mutex_unlock(&priv->lock);
502+
456503 return 0;
457504 }
458505
@@ -480,15 +527,20 @@ static int quad8_set_index_polarity(struct iio_dev *indio_dev, · 21 unmodified lines
480527 const struct iio_chan_spec *chan, unsigned int index_polarity)
481528 {
482529 struct quad8_iio *const priv = iio_priv(indio_dev);
483− const unsigned int idr_cfg = priv->synchronous_mode[chan->channel] |
484− index_polarity << 1;
485530 const int base_offset = priv->base + 2 * chan->channel + 1;
531+ unsigned int idr_cfg = index_polarity << 1;
532+
533+ mutex_lock(&priv->lock);
534+
535+ idr_cfg |= priv->synchronous_mode[chan->channel];
486536
487537 priv->index_polarity[chan->channel] = index_polarity;
488538
489539 /* Load Index Control configuration to Index Control Register */
490540 outb(QUAD8_CTR_IDR | idr_cfg, base_offset);
491541
542+ mutex_unlock(&priv->lock);
543+
492544 return 0;
493545 }
494546
@@ -589,7 +641,7 @@ static int quad8_signal_read(struct counter_device *counter, · 94 unmodified lines
589641 static int quad8_count_read(struct counter_device *counter,
590642 struct counter_count *count, unsigned long *val)
591643 {
592− const struct quad8_iio *const priv = counter->priv;
644+ struct quad8_iio *const priv = counter->priv;
593645 const int base_offset = priv->base + 2 * count->id;
594646 unsigned int flags;
595647 unsigned int borrow;
@@ -603,6 +655,8 @@ static int quad8_count_read(struct counter_device *counter, · 7 unmodified lines
603655 /* Borrow XOR Carry effectively doubles count range */
604656 *val = (unsigned long)(borrow ^ carry) << 24;
605657
658+ mutex_lock(&priv->lock);
659+
606660 /* Reset Byte Pointer; transfer Counter to Output Latch */
607661 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP | QUAD8_RLD_CNTR_OUT,
608662 base_offset + 1);
@@ -610,13 +664,15 @@ static int quad8_count_read(struct counter_device *counter, · 1 unmodified line
610664 for (i = 0; i < 3; i++)
611665 *val |= (unsigned long)inb(base_offset) << (8 * i);
612666
667+ mutex_unlock(&priv->lock);
668+
613669 return 0;
614670 }
615671
616672 static int quad8_count_write(struct counter_device *counter,
617673 struct counter_count *count, unsigned long val)
618674 {
619− const struct quad8_iio *const priv = counter->priv;
675+ struct quad8_iio *const priv = counter->priv;
620676 const int base_offset = priv->base + 2 * count->id;
621677 int i;
622678
@@ -624,6 +680,8 @@ static int quad8_count_write(struct counter_device *counter, · 1 unmodified line
624680 if (val > 0xFFFFFF)
625681 return -EINVAL;
626682
683+ mutex_lock(&priv->lock);
684+
627685 /* Reset Byte Pointer */
628686 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP, base_offset + 1);
629687
@@ -647,6 +705,8 @@ static int quad8_count_write(struct counter_device *counter, · 17 unmodified lines
647705 /* Reset Error flag */
648706 outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_E, base_offset + 1);
649707
708+ mutex_unlock(&priv->lock);
709+
650710 return 0;
651711 }
652712
@@ -667,13 +727,13 @@ static enum counter_count_function quad8_count_functions_list[] = { · 14 unmodified lines
667727 static int quad8_function_get(struct counter_device *counter,
668728 struct counter_count *count, size_t *function)
669729 {
670− const struct quad8_iio *const priv = counter->priv;
730+ struct quad8_iio *const priv = counter->priv;
671731 const int id = count->id;
672− const unsigned int quadrature_mode = priv->quadrature_mode[id];
673− const unsigned int scale = priv->quadrature_scale[id];
674732
675− if (quadrature_mode)
676− switch (scale) {
733+ mutex_lock(&priv->lock);
734+
735+ if (priv->quadrature_mode[id])
736+ switch (priv->quadrature_scale[id]) {
677737 case 0:
678738 *function = QUAD8_COUNT_FUNCTION_QUADRATURE_X1;
679739 break;
@@ -687,6 +747,8 @@ static int quad8_function_get(struct counter_device *counter, · 7 unmodified lines
687747 else
688748 *function = QUAD8_COUNT_FUNCTION_PULSE_DIRECTION;
689749
750+ mutex_unlock(&priv->lock);
751+
690752 return 0;
691753 }
692754
@@ -697,10 +759,15 @@ static int quad8_function_set(struct counter_device *counter, · 4 unmodified lines
697759 const int id = count->id;
698760 unsigned int *const quadrature_mode = priv->quadrature_mode + id;
699761 unsigned int *const scale = priv->quadrature_scale + id;
700− unsigned int mode_cfg = priv->count_mode[id] << 1;
701762 unsigned int *const synchronous_mode = priv->synchronous_mode + id;
702− const unsigned int idr_cfg = priv->index_polarity[id] << 1;
703763 const int base_offset = priv->base + 2 * id + 1;
764+ unsigned int mode_cfg;
765+ unsigned int idr_cfg;
766+
767+ mutex_lock(&priv->lock);
768+
769+ mode_cfg = priv->count_mode[id] << 1;
770+ idr_cfg = priv->index_polarity[id] << 1;
704771
705772 if (function == QUAD8_COUNT_FUNCTION_PULSE_DIRECTION) {
706773 *quadrature_mode = 0;
@@ -736,6 +803,8 @@ static int quad8_function_set(struct counter_device *counter, · 29 unmodified lines
736803 /* Load mode configuration to Counter Mode Register */
737804 outb(QUAD8_CTR_CMR | mode_cfg, base_offset);
738805
806+ mutex_unlock(&priv->lock);
807+
739808 return 0;
740809 }
741810
@@ -852,15 +921,20 @@ static int quad8_index_polarity_set(struct counter_device *counter, · 110 unmodified lines
852921 {
853922 struct quad8_iio *const priv = counter->priv;
854923 const size_t channel_id = signal->id - 16;
855− const unsigned int idr_cfg = priv->synchronous_mode[channel_id] |
856− index_polarity << 1;
857924 const int base_offset = priv->base + 2 * channel_id + 1;
925+ unsigned int idr_cfg = index_polarity << 1;
926+
927+ mutex_lock(&priv->lock);
928+
929+ idr_cfg |= priv->synchronous_mode[channel_id];
858930
859931 priv->index_polarity[channel_id] = index_polarity;
860932
861933 /* Load Index Control configuration to Index Control Register */
862934 outb(QUAD8_CTR_IDR | idr_cfg, base_offset);
863935
936+ mutex_unlock(&priv->lock);
937+
864938 return 0;
865939 }
866940
@@ -887,19 +961,26 @@ static int quad8_synchronous_mode_set(struct counter_device *counter, · 20 unmodified lines
887961 {
888962 struct quad8_iio *const priv = counter->priv;
889963 const size_t channel_id = signal->id - 16;
890− const unsigned int idr_cfg = synchronous_mode |
891− priv->index_polarity[channel_id] << 1;
892964 const int base_offset = priv->base + 2 * channel_id + 1;
965+ unsigned int idr_cfg = synchronous_mode;
966+
967+ mutex_lock(&priv->lock);
968+
969+ idr_cfg |= priv->index_polarity[channel_id] << 1;
893970
894971 /* Index function must be non-synchronous in non-quadrature mode */
895− if (synchronous_mode && !priv->quadrature_mode[channel_id])
972+ if (synchronous_mode && !priv->quadrature_mode[channel_id]) {
973+ mutex_unlock(&priv->lock);
896974 return -EINVAL;
975+ }
897976
898977 priv->synchronous_mode[channel_id] = synchronous_mode;
899978
900979 /* Load Index Control configuration to Index Control Register */
901980 outb(QUAD8_CTR_IDR | idr_cfg, base_offset);
902981
982+ mutex_unlock(&priv->lock);
983+
903984 return 0;
904985 }
905986
@@ -964,6 +1045,8 @@ static int quad8_count_mode_set(struct counter_device *counter, · 58 unmodified lines
9641045 break;
9651046 }
9661047
1048+ mutex_lock(&priv->lock);
1049+
9671050 priv->count_mode[count->id] = cnt_mode;
9681051
9691052 /* Set count mode configuration value */
@@ -976,6 +1059,8 @@ static int quad8_count_mode_set(struct counter_device *counter, · 6 unmodified lines
9761059 /* Load mode configuration to Counter Mode Register */
9771060 outb(QUAD8_CTR_CMR | mode_cfg, base_offset);
9781061
1062+ mutex_unlock(&priv->lock);
1063+
9791064 return 0;
9801065 }
9811066
@@ -1017,6 +1102,8 @@ static ssize_t quad8_count_enable_write(struct counter_device *counter, · 35 unmodified lines
10171102 if (err)
10181103 return err;
10191104
1105+ mutex_lock(&priv->lock);
1106+
10201107 priv->ab_enable[count->id] = ab_enable;
10211108
10221109 ior_cfg = ab_enable | priv->preset_enable[count->id] << 1;
@@ -1024,6 +1111,8 @@ static ssize_t quad8_count_enable_write(struct counter_device *counter, · 1 unmodified line
10241111 /* Load I/O control configuration */
10251112 outb(QUAD8_CTR_IOR | ior_cfg, base_offset + 1);
10261113
1114+ mutex_unlock(&priv->lock);
1115+
10271116 return len;
10281117 }
10291118
@@ -1052,14 +1141,28 @@ static ssize_t quad8_count_preset_read(struct counter_device *counter, · 22 unmodified lines
10521141 return sprintf(buf, "%u\n", priv->preset[count->id]);
10531142 }
10541143
1144+static void quad8_preset_register_set(struct quad8_iio *quad8iio, int id,
1145+ unsigned int preset)
1146+{
1147+ const unsigned int base_offset = quad8iio->base + 2 * id;
1148+ int i;
1149+
1150+ quad8iio->preset[id] = preset;
1151+
1152+ /* Reset Byte Pointer */
1153+ outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP, base_offset + 1);
1154+
1155+ /* Set Preset Register */
1156+ for (i = 0; i < 3; i++)
1157+ outb(preset >> (8 * i), base_offset);
1158+}
1159+
10551160 static ssize_t quad8_count_preset_write(struct counter_device *counter,
10561161 struct counter_count *count, void *private, const char *buf, size_t len)
10571162 {
10581163 struct quad8_iio *const priv = counter->priv;
1059− const int base_offset = priv->base + 2 * count->id;
10601164 unsigned int preset;
10611165 int ret;
1062− int i;
10631166
10641167 ret = kstrtouint(buf, 0, &preset);
10651168 if (ret)
@@ -1069,14 +1172,11 @@ static ssize_t quad8_count_preset_write(struct counter_device *counter, · 3 unmodified lines
10691172 if (preset > 0xFFFFFF)
10701173 return -EINVAL;
10711174
1072− priv->preset[count->id] = preset;
1175+ mutex_lock(&priv->lock);
10731176
1074− /* Reset Byte Pointer */
1075− outb(QUAD8_CTR_RLD | QUAD8_RLD_RESET_BP, base_offset + 1);
1177+ quad8_preset_register_set(priv, count->id, preset);
10761178
1077− /* Set Preset Register */
1078− for (i = 0; i < 3; i++)
1079− outb(preset >> (8 * i), base_offset);
1179+ mutex_unlock(&priv->lock);
10801180
10811181 return len;
10821182 }
@@ -1084,15 +1184,20 @@ static ssize_t quad8_count_preset_write(struct counter_device *counter, · 1 unmodified line
10841184 static ssize_t quad8_count_ceiling_read(struct counter_device *counter,
10851185 struct counter_count *count, void *private, char *buf)
10861186 {
1087− const struct quad8_iio *const priv = counter->priv;
1187+ struct quad8_iio *const priv = counter->priv;
1188+
1189+ mutex_lock(&priv->lock);
10881190
10891191 /* Range Limit and Modulo-N count modes use preset value as ceiling */
10901192 switch (priv->count_mode[count->id]) {
10911193 case 1:
10921194 case 3:
1093− return quad8_count_preset_read(counter, count, private, buf);
1195+ mutex_unlock(&priv->lock);
1196+ return sprintf(buf, "%u\n", priv->preset[count->id]);
10941197 }
10951198
1199+ mutex_unlock(&priv->lock);
1200+
10961201 /* By default 0x1FFFFFF (25 bits unsigned) is maximum count */
10971202 return sprintf(buf, "33554431\n");
10981203 }
@@ -1101,15 +1206,29 @@ static ssize_t quad8_count_ceiling_write(struct counter_device *counter, · 2 unmodified lines
11011206 struct counter_count *count, void *private, const char *buf, size_t len)
11021207 {
11031208 struct quad8_iio *const priv = counter->priv;
1209+ unsigned int ceiling;
1210+ int ret;
1211+
1212+ ret = kstrtouint(buf, 0, &ceiling);
1213+ if (ret)
1214+ return ret;
1215+
1216+ /* Only 24-bit values are supported */
1217+ if (ceiling > 0xFFFFFF)
1218+ return -EINVAL;
1219+
1220+ mutex_lock(&priv->lock);
11041221
11051222 /* Range Limit and Modulo-N count modes use preset value as ceiling */
11061223 switch (priv->count_mode[count->id]) {
11071224 case 1:
11081225 case 3:
1109− return quad8_count_preset_write(counter, count, private, buf,
1110− len);
1226+ quad8_preset_register_set(priv, count->id, ceiling);
1227+ break;
11111228 }
11121229
1230+ mutex_unlock(&priv->lock);
1231+
11131232 return len;
11141233 }
11151234
@@ -1137,6 +1256,8 @@ static ssize_t quad8_count_preset_enable_write(struct counter_device *counter, · 21 unmodified lines
11371256 /* Preset enable is active low in Input/Output Control register */
11381257 preset_enable = !preset_enable;
11391258
1259+ mutex_lock(&priv->lock);
1260+
11401261 priv->preset_enable[count->id] = preset_enable;
11411262
11421263 ior_cfg = priv->ab_enable[count->id] | (unsigned int)preset_enable << 1;
@@ -1144,6 +1265,8 @@ static ssize_t quad8_count_preset_enable_write(struct counter_device *counter, · 1 unmodified line
11441265 /* Load I/O control configuration to Input / Output Control Register */
11451266 outb(QUAD8_CTR_IOR | ior_cfg, base_offset);
11461267
1268+ mutex_unlock(&priv->lock);
1269+
11471270 return len;
11481271 }
11491272
@@ -1429,6 +1552,9 @@ static int quad8_probe(struct device *dev, unsigned int id) · 279 unmodified lines
14291552 quad8iio->counter.priv = quad8iio;
14301553 quad8iio->base = base[id];
14311554
1555+ /* Initialize mutex */
1556+ mutex_init(&quad8iio->lock);
1557+
14321558 /* Reset all counters and disable interrupt function */
14331559 outb(QUAD8_CHAN_OP_RESET_COUNTERS, base[id] + QUAD8_REG_CHAN_OP);
14341560 /* Set initial configuration for all counters */
drivers/crypto/chelsio/chcr_ktls.c+2−4
@@ -120,12 +120,10 @@ out: · 119 unmodified lines
120120 static int chcr_ktls_update_connection_state(struct chcr_ktls_info *tx_info,
121121 int new_state)
122122 {
123− unsigned long flags;
124−
125123 /* This function can be called from both rx (interrupt context) and tx
126124 * queue contexts.
127125 */
128− spin_lock_irqsave(&tx_info->lock, flags);
126+ spin_lock_bh(&tx_info->lock);
129127 switch (tx_info->connection_state) {
130128 case KTLS_CONN_CLOSED:
131129 tx_info->connection_state = new_state;
@@ -169,7 +167,7 @@ static int chcr_ktls_update_connection_state(struct chcr_ktls_info *tx_info, · 37 unmodified lines
169167 pr_err("unknown KTLS connection state\n");
170168 break;
171169 }
172− spin_unlock_irqrestore(&tx_info->lock, flags);
170+ spin_unlock_bh(&tx_info->lock);
173171
174172 return tx_info->connection_state;
175173 }
drivers/firmware/efi/cper.c+1−1
@@ -101,7 +101,7 @@ void cper_print_bits(const char *pfx, unsigned int bits, · 100 unmodified lines
101101 if (!len)
102102 len = snprintf(buf, sizeof(buf), "%s%s", pfx, str);
103103 else
104− len += snprintf(buf+len, sizeof(buf)-len, ", %s", str);
104+ len += scnprintf(buf+len, sizeof(buf)-len, ", %s", str);
105105 }
106106 if (len)
107107 printk("%s\n", buf);
drivers/firmware/efi/libstub/efistub.h+1−1
@@ -25,7 +25,7 @@ · 24 unmodified lines
2525 #define EFI_ALLOC_ALIGN EFI_PAGE_SIZE
2626 #endif
2727
28−#ifdef CONFIG_ARM
28+#if defined(CONFIG_ARM) || defined(CONFIG_X86)
2929 #define __efistub_global __section(.data)
3030 #else
3131 #define __efistub_global
drivers/firmware/efi/libstub/file.c+14−13
@@ -29,30 +29,31 @@ · 28 unmodified lines
2929 */
3030 #define EFI_READ_CHUNK_SIZE SZ_1M
3131
32+struct finfo {
33+ efi_file_info_t info;
34+ efi_char16_t filename[MAX_FILENAME_SIZE];
35+};
36+
3237 static efi_status_t efi_open_file(efi_file_protocol_t *volume,
33− efi_char16_t *filename_16,
38+ struct finfo *fi,
3439 efi_file_protocol_t **handle,
3540 unsigned long *file_size)
3641 {
37− struct {
38− efi_file_info_t info;
39− efi_char16_t filename[MAX_FILENAME_SIZE];
40− } finfo;
4142 efi_guid_t info_guid = EFI_FILE_INFO_ID;
4243 efi_file_protocol_t *fh;
4344 unsigned long info_sz;
4445 efi_status_t status;
4546
46− status = volume->open(volume, &fh, filename_16, EFI_FILE_MODE_READ, 0);
47+ status = volume->open(volume, &fh, fi->filename, EFI_FILE_MODE_READ, 0);
4748 if (status != EFI_SUCCESS) {
4849 pr_efi_err("Failed to open file: ");
49− efi_char16_printk(filename_16);
50+ efi_char16_printk(fi->filename);
5051 efi_printk("\n");
5152 return status;
5253 }
5354
54− info_sz = sizeof(finfo);
55− status = fh->get_info(fh, &info_guid, &info_sz, &finfo);
55+ info_sz = sizeof(struct finfo);
56+ status = fh->get_info(fh, &info_guid, &info_sz, fi);
5657 if (status != EFI_SUCCESS) {
5758 pr_efi_err("Failed to get file info\n");
5859 fh->close(fh);
@@ -60,7 +61,7 @@ static efi_status_t efi_open_file(efi_file_protocol_t *volume, · 1 unmodified line
6061 }
6162
6263 *handle = fh;
63− *file_size = finfo.info.file_size;
64+ *file_size = fi->info.file_size;
6465 return EFI_SUCCESS;
6566 }
6667
@@ -146,13 +147,13 @@ static efi_status_t handle_cmdline_files(efi_loaded_image_t *image, · 79 unmodified lines
146147
147148 alloc_addr = alloc_size = 0;
148149 do {
149− efi_char16_t filename[MAX_FILENAME_SIZE];
150+ struct finfo fi;
150151 unsigned long size;
151152 void *addr;
152153
153154 offset = find_file_option(cmdline, cmdline_len,
154155 optstr, optstr_size,
155− filename, ARRAY_SIZE(filename));
156+ fi.filename, ARRAY_SIZE(fi.filename));
156157
157158 if (!offset)
158159 break;
@@ -166,7 +167,7 @@ static efi_status_t handle_cmdline_files(efi_loaded_image_t *image, · 7 unmodified lines
166167 return status;
167168 }
168169
169− status = efi_open_file(volume, filename, &file, &size);
170+ status = efi_open_file(volume, &fi, &file, &size);
170171 if (status != EFI_SUCCESS)
171172 goto err_close_volume;
172173
drivers/firmware/efi/libstub/x86-stub.c+11−7
@@ -20,7 +20,7 @@ · 19 unmodified lines
2020 /* Maximum physical address for 64-bit kernel with 4-level paging */
2121 #define MAXMEM_X86_64_4LEVEL (1ull << 46)
2222
23−static efi_system_table_t *sys_table;
23+static efi_system_table_t *sys_table __efistub_global;
2424 extern const bool efi_is64;
2525 extern u32 image_offset;
2626
@@ -392,8 +392,6 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, · 365 unmodified lines
392392 image_base = efi_table_attr(image, image_base);
393393 image_offset = (void *)startup_32 - image_base;
394394
395− hdr = &((struct boot_params *)image_base)->hdr;
396−
397395 status = efi_allocate_pages(0x4000, (unsigned long *)&boot_params, ULONG_MAX);
398396 if (status != EFI_SUCCESS) {
399397 efi_printk("Failed to allocate lowmem for boot params\n");
@@ -742,8 +740,15 @@ unsigned long efi_main(efi_handle_t handle, · 342 unmodified lines
742740 * now use KERNEL_IMAGE_SIZE, which will be 512MiB, the same as what
743741 * KASLR uses.
744742 *
745− * Also relocate it if image_offset is zero, i.e. we weren't loaded by
746− * LoadImage, but we are not aligned correctly.
743+ * Also relocate it if image_offset is zero, i.e. the kernel wasn't
744+ * loaded by LoadImage, but rather by a bootloader that called the
745+ * handover entry. The reason we must always relocate in this case is
746+ * to handle the case of systemd-boot booting a unified kernel image,
747+ * which is a PE executable that contains the bzImage and an initrd as
748+ * COFF sections. The initrd section is placed after the bzImage
749+ * without ensuring that there are at least init_size bytes available
750+ * for the bzImage, and thus the compressed kernel's startup code may
751+ * overwrite the initrd unless it is moved out of the way.
747752 */
748753
749754 buffer_start = ALIGN(bzimage_addr - image_offset,
@@ -753,8 +758,7 @@ unsigned long efi_main(efi_handle_t handle, · 3 unmodified lines
753758 if ((buffer_start < LOAD_PHYSICAL_ADDR) ||
754759 (IS_ENABLED(CONFIG_X86_32) && buffer_end > KERNEL_IMAGE_SIZE) ||
755760 (IS_ENABLED(CONFIG_X86_64) && buffer_end > MAXMEM_X86_64_4LEVEL) ||
756− (image_offset == 0 && !IS_ALIGNED(bzimage_addr,
757− hdr->kernel_alignment))) {
761+ (image_offset == 0)) {
758762 status = efi_relocate_kernel(&bzimage_addr,
759763 hdr->init_size, hdr->init_size,
760764 hdr->pref_address,
drivers/firmware/imx/Kconfig+2−2
@@ -12,7 +12,7 @@ config IMX_DSP · 11 unmodified lines
1212
1313 config IMX_SCU
1414 bool "IMX SCU Protocol driver"
15− depends on IMX_MBOX || COMPILE_TEST
15+ depends on IMX_MBOX
1616 help
1717 The System Controller Firmware (SCFW) is a low-level system function
1818 which runs on a dedicated Cortex-M core to provide power, clock, and
@@ -24,6 +24,6 @@ config IMX_SCU · 5 unmodified lines
2424
2525 config IMX_SCU_PD
2626 bool "IMX SCU Power Domain driver"
27− depends on IMX_SCU || COMPILE_TEST
27+ depends on IMX_SCU
2828 help
2929 The System Controller Firmware (SCFW) based power domain driver.
drivers/firmware/xilinx/zynqmp-debug.c+1−1
@@ -35,7 +35,7 @@ static struct pm_api_info pm_api_list[] = { · 34 unmodified lines
3535 PM_API(PM_QUERY_DATA),
3636 };
3737
38−struct dentry *firmware_debugfs_root;
38+static struct dentry *firmware_debugfs_root;
3939
4040 /**
4141 * zynqmp_pm_argument_value() - Extract argument value from a PM-API request
drivers/fpga/dfl-pci.c+4−2
@@ -248,11 +248,13 @@ static int cci_pci_sriov_configure(struct pci_dev *pcidev, int num_vfs) · 247 unmodified lines
248248 return ret;
249249
250250 ret = pci_enable_sriov(pcidev, num_vfs);
251− if (ret)
251+ if (ret) {
252252 dfl_fpga_cdev_config_ports_pf(cdev);
253+ return ret;
254+ }
253255 }
254256
255− return ret;
257+ return num_vfs;
256258 }
257259
258260 static void cci_pci_remove(struct pci_dev *pcidev)
drivers/fpga/zynq-fpga.c+2−1
@@ -583,7 +583,8 @@ static int zynq_fpga_probe(struct platform_device *pdev) · 582 unmodified lines
583583
584584 priv->clk = devm_clk_get(dev, "ref_clk");
585585 if (IS_ERR(priv->clk)) {
586− dev_err(dev, "input clock not found\n");
586+ if (PTR_ERR(priv->clk) != -EPROBE_DEFER)
587+ dev_err(dev, "input clock not found\n");
587588 return PTR_ERR(priv->clk);
588589 }
589590
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c+20−2
@@ -2008,8 +2008,24 @@ static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev) · 2007 unmodified lines
20082008 */
20092009 static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
20102010 {
2011− return !!memcmp(adev->gart.ptr, adev->reset_magic,
2012− AMDGPU_RESET_MAGIC_NUM);
2011+ if (memcmp(adev->gart.ptr, adev->reset_magic,
2012+ AMDGPU_RESET_MAGIC_NUM))
2013+ return true;
2014+
2015+ if (!adev->in_gpu_reset)
2016+ return false;
2017+
2018+ /*
2019+ * For all ASICs with baco/mode1 reset, the VRAM is
2020+ * always assumed to be lost.
2021+ */
2022+ switch (amdgpu_asic_reset_method(adev)) {
2023+ case AMD_RESET_METHOD_BACO:
2024+ case AMD_RESET_METHOD_MODE1:
2025+ return true;
2026+ default:
2027+ return false;
2028+ }
20132029 }
20142030
20152031 /**
@@ -2340,6 +2356,8 @@ static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev) · 324 unmodified lines
23402356 {
23412357 int i, r;
23422358
2359+ amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2360+ amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
23432361
23442362 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
23452363 if (!adev->ip_blocks[i].status.valid)
drivers/gpu/drm/amd/amdgpu/cik.c+0−2
@@ -1358,8 +1358,6 @@ static int cik_asic_reset(struct amdgpu_device *adev) · 1357 unmodified lines
13581358 int r;
13591359
13601360 if (cik_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
1361− if (!adev->in_suspend)
1362− amdgpu_inc_vram_lost(adev);
13631361 r = amdgpu_dpm_baco_reset(adev);
13641362 } else {
13651363 r = cik_asic_pci_config_reset(adev);
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c+1−1
@@ -279,7 +279,7 @@ static const struct soc15_reg_golden golden_settings_gc_10_1_2_nv12[] = · 278 unmodified lines
279279
280280 #define DEFAULT_SH_MEM_CONFIG \
281281 ((SH_MEM_ADDRESS_MODE_64 << SH_MEM_CONFIG__ADDRESS_MODE__SHIFT) | \
282− (SH_MEM_ALIGNMENT_MODE_DWORD << SH_MEM_CONFIG__ALIGNMENT_MODE__SHIFT) | \
282+ (SH_MEM_ALIGNMENT_MODE_UNALIGNED << SH_MEM_CONFIG__ALIGNMENT_MODE__SHIFT) | \
283283 (SH_MEM_RETRY_MODE_ALL << SH_MEM_CONFIG__RETRY_MODE__SHIFT) | \
284284 (3 << SH_MEM_CONFIG__INITIAL_INST_PREFETCH__SHIFT))
285285
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c+2−0
@@ -1234,6 +1234,8 @@ struct amdgpu_gfxoff_quirk { · 1233 unmodified lines
12341234 static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = {
12351235 /* https://bugzilla.kernel.org/show_bug.cgi?id=204689 */
12361236 { 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc8 },
1237+ /* https://bugzilla.kernel.org/show_bug.cgi?id=207171 */
1238+ { 0x1002, 0x15dd, 0x103c, 0x83e7, 0xd3 },
12371239 { 0, 0, 0, 0, 0 },
12381240 };
12391241
drivers/gpu/drm/amd/amdgpu/nv.c+0−4
@@ -351,8 +351,6 @@ static int nv_asic_reset(struct amdgpu_device *adev) · 350 unmodified lines
351351 struct smu_context *smu = &adev->smu;
352352
353353 if (nv_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
354− if (!adev->in_suspend)
355− amdgpu_inc_vram_lost(adev);
356354 ret = smu_baco_enter(smu);
357355 if (ret)
358356 return ret;
@@ -360,8 +358,6 @@ static int nv_asic_reset(struct amdgpu_device *adev) · 1 unmodified line
360358 if (ret)
361359 return ret;
362360 } else {
363− if (!adev->in_suspend)
364− amdgpu_inc_vram_lost(adev);
365361 ret = nv_asic_mode1_reset(adev);
366362 }
367363
drivers/gpu/drm/amd/amdgpu/soc15.c+0−4
@@ -569,14 +569,10 @@ static int soc15_asic_reset(struct amdgpu_device *adev) · 568 unmodified lines
569569
570570 switch (soc15_asic_reset_method(adev)) {
571571 case AMD_RESET_METHOD_BACO:
572− if (!adev->in_suspend)
573− amdgpu_inc_vram_lost(adev);
574572 return soc15_asic_baco_reset(adev);
575573 case AMD_RESET_METHOD_MODE2:
576574 return amdgpu_dpm_mode2_reset(adev);
577575 default:
578− if (!adev->in_suspend)
579− amdgpu_inc_vram_lost(adev);
580576 return soc15_asic_mode1_reset(adev);
581577 }
582578 }
drivers/gpu/drm/amd/amdgpu/vi.c+0−2
@@ -765,8 +765,6 @@ static int vi_asic_reset(struct amdgpu_device *adev) · 764 unmodified lines
765765 int r;
766766
767767 if (vi_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
768− if (!adev->in_suspend)
769− amdgpu_inc_vram_lost(adev);
770768 r = amdgpu_dpm_baco_reset(adev);
771769 } else {
772770 r = vi_asic_pci_config_reset(adev);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c+12−2
@@ -4664,6 +4664,7 @@ static void amdgpu_dm_connector_destroy(struct drm_connector *connector) · 4663 unmodified lines
46644664 i2c_del_adapter(&aconnector->i2c->base);
46654665 kfree(aconnector->i2c);
46664666 }
4667+ kfree(aconnector->dm_dp_aux.aux.name);
46674668
46684669 kfree(connector);
46694670 }
@@ -4723,10 +4724,19 @@ amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector) · 53 unmodified lines
47234724 static int
47244725 amdgpu_dm_connector_late_register(struct drm_connector *connector)
47254726 {
4726−#if defined(CONFIG_DEBUG_FS)
47274727 struct amdgpu_dm_connector *amdgpu_dm_connector =
47284728 to_amdgpu_dm_connector(connector);
4729+ int r;
47294730
4731+ if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
4732+ (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
4733+ amdgpu_dm_connector->dm_dp_aux.aux.dev = connector->kdev;
4734+ r = drm_dp_aux_register(&amdgpu_dm_connector->dm_dp_aux.aux);
4735+ if (r)
4736+ return r;
4737+ }
4738+
4739+#if defined(CONFIG_DEBUG_FS)
47304740 connector_debugfs_init(amdgpu_dm_connector);
47314741 #endif
47324742
@@ -6092,7 +6102,7 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm, · 1359 unmodified lines
60926102
60936103 if (connector_type == DRM_MODE_CONNECTOR_DisplayPort
60946104 || connector_type == DRM_MODE_CONNECTOR_eDP)
6095− amdgpu_dm_initialize_dp_connector(dm, aconnector);
6105+ amdgpu_dm_initialize_dp_connector(dm, aconnector, link->link_index);
60966106
60976107 out_free:
60986108 if (res) {
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c+9−6
@@ -156,16 +156,16 @@ amdgpu_dm_mst_connector_late_register(struct drm_connector *connector) · 155 unmodified lines
156156 to_amdgpu_dm_connector(connector);
157157 int r;
158158
159− amdgpu_dm_connector->dm_dp_aux.aux.dev = connector->kdev;
160− r = drm_dp_aux_register(&amdgpu_dm_connector->dm_dp_aux.aux);
161− if (r)
159+ r = drm_dp_mst_connector_late_register(connector,
160+ amdgpu_dm_connector->port);
161+ if (r < 0)
162162 return r;
163163
164164 #if defined(CONFIG_DEBUG_FS)
165165 connector_debugfs_init(amdgpu_dm_connector);
166166 #endif
167167
168− return r;
168+ return 0;
169169 }
170170
171171 static void
@@ -472,9 +472,12 @@ static const struct drm_dp_mst_topology_cbs dm_mst_cbs = { · 300 unmodified lines
472472 };
473473
474474 void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
475− struct amdgpu_dm_connector *aconnector)
475+ struct amdgpu_dm_connector *aconnector,
476+ int link_index)
476477 {
477− aconnector->dm_dp_aux.aux.name = "dmdc";
478+ aconnector->dm_dp_aux.aux.name =
479+ kasprintf(GFP_KERNEL, "AMDGPU DM aux hw bus %d",
480+ link_index);
478481 aconnector->dm_dp_aux.aux.transfer = dm_dp_aux_transfer;
479482 aconnector->dm_dp_aux.ddc_service = aconnector->dc_link->ddc;
480483
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h+2−1
@@ -32,7 +32,8 @@ struct amdgpu_dm_connector; · 31 unmodified lines
3232 int dm_mst_get_pbn_divider(struct dc_link *link);
3333
3434 void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
35− struct amdgpu_dm_connector *aconnector);
35+ struct amdgpu_dm_connector *aconnector,
36+ int link_index);
3637
3738 #if defined(CONFIG_DRM_AMD_DC_DCN)
3839 bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state,
drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c+26−0
@@ -984,6 +984,32 @@ static int init_thermal_controller( · 983 unmodified lines
984984 struct pp_hwmgr *hwmgr,
985985 const ATOM_PPLIB_POWERPLAYTABLE *powerplay_table)
986986 {
987+ hwmgr->thermal_controller.ucType =
988+ powerplay_table->sThermalController.ucType;
989+ hwmgr->thermal_controller.ucI2cLine =
990+ powerplay_table->sThermalController.ucI2cLine;
991+ hwmgr->thermal_controller.ucI2cAddress =
992+ powerplay_table->sThermalController.ucI2cAddress;
993+
994+ hwmgr->thermal_controller.fanInfo.bNoFan =
995+ (0 != (powerplay_table->sThermalController.ucFanParameters &
996+ ATOM_PP_FANPARAMETERS_NOFAN));
997+
998+ hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
999+ powerplay_table->sThermalController.ucFanParameters &
1000+ ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
1001+
1002+ hwmgr->thermal_controller.fanInfo.ulMinRPM
1003+ = powerplay_table->sThermalController.ucFanMinRPM * 100UL;
1004+ hwmgr->thermal_controller.fanInfo.ulMaxRPM
1005+ = powerplay_table->sThermalController.ucFanMaxRPM * 100UL;
1006+
1007+ set_hw_cap(hwmgr,
1008+ ATOM_PP_THERMALCONTROLLER_NONE != hwmgr->thermal_controller.ucType,
1009+ PHM_PlatformCaps_ThermalController);
1010+
1011+ hwmgr->thermal_controller.use_hw_fan_control = 1;
1012+
9871013 return 0;
9881014 }
9891015
drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c+4−1
@@ -3804,9 +3804,12 @@ static int smu7_trim_single_dpm_states(struct pp_hwmgr *hwmgr, · 3803 unmodified lines
38043804 {
38053805 uint32_t i;
38063806
3807+ /* force the trim if mclk_switching is disabled to prevent flicker */
3808+ bool force_trim = (low_limit == high_limit);
38073809 for (i = 0; i < dpm_table->count; i++) {
38083810 /*skip the trim if od is enabled*/
3809− if (!hwmgr->od_enabled && (dpm_table->dpm_levels[i].value < low_limit
3811+ if ((!hwmgr->od_enabled || force_trim)
3812+ && (dpm_table->dpm_levels[i].value < low_limit
38103813 || dpm_table->dpm_levels[i].value > high_limit))
38113814 dpm_table->dpm_levels[i].enabled = false;
38123815 else
drivers/gpu/drm/amd/powerplay/renoir_ppt.c+6−1
@@ -895,12 +895,17 @@ static int renoir_read_sensor(struct smu_context *smu, · 894 unmodified lines
895895
896896 static bool renoir_is_dpm_running(struct smu_context *smu)
897897 {
898+ struct amdgpu_device *adev = smu->adev;
899+
898900 /*
899901 * Util now, the pmfw hasn't exported the interface of SMU
900902 * feature mask to APU SKU so just force on all the feature
901903 * at early initial stage.
902904 */
903− return true;
905+ if (adev->in_suspend)
906+ return false;
907+ else
908+ return true;
904909
905910 }
906911
drivers/gpu/drm/amd/powerplay/smu_v11_0.c+6−0
@@ -1718,6 +1718,12 @@ int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state) · 1717 unmodified lines
17181718 if (ret)
17191719 goto out;
17201720
1721+ if (ras && ras->supported) {
1722+ ret = smu_send_smc_msg(smu, SMU_MSG_PrepareMp1ForUnload, NULL);
1723+ if (ret)
1724+ goto out;
1725+ }
1726+
17211727 /* clear vbios scratch 6 and 7 for coming asic reinit */
17221728 WREG32(adev->bios_scratch_reg_offset + 6, 0);
17231729 WREG32(adev->bios_scratch_reg_offset + 7, 0);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c+3−0
@@ -485,6 +485,9 @@ static int anx6345_get_modes(struct drm_connector *connector) · 484 unmodified lines
485485
486486 num_modes += drm_add_edid_modes(connector, anx6345->edid);
487487
488+ /* Driver currently supports only 6bpc */
489+ connector->display_info.bpc = 6;
490+
488491 unlock:
489492 if (power_off)
490493 anx6345_poweroff(anx6345);
drivers/gpu/drm/drm_dp_mst_topology.c+1−0
@@ -4295,6 +4295,7 @@ int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state, · 4294 unmodified lines
42954295 if (pos->vcpi) {
42964296 drm_dp_mst_put_port_malloc(port);
42974297 pos->vcpi = 0;
4298+ pos->pbn = 0;
42984299 }
42994300
43004301 return 0;
drivers/gpu/drm/i915/display/intel_ddi.c+11−3
@@ -3141,9 +3141,6 @@ static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder, · 3140 unmodified lines
31413141 intel_dp_set_link_params(intel_dp, crtc_state->port_clock,
31423142 crtc_state->lane_count, is_mst);
31433143
3144− intel_dp->regs.dp_tp_ctl = DP_TP_CTL(port);
3145− intel_dp->regs.dp_tp_status = DP_TP_STATUS(port);
3146−
31473144 intel_edp_panel_on(intel_dp);
31483145
31493146 intel_ddi_clk_select(encoder, crtc_state);
@@ -3848,12 +3845,18 @@ void intel_ddi_get_config(struct intel_encoder *encoder, · 698 unmodified lines
38483845 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
38493846 struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->uapi.crtc);
38503847 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
3848+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
38513849 u32 temp, flags = 0;
38523850
38533851 /* XXX: DSI transcoder paranoia */
38543852 if (drm_WARN_ON(&dev_priv->drm, transcoder_is_dsi(cpu_transcoder)))
38553853 return;
38563854
3855+ if (INTEL_GEN(dev_priv) >= 12) {
3856+ intel_dp->regs.dp_tp_ctl = TGL_DP_TP_CTL(cpu_transcoder);
3857+ intel_dp->regs.dp_tp_status = TGL_DP_TP_STATUS(cpu_transcoder);
3858+ }
3859+
38573860 intel_dsc_get_config(encoder, pipe_config);
38583861
38593862 temp = intel_de_read(dev_priv, TRANS_DDI_FUNC_CTL(cpu_transcoder));
@@ -4173,6 +4176,7 @@ static const struct drm_encoder_funcs intel_ddi_funcs = { · 313 unmodified lines
41734176 static struct intel_connector *
41744177 intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
41754178 {
4179+ struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
41764180 struct intel_connector *connector;
41774181 enum port port = intel_dig_port->base.port;
41784182
@@ -4183,6 +4187,10 @@ intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port) · 4 unmodified lines
41834187 intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
41844188 intel_dig_port->dp.prepare_link_retrain =
41854189 intel_ddi_prepare_link_retrain;
4190+ if (INTEL_GEN(dev_priv) < 12) {
4191+ intel_dig_port->dp.regs.dp_tp_ctl = DP_TP_CTL(port);
4192+ intel_dig_port->dp.regs.dp_tp_status = DP_TP_STATUS(port);
4193+ }
41864194
41874195 if (!intel_dp_init_connector(intel_dig_port, connector)) {
41884196 kfree(connector);
drivers/gpu/drm/i915/display/intel_display_power.c+6−6
@@ -4140,7 +4140,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4139 unmodified lines
41404140 {
41414141 .name = "AUX D TBT1",
41424142 .domains = TGL_AUX_D_TBT1_IO_POWER_DOMAINS,
4143− .ops = &hsw_power_well_ops,
4143+ .ops = &icl_tc_phy_aux_power_well_ops,
41444144 .id = DISP_PW_ID_NONE,
41454145 {
41464146 .hsw.regs = &icl_aux_power_well_regs,
@@ -4151,7 +4151,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4 unmodified lines
41514151 {
41524152 .name = "AUX E TBT2",
41534153 .domains = TGL_AUX_E_TBT2_IO_POWER_DOMAINS,
4154− .ops = &hsw_power_well_ops,
4154+ .ops = &icl_tc_phy_aux_power_well_ops,
41554155 .id = DISP_PW_ID_NONE,
41564156 {
41574157 .hsw.regs = &icl_aux_power_well_regs,
@@ -4162,7 +4162,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4 unmodified lines
41624162 {
41634163 .name = "AUX F TBT3",
41644164 .domains = TGL_AUX_F_TBT3_IO_POWER_DOMAINS,
4165− .ops = &hsw_power_well_ops,
4165+ .ops = &icl_tc_phy_aux_power_well_ops,
41664166 .id = DISP_PW_ID_NONE,
41674167 {
41684168 .hsw.regs = &icl_aux_power_well_regs,
@@ -4173,7 +4173,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4 unmodified lines
41734173 {
41744174 .name = "AUX G TBT4",
41754175 .domains = TGL_AUX_G_TBT4_IO_POWER_DOMAINS,
4176− .ops = &hsw_power_well_ops,
4176+ .ops = &icl_tc_phy_aux_power_well_ops,
41774177 .id = DISP_PW_ID_NONE,
41784178 {
41794179 .hsw.regs = &icl_aux_power_well_regs,
@@ -4184,7 +4184,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4 unmodified lines
41844184 {
41854185 .name = "AUX H TBT5",
41864186 .domains = TGL_AUX_H_TBT5_IO_POWER_DOMAINS,
4187− .ops = &hsw_power_well_ops,
4187+ .ops = &icl_tc_phy_aux_power_well_ops,
41884188 .id = DISP_PW_ID_NONE,
41894189 {
41904190 .hsw.regs = &icl_aux_power_well_regs,
@@ -4195,7 +4195,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4 unmodified lines
41954195 {
41964196 .name = "AUX I TBT6",
41974197 .domains = TGL_AUX_I_TBT6_IO_POWER_DOMAINS,
4198− .ops = &hsw_power_well_ops,
4198+ .ops = &icl_tc_phy_aux_power_well_ops,
41994199 .id = DISP_PW_ID_NONE,
42004200 {
42014201 .hsw.regs = &icl_aux_power_well_regs,
drivers/gpu/drm/i915/display/intel_dp.c+2−3
@@ -2517,9 +2517,6 @@ static void intel_dp_prepare(struct intel_encoder *encoder, · 2516 unmodified lines
25172517 intel_crtc_has_type(pipe_config,
25182518 INTEL_OUTPUT_DP_MST));
25192519
2520− intel_dp->regs.dp_tp_ctl = DP_TP_CTL(port);
2521− intel_dp->regs.dp_tp_status = DP_TP_STATUS(port);
2522−
25232520 /*
25242521 * There are four kinds of DP registers:
25252522 *
@@ -7836,6 +7833,8 @@ bool intel_dp_init(struct drm_i915_private *dev_priv, · 5310 unmodified lines
78367833
78377834 intel_dig_port->dp.output_reg = output_reg;
78387835 intel_dig_port->max_lanes = 4;
7836+ intel_dig_port->dp.regs.dp_tp_ctl = DP_TP_CTL(port);
7837+ intel_dig_port->dp.regs.dp_tp_status = DP_TP_STATUS(port);
78397838
78407839 intel_encoder->type = INTEL_OUTPUT_DP;
78417840 intel_encoder->power_domain = intel_port_to_power_domain(port);
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c+1−0
@@ -342,6 +342,7 @@ int intel_dp_aux_init_backlight_funcs(struct intel_connector *intel_connector) · 341 unmodified lines
342342 */
343343 if (dev_priv->vbt.backlight.type !=
344344 INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE &&
345+ i915_modparams.enable_dpcd_backlight != 1 &&
345346 !drm_dp_has_quirk(&intel_dp->desc, intel_dp->edid_quirks,
346347 DP_QUIRK_FORCE_DPCD_BACKLIGHT)) {
347348 DRM_DEV_INFO(dev->dev,
drivers/gpu/drm/i915/display/intel_hdmi.c+2−1
@@ -1536,7 +1536,8 @@ bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port) · 1535 unmodified lines
15361536 intel_de_write(i915, HDCP_RPRIME(i915, cpu_transcoder, port), ri.reg);
15371537
15381538 /* Wait for Ri prime match */
1539− if (wait_for(intel_de_read(i915, HDCP_STATUS(i915, cpu_transcoder, port)) &
1539+ if (wait_for((intel_de_read(i915, HDCP_STATUS(i915, cpu_transcoder, port)) &
1540+ (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC)) ==
15401541 (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC), 1)) {
15411542 DRM_ERROR("Ri' mismatch detected, link check failed (%x)\n",
15421543 intel_de_read(i915, HDCP_STATUS(i915, cpu_transcoder, port)));
drivers/gpu/drm/i915/display/intel_sprite.c+12−5
@@ -2817,19 +2817,25 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, · 2816 unmodified lines
28172817 }
28182818 }
28192819
2820−static bool gen12_plane_supports_mc_ccs(enum plane_id plane_id)
2820+static bool gen12_plane_supports_mc_ccs(struct drm_i915_private *dev_priv,
2821+ enum plane_id plane_id)
28212822 {
2823+ /* Wa_14010477008:tgl[a0..c0] */
2824+ if (IS_TGL_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_C0))
2825+ return false;
2826+
28222827 return plane_id < PLANE_SPRITE4;
28232828 }
28242829
28252830 static bool gen12_plane_format_mod_supported(struct drm_plane *_plane,
28262831 u32 format, u64 modifier)
28272832 {
2833+ struct drm_i915_private *dev_priv = to_i915(_plane->dev);
28282834 struct intel_plane *plane = to_intel_plane(_plane);
28292835
28302836 switch (modifier) {
28312837 case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
2832− if (!gen12_plane_supports_mc_ccs(plane->id))
2838+ if (!gen12_plane_supports_mc_ccs(dev_priv, plane->id))
28332839 return false;
28342840 /* fall through */
28352841 case DRM_FORMAT_MOD_LINEAR:
@@ -2998,9 +3004,10 @@ static const u32 *icl_get_plane_formats(struct drm_i915_private *dev_priv, · 162 unmodified lines
29983004 }
29993005 }
30003006
3001−static const u64 *gen12_get_plane_modifiers(enum plane_id plane_id)
3007+static const u64 *gen12_get_plane_modifiers(struct drm_i915_private *dev_priv,
3008+ enum plane_id plane_id)
30023009 {
3003− if (gen12_plane_supports_mc_ccs(plane_id))
3010+ if (gen12_plane_supports_mc_ccs(dev_priv, plane_id))
30043011 return gen12_plane_format_modifiers_mc_ccs;
30053012 else
30063013 return gen12_plane_format_modifiers_rc_ccs;
@@ -3070,7 +3077,7 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv, · 63 unmodified lines
30703077
30713078 plane->has_ccs = skl_plane_has_ccs(dev_priv, pipe, plane_id);
30723079 if (INTEL_GEN(dev_priv) >= 12) {
3073− modifiers = gen12_get_plane_modifiers(plane_id);
3080+ modifiers = gen12_get_plane_modifiers(dev_priv, plane_id);
30743081 plane_funcs = &gen12_plane_funcs;
30753082 } else {
30763083 if (plane->has_ccs)
drivers/gpu/drm/i915/gt/intel_rps.c+6−3
@@ -81,13 +81,14 @@ static void rps_enable_interrupts(struct intel_rps *rps) · 80 unmodified lines
8181 events = (GEN6_PM_RP_UP_THRESHOLD |
8282 GEN6_PM_RP_DOWN_THRESHOLD |
8383 GEN6_PM_RP_DOWN_TIMEOUT);
84−
8584 WRITE_ONCE(rps->pm_events, events);
85+
8686 spin_lock_irq(&gt->irq_lock);
8787 gen6_gt_pm_enable_irq(gt, rps->pm_events);
8888 spin_unlock_irq(&gt->irq_lock);
8989
90− set(gt->uncore, GEN6_PMINTRMSK, rps_pm_mask(rps, rps->cur_freq));
90+ intel_uncore_write(gt->uncore,
91+ GEN6_PMINTRMSK, rps_pm_mask(rps, rps->last_freq));
9192 }
9293
9394 static void gen6_rps_reset_interrupts(struct intel_rps *rps)
@@ -120,7 +121,9 @@ static void rps_disable_interrupts(struct intel_rps *rps) · 26 unmodified lines
120121 struct intel_gt *gt = rps_to_gt(rps);
121122
122123 WRITE_ONCE(rps->pm_events, 0);
123− set(gt->uncore, GEN6_PMINTRMSK, rps_pm_sanitize_mask(rps, ~0u));
124+
125+ intel_uncore_write(gt->uncore,
126+ GEN6_PMINTRMSK, rps_pm_sanitize_mask(rps, ~0u));
124127
125128 spin_lock_irq(&gt->irq_lock);
126129 gen6_gt_pm_disable_irq(gt, GEN6_PM_RPS_EVENTS);
drivers/gpu/drm/i915/gvt/kvmgt.c+22−24
@@ -131,6 +131,7 @@ struct kvmgt_vdev { · 130 unmodified lines
131131 struct work_struct release_work;
132132 atomic_t released;
133133 struct vfio_device *vfio_device;
134+ struct vfio_group *vfio_group;
134135 };
135136
136137 static inline struct kvmgt_vdev *kvmgt_vdev(struct intel_vgpu *vgpu)
@@ -151,6 +152,7 @@ static void gvt_unpin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, · 14 unmodified lines
151152 unsigned long size)
152153 {
153154 struct drm_i915_private *i915 = vgpu->gvt->gt->i915;
155+ struct kvmgt_vdev *vdev = kvmgt_vdev(vgpu);
154156 int total_pages;
155157 int npage;
156158 int ret;
@@ -160,7 +162,7 @@ static void gvt_unpin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, · 3 unmodified lines
160162 for (npage = 0; npage < total_pages; npage++) {
161163 unsigned long cur_gfn = gfn + npage;
162164
163− ret = vfio_unpin_pages(mdev_dev(kvmgt_vdev(vgpu)->mdev), &cur_gfn, 1);
165+ ret = vfio_group_unpin_pages(vdev->vfio_group, &cur_gfn, 1);
164166 drm_WARN_ON(&i915->drm, ret != 1);
165167 }
166168 }
@@ -169,6 +171,7 @@ static void gvt_unpin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, · 2 unmodified lines
169171 static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn,
170172 unsigned long size, struct page **page)
171173 {
174+ struct kvmgt_vdev *vdev = kvmgt_vdev(vgpu);
172175 unsigned long base_pfn = 0;
173176 int total_pages;
174177 int npage;
@@ -183,8 +186,8 @@ static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, · 8 unmodified lines
183186 unsigned long cur_gfn = gfn + npage;
184187 unsigned long pfn;
185188
186− ret = vfio_pin_pages(mdev_dev(kvmgt_vdev(vgpu)->mdev), &cur_gfn, 1,
187− IOMMU_READ | IOMMU_WRITE, &pfn);
189+ ret = vfio_group_pin_pages(vdev->vfio_group, &cur_gfn, 1,
190+ IOMMU_READ | IOMMU_WRITE, &pfn);
188191 if (ret != 1) {
189192 gvt_vgpu_err("vfio_pin_pages failed for gfn 0x%lx, ret %d\n",
190193 cur_gfn, ret);
@@ -792,6 +795,7 @@ static int intel_vgpu_open(struct mdev_device *mdev) · 601 unmodified lines
792795 struct kvmgt_vdev *vdev = kvmgt_vdev(vgpu);
793796 unsigned long events;
794797 int ret;
798+ struct vfio_group *vfio_group;
795799
796800 vdev->iommu_notifier.notifier_call = intel_vgpu_iommu_notifier;
797801 vdev->group_notifier.notifier_call = intel_vgpu_group_notifier;
@@ -814,6 +818,14 @@ static int intel_vgpu_open(struct mdev_device *mdev) · 16 unmodified lines
814818 goto undo_iommu;
815819 }
816820
821+ vfio_group = vfio_group_get_external_user_from_dev(mdev_dev(mdev));
822+ if (IS_ERR_OR_NULL(vfio_group)) {
823+ ret = !vfio_group ? -EFAULT : PTR_ERR(vfio_group);
824+ gvt_vgpu_err("vfio_group_get_external_user_from_dev failed\n");
825+ goto undo_register;
826+ }
827+ vdev->vfio_group = vfio_group;
828+
817829 /* Take a module reference as mdev core doesn't take
818830 * a reference for vendor driver.
819831 */
@@ -830,6 +842,10 @@ static int intel_vgpu_open(struct mdev_device *mdev) · 10 unmodified lines
830842 return ret;
831843
832844 undo_group:
845+ vfio_group_put_external_user(vdev->vfio_group);
846+ vdev->vfio_group = NULL;
847+
848+undo_register:
833849 vfio_unregister_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY,
834850 &vdev->group_notifier);
835851
@@ -884,6 +900,7 @@ static void __intel_vgpu_release(struct intel_vgpu *vgpu) · 48 unmodified lines
884900 kvmgt_guest_exit(info);
885901
886902 intel_vgpu_release_msi_eventfd_ctx(vgpu);
903+ vfio_group_put_external_user(vdev->vfio_group);
887904
888905 vdev->kvm = NULL;
889906 vgpu->handle = 0;
@@ -2035,33 +2052,14 @@ static int kvmgt_rw_gpa(unsigned long handle, unsigned long gpa, · 1145 unmodified lines
20352052 void *buf, unsigned long len, bool write)
20362053 {
20372054 struct kvmgt_guest_info *info;
2038− struct kvm *kvm;
2039− int idx, ret;
2040− bool kthread = current->mm == NULL;
20412055
20422056 if (!handle_valid(handle))
20432057 return -ESRCH;
20442058
20452059 info = (struct kvmgt_guest_info *)handle;
2046− kvm = info->kvm;
2047−
2048− if (kthread) {
2049− if (!mmget_not_zero(kvm->mm))
2050− return -EFAULT;
2051− use_mm(kvm->mm);
2052− }
2053−
2054− idx = srcu_read_lock(&kvm->srcu);
2055− ret = write ? kvm_write_guest(kvm, gpa, buf, len) :
2056− kvm_read_guest(kvm, gpa, buf, len);
2057− srcu_read_unlock(&kvm->srcu, idx);
2058−
2059− if (kthread) {
2060− unuse_mm(kvm->mm);
2061− mmput(kvm->mm);
2062− }
20632060
2064− return ret;
2061+ return vfio_dma_rw(kvmgt_vdev(info->vgpu)->vfio_group,
2062+ gpa, buf, len, write);
20652063 }
20662064
20672065 static int kvmgt_read_gpa(unsigned long handle, unsigned long gpa,
drivers/gpu/drm/i915/i915_drv.h+2−0
@@ -1507,6 +1507,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, · 1506 unmodified lines
15071507 (IS_ICELAKE(p) && IS_REVID(p, since, until))
15081508
15091509 #define TGL_REVID_A0 0x0
1510+#define TGL_REVID_B0 0x1
1511+#define TGL_REVID_C0 0x2
15101512
15111513 #define IS_TGL_REVID(p, since, until) \
15121514 (IS_TIGERLAKE(p) && IS_REVID(p, since, until))
drivers/gpu/drm/i915/i915_perf.c+11−54
@@ -2940,49 +2940,6 @@ void i915_oa_init_reg_state(const struct intel_context *ce, · 2939 unmodified lines
29402940 gen8_update_reg_state_unlocked(ce, stream);
29412941 }
29422942
2943−/**
2944− * i915_perf_read_locked - &i915_perf_stream_ops->read with error normalisation
2945− * @stream: An i915 perf stream
2946− * @file: An i915 perf stream file
2947− * @buf: destination buffer given by userspace
2948− * @count: the number of bytes userspace wants to read
2949− * @ppos: (inout) file seek position (unused)
2950− *
2951− * Besides wrapping &i915_perf_stream_ops->read this provides a common place to
2952− * ensure that if we've successfully copied any data then reporting that takes
2953− * precedence over any internal error status, so the data isn't lost.
2954− *
2955− * For example ret will be -ENOSPC whenever there is more buffered data than
2956− * can be copied to userspace, but that's only interesting if we weren't able
2957− * to copy some data because it implies the userspace buffer is too small to
2958− * receive a single record (and we never split records).
2959− *
2960− * Another case with ret == -EFAULT is more of a grey area since it would seem
2961− * like bad form for userspace to ask us to overrun its buffer, but the user
2962− * knows best:
2963− *
2964− * http://yarchive.net/comp/linux/partial_reads_writes.html
2965− *
2966− * Returns: The number of bytes copied or a negative error code on failure.
2967− */
2968−static ssize_t i915_perf_read_locked(struct i915_perf_stream *stream,
2969− struct file *file,
2970− char __user *buf,
2971− size_t count,
2972− loff_t *ppos)
2973−{
2974− /* Note we keep the offset (aka bytes read) separate from any
2975− * error status so that the final check for whether we return
2976− * the bytes read with a higher precedence than any error (see
2977− * comment below) doesn't need to be handled/duplicated in
2978− * stream->ops->read() implementations.
2979− */
2980− size_t offset = 0;
2981− int ret = stream->ops->read(stream, buf, count, &offset);
2982−
2983− return offset ?: (ret ?: -EAGAIN);
2984−}
2985−
29862943 /**
29872944 * i915_perf_read - handles read() FOP for i915 perf stream FDs
29882945 * @file: An i915 perf stream file
@@ -3008,7 +2965,8 @@ static ssize_t i915_perf_read(struct file *file, · 19 unmodified lines
30082965 {
30092966 struct i915_perf_stream *stream = file->private_data;
30102967 struct i915_perf *perf = stream->perf;
3011− ssize_t ret;
2968+ size_t offset = 0;
2969+ int ret;
30122970
30132971 /* To ensure it's handled consistently we simply treat all reads of a
30142972 * disabled stream as an error. In particular it might otherwise lead
@@ -3031,13 +2989,12 @@ static ssize_t i915_perf_read(struct file *file, · 16 unmodified lines
30312989 return ret;
30322990
30332991 mutex_lock(&perf->lock);
3034− ret = i915_perf_read_locked(stream, file,
3035− buf, count, ppos);
2992+ ret = stream->ops->read(stream, buf, count, &offset);
30362993 mutex_unlock(&perf->lock);
3037− } while (ret == -EAGAIN);
2994+ } while (!offset && !ret);
30382995 } else {
30392996 mutex_lock(&perf->lock);
3040− ret = i915_perf_read_locked(stream, file, buf, count, ppos);
2997+ ret = stream->ops->read(stream, buf, count, &offset);
30412998 mutex_unlock(&perf->lock);
30422999 }
30433000
@@ -3048,15 +3005,15 @@ static ssize_t i915_perf_read(struct file *file, · 4 unmodified lines
30483005 * and read() returning -EAGAIN. Clearing the oa.pollin state here
30493006 * effectively ensures we back off until the next hrtimer callback
30503007 * before reporting another EPOLLIN event.
3008+ * The exception to this is if ops->read() returned -ENOSPC which means
3009+ * that more OA data is available than could fit in the user provided
3010+ * buffer. In this case we want the next poll() call to not block.
30513011 */
3052− if (ret >= 0 || ret == -EAGAIN) {
3053− /* Maybe make ->pollin per-stream state if we support multiple
3054− * concurrent streams in the future.
3055− */
3012+ if (ret != -ENOSPC)
30563013 stream->pollin = false;
3057− }
30583014
3059− return ret;
3015+ /* Possible values for ret are 0, -EFAULT, -ENOSPC, -EIO, ... */
3016+ return offset ?: (ret ?: -EAGAIN);
30603017 }
30613018
30623019 static enum hrtimer_restart oa_poll_check_timer_cb(struct hrtimer *hrtimer)
drivers/gpu/drm/i915/i915_reg.h+2−2
@@ -34,8 +34,8 @@ · 33 unmodified lines
3434 * Follow the style described here for new macros, and while changing existing
3535 * macros. Do **not** mass change existing definitions just to update the style.
3636 *
37− * Layout
38− * ~~~~~~
37+ * File Layout
38+ * ~~~~~~~~~~~
3939 *
4040 * Keep helper macros near the top. For example, _PIPE() and friends.
4141 *
drivers/gpu/drm/meson/meson_dw_hdmi.c+1−3
@@ -1034,10 +1034,8 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, · 1033 unmodified lines
10341034 return PTR_ERR(dw_plat_data->regm);
10351035
10361036 irq = platform_get_irq(pdev, 0);
1037− if (irq < 0) {
1038− dev_err(dev, "Failed to get hdmi top irq\n");
1037+ if (irq < 0)
10391038 return irq;
1040− }
10411039
10421040 ret = devm_request_threaded_irq(dev, irq, dw_hdmi_top_irq,
10431041 dw_hdmi_top_thread_irq, IRQF_SHARED,
drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c+3−0
@@ -25,6 +25,9 @@ · 24 unmodified lines
2525 MODULE_FIRMWARE("nvidia/gp108/sec2/desc.bin");
2626 MODULE_FIRMWARE("nvidia/gp108/sec2/image.bin");
2727 MODULE_FIRMWARE("nvidia/gp108/sec2/sig.bin");
28+MODULE_FIRMWARE("nvidia/gv100/sec2/desc.bin");
29+MODULE_FIRMWARE("nvidia/gv100/sec2/image.bin");
30+MODULE_FIRMWARE("nvidia/gv100/sec2/sig.bin");
2831
2932 static const struct nvkm_sec2_fwif
3033 gp108_sec2_fwif[] = {
drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c+16−0
@@ -56,6 +56,22 @@ tu102_sec2_nofw(struct nvkm_sec2 *sec2, int ver, · 55 unmodified lines
5656 return 0;
5757 }
5858
59+MODULE_FIRMWARE("nvidia/tu102/sec2/desc.bin");
60+MODULE_FIRMWARE("nvidia/tu102/sec2/image.bin");
61+MODULE_FIRMWARE("nvidia/tu102/sec2/sig.bin");
62+MODULE_FIRMWARE("nvidia/tu104/sec2/desc.bin");
63+MODULE_FIRMWARE("nvidia/tu104/sec2/image.bin");
64+MODULE_FIRMWARE("nvidia/tu104/sec2/sig.bin");
65+MODULE_FIRMWARE("nvidia/tu106/sec2/desc.bin");
66+MODULE_FIRMWARE("nvidia/tu106/sec2/image.bin");
67+MODULE_FIRMWARE("nvidia/tu106/sec2/sig.bin");
68+MODULE_FIRMWARE("nvidia/tu116/sec2/desc.bin");
69+MODULE_FIRMWARE("nvidia/tu116/sec2/image.bin");
70+MODULE_FIRMWARE("nvidia/tu116/sec2/sig.bin");
71+MODULE_FIRMWARE("nvidia/tu117/sec2/desc.bin");
72+MODULE_FIRMWARE("nvidia/tu117/sec2/image.bin");
73+MODULE_FIRMWARE("nvidia/tu117/sec2/sig.bin");
74+
5975 static const struct nvkm_sec2_fwif
6076 tu102_sec2_fwif[] = {
6177 { 0, gp102_sec2_load, &tu102_sec2, &gp102_sec2_acr_1 },
drivers/gpu/drm/scheduler/sched_main.c+1−1
@@ -676,7 +676,7 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched) · 675 unmodified lines
676676 */
677677 if ((sched->timeout != MAX_SCHEDULE_TIMEOUT &&
678678 !cancel_delayed_work(&sched->work_tdr)) ||
679− __kthread_should_park(sched->thread))
679+ kthread_should_park())
680680 return NULL;
681681
682682 spin_lock(&sched->job_list_lock);
drivers/gpu/drm/tidss/tidss_crtc.c+13−3
@@ -379,9 +379,17 @@ static struct drm_crtc_state *tidss_crtc_duplicate_state(struct drm_crtc *crtc) · 378 unmodified lines
379379 return &state->base;
380380 }
381381
382+static void tidss_crtc_destroy(struct drm_crtc *crtc)
383+{
384+ struct tidss_crtc *tcrtc = to_tidss_crtc(crtc);
385+
386+ drm_crtc_cleanup(crtc);
387+ kfree(tcrtc);
388+}
389+
382390 static const struct drm_crtc_funcs tidss_crtc_funcs = {
383391 .reset = tidss_crtc_reset,
384− .destroy = drm_crtc_cleanup,
392+ .destroy = tidss_crtc_destroy,
385393 .set_config = drm_atomic_helper_set_config,
386394 .page_flip = drm_atomic_helper_page_flip,
387395 .atomic_duplicate_state = tidss_crtc_duplicate_state,
@@ -400,7 +408,7 @@ struct tidss_crtc *tidss_crtc_create(struct tidss_device *tidss, · 12 unmodified lines
400408 bool has_ctm = tidss->feat->vp_feat.color.has_ctm;
401409 int ret;
402410
403− tcrtc = devm_kzalloc(tidss->dev, sizeof(*tcrtc), GFP_KERNEL);
411+ tcrtc = kzalloc(sizeof(*tcrtc), GFP_KERNEL);
404412 if (!tcrtc)
405413 return ERR_PTR(-ENOMEM);
406414
@@ -411,8 +419,10 @@ struct tidss_crtc *tidss_crtc_create(struct tidss_device *tidss, · 4 unmodified lines
411419
412420 ret = drm_crtc_init_with_planes(&tidss->ddev, crtc, primary,
413421 NULL, &tidss_crtc_funcs, NULL);
414− if (ret < 0)
422+ if (ret < 0) {
423+ kfree(tcrtc);
415424 return ERR_PTR(ret);
425+ }
416426
417427 drm_crtc_helper_add(crtc, &tidss_crtc_helper_funcs);
418428
drivers/gpu/drm/tidss/tidss_encoder.c+11−3
@@ -55,12 +55,18 @@ static int tidss_encoder_atomic_check(struct drm_encoder *encoder, · 54 unmodified lines
5555 return 0;
5656 }
5757
58+static void tidss_encoder_destroy(struct drm_encoder *encoder)
59+{
60+ drm_encoder_cleanup(encoder);
61+ kfree(encoder);
62+}
63+
5864 static const struct drm_encoder_helper_funcs encoder_helper_funcs = {
5965 .atomic_check = tidss_encoder_atomic_check,
6066 };
6167
6268 static const struct drm_encoder_funcs encoder_funcs = {
63− .destroy = drm_encoder_cleanup,
69+ .destroy = tidss_encoder_destroy,
6470 };
6571
6672 struct drm_encoder *tidss_encoder_create(struct tidss_device *tidss,
@@ -69,7 +75,7 @@ struct drm_encoder *tidss_encoder_create(struct tidss_device *tidss, · 2 unmodified lines
6975 struct drm_encoder *enc;
7076 int ret;
7177
72− enc = devm_kzalloc(tidss->dev, sizeof(*enc), GFP_KERNEL);
78+ enc = kzalloc(sizeof(*enc), GFP_KERNEL);
7379 if (!enc)
7480 return ERR_PTR(-ENOMEM);
7581
@@ -77,8 +83,10 @@ struct drm_encoder *tidss_encoder_create(struct tidss_device *tidss, · 1 unmodified line
7783
7884 ret = drm_encoder_init(&tidss->ddev, enc, &encoder_funcs,
7985 encoder_type, NULL);
80− if (ret < 0)
86+ if (ret < 0) {
87+ kfree(enc);
8188 return ERR_PTR(ret);
89+ }
8290
8391 drm_encoder_helper_add(enc, &encoder_helper_funcs);
8492
drivers/gpu/drm/tidss/tidss_plane.c+18−6
@@ -141,6 +141,14 @@ static void tidss_plane_atomic_disable(struct drm_plane *plane, · 140 unmodified lines
141141 dispc_plane_enable(tidss->dispc, tplane->hw_plane_id, false);
142142 }
143143
144+static void drm_plane_destroy(struct drm_plane *plane)
145+{
146+ struct tidss_plane *tplane = to_tidss_plane(plane);
147+
148+ drm_plane_cleanup(plane);
149+ kfree(tplane);
150+}
151+
144152 static const struct drm_plane_helper_funcs tidss_plane_helper_funcs = {
145153 .atomic_check = tidss_plane_atomic_check,
146154 .atomic_update = tidss_plane_atomic_update,
@@ -151,7 +159,7 @@ static const struct drm_plane_funcs tidss_plane_funcs = { · 4 unmodified lines
151159 .update_plane = drm_atomic_helper_update_plane,
152160 .disable_plane = drm_atomic_helper_disable_plane,
153161 .reset = drm_atomic_helper_plane_reset,
154− .destroy = drm_plane_cleanup,
162+ .destroy = drm_plane_destroy,
155163 .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
156164 .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
157165 };
@@ -175,7 +183,7 @@ struct tidss_plane *tidss_plane_create(struct tidss_device *tidss, · 17 unmodified lines
175183 BIT(DRM_MODE_BLEND_COVERAGE));
176184 int ret;
177185
178− tplane = devm_kzalloc(tidss->dev, sizeof(*tplane), GFP_KERNEL);
186+ tplane = kzalloc(sizeof(*tplane), GFP_KERNEL);
179187 if (!tplane)
180188 return ERR_PTR(-ENOMEM);
181189
@@ -190,7 +198,7 @@ struct tidss_plane *tidss_plane_create(struct tidss_device *tidss, · 8 unmodified lines
190198 formats, num_formats,
191199 NULL, type, NULL);
192200 if (ret < 0)
193− return ERR_PTR(ret);
201+ goto err;
194202
195203 drm_plane_helper_add(&tplane->plane, &tidss_plane_helper_funcs);
196204
@@ -203,15 +211,19 @@ struct tidss_plane *tidss_plane_create(struct tidss_device *tidss, · 6 unmodified lines
203211 default_encoding,
204212 default_range);
205213 if (ret)
206− return ERR_PTR(ret);
214+ goto err;
207215
208216 ret = drm_plane_create_alpha_property(&tplane->plane);
209217 if (ret)
210− return ERR_PTR(ret);
218+ goto err;
211219
212220 ret = drm_plane_create_blend_mode_property(&tplane->plane, blend_modes);
213221 if (ret)
214− return ERR_PTR(ret);
222+ goto err;
215223
216224 return tplane;
225+
226+err:
227+ kfree(tplane);
228+ return ERR_PTR(ret);
217229 }
drivers/gpu/drm/virtio/virtgpu_ioctl.c+1−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
2727
2828 #include <linux/file.h>
2929 #include <linux/sync_file.h>
30+#include <linux/uaccess.h>
3031
3132 #include <drm/drm_file.h>
3233 #include <drm/virtgpu_drm.h>
drivers/gpu/drm/virtio/virtgpu_kms.c+1−0
@@ -25,6 +25,7 @@ · 24 unmodified lines
2525
2626 #include <linux/virtio.h>
2727 #include <linux/virtio_config.h>
28+#include <linux/virtio_ring.h>
2829
2930 #include <drm/drm_file.h>
3031
drivers/hv/channel_mgmt.c+3−0
@@ -839,6 +839,9 @@ void vmbus_initiate_unload(bool crash) · 838 unmodified lines
839839 {
840840 struct vmbus_channel_message_header hdr;
841841
842+ if (xchg(&vmbus_connection.conn_state, DISCONNECTED) == DISCONNECTED)
843+ return;
844+
842845 /* Pre-Win2012R2 hosts don't support reconnect */
843846 if (vmbus_proto_version < VERSION_WIN8_1)
844847 return;
drivers/hv/hv_debugfs.c+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
1111
1212 #include "hyperv_vmbus.h"
1313
14−struct dentry *hv_debug_root;
14+static struct dentry *hv_debug_root;
1515
1616 static int hv_debugfs_delay_get(void *data, u64 *val)
1717 {
drivers/hv/hyperv_vmbus.h+1−1
@@ -292,7 +292,7 @@ struct vmbus_msginfo { · 291 unmodified lines
292292 struct list_head msglist_entry;
293293
294294 /* The message itself */
295− unsigned char msg[0];
295+ unsigned char msg[];
296296 };
297297
298298
drivers/hv/vmbus_drv.c+44−18
@@ -31,6 +31,7 @@ · 30 unmodified lines
3131 #include <linux/kdebug.h>
3232 #include <linux/efi.h>
3333 #include <linux/random.h>
34+#include <linux/kernel.h>
3435 #include <linux/syscore_ops.h>
3536 #include <clocksource/hyperv_timer.h>
3637 #include "hyperv_vmbus.h"
@@ -48,14 +49,35 @@ static int hyperv_cpuhp_online; · 11 unmodified lines
4849
4950 static void *hv_panic_page;
5051
52+/*
53+ * Boolean to control whether to report panic messages over Hyper-V.
54+ *
55+ * It can be set via /proc/sys/kernel/hyperv/record_panic_msg
56+ */
57+static int sysctl_record_panic_msg = 1;
58+
59+static int hyperv_report_reg(void)
60+{
61+ return !sysctl_record_panic_msg || !hv_panic_page;
62+}
63+
5164 static int hyperv_panic_event(struct notifier_block *nb, unsigned long val,
5265 void *args)
5366 {
5467 struct pt_regs *regs;
5568
56− regs = current_pt_regs();
69+ vmbus_initiate_unload(true);
5770
58− hyperv_report_panic(regs, val);
71+ /*
72+ * Hyper-V should be notified only once about a panic. If we will be
73+ * doing hyperv_report_panic_msg() later with kmsg data, don't do
74+ * the notification here.
75+ */
76+ if (ms_hyperv.misc_features & HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE
77+ && hyperv_report_reg()) {
78+ regs = current_pt_regs();
79+ hyperv_report_panic(regs, val, false);
80+ }
5981 return NOTIFY_DONE;
6082 }
6183
@@ -65,7 +87,13 @@ static int hyperv_die_event(struct notifier_block *nb, unsigned long val, · 3 unmodified lines
6587 struct die_args *die = (struct die_args *)args;
6688 struct pt_regs *regs = die->regs;
6789
68− hyperv_report_panic(regs, val);
90+ /*
91+ * Hyper-V should be notified only once about a panic. If we will be
92+ * doing hyperv_report_panic_msg() later with kmsg data, don't do
93+ * the notification here.
94+ */
95+ if (hyperv_report_reg())
96+ hyperv_report_panic(regs, val, true);
6997 return NOTIFY_DONE;
7098 }
7199
@@ -1252,13 +1280,6 @@ static void vmbus_isr(void) · 1180 unmodified lines
12521280 add_interrupt_randomness(HYPERVISOR_CALLBACK_VECTOR, 0);
12531281 }
12541282
1255−/*
1256− * Boolean to control whether to report panic messages over Hyper-V.
1257− *
1258− * It can be set via /proc/sys/kernel/hyperv/record_panic_msg
1259− */
1260−static int sysctl_record_panic_msg = 1;
1261−
12621283 /*
12631284 * Callback from kmsg_dump. Grab as much as possible from the end of the kmsg
12641285 * buffer and call into Hyper-V to transfer the data.
@@ -1382,19 +1403,29 @@ static int vmbus_bus_init(void) · 117 unmodified lines
13821403 hv_panic_page = (void *)hv_alloc_hyperv_zeroed_page();
13831404 if (hv_panic_page) {
13841405 ret = kmsg_dump_register(&hv_kmsg_dumper);
1385− if (ret)
1406+ if (ret) {
13861407 pr_err("Hyper-V: kmsg dump register "
13871408 "error 0x%x\n", ret);
1409+ hv_free_hyperv_page(
1410+ (unsigned long)hv_panic_page);
1411+ hv_panic_page = NULL;
1412+ }
13881413 } else
13891414 pr_err("Hyper-V: panic message page memory "
13901415 "allocation failed");
13911416 }
13921417
13931418 register_die_notifier(&hyperv_die_block);
1394− atomic_notifier_chain_register(&panic_notifier_list,
1395− &hyperv_panic_block);
13961419 }
13971420
1421+ /*
1422+ * Always register the panic notifier because we need to unload
1423+ * the VMbus channel connection to prevent any VMbus
1424+ * activity after the VM panics.
1425+ */
1426+ atomic_notifier_chain_register(&panic_notifier_list,
1427+ &hyperv_panic_block);
1428+
13981429 vmbus_request_offers();
13991430
14001431 return 0;
@@ -1407,7 +1438,6 @@ err_alloc: · 6 unmodified lines
14071438 hv_remove_vmbus_irq();
14081439
14091440 bus_unregister(&hv_bus);
1410− hv_free_hyperv_page((unsigned long)hv_panic_page);
14111441 unregister_sysctl_table(hv_ctl_table_hdr);
14121442 hv_ctl_table_hdr = NULL;
14131443 return ret;
@@ -2204,8 +2234,6 @@ static int vmbus_bus_suspend(struct device *dev) · 790 unmodified lines
22042234
22052235 vmbus_initiate_unload(false);
22062236
2207− vmbus_connection.conn_state = DISCONNECTED;
2208−
22092237 /* Reset the event for the next resume. */
22102238 reinit_completion(&vmbus_connection.ready_for_resume_event);
22112239
@@ -2289,7 +2317,6 @@ static void hv_kexec_handler(void) · 77 unmodified lines
22892317 {
22902318 hv_stimer_global_cleanup();
22912319 vmbus_initiate_unload(false);
2292− vmbus_connection.conn_state = DISCONNECTED;
22932320 /* Make sure conn_state is set as hv_synic_cleanup checks for it */
22942321 mb();
22952322 cpuhp_remove_state(hyperv_cpuhp_online);
@@ -2306,7 +2333,6 @@ static void hv_crash_handler(struct pt_regs *regs) · 10 unmodified lines
23062333 * doing the cleanup for current CPU only. This should be sufficient
23072334 * for kdump.
23082335 */
2309− vmbus_connection.conn_state = DISCONNECTED;
23102336 cpu = smp_processor_id();
23112337 hv_stimer_cleanup(cpu);
23122338 hv_synic_disable_regs(cpu);
drivers/hwmon/Kconfig+1−1
@@ -412,7 +412,7 @@ config SENSORS_DRIVETEMP · 411 unmodified lines
412412 hard disk drives.
413413
414414 This driver can also be built as a module. If so, the module
415− will be called satatemp.
415+ will be called drivetemp.
416416
417417 config SENSORS_DS620
418418 tristate "Dallas Semiconductor DS620"
drivers/hwmon/drivetemp.c+6−0
@@ -264,12 +264,18 @@ static int drivetemp_get_scttemp(struct drivetemp_data *st, u32 attr, long *val) · 263 unmodified lines
264264 return err;
265265 switch (attr) {
266266 case hwmon_temp_input:
267+ if (!temp_is_valid(buf[SCT_STATUS_TEMP]))
268+ return -ENODATA;
267269 *val = temp_from_sct(buf[SCT_STATUS_TEMP]);
268270 break;
269271 case hwmon_temp_lowest:
272+ if (!temp_is_valid(buf[SCT_STATUS_TEMP_LOWEST]))
273+ return -ENODATA;
270274 *val = temp_from_sct(buf[SCT_STATUS_TEMP_LOWEST]);
271275 break;
272276 case hwmon_temp_highest:
277+ if (!temp_is_valid(buf[SCT_STATUS_TEMP_HIGHEST]))
278+ return -ENODATA;
273279 *val = temp_from_sct(buf[SCT_STATUS_TEMP_HIGHEST]);
274280 break;
275281 default:
drivers/hwmon/jc42.c+1−1
@@ -506,7 +506,7 @@ static int jc42_probe(struct i2c_client *client, const struct i2c_device_id *id) · 505 unmodified lines
506506 }
507507 data->config = config;
508508
509− hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
509+ hwmon_dev = devm_hwmon_device_register_with_info(dev, "jc42",
510510 data, &jc42_chip_info,
511511 NULL);
512512 return PTR_ERR_OR_ZERO(hwmon_dev);
drivers/hwmon/k10temp.c+3−3
@@ -186,7 +186,7 @@ static long get_raw_temp(struct k10temp_data *data) · 185 unmodified lines
186186 return temp;
187187 }
188188
189−const char *k10temp_temp_label[] = {
189+static const char *k10temp_temp_label[] = {
190190 "Tctl",
191191 "Tdie",
192192 "Tccd1",
@@ -199,12 +199,12 @@ const char *k10temp_temp_label[] = { · 6 unmodified lines
199199 "Tccd8",
200200 };
201201
202−const char *k10temp_in_label[] = {
202+static const char *k10temp_in_label[] = {
203203 "Vcore",
204204 "Vsoc",
205205 };
206206
207−const char *k10temp_curr_label[] = {
207+static const char *k10temp_curr_label[] = {
208208 "Icore",
209209 "Isoc",
210210 };
drivers/hwmon/pmbus/isl68137.c+85−7
@@ -21,8 +21,50 @@ · 20 unmodified lines
2121 #define ISL68137_VOUT_AVS 0x30
2222 #define RAA_DMPVR2_READ_VMON 0xc8
2323
24−enum versions {
24+enum chips {
2525 isl68137,
26+ isl68220,
27+ isl68221,
28+ isl68222,
29+ isl68223,
30+ isl68224,
31+ isl68225,
32+ isl68226,
33+ isl68227,
34+ isl68229,
35+ isl68233,
36+ isl68239,
37+ isl69222,
38+ isl69223,
39+ isl69224,
40+ isl69225,
41+ isl69227,
42+ isl69228,
43+ isl69234,
44+ isl69236,
45+ isl69239,
46+ isl69242,
47+ isl69243,
48+ isl69247,
49+ isl69248,
50+ isl69254,
51+ isl69255,
52+ isl69256,
53+ isl69259,
54+ isl69260,
55+ isl69268,
56+ isl69269,
57+ isl69298,
58+ raa228000,
59+ raa228004,
60+ raa228006,
61+ raa228228,
62+ raa229001,
63+ raa229004,
64+};
65+
66+enum variants {
67+ raa_dmpvr1_2rail,
2668 raa_dmpvr2_1rail,
2769 raa_dmpvr2_2rail,
2870 raa_dmpvr2_3rail,
@@ -186,7 +228,7 @@ static int isl68137_probe(struct i2c_client *client, · 157 unmodified lines
186228 memcpy(info, &raa_dmpvr_info, sizeof(*info));
187229
188230 switch (id->driver_data) {
189− case isl68137:
231+ case raa_dmpvr1_2rail:
190232 info->pages = 2;
191233 info->R[PSC_VOLTAGE_IN] = 3;
192234 info->func[0] &= ~PMBUS_HAVE_VMON;
@@ -224,11 +266,47 @@ static int isl68137_probe(struct i2c_client *client, · 31 unmodified lines
224266 }
225267
226268 static const struct i2c_device_id raa_dmpvr_id[] = {
227− {"isl68137", isl68137},
228− {"raa_dmpvr2_1rail", raa_dmpvr2_1rail},
229− {"raa_dmpvr2_2rail", raa_dmpvr2_2rail},
230− {"raa_dmpvr2_3rail", raa_dmpvr2_3rail},
231− {"raa_dmpvr2_hv", raa_dmpvr2_hv},
269+ {"isl68137", raa_dmpvr1_2rail},
270+ {"isl68220", raa_dmpvr2_2rail},
271+ {"isl68221", raa_dmpvr2_3rail},
272+ {"isl68222", raa_dmpvr2_2rail},
273+ {"isl68223", raa_dmpvr2_2rail},
274+ {"isl68224", raa_dmpvr2_3rail},
275+ {"isl68225", raa_dmpvr2_2rail},
276+ {"isl68226", raa_dmpvr2_3rail},
277+ {"isl68227", raa_dmpvr2_1rail},
278+ {"isl68229", raa_dmpvr2_3rail},
279+ {"isl68233", raa_dmpvr2_2rail},
280+ {"isl68239", raa_dmpvr2_3rail},
281+
282+ {"isl69222", raa_dmpvr2_2rail},
283+ {"isl69223", raa_dmpvr2_3rail},
284+ {"isl69224", raa_dmpvr2_2rail},
285+ {"isl69225", raa_dmpvr2_2rail},
286+ {"isl69227", raa_dmpvr2_3rail},
287+ {"isl69228", raa_dmpvr2_3rail},
288+ {"isl69234", raa_dmpvr2_2rail},
289+ {"isl69236", raa_dmpvr2_2rail},
290+ {"isl69239", raa_dmpvr2_3rail},
291+ {"isl69242", raa_dmpvr2_2rail},
292+ {"isl69243", raa_dmpvr2_1rail},
293+ {"isl69247", raa_dmpvr2_2rail},
294+ {"isl69248", raa_dmpvr2_2rail},
295+ {"isl69254", raa_dmpvr2_2rail},
296+ {"isl69255", raa_dmpvr2_2rail},
297+ {"isl69256", raa_dmpvr2_2rail},
298+ {"isl69259", raa_dmpvr2_2rail},
299+ {"isl69260", raa_dmpvr2_2rail},
300+ {"isl69268", raa_dmpvr2_2rail},
301+ {"isl69269", raa_dmpvr2_3rail},
302+ {"isl69298", raa_dmpvr2_2rail},
303+
304+ {"raa228000", raa_dmpvr2_hv},
305+ {"raa228004", raa_dmpvr2_hv},
306+ {"raa228006", raa_dmpvr2_hv},
307+ {"raa228228", raa_dmpvr2_2rail},
308+ {"raa229001", raa_dmpvr2_2rail},
309+ {"raa229004", raa_dmpvr2_2rail},
232310 {}
233311 };
234312
drivers/i2c/busses/i2c-altera.c+4−5
@@ -384,7 +384,6 @@ static int altr_i2c_probe(struct platform_device *pdev) · 383 unmodified lines
384384 struct altr_i2c_dev *idev = NULL;
385385 struct resource *res;
386386 int irq, ret;
387− u32 val;
388387
389388 idev = devm_kzalloc(&pdev->dev, sizeof(*idev), GFP_KERNEL);
390389 if (!idev)
@@ -411,17 +410,17 @@ static int altr_i2c_probe(struct platform_device *pdev) · 20 unmodified lines
411410 init_completion(&idev->msg_complete);
412411 spin_lock_init(&idev->lock);
413412
414− val = device_property_read_u32(idev->dev, "fifo-size",
413+ ret = device_property_read_u32(idev->dev, "fifo-size",
415414 &idev->fifo_size);
416− if (val) {
415+ if (ret) {
417416 dev_err(&pdev->dev, "FIFO size set to default of %d\n",
418417 ALTR_I2C_DFLT_FIFO_SZ);
419418 idev->fifo_size = ALTR_I2C_DFLT_FIFO_SZ;
420419 }
421420
422− val = device_property_read_u32(idev->dev, "clock-frequency",
421+ ret = device_property_read_u32(idev->dev, "clock-frequency",
423422 &idev->bus_clk_rate);
424− if (val) {
423+ if (ret) {
425424 dev_err(&pdev->dev, "Default to 100kHz\n");
426425 idev->bus_clk_rate = I2C_MAX_STANDARD_MODE_FREQ; /* default clock rate */
427426 }
drivers/i2c/busses/i2c-designware-platdrv.c+10−4
@@ -354,10 +354,16 @@ static int dw_i2c_plat_probe(struct platform_device *pdev) · 353 unmodified lines
354354 adap->dev.of_node = pdev->dev.of_node;
355355 adap->nr = -1;
356356
357− dev_pm_set_driver_flags(&pdev->dev,
358− DPM_FLAG_SMART_PREPARE |
359− DPM_FLAG_SMART_SUSPEND |
360− DPM_FLAG_LEAVE_SUSPENDED);
357+ if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
358+ dev_pm_set_driver_flags(&pdev->dev,
359+ DPM_FLAG_SMART_PREPARE |
360+ DPM_FLAG_LEAVE_SUSPENDED);
361+ } else {
362+ dev_pm_set_driver_flags(&pdev->dev,
363+ DPM_FLAG_SMART_PREPARE |
364+ DPM_FLAG_SMART_SUSPEND |
365+ DPM_FLAG_LEAVE_SUSPENDED);
366+ }
361367
362368 /* The code below assumes runtime PM to be disabled. */
363369 WARN_ON(pm_runtime_enabled(&pdev->dev));
drivers/i2c/busses/i2c-tegra.c+24−12
@@ -996,14 +996,13 @@ tegra_i2c_poll_completion_timeout(struct tegra_i2c_dev *i2c_dev, · 995 unmodified lines
996996 do {
997997 u32 status = i2c_readl(i2c_dev, I2C_INT_STATUS);
998998
999− if (status) {
999+ if (status)
10001000 tegra_i2c_isr(i2c_dev->irq, i2c_dev);
10011001
1002− if (completion_done(complete)) {
1003− s64 delta = ktime_ms_delta(ktimeout, ktime);
1002+ if (completion_done(complete)) {
1003+ s64 delta = ktime_ms_delta(ktimeout, ktime);
10041004
1005− return msecs_to_jiffies(delta) ?: 1;
1006− }
1005+ return msecs_to_jiffies(delta) ?: 1;
10071006 }
10081007
10091008 ktime = ktime_get();
@@ -1030,14 +1029,18 @@ tegra_i2c_wait_completion_timeout(struct tegra_i2c_dev *i2c_dev, · 20 unmodified lines
10301029 disable_irq(i2c_dev->irq);
10311030
10321031 /*
1033− * There is a chance that completion may happen after IRQ
1034− * synchronization, which is done by disable_irq().
1032+ * Under some rare circumstances (like running KASAN +
1033+ * NFS root) CPU, which handles interrupt, may stuck in
1034+ * uninterruptible state for a significant time. In this
1035+ * case we will get timeout if I2C transfer is running on
1036+ * a sibling CPU, despite of IRQ being raised.
1037+ *
1038+ * In order to handle this rare condition, the IRQ status
1039+ * needs to be checked after timeout.
10351040 */
1036− if (ret == 0 && completion_done(complete)) {
1037− dev_warn(i2c_dev->dev,
1038− "completion done after timeout\n");
1039− ret = 1;
1040− }
1041+ if (ret == 0)
1042+ ret = tegra_i2c_poll_completion_timeout(i2c_dev,
1043+ complete, 0);
10411044 }
10421045
10431046 return ret;
@@ -1216,6 +1219,15 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, · 172 unmodified lines
12161219 time_left = tegra_i2c_wait_completion_timeout(
12171220 i2c_dev, &i2c_dev->dma_complete, xfer_time);
12181221
1222+ /*
1223+ * Synchronize DMA first, since dmaengine_terminate_sync()
1224+ * performs synchronization after the transfer's termination
1225+ * and we want to get a completion if transfer succeeded.
1226+ */
1227+ dmaengine_synchronize(i2c_dev->msg_read ?
1228+ i2c_dev->rx_dma_chan :
1229+ i2c_dev->tx_dma_chan);
1230+
12191231 dmaengine_terminate_sync(i2c_dev->msg_read ?
12201232 i2c_dev->rx_dma_chan :
12211233 i2c_dev->tx_dma_chan);
drivers/i2c/i2c-core-base.c+0−13
@@ -2273,19 +2273,6 @@ i2c_new_scanned_device(struct i2c_adapter *adap, · 2272 unmodified lines
22732273 }
22742274 EXPORT_SYMBOL_GPL(i2c_new_scanned_device);
22752275
2276−struct i2c_client *
2277−i2c_new_probed_device(struct i2c_adapter *adap,
2278− struct i2c_board_info *info,
2279− unsigned short const *addr_list,
2280− int (*probe)(struct i2c_adapter *adap, unsigned short addr))
2281−{
2282− struct i2c_client *client;
2283−
2284− client = i2c_new_scanned_device(adap, info, addr_list, probe);
2285− return IS_ERR(client) ? NULL : client;
2286−}
2287−EXPORT_SYMBOL_GPL(i2c_new_probed_device);
2288−
22892276 struct i2c_adapter *i2c_get_adapter(int nr)
22902277 {
22912278 struct i2c_adapter *adapter;
drivers/iio/adc/ad7192.c+47−16
@@ -125,10 +125,10 @@ · 124 unmodified lines
125125 #define AD7193_CH_AINCOM 0x600 /* AINCOM - AINCOM */
126126
127127 /* ID Register Bit Designations (AD7192_REG_ID) */
128−#define ID_AD7190 0x4
129−#define ID_AD7192 0x0
130−#define ID_AD7193 0x2
131−#define ID_AD7195 0x6
128+#define CHIPID_AD7190 0x4
129+#define CHIPID_AD7192 0x0
130+#define CHIPID_AD7193 0x2
131+#define CHIPID_AD7195 0x6
132132 #define AD7192_ID_MASK 0x0F
133133
134134 /* GPOCON Register Bit Designations (AD7192_REG_GPOCON) */
@@ -161,7 +161,20 @@ enum { · 26 unmodified lines
161161 AD7192_SYSCALIB_FULL_SCALE,
162162 };
163163
164+enum {
165+ ID_AD7190,
166+ ID_AD7192,
167+ ID_AD7193,
168+ ID_AD7195,
169+};
170+
171+struct ad7192_chip_info {
172+ unsigned int chip_id;
173+ const char *name;
174+};
175+
164176 struct ad7192_state {
177+ const struct ad7192_chip_info *chip_info;
165178 struct regulator *avdd;
166179 struct regulator *dvdd;
167180 struct clk *mclk;
@@ -172,7 +185,6 @@ struct ad7192_state { · 4 unmodified lines
172185 u32 conf;
173186 u32 scale_avail[8][2];
174187 u8 gpocon;
175− u8 devid;
176188 u8 clock_sel;
177189 struct mutex lock; /* protect sensor state */
178190 u8 syscalib_mode[8];
@@ -348,7 +360,7 @@ static int ad7192_setup(struct ad7192_state *st, struct device_node *np) · 169 unmodified lines
348360
349361 id &= AD7192_ID_MASK;
350362
351− if (id != st->devid)
363+ if (id != st->chip_info->chip_id)
352364 dev_warn(&st->sd.spi->dev, "device ID query failed (0x%X)\n",
353365 id);
354366
@@ -363,7 +375,7 @@ static int ad7192_setup(struct ad7192_state *st, struct device_node *np) · 8 unmodified lines
363375 st->mode |= AD7192_MODE_REJ60;
364376
365377 refin2_en = of_property_read_bool(np, "adi,refin2-pins-enable");
366− if (refin2_en && st->devid != ID_AD7195)
378+ if (refin2_en && st->chip_info->chip_id != CHIPID_AD7195)
367379 st->conf |= AD7192_CONF_REFSEL;
368380
369381 st->conf &= ~AD7192_CONF_CHOP;
@@ -859,12 +871,31 @@ static const struct iio_chan_spec ad7193_channels[] = { · 489 unmodified lines
859871 IIO_CHAN_SOFT_TIMESTAMP(14),
860872 };
861873
874+static const struct ad7192_chip_info ad7192_chip_info_tbl[] = {
875+ [ID_AD7190] = {
876+ .chip_id = CHIPID_AD7190,
877+ .name = "ad7190",
878+ },
879+ [ID_AD7192] = {
880+ .chip_id = CHIPID_AD7192,
881+ .name = "ad7192",
882+ },
883+ [ID_AD7193] = {
884+ .chip_id = CHIPID_AD7193,
885+ .name = "ad7193",
886+ },
887+ [ID_AD7195] = {
888+ .chip_id = CHIPID_AD7195,
889+ .name = "ad7195",
890+ },
891+};
892+
862893 static int ad7192_channels_config(struct iio_dev *indio_dev)
863894 {
864895 struct ad7192_state *st = iio_priv(indio_dev);
865896
866− switch (st->devid) {
867− case ID_AD7193:
897+ switch (st->chip_info->chip_id) {
898+ case CHIPID_AD7193:
868899 indio_dev->channels = ad7193_channels;
869900 indio_dev->num_channels = ARRAY_SIZE(ad7193_channels);
870901 break;
@@ -878,10 +909,10 @@ static int ad7192_channels_config(struct iio_dev *indio_dev) · 7 unmodified lines
878909 }
879910
880911 static const struct of_device_id ad7192_of_match[] = {
881− { .compatible = "adi,ad7190", .data = (void *)ID_AD7190 },
882− { .compatible = "adi,ad7192", .data = (void *)ID_AD7192 },
883− { .compatible = "adi,ad7193", .data = (void *)ID_AD7193 },
884− { .compatible = "adi,ad7195", .data = (void *)ID_AD7195 },
912+ { .compatible = "adi,ad7190", .data = &ad7192_chip_info_tbl[ID_AD7190] },
913+ { .compatible = "adi,ad7192", .data = &ad7192_chip_info_tbl[ID_AD7192] },
914+ { .compatible = "adi,ad7193", .data = &ad7192_chip_info_tbl[ID_AD7193] },
915+ { .compatible = "adi,ad7195", .data = &ad7192_chip_info_tbl[ID_AD7195] },
885916 {}
886917 };
887918 MODULE_DEVICE_TABLE(of, ad7192_of_match);
@@ -938,16 +969,16 @@ static int ad7192_probe(struct spi_device *spi) · 50 unmodified lines
938969 }
939970
940971 spi_set_drvdata(spi, indio_dev);
941− st->devid = (unsigned long)of_device_get_match_data(&spi->dev);
972+ st->chip_info = of_device_get_match_data(&spi->dev);
942973 indio_dev->dev.parent = &spi->dev;
943− indio_dev->name = spi_get_device_id(spi)->name;
974+ indio_dev->name = st->chip_info->name;
944975 indio_dev->modes = INDIO_DIRECT_MODE;
945976
946977 ret = ad7192_channels_config(indio_dev);
947978 if (ret < 0)
948979 goto error_disable_dvdd;
949980
950− if (st->devid == ID_AD7195)
981+ if (st->chip_info->chip_id == CHIPID_AD7195)
951982 indio_dev->info = &ad7195_info;
952983 else
953984 indio_dev->info = &ad7192_info;
drivers/iio/adc/ad7793.c+1−1
@@ -542,7 +542,7 @@ static const struct iio_info ad7797_info = { · 541 unmodified lines
542542 .read_raw = &ad7793_read_raw,
543543 .write_raw = &ad7793_write_raw,
544544 .write_raw_get_fmt = &ad7793_write_raw_get_fmt,
545− .attrs = &ad7793_attribute_group,
545+ .attrs = &ad7797_attribute_group,
546546 .validate_trigger = ad_sd_validate_trigger,
547547 };
548548
drivers/iio/adc/stm32-adc.c+28−3
@@ -1418,8 +1418,30 @@ static unsigned int stm32_adc_dma_residue(struct stm32_adc *adc) · 1417 unmodified lines
14181418 static void stm32_adc_dma_buffer_done(void *data)
14191419 {
14201420 struct iio_dev *indio_dev = data;
1421+ struct stm32_adc *adc = iio_priv(indio_dev);
1422+ int residue = stm32_adc_dma_residue(adc);
1423+
1424+ /*
1425+ * In DMA mode the trigger services of IIO are not used
1426+ * (e.g. no call to iio_trigger_poll).
1427+ * Calling irq handler associated to the hardware trigger is not
1428+ * relevant as the conversions have already been done. Data
1429+ * transfers are performed directly in DMA callback instead.
1430+ * This implementation avoids to call trigger irq handler that
1431+ * may sleep, in an atomic context (DMA irq handler context).
1432+ */
1433+ dev_dbg(&indio_dev->dev, "%s bufi=%d\n", __func__, adc->bufi);
14211434
1422− iio_trigger_poll_chained(indio_dev->trig);
1435+ while (residue >= indio_dev->scan_bytes) {
1436+ u16 *buffer = (u16 *)&adc->rx_buf[adc->bufi];
1437+
1438+ iio_push_to_buffers(indio_dev, buffer);
1439+
1440+ residue -= indio_dev->scan_bytes;
1441+ adc->bufi += indio_dev->scan_bytes;
1442+ if (adc->bufi >= adc->rx_buf_sz)
1443+ adc->bufi = 0;
1444+ }
14231445 }
14241446
14251447 static int stm32_adc_dma_start(struct iio_dev *indio_dev)
@@ -1845,6 +1867,7 @@ static int stm32_adc_probe(struct platform_device *pdev) · 419 unmodified lines
18451867 {
18461868 struct iio_dev *indio_dev;
18471869 struct device *dev = &pdev->dev;
1870+ irqreturn_t (*handler)(int irq, void *p) = NULL;
18481871 struct stm32_adc *adc;
18491872 int ret;
18501873
@@ -1911,9 +1934,11 @@ static int stm32_adc_probe(struct platform_device *pdev) · 60 unmodified lines
19111934 if (ret < 0)
19121935 return ret;
19131936
1937+ if (!adc->dma_chan)
1938+ handler = &stm32_adc_trigger_handler;
1939+
19141940 ret = iio_triggered_buffer_setup(indio_dev,
1915− &iio_pollfunc_store_time,
1916− &stm32_adc_trigger_handler,
1941+ &iio_pollfunc_store_time, handler,
19171942 &stm32_adc_buffer_setup_ops);
19181943 if (ret) {
19191944 dev_err(&pdev->dev, "buffer setup failed\n");
drivers/iio/adc/ti-ads8344.c+3−3
@@ -29,7 +29,7 @@ struct ads8344 { · 28 unmodified lines
2929 struct mutex lock;
3030
3131 u8 tx_buf ____cacheline_aligned;
32− u16 rx_buf;
32+ u8 rx_buf[3];
3333 };
3434
3535 #define ADS8344_VOLTAGE_CHANNEL(chan, si) \
@@ -89,11 +89,11 @@ static int ads8344_adc_conversion(struct ads8344 *adc, int channel, · 53 unmodified lines
8989
9090 udelay(9);
9191
92− ret = spi_read(spi, &adc->rx_buf, 2);
92+ ret = spi_read(spi, adc->rx_buf, sizeof(adc->rx_buf));
9393 if (ret)
9494 return ret;
9595
96− return adc->rx_buf;
96+ return adc->rx_buf[0] << 9 | adc->rx_buf[1] << 1 | adc->rx_buf[2] >> 7;
9797 }
9898
9999 static int ads8344_read_raw(struct iio_dev *iio,
drivers/iio/adc/xilinx-xadc-core.c+74−21
@@ -102,6 +102,16 @@ static const unsigned int XADC_ZYNQ_UNMASK_TIMEOUT = 500; · 101 unmodified lines
102102
103103 #define XADC_FLAGS_BUFFERED BIT(0)
104104
105+/*
106+ * The XADC hardware supports a samplerate of up to 1MSPS. Unfortunately it does
107+ * not have a hardware FIFO. Which means an interrupt is generated for each
108+ * conversion sequence. At 1MSPS sample rate the CPU in ZYNQ7000 is completely
109+ * overloaded by the interrupts that it soft-lockups. For this reason the driver
110+ * limits the maximum samplerate 150kSPS. At this rate the CPU is fairly busy,
111+ * but still responsive.
112+ */
113+#define XADC_MAX_SAMPLERATE 150000
114+
105115 static void xadc_write_reg(struct xadc *xadc, unsigned int reg,
106116 uint32_t val)
107117 {
@@ -674,7 +684,7 @@ static int xadc_trigger_set_state(struct iio_trigger *trigger, bool state) · 566 unmodified lines
674684
675685 spin_lock_irqsave(&xadc->lock, flags);
676686 xadc_read_reg(xadc, XADC_AXI_REG_IPIER, &val);
677− xadc_write_reg(xadc, XADC_AXI_REG_IPISR, val & XADC_AXI_INT_EOS);
687+ xadc_write_reg(xadc, XADC_AXI_REG_IPISR, XADC_AXI_INT_EOS);
678688 if (state)
679689 val |= XADC_AXI_INT_EOS;
680690 else
@@ -722,13 +732,14 @@ static int xadc_power_adc_b(struct xadc *xadc, unsigned int seq_mode) · 41 unmodified lines
722732 {
723733 uint16_t val;
724734
735+ /* Powerdown the ADC-B when it is not needed. */
725736 switch (seq_mode) {
726737 case XADC_CONF1_SEQ_SIMULTANEOUS:
727738 case XADC_CONF1_SEQ_INDEPENDENT:
728− val = XADC_CONF2_PD_ADC_B;
739+ val = 0;
729740 break;
730741 default:
731− val = 0;
742+ val = XADC_CONF2_PD_ADC_B;
732743 break;
733744 }
734745
@@ -797,6 +808,16 @@ static int xadc_preenable(struct iio_dev *indio_dev) · 62 unmodified lines
797808 if (ret)
798809 goto err;
799810
811+ /*
812+ * In simultaneous mode the upper and lower aux channels are samples at
813+ * the same time. In this mode the upper 8 bits in the sequencer
814+ * register are don't care and the lower 8 bits control two channels
815+ * each. As such we must set the bit if either the channel in the lower
816+ * group or the upper group is enabled.
817+ */
818+ if (seq_mode == XADC_CONF1_SEQ_SIMULTANEOUS)
819+ scan_mask = ((scan_mask >> 8) | scan_mask) & 0xff0000;
820+
800821 ret = xadc_write_adc_reg(xadc, XADC_REG_SEQ(1), scan_mask >> 16);
801822 if (ret)
802823 goto err;
@@ -823,11 +844,27 @@ static const struct iio_buffer_setup_ops xadc_buffer_ops = { · 20 unmodified lines
823844 .postdisable = &xadc_postdisable,
824845 };
825846
847+static int xadc_read_samplerate(struct xadc *xadc)
848+{
849+ unsigned int div;
850+ uint16_t val16;
851+ int ret;
852+
853+ ret = xadc_read_adc_reg(xadc, XADC_REG_CONF2, &val16);
854+ if (ret)
855+ return ret;
856+
857+ div = (val16 & XADC_CONF2_DIV_MASK) >> XADC_CONF2_DIV_OFFSET;
858+ if (div < 2)
859+ div = 2;
860+
861+ return xadc_get_dclk_rate(xadc) / div / 26;
862+}
863+
826864 static int xadc_read_raw(struct iio_dev *indio_dev,
827865 struct iio_chan_spec const *chan, int *val, int *val2, long info)
828866 {
829867 struct xadc *xadc = iio_priv(indio_dev);
830− unsigned int div;
831868 uint16_t val16;
832869 int ret;
833870
@@ -880,41 +917,31 @@ static int xadc_read_raw(struct iio_dev *indio_dev, · 46 unmodified lines
880917 *val = -((273150 << 12) / 503975);
881918 return IIO_VAL_INT;
882919 case IIO_CHAN_INFO_SAMP_FREQ:
883− ret = xadc_read_adc_reg(xadc, XADC_REG_CONF2, &val16);
884− if (ret)
920+ ret = xadc_read_samplerate(xadc);
921+ if (ret < 0)
885922 return ret;
886923
887− div = (val16 & XADC_CONF2_DIV_MASK) >> XADC_CONF2_DIV_OFFSET;
888− if (div < 2)
889− div = 2;
890−
891− *val = xadc_get_dclk_rate(xadc) / div / 26;
892−
924+ *val = ret;
893925 return IIO_VAL_INT;
894926 default:
895927 return -EINVAL;
896928 }
897929 }
898930
899−static int xadc_write_raw(struct iio_dev *indio_dev,
900− struct iio_chan_spec const *chan, int val, int val2, long info)
931+static int xadc_write_samplerate(struct xadc *xadc, int val)
901932 {
902− struct xadc *xadc = iio_priv(indio_dev);
903933 unsigned long clk_rate = xadc_get_dclk_rate(xadc);
904934 unsigned int div;
905935
906936 if (!clk_rate)
907937 return -EINVAL;
908938
909− if (info != IIO_CHAN_INFO_SAMP_FREQ)
910− return -EINVAL;
911−
912939 if (val <= 0)
913940 return -EINVAL;
914941
915942 /* Max. 150 kSPS */
916− if (val > 150000)
917− val = 150000;
943+ if (val > XADC_MAX_SAMPLERATE)
944+ val = XADC_MAX_SAMPLERATE;
918945
919946 val *= 26;
920947
@@ -927,7 +954,7 @@ static int xadc_write_raw(struct iio_dev *indio_dev, · 6 unmodified lines
927954 * limit.
928955 */
929956 div = clk_rate / val;
930− if (clk_rate / div / 26 > 150000)
957+ if (clk_rate / div / 26 > XADC_MAX_SAMPLERATE)
931958 div++;
932959 if (div < 2)
933960 div = 2;
@@ -938,6 +965,17 @@ static int xadc_write_raw(struct iio_dev *indio_dev, · 4 unmodified lines
938965 div << XADC_CONF2_DIV_OFFSET);
939966 }
940967
968+static int xadc_write_raw(struct iio_dev *indio_dev,
969+ struct iio_chan_spec const *chan, int val, int val2, long info)
970+{
971+ struct xadc *xadc = iio_priv(indio_dev);
972+
973+ if (info != IIO_CHAN_INFO_SAMP_FREQ)
974+ return -EINVAL;
975+
976+ return xadc_write_samplerate(xadc, val);
977+}
978+
941979 static const struct iio_event_spec xadc_temp_events[] = {
942980 {
943981 .type = IIO_EV_TYPE_THRESH,
@@ -1223,6 +1261,21 @@ static int xadc_probe(struct platform_device *pdev) · 279 unmodified lines
12231261 if (ret)
12241262 goto err_free_samplerate_trigger;
12251263
1264+ /*
1265+ * Make sure not to exceed the maximum samplerate since otherwise the
1266+ * resulting interrupt storm will soft-lock the system.
1267+ */
1268+ if (xadc->ops->flags & XADC_FLAGS_BUFFERED) {
1269+ ret = xadc_read_samplerate(xadc);
1270+ if (ret < 0)
1271+ goto err_free_samplerate_trigger;
1272+ if (ret > XADC_MAX_SAMPLERATE) {
1273+ ret = xadc_write_samplerate(xadc, XADC_MAX_SAMPLERATE);
1274+ if (ret < 0)
1275+ goto err_free_samplerate_trigger;
1276+ }
1277+ }
1278+
12261279 ret = request_irq(xadc->irq, xadc->ops->interrupt_handler, 0,
12271280 dev_name(&pdev->dev), indio_dev);
12281281 if (ret)
drivers/iio/common/st_sensors/st_sensors_core.c+1−1
@@ -79,7 +79,7 @@ int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr) · 78 unmodified lines
7979 struct st_sensor_odr_avl odr_out = {0, 0};
8080 struct st_sensor_data *sdata = iio_priv(indio_dev);
8181
82− if (!sdata->sensor_settings->odr.addr)
82+ if (!sdata->sensor_settings->odr.mask)
8383 return 0;
8484
8585 err = st_sensors_match_odr(sdata->sensor_settings, odr, &odr_out);
drivers/iio/dac/ad5770r.c+1−1
@@ -525,7 +525,7 @@ static int ad5770r_channel_config(struct ad5770r_state *st) · 524 unmodified lines
525525 ret = fwnode_property_read_u32(child, "num", &num);
526526 if (ret)
527527 return ret;
528− if (num > AD5770R_MAX_CHANNELS)
528+ if (num >= AD5770R_MAX_CHANNELS)
529529 return -EINVAL;
530530
531531 ret = fwnode_property_read_u32_array(child,
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c+10−1
@@ -1617,6 +1617,10 @@ static int __maybe_unused inv_mpu_resume(struct device *dev) · 1616 unmodified lines
16171617 if (result)
16181618 goto out_unlock;
16191619
1620+ pm_runtime_disable(dev);
1621+ pm_runtime_set_active(dev);
1622+ pm_runtime_enable(dev);
1623+
16201624 result = inv_mpu6050_switch_engine(st, true, st->suspended_sensors);
16211625 if (result)
16221626 goto out_unlock;
@@ -1638,13 +1642,18 @@ static int __maybe_unused inv_mpu_suspend(struct device *dev) · 15 unmodified lines
16381642
16391643 mutex_lock(&st->lock);
16401644
1645+ st->suspended_sensors = 0;
1646+ if (pm_runtime_suspended(dev)) {
1647+ result = 0;
1648+ goto out_unlock;
1649+ }
1650+
16411651 if (iio_buffer_enabled(indio_dev)) {
16421652 result = inv_mpu6050_prepare_fifo(st, false);
16431653 if (result)
16441654 goto out_unlock;
16451655 }
16461656
1647− st->suspended_sensors = 0;
16481657 if (st->chip_config.accl_en)
16491658 st->suspended_sensors |= INV_MPU6050_SENSOR_ACCL;
16501659 if (st->chip_config.gyro_en)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h+3−0
@@ -337,6 +337,7 @@ enum st_lsm6dsx_fifo_mode { · 336 unmodified lines
337337 * @gain: Configured sensor sensitivity.
338338 * @odr: Output data rate of the sensor [Hz].
339339 * @watermark: Sensor watermark level.
340+ * @decimator: Sensor decimation factor.
340341 * @sip: Number of samples in a given pattern.
341342 * @ts_ref: Sensor timestamp reference for hw one.
342343 * @ext_info: Sensor settings if it is connected to i2c controller
@@ -350,11 +351,13 @@ struct st_lsm6dsx_sensor { · 7 unmodified lines
350351 u32 odr;
351352
352353 u16 watermark;
354+ u8 decimator;
353355 u8 sip;
354356 s64 ts_ref;
355357
356358 struct {
357359 const struct st_lsm6dsx_ext_dev_settings *settings;
360+ u32 slv_odr;
358361 u8 addr;
359362 } ext_info;
360363 };
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c+16−7
@@ -93,6 +93,7 @@ st_lsm6dsx_get_decimator_val(struct st_lsm6dsx_sensor *sensor, u32 max_odr) · 92 unmodified lines
9393 break;
9494 }
9595
96+ sensor->decimator = decimator;
9697 return i == max_size ? 0 : st_lsm6dsx_decimator_table[i].val;
9798 }
9899
@@ -337,7 +338,7 @@ static inline int st_lsm6dsx_read_block(struct st_lsm6dsx_hw *hw, u8 addr, · 238 unmodified lines
337338 int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
338339 {
339340 struct st_lsm6dsx_sensor *acc_sensor, *gyro_sensor, *ext_sensor = NULL;
340− int err, acc_sip, gyro_sip, ts_sip, ext_sip, read_len, offset;
341+ int err, sip, acc_sip, gyro_sip, ts_sip, ext_sip, read_len, offset;
341342 u16 fifo_len, pattern_len = hw->sip * ST_LSM6DSX_SAMPLE_SIZE;
342343 u16 fifo_diff_mask = hw->settings->fifo_ops.fifo_diff.mask;
343344 u8 gyro_buff[ST_LSM6DSX_IIO_BUFF_SIZE];
@@ -399,19 +400,20 @@ int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw) · 55 unmodified lines
399400 acc_sip = acc_sensor->sip;
400401 ts_sip = hw->ts_sip;
401402 offset = 0;
403+ sip = 0;
402404
403405 while (acc_sip > 0 || gyro_sip > 0 || ext_sip > 0) {
404− if (gyro_sip > 0) {
406+ if (gyro_sip > 0 && !(sip % gyro_sensor->decimator)) {
405407 memcpy(gyro_buff, &hw->buff[offset],
406408 ST_LSM6DSX_SAMPLE_SIZE);
407409 offset += ST_LSM6DSX_SAMPLE_SIZE;
408410 }
409− if (acc_sip > 0) {
411+ if (acc_sip > 0 && !(sip % acc_sensor->decimator)) {
410412 memcpy(acc_buff, &hw->buff[offset],
411413 ST_LSM6DSX_SAMPLE_SIZE);
412414 offset += ST_LSM6DSX_SAMPLE_SIZE;
413415 }
414− if (ext_sip > 0) {
416+ if (ext_sip > 0 && !(sip % ext_sensor->decimator)) {
415417 memcpy(ext_buff, &hw->buff[offset],
416418 ST_LSM6DSX_SAMPLE_SIZE);
417419 offset += ST_LSM6DSX_SAMPLE_SIZE;
@@ -441,18 +443,25 @@ int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw) · 23 unmodified lines
441443 offset += ST_LSM6DSX_SAMPLE_SIZE;
442444 }
443445
444− if (gyro_sip-- > 0)
446+ if (gyro_sip > 0 && !(sip % gyro_sensor->decimator)) {
445447 iio_push_to_buffers_with_timestamp(
446448 hw->iio_devs[ST_LSM6DSX_ID_GYRO],
447449 gyro_buff, gyro_sensor->ts_ref + ts);
448− if (acc_sip-- > 0)
450+ gyro_sip--;
451+ }
452+ if (acc_sip > 0 && !(sip % acc_sensor->decimator)) {
449453 iio_push_to_buffers_with_timestamp(
450454 hw->iio_devs[ST_LSM6DSX_ID_ACC],
451455 acc_buff, acc_sensor->ts_ref + ts);
452− if (ext_sip-- > 0)
456+ acc_sip--;
457+ }
458+ if (ext_sip > 0 && !(sip % ext_sensor->decimator)) {
453459 iio_push_to_buffers_with_timestamp(
454460 hw->iio_devs[ST_LSM6DSX_ID_EXT0],
455461 ext_buff, ext_sensor->ts_ref + ts);
462+ ext_sip--;
463+ }
464+ sip++;
456465 }
457466 }
458467
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c+23−1
@@ -2036,11 +2036,21 @@ static int st_lsm6dsx_init_hw_timer(struct st_lsm6dsx_hw *hw) · 2035 unmodified lines
20362036 return 0;
20372037 }
20382038
2039−static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
2039+static int st_lsm6dsx_reset_device(struct st_lsm6dsx_hw *hw)
20402040 {
20412041 const struct st_lsm6dsx_reg *reg;
20422042 int err;
20432043
2044+ /*
2045+ * flush hw FIFO before device reset in order to avoid
2046+ * possible races on interrupt line 1. If the first interrupt
2047+ * line is asserted during hw reset the device will work in
2048+ * I3C-only mode (if it is supported)
2049+ */
2050+ err = st_lsm6dsx_flush_fifo(hw);
2051+ if (err < 0 && err != -ENOTSUPP)
2052+ return err;
2053+
20442054 /* device sw reset */
20452055 reg = &hw->settings->reset;
20462056 err = regmap_update_bits(hw->regmap, reg->addr, reg->mask,
@@ -2059,6 +2069,18 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) · 12 unmodified lines
20592069
20602070 msleep(50);
20612071
2072+ return 0;
2073+}
2074+
2075+static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
2076+{
2077+ const struct st_lsm6dsx_reg *reg;
2078+ int err;
2079+
2080+ err = st_lsm6dsx_reset_device(hw);
2081+ if (err < 0)
2082+ return err;
2083+
20622084 /* enable Block Data Update */
20632085 reg = &hw->settings->bdu;
20642086 err = regmap_update_bits(hw->regmap, reg->addr, reg->mask,
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c+22−7
@@ -421,7 +421,8 @@ int st_lsm6dsx_shub_set_enable(struct st_lsm6dsx_sensor *sensor, bool enable) · 420 unmodified lines
421421
422422 settings = sensor->ext_info.settings;
423423 if (enable) {
424− err = st_lsm6dsx_shub_set_odr(sensor, sensor->odr);
424+ err = st_lsm6dsx_shub_set_odr(sensor,
425+ sensor->ext_info.slv_odr);
425426 if (err < 0)
426427 return err;
427428 } else {
@@ -459,7 +460,7 @@ st_lsm6dsx_shub_read_oneshot(struct st_lsm6dsx_sensor *sensor, · 31 unmodified lines
459460 if (err < 0)
460461 return err;
461462
462− delay = 1000000000 / sensor->odr;
463+ delay = 1000000000 / sensor->ext_info.slv_odr;
463464 usleep_range(delay, 2 * delay);
464465
465466 len = min_t(int, sizeof(data), ch->scan_type.realbits >> 3);
@@ -500,8 +501,8 @@ st_lsm6dsx_shub_read_raw(struct iio_dev *iio_dev, · 34 unmodified lines
500501 iio_device_release_direct_mode(iio_dev);
501502 break;
502503 case IIO_CHAN_INFO_SAMP_FREQ:
503− *val = sensor->odr / 1000;
504− *val2 = (sensor->odr % 1000) * 1000;
504+ *val = sensor->ext_info.slv_odr / 1000;
505+ *val2 = (sensor->ext_info.slv_odr % 1000) * 1000;
505506 ret = IIO_VAL_INT_PLUS_MICRO;
506507 break;
507508 case IIO_CHAN_INFO_SCALE:
@@ -535,8 +536,20 @@ st_lsm6dsx_shub_write_raw(struct iio_dev *iio_dev, · 27 unmodified lines
535536
536537 val = val * 1000 + val2 / 1000;
537538 err = st_lsm6dsx_shub_get_odr_val(sensor, val, &data);
538− if (!err)
539− sensor->odr = val;
539+ if (!err) {
540+ struct st_lsm6dsx_hw *hw = sensor->hw;
541+ struct st_lsm6dsx_sensor *ref_sensor;
542+ u8 odr_val;
543+ int odr;
544+
545+ ref_sensor = iio_priv(hw->iio_devs[ST_LSM6DSX_ID_ACC]);
546+ odr = st_lsm6dsx_check_odr(ref_sensor, val, &odr_val);
547+ if (odr < 0)
548+ return odr;
549+
550+ sensor->ext_info.slv_odr = val;
551+ sensor->odr = odr;
552+ }
540553 break;
541554 }
542555 default:
@@ -613,6 +626,7 @@ st_lsm6dsx_shub_alloc_iiodev(struct st_lsm6dsx_hw *hw, · 70 unmodified lines
613626 const struct st_lsm6dsx_ext_dev_settings *info,
614627 u8 i2c_addr, const char *name)
615628 {
629+ enum st_lsm6dsx_sensor_id ref_id = ST_LSM6DSX_ID_ACC;
616630 struct iio_chan_spec *ext_channels;
617631 struct st_lsm6dsx_sensor *sensor;
618632 struct iio_dev *iio_dev;
@@ -628,7 +642,8 @@ st_lsm6dsx_shub_alloc_iiodev(struct st_lsm6dsx_hw *hw, · 9 unmodified lines
628642 sensor = iio_priv(iio_dev);
629643 sensor->id = id;
630644 sensor->hw = hw;
631− sensor->odr = info->odr_table.odr_avl[0].milli_hz;
645+ sensor->odr = hw->settings->odr_table[ref_id].odr_avl[0].milli_hz;
646+ sensor->ext_info.slv_odr = info->odr_table.odr_avl[0].milli_hz;
632647 sensor->gain = info->fs_table.fs_avl[0].gain;
633648 sensor->ext_info.settings = info;
634649 sensor->ext_info.addr = i2c_addr;
drivers/iio/industrialio-core.c+2−5
@@ -915,14 +915,11 @@ static ssize_t iio_write_channel_info(struct device *dev, · 914 unmodified lines
915915 return -EINVAL;
916916 integer = ch;
917917 } else {
918− ret = iio_str_to_fixpoint(buf, fract_mult, &integer, &fract);
918+ ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract,
919+ scale_db);
919920 if (ret)
920921 return ret;
921922 }
922− ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract,
923− scale_db);
924− if (ret)
925− return ret;
926923
927924 ret = indio_dev->info->write_raw(indio_dev, this_attr->c,
928925 integer, fract, this_attr->address);
drivers/interconnect/qcom/bcm-voter.c+3−2
@@ -96,6 +96,8 @@ static inline void tcs_cmd_gen(struct tcs_cmd *cmd, u64 vote_x, u64 vote_y, · 95 unmodified lines
9696 if (!cmd)
9797 return;
9898
99+ memset(cmd, 0, sizeof(*cmd));
100+
99101 if (vote_x == 0 && vote_y == 0)
100102 valid = false;
101103
@@ -112,8 +114,7 @@ static inline void tcs_cmd_gen(struct tcs_cmd *cmd, u64 vote_x, u64 vote_y, · 10 unmodified lines
112114 * Set the wait for completion flag on command that need to be completed
113115 * before the next command.
114116 */
115− if (commit)
116− cmd->wait = true;
117+ cmd->wait = commit;
117118 }
118119
119120 static void tcs_list_gen(struct list_head *bcm_list, int bucket,
drivers/irqchip/irq-bcm7038-l1.c+1−1
@@ -416,7 +416,7 @@ static const struct irq_domain_ops bcm7038_l1_domain_ops = { · 415 unmodified lines
416416 .map = bcm7038_l1_map,
417417 };
418418
419−int __init bcm7038_l1_of_init(struct device_node *dn,
419+static int __init bcm7038_l1_of_init(struct device_node *dn,
420420 struct device_node *parent)
421421 {
422422 struct bcm7038_l1_chip *intc;
drivers/irqchip/irq-gic-v3-its.c+20−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
1414 #include <linux/dma-iommu.h>
1515 #include <linux/efi.h>
1616 #include <linux/interrupt.h>
17+#include <linux/iopoll.h>
1718 #include <linux/irqdomain.h>
1819 #include <linux/list.h>
1920 #include <linux/log2.h>
@@ -3672,6 +3673,20 @@ out: · 3652 unmodified lines
36723673 return IRQ_SET_MASK_OK_DONE;
36733674 }
36743675
3676+static void its_wait_vpt_parse_complete(void)
3677+{
3678+ void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
3679+ u64 val;
3680+
3681+ if (!gic_rdists->has_vpend_valid_dirty)
3682+ return;
3683+
3684+ WARN_ON_ONCE(readq_relaxed_poll_timeout(vlpi_base + GICR_VPENDBASER,
3685+ val,
3686+ !(val & GICR_VPENDBASER_Dirty),
3687+ 10, 500));
3688+}
3689+
36753690 static void its_vpe_schedule(struct its_vpe *vpe)
36763691 {
36773692 void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
@@ -3702,6 +3717,8 @@ static void its_vpe_schedule(struct its_vpe *vpe) · 24 unmodified lines
37023717 val |= vpe->idai ? GICR_VPENDBASER_IDAI : 0;
37033718 val |= GICR_VPENDBASER_Valid;
37043719 gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
3720+
3721+ its_wait_vpt_parse_complete();
37053722 }
37063723
37073724 static void its_vpe_deschedule(struct its_vpe *vpe)
@@ -3910,6 +3927,8 @@ static void its_vpe_4_1_schedule(struct its_vpe *vpe, · 202 unmodified lines
39103927 val |= FIELD_PREP(GICR_VPENDBASER_4_1_VPEID, vpe->vpe_id);
39113928
39123929 gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
3930+
3931+ its_wait_vpt_parse_complete();
39133932 }
39143933
39153934 static void its_vpe_4_1_deschedule(struct its_vpe *vpe,
@@ -4035,6 +4054,7 @@ static int its_sgi_set_affinity(struct irq_data *d, · 119 unmodified lines
40354054 * not on the host (since they can only be targetting a vPE).
40364055 * Tell the kernel we've done whatever it asked for.
40374056 */
4057+ irq_data_update_effective_affinity(d, mask_val);
40384058 return IRQ_SET_MASK_OK;
40394059 }
40404060
drivers/irqchip/irq-gic-v3.c+7−4
@@ -873,6 +873,7 @@ static int __gic_update_rdist_properties(struct redist_region *region, · 872 unmodified lines
873873 gic_data.rdists.has_rvpeid &= !!(typer & GICR_TYPER_RVPEID);
874874 gic_data.rdists.has_direct_lpi &= (!!(typer & GICR_TYPER_DirectLPIS) |
875875 gic_data.rdists.has_rvpeid);
876+ gic_data.rdists.has_vpend_valid_dirty &= !!(typer & GICR_TYPER_DIRTY);
876877
877878 /* Detect non-sensical configurations */
878879 if (WARN_ON_ONCE(gic_data.rdists.has_rvpeid && !gic_data.rdists.has_vlpis)) {
@@ -893,10 +894,11 @@ static void gic_update_rdist_properties(void) · 14 unmodified lines
893894 if (WARN_ON(gic_data.ppi_nr == UINT_MAX))
894895 gic_data.ppi_nr = 0;
895896 pr_info("%d PPIs implemented\n", gic_data.ppi_nr);
896− pr_info("%sVLPI support, %sdirect LPI support, %sRVPEID support\n",
897− !gic_data.rdists.has_vlpis ? "no " : "",
898− !gic_data.rdists.has_direct_lpi ? "no " : "",
899− !gic_data.rdists.has_rvpeid ? "no " : "");
897+ if (gic_data.rdists.has_vlpis)
898+ pr_info("GICv4 features: %s%s%s\n",
899+ gic_data.rdists.has_direct_lpi ? "DirectLPI " : "",
900+ gic_data.rdists.has_rvpeid ? "RVPEID " : "",
901+ gic_data.rdists.has_vpend_valid_dirty ? "Valid+Dirty " : "");
900902 }
901903
902904 /* Check whether it's single security state view */
@@ -1620,6 +1622,7 @@ static int __init gic_init_bases(void __iomem *dist_base, · 717 unmodified lines
16201622 gic_data.rdists.has_rvpeid = true;
16211623 gic_data.rdists.has_vlpis = true;
16221624 gic_data.rdists.has_direct_lpi = true;
1625+ gic_data.rdists.has_vpend_valid_dirty = true;
16231626
16241627 if (WARN_ON(!gic_data.domain) || WARN_ON(!gic_data.rdists.rdist)) {
16251628 err = -ENOMEM;
drivers/irqchip/irq-mbigen.c+7−1
@@ -220,10 +220,16 @@ static int mbigen_irq_domain_alloc(struct irq_domain *domain, · 219 unmodified lines
220220 return 0;
221221 }
222222
223+static void mbigen_irq_domain_free(struct irq_domain *domain, unsigned int virq,
224+ unsigned int nr_irqs)
225+{
226+ platform_msi_domain_free(domain, virq, nr_irqs);
227+}
228+
223229 static const struct irq_domain_ops mbigen_domain_ops = {
224230 .translate = mbigen_domain_translate,
225231 .alloc = mbigen_irq_domain_alloc,
226− .free = irq_domain_free_irqs_common,
232+ .free = mbigen_irq_domain_free,
227233 };
228234
229235 static int mbigen_of_create_domain(struct platform_device *pdev,
drivers/irqchip/irq-meson-gpio.c+10−8
@@ -144,12 +144,17 @@ struct meson_gpio_irq_controller { · 143 unmodified lines
144144 static void meson_gpio_irq_update_bits(struct meson_gpio_irq_controller *ctl,
145145 unsigned int reg, u32 mask, u32 val)
146146 {
147+ unsigned long flags;
147148 u32 tmp;
148149
150+ spin_lock_irqsave(&ctl->lock, flags);
151+
149152 tmp = readl_relaxed(ctl->base + reg);
150153 tmp &= ~mask;
151154 tmp |= val;
152155 writel_relaxed(tmp, ctl->base + reg);
156+
157+ spin_unlock_irqrestore(&ctl->lock, flags);
153158 }
154159
155160 static void meson_gpio_irq_init_dummy(struct meson_gpio_irq_controller *ctl)
@@ -196,14 +201,15 @@ meson_gpio_irq_request_channel(struct meson_gpio_irq_controller *ctl, · 40 unmodified lines
196201 unsigned long hwirq,
197202 u32 **channel_hwirq)
198203 {
204+ unsigned long flags;
199205 unsigned int idx;
200206
201− spin_lock(&ctl->lock);
207+ spin_lock_irqsave(&ctl->lock, flags);
202208
203209 /* Find a free channel */
204210 idx = find_first_zero_bit(ctl->channel_map, NUM_CHANNEL);
205211 if (idx >= NUM_CHANNEL) {
206− spin_unlock(&ctl->lock);
212+ spin_unlock_irqrestore(&ctl->lock, flags);
207213 pr_err("No channel available\n");
208214 return -ENOSPC;
209215 }
@@ -211,6 +217,8 @@ meson_gpio_irq_request_channel(struct meson_gpio_irq_controller *ctl, · 1 unmodified line
211217 /* Mark the channel as used */
212218 set_bit(idx, ctl->channel_map);
213219
220+ spin_unlock_irqrestore(&ctl->lock, flags);
221+
214222 /*
215223 * Setup the mux of the channel to route the signal of the pad
216224 * to the appropriate input of the GIC
@@ -225,8 +233,6 @@ meson_gpio_irq_request_channel(struct meson_gpio_irq_controller *ctl, · 8 unmodified lines
225233 */
226234 *channel_hwirq = &(ctl->channel_irqs[idx]);
227235
228− spin_unlock(&ctl->lock);
229−
230236 pr_debug("hwirq %lu assigned to channel %d - irq %u\n",
231237 hwirq, idx, **channel_hwirq);
232238
@@ -287,13 +293,9 @@ static int meson_gpio_irq_type_setup(struct meson_gpio_irq_controller *ctl, · 54 unmodified lines
287293 val |= REG_EDGE_POL_LOW(params, idx);
288294 }
289295
290− spin_lock(&ctl->lock);
291−
292296 meson_gpio_irq_update_bits(ctl, REG_EDGE_POL,
293297 REG_EDGE_POL_MASK(params, idx), val);
294298
295− spin_unlock(&ctl->lock);
296−
297299 return 0;
298300 }
299301
drivers/irqchip/irq-mvebu-icu.c+1−1
@@ -66,7 +66,7 @@ struct mvebu_icu_irq_data { · 65 unmodified lines
6666 unsigned int type;
6767 };
6868
69−DEFINE_STATIC_KEY_FALSE(legacy_bindings);
69+static DEFINE_STATIC_KEY_FALSE(legacy_bindings);
7070
7171 static void mvebu_icu_init(struct mvebu_icu *icu,
7272 struct mvebu_icu_msi_data *msi_data,
drivers/irqchip/irq-sifive-plic.c+1−1
@@ -56,7 +56,7 @@ · 55 unmodified lines
5656 #define CONTEXT_THRESHOLD 0x00
5757 #define CONTEXT_CLAIM 0x04
5858
59−#define PLIC_DISABLE_THRESHOLD 0xf
59+#define PLIC_DISABLE_THRESHOLD 0x7
6060 #define PLIC_ENABLE_THRESHOLD 0
6161
6262 struct plic_priv {
drivers/irqchip/irq-ti-sci-inta.c+2−1
@@ -37,6 +37,7 @@ · 36 unmodified lines
3737 #define VINT_ENABLE_SET_OFFSET 0x0
3838 #define VINT_ENABLE_CLR_OFFSET 0x8
3939 #define VINT_STATUS_OFFSET 0x18
40+#define VINT_STATUS_MASKED_OFFSET 0x20
4041
4142 /**
4243 * struct ti_sci_inta_event_desc - Description of an event coming to
@@ -116,7 +117,7 @@ static void ti_sci_inta_irq_handler(struct irq_desc *desc) · 73 unmodified lines
116117 chained_irq_enter(irq_desc_get_chip(desc), desc);
117118
118119 val = readq_relaxed(inta->base + vint_desc->vint_id * 0x1000 +
119− VINT_STATUS_OFFSET);
120+ VINT_STATUS_MASKED_OFFSET);
120121
121122 for_each_set_bit(bit, &val, MAX_EVENTS_PER_VINT) {
122123 virq = irq_find_mapping(domain, vint_desc->events[bit].hwirq);
drivers/isdn/hardware/mISDN/mISDNisar.c+2−2
@@ -743,10 +743,10 @@ check_send(struct isar_hw *isar, u8 rdm) · 742 unmodified lines
743743 }
744744 }
745745
746−const char *dmril[] = {"NO SPEED", "1200/75", "NODEF2", "75/1200", "NODEF4",
746+static const char *dmril[] = {"NO SPEED", "1200/75", "NODEF2", "75/1200", "NODEF4",
747747 "300", "600", "1200", "2400", "4800", "7200",
748748 "9600nt", "9600t", "12000", "14400", "WRONG"};
749−const char *dmrim[] = {"NO MOD", "NO DEF", "V32/V32b", "V22", "V21",
749+static const char *dmrim[] = {"NO MOD", "NO DEF", "V32/V32b", "V22", "V21",
750750 "Bell103", "V23", "Bell202", "V17", "V29", "V27ter"};
751751
752752 static void
drivers/misc/mei/pci-me.c+2−1
@@ -203,11 +203,12 @@ static int mei_me_probe(struct pci_dev *pdev, const struct pci_device_id *ent) · 202 unmodified lines
203203 }
204204 hw = to_me_hw(dev);
205205 hw->mem_addr = pcim_iomap_table(pdev)[0];
206− hw->irq = pdev->irq;
207206 hw->read_fws = mei_me_read_fws;
208207
209208 pci_enable_msi(pdev);
210209
210+ hw->irq = pdev->irq;
211+
211212 /* request and enable interrupt */
212213 irqflags = pci_dev_msi_enabled(pdev) ? IRQF_ONESHOT : IRQF_SHARED;
213214
drivers/misc/mic/Kconfig+1−1
@@ -116,7 +116,7 @@ config MIC_COSM · 115 unmodified lines
116116
117117 config VOP
118118 tristate "VOP Driver"
119− depends on VOP_BUS
119+ depends on VOP_BUS && VHOST_DPN
120120 select VHOST_RING
121121 select VIRTIO
122122 help
drivers/mtd/spi-nor/Makefile+2−0
@@ -18,3 +18,5 @@ spi-nor-objs += winbond.o · 17 unmodified lines
1818 spi-nor-objs += xilinx.o
1919 spi-nor-objs += xmc.o
2020 obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o
21+
22+obj-$(CONFIG_MTD_SPI_NOR) += controllers/
drivers/net/caif/Kconfig+1−1
@@ -50,7 +50,7 @@ config CAIF_HSI · 49 unmodified lines
5050
5151 config CAIF_VIRTIO
5252 tristate "CAIF virtio transport driver"
53− depends on CAIF && HAS_DMA
53+ depends on CAIF && HAS_DMA && VHOST_DPN
5454 select VHOST_RING
5555 select VIRTIO
5656 select GENERIC_ALLOCATOR
drivers/net/dsa/b53/b53_common.c+33−5
@@ -1474,6 +1474,10 @@ static int b53_arl_rw_op(struct b53_device *dev, unsigned int op) · 1473 unmodified lines
14741474 reg |= ARLTBL_RW;
14751475 else
14761476 reg &= ~ARLTBL_RW;
1477+ if (dev->vlan_enabled)
1478+ reg &= ~ARLTBL_IVL_SVL_SELECT;
1479+ else
1480+ reg |= ARLTBL_IVL_SVL_SELECT;
14771481 b53_write8(dev, B53_ARLIO_PAGE, B53_ARLTBL_RW_CTRL, reg);
14781482
14791483 return b53_arl_op_wait(dev);
@@ -1483,6 +1487,7 @@ static int b53_arl_read(struct b53_device *dev, u64 mac, · 3 unmodified lines
14831487 u16 vid, struct b53_arl_entry *ent, u8 *idx,
14841488 bool is_valid)
14851489 {
1490+ DECLARE_BITMAP(free_bins, B53_ARLTBL_MAX_BIN_ENTRIES);
14861491 unsigned int i;
14871492 int ret;
14881493
@@ -1490,6 +1495,8 @@ static int b53_arl_read(struct b53_device *dev, u64 mac, · 1 unmodified line
14901495 if (ret)
14911496 return ret;
14921497
1498+ bitmap_zero(free_bins, dev->num_arl_entries);
1499+
14931500 /* Read the bins */
14941501 for (i = 0; i < dev->num_arl_entries; i++) {
14951502 u64 mac_vid;
@@ -1501,13 +1508,24 @@ static int b53_arl_read(struct b53_device *dev, u64 mac, · 5 unmodified lines
15011508 B53_ARLTBL_DATA_ENTRY(i), &fwd_entry);
15021509 b53_arl_to_entry(ent, mac_vid, fwd_entry);
15031510
1504− if (!(fwd_entry & ARLTBL_VALID))
1511+ if (!(fwd_entry & ARLTBL_VALID)) {
1512+ set_bit(i, free_bins);
15051513 continue;
1514+ }
15061515 if ((mac_vid & ARLTBL_MAC_MASK) != mac)
15071516 continue;
1517+ if (dev->vlan_enabled &&
1518+ ((mac_vid >> ARLTBL_VID_S) & ARLTBL_VID_MASK) != vid)
1519+ continue;
15081520 *idx = i;
1521+ return 0;
15091522 }
15101523
1524+ if (bitmap_weight(free_bins, dev->num_arl_entries) == 0)
1525+ return -ENOSPC;
1526+
1527+ *idx = find_first_bit(free_bins, dev->num_arl_entries);
1528+
15111529 return -ENOENT;
15121530 }
15131531
@@ -1537,10 +1555,21 @@ static int b53_arl_op(struct b53_device *dev, int op, int port, · 23 unmodified lines
15371555 if (op)
15381556 return ret;
15391557
1540− /* We could not find a matching MAC, so reset to a new entry */
1541− if (ret) {
1558+ switch (ret) {
1559+ case -ENOSPC:
1560+ dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n",
1561+ addr, vid);
1562+ return is_valid ? ret : 0;
1563+ case -ENOENT:
1564+ /* We could not find a matching MAC, so reset to a new entry */
1565+ dev_dbg(dev->dev, "{%pM,%.4d} not found, using idx: %d\n",
1566+ addr, vid, idx);
15421567 fwd_entry = 0;
1543− idx = 1;
1568+ break;
1569+ default:
1570+ dev_dbg(dev->dev, "{%pM,%.4d} found, using idx: %d\n",
1571+ addr, vid, idx);
1572+ break;
15441573 }
15451574
15461575 /* For multicast address, the port is a bitmask and the validity
@@ -1558,7 +1587,6 @@ static int b53_arl_op(struct b53_device *dev, int op, int port, · 11 unmodified lines
15581587 ent.is_valid = !!(ent.port);
15591588 }
15601589
1561− ent.is_valid = is_valid;
15621590 ent.vid = vid;
15631591 ent.is_static = true;
15641592 ent.is_age = false;
drivers/net/dsa/b53/b53_regs.h+6−2
@@ -292,6 +292,7 @@ · 291 unmodified lines
292292 /* ARL Table Read/Write Register (8 bit) */
293293 #define B53_ARLTBL_RW_CTRL 0x00
294294 #define ARLTBL_RW BIT(0)
295+#define ARLTBL_IVL_SVL_SELECT BIT(6)
295296 #define ARLTBL_START_DONE BIT(7)
296297
297298 /* MAC Address Index Register (48 bit) */
@@ -304,7 +305,7 @@ · 6 unmodified lines
304305 *
305306 * BCM5325 and BCM5365 share most definitions below
306307 */
307−#define B53_ARLTBL_MAC_VID_ENTRY(n) (0x10 * (n))
308+#define B53_ARLTBL_MAC_VID_ENTRY(n) ((0x10 * (n)) + 0x10)
308309 #define ARLTBL_MAC_MASK 0xffffffffffffULL
309310 #define ARLTBL_VID_S 48
310311 #define ARLTBL_VID_MASK_25 0xff
@@ -316,13 +317,16 @@ · 5 unmodified lines
316317 #define ARLTBL_VALID_25 BIT(63)
317318
318319 /* ARL Table Data Entry N Registers (32 bit) */
319−#define B53_ARLTBL_DATA_ENTRY(n) ((0x10 * (n)) + 0x08)
320+#define B53_ARLTBL_DATA_ENTRY(n) ((0x10 * (n)) + 0x18)
320321 #define ARLTBL_DATA_PORT_ID_MASK 0x1ff
321322 #define ARLTBL_TC(tc) ((3 & tc) << 11)
322323 #define ARLTBL_AGE BIT(14)
323324 #define ARLTBL_STATIC BIT(15)
324325 #define ARLTBL_VALID BIT(16)
325326
327+/* Maximum number of bin entries in the ARL for all switches */
328+#define B53_ARLTBL_MAX_BIN_ENTRIES 4
329+
326330 /* ARL Search Control Register (8 bit) */
327331 #define B53_ARL_SRCH_CTL 0x50
328332 #define B53_ARL_SRCH_CTL_25 0x20
drivers/net/dsa/mt7530.c+12−91
@@ -66,58 +66,6 @@ static const struct mt7530_mib_desc mt7530_mib[] = { · 65 unmodified lines
6666 MIB_DESC(1, 0xb8, "RxArlDrop"),
6767 };
6868
69−static int
70−mt7623_trgmii_write(struct mt7530_priv *priv, u32 reg, u32 val)
71−{
72− int ret;
73−
74− ret = regmap_write(priv->ethernet, TRGMII_BASE(reg), val);
75− if (ret < 0)
76− dev_err(priv->dev,
77− "failed to priv write register\n");
78− return ret;
79−}
80−
81−static u32
82−mt7623_trgmii_read(struct mt7530_priv *priv, u32 reg)
83−{
84− int ret;
85− u32 val;
86−
87− ret = regmap_read(priv->ethernet, TRGMII_BASE(reg), &val);
88− if (ret < 0) {
89− dev_err(priv->dev,
90− "failed to priv read register\n");
91− return ret;
92− }
93−
94− return val;
95−}
96−
97−static void
98−mt7623_trgmii_rmw(struct mt7530_priv *priv, u32 reg,
99− u32 mask, u32 set)
100−{
101− u32 val;
102−
103− val = mt7623_trgmii_read(priv, reg);
104− val &= ~mask;
105− val |= set;
106− mt7623_trgmii_write(priv, reg, val);
107−}
108−
109−static void
110−mt7623_trgmii_set(struct mt7530_priv *priv, u32 reg, u32 val)
111−{
112− mt7623_trgmii_rmw(priv, reg, 0, val);
113−}
114−
115−static void
116−mt7623_trgmii_clear(struct mt7530_priv *priv, u32 reg, u32 val)
117−{
118− mt7623_trgmii_rmw(priv, reg, val, 0);
119−}
120−
12169 static int
12270 core_read_mmd_indirect(struct mt7530_priv *priv, int prtad, int devad)
12371 {
@@ -530,27 +478,6 @@ mt7530_pad_clk_setup(struct dsa_switch *ds, int mode) · 406 unmodified lines
530478 for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
531479 mt7530_rmw(priv, MT7530_TRGMII_RD(i),
532480 RD_TAP_MASK, RD_TAP(16));
533− else
534− if (priv->id != ID_MT7621)
535− mt7623_trgmii_set(priv, GSW_INTF_MODE,
536− INTF_MODE_TRGMII);
537−
538− return 0;
539−}
540−
541−static int
542−mt7623_pad_clk_setup(struct dsa_switch *ds)
543−{
544− struct mt7530_priv *priv = ds->priv;
545− int i;
546−
547− for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
548− mt7623_trgmii_write(priv, GSW_TRGMII_TD_ODT(i),
549− TD_DM_DRVP(8) | TD_DM_DRVN(8));
550−
551− mt7623_trgmii_set(priv, GSW_TRGMII_RCK_CTRL, RX_RST | RXC_DQSISEL);
552− mt7623_trgmii_clear(priv, GSW_TRGMII_RCK_CTRL, RX_RST);
553−
554481 return 0;
555482 }
556483
@@ -846,8 +773,9 @@ mt7530_port_set_vlan_unaware(struct dsa_switch *ds, int port) · 289 unmodified lines
846773 */
847774 mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
848775 MT7530_PORT_MATRIX_MODE);
849− mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
850− VLAN_ATTR(MT7530_VLAN_TRANSPARENT));
776+ mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK | PVC_EG_TAG_MASK,
777+ VLAN_ATTR(MT7530_VLAN_TRANSPARENT) |
778+ PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
851779
852780 for (i = 0; i < MT7530_NUM_PORTS; i++) {
853781 if (dsa_is_user_port(ds, i) &&
@@ -863,8 +791,8 @@ mt7530_port_set_vlan_unaware(struct dsa_switch *ds, int port) · 9 unmodified lines
863791 if (all_user_ports_removed) {
864792 mt7530_write(priv, MT7530_PCR_P(MT7530_CPU_PORT),
865793 PCR_MATRIX(dsa_user_ports(priv->ds)));
866− mt7530_write(priv, MT7530_PVC_P(MT7530_CPU_PORT),
867− PORT_SPEC_TAG);
794+ mt7530_write(priv, MT7530_PVC_P(MT7530_CPU_PORT), PORT_SPEC_TAG
795+ | PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
868796 }
869797 }
870798
@@ -890,8 +818,9 @@ mt7530_port_set_vlan_aware(struct dsa_switch *ds, int port) · 19 unmodified lines
890818 /* Set the port as a user port which is to be able to recognize VID
891819 * from incoming packets before fetching entry within the VLAN table.
892820 */
893− mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
894− VLAN_ATTR(MT7530_VLAN_USER));
821+ mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK | PVC_EG_TAG_MASK,
822+ VLAN_ATTR(MT7530_VLAN_USER) |
823+ PVC_EG_TAG(MT7530_VLAN_EG_DISABLED));
895824 }
896825
897826 static void
@@ -1303,10 +1232,6 @@ mt7530_setup(struct dsa_switch *ds) · 405 unmodified lines
13031232 dn = dsa_to_port(ds, MT7530_CPU_PORT)->master->dev.of_node->parent;
13041233
13051234 if (priv->id == ID_MT7530) {
1306− priv->ethernet = syscon_node_to_regmap(dn);
1307− if (IS_ERR(priv->ethernet))
1308− return PTR_ERR(priv->ethernet);
1309−
13101235 regulator_set_voltage(priv->core_pwr, 1000000, 1000000);
13111236 ret = regulator_enable(priv->core_pwr);
13121237 if (ret < 0) {
@@ -1380,6 +1305,10 @@ mt7530_setup(struct dsa_switch *ds) · 67 unmodified lines
13801305 mt7530_cpu_port_enable(priv, i);
13811306 else
13821307 mt7530_port_disable(ds, i);
1308+
1309+ /* Enable consistent egress tag */
1310+ mt7530_rmw(priv, MT7530_PVC_P(i), PVC_EG_TAG_MASK,
1311+ PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
13831312 }
13841313
13851314 /* Setup port 5 */
@@ -1468,14 +1397,6 @@ static void mt7530_phylink_mac_config(struct dsa_switch *ds, int port, · 82 unmodified lines
14681397 /* Setup TX circuit incluing relevant PAD and driving */
14691398 mt7530_pad_clk_setup(ds, state->interface);
14701399
1471− if (priv->id == ID_MT7530) {
1472− /* Setup RX circuit, relevant PAD and driving on the
1473− * host which must be placed after the setup on the
1474− * device side is all finished.
1475− */
1476− mt7623_pad_clk_setup(ds);
1477− }
1478−
14791400 priv->p6_interface = state->interface;
14801401 break;
14811402 default:
drivers/net/dsa/mt7530.h+7−10
@@ -172,9 +172,16 @@ enum mt7530_port_mode { · 171 unmodified lines
172172 /* Register for port vlan control */
173173 #define MT7530_PVC_P(x) (0x2010 + ((x) * 0x100))
174174 #define PORT_SPEC_TAG BIT(5)
175+#define PVC_EG_TAG(x) (((x) & 0x7) << 8)
176+#define PVC_EG_TAG_MASK PVC_EG_TAG(7)
175177 #define VLAN_ATTR(x) (((x) & 0x3) << 6)
176178 #define VLAN_ATTR_MASK VLAN_ATTR(3)
177179
180+enum mt7530_vlan_port_eg_tag {
181+ MT7530_VLAN_EG_DISABLED = 0,
182+ MT7530_VLAN_EG_CONSISTENT = 1,
183+};
184+
178185 enum mt7530_vlan_port_attr {
179186 MT7530_VLAN_USER = 0,
180187 MT7530_VLAN_TRANSPARENT = 3,
@@ -277,7 +284,6 @@ enum mt7530_vlan_port_attr { · 96 unmodified lines
277284
278285 /* Registers for TRGMII on the both side */
279286 #define MT7530_TRGMII_RCK_CTRL 0x7a00
280−#define GSW_TRGMII_RCK_CTRL 0x300
281287 #define RX_RST BIT(31)
282288 #define RXC_DQSISEL BIT(30)
283289 #define DQSI1_TAP_MASK (0x7f << 8)
@@ -286,31 +292,24 @@ enum mt7530_vlan_port_attr { · 2 unmodified lines
286292 #define DQSI0_TAP(x) ((x) & 0x7f)
287293
288294 #define MT7530_TRGMII_RCK_RTT 0x7a04
289−#define GSW_TRGMII_RCK_RTT 0x304
290295 #define DQS1_GATE BIT(31)
291296 #define DQS0_GATE BIT(30)
292297
293298 #define MT7530_TRGMII_RD(x) (0x7a10 + (x) * 8)
294−#define GSW_TRGMII_RD(x) (0x310 + (x) * 8)
295299 #define BSLIP_EN BIT(31)
296300 #define EDGE_CHK BIT(30)
297301 #define RD_TAP_MASK 0x7f
298302 #define RD_TAP(x) ((x) & 0x7f)
299303
300−#define GSW_TRGMII_TXCTRL 0x340
301304 #define MT7530_TRGMII_TXCTRL 0x7a40
302305 #define TRAIN_TXEN BIT(31)
303306 #define TXC_INV BIT(30)
304307 #define TX_RST BIT(28)
305308
306309 #define MT7530_TRGMII_TD_ODT(i) (0x7a54 + 8 * (i))
307−#define GSW_TRGMII_TD_ODT(i) (0x354 + 8 * (i))
308310 #define TD_DM_DRVP(x) ((x) & 0xf)
309311 #define TD_DM_DRVN(x) (((x) & 0xf) << 4)
310312
311−#define GSW_INTF_MODE 0x390
312−#define INTF_MODE_TRGMII BIT(1)
313−
314313 #define MT7530_TRGMII_TCK_CTRL 0x7a78
315314 #define TCK_TAP(x) (((x) & 0xf) << 8)
316315
@@ -443,7 +442,6 @@ static const char *p5_intf_modes(unsigned int p5_interface) · 126 unmodified lines
443442 * @ds: The pointer to the dsa core structure
444443 * @bus: The bus used for the device and built-in PHY
445444 * @rstc: The pointer to reset control used by MCM
446− * @ethernet: The regmap used for access TRGMII-based registers
447445 * @core_pwr: The power supplied into the core
448446 * @io_pwr: The power supplied into the I/O
449447 * @reset: The descriptor for GPIO line tied to its reset pin
@@ -460,7 +458,6 @@ struct mt7530_priv { · 10 unmodified lines
460458 struct dsa_switch *ds;
461459 struct mii_bus *bus;
462460 struct reset_control *rstc;
463− struct regmap *ethernet;
464461 struct regulator *core_pwr;
465462 struct regulator *io_pwr;
466463 struct gpio_desc *reset;
drivers/net/dsa/mv88e6xxx/chip.c+3−2
@@ -709,7 +709,8 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port, · 708 unmodified lines
709709 ops = chip->info->ops;
710710
711711 mv88e6xxx_reg_lock(chip);
712− if (!mv88e6xxx_port_ppu_updates(chip, port) && ops->port_set_link)
712+ if ((!mv88e6xxx_port_ppu_updates(chip, port) ||
713+ mode == MLO_AN_FIXED) && ops->port_set_link)
713714 err = ops->port_set_link(chip, port, LINK_FORCED_DOWN);
714715 mv88e6xxx_reg_unlock(chip);
715716
@@ -731,7 +732,7 @@ static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port, · 15 unmodified lines
731732 ops = chip->info->ops;
732733
733734 mv88e6xxx_reg_lock(chip);
734− if (!mv88e6xxx_port_ppu_updates(chip, port)) {
735+ if (!mv88e6xxx_port_ppu_updates(chip, port) || mode == MLO_AN_FIXED) {
735736 /* FIXME: for an automedia port, should we force the link
736737 * down here - what if the link comes up due to "other" media
737738 * while we're bringing the port up, how is the exclusivity
drivers/net/dsa/ocelot/felix.c+1−4
@@ -46,11 +46,8 @@ static int felix_fdb_add(struct dsa_switch *ds, int port, · 45 unmodified lines
4646 const unsigned char *addr, u16 vid)
4747 {
4848 struct ocelot *ocelot = ds->priv;
49− bool vlan_aware;
5049
51− vlan_aware = dsa_port_is_vlan_filtering(dsa_to_port(ds, port));
52−
53− return ocelot_fdb_add(ocelot, port, addr, vid, vlan_aware);
50+ return ocelot_fdb_add(ocelot, port, addr, vid);
5451 }
5552
5653 static int felix_fdb_del(struct dsa_switch *ds, int port,
drivers/net/ethernet/amd/xgbe/xgbe-drv.c+1−1
@@ -514,7 +514,7 @@ static void xgbe_isr_task(unsigned long data) · 513 unmodified lines
514514 xgbe_disable_rx_tx_ints(pdata);
515515
516516 /* Turn on polling */
517− __napi_schedule_irqoff(&pdata->napi);
517+ __napi_schedule(&pdata->napi);
518518 }
519519 } else {
520520 /* Don't clear Rx/Tx status if doing per channel DMA
drivers/net/ethernet/broadcom/bcmsysport.c+2−2
@@ -664,7 +664,8 @@ static struct sk_buff *bcm_sysport_rx_refill(struct bcm_sysport_priv *priv, · 663 unmodified lines
664664 dma_addr_t mapping;
665665
666666 /* Allocate a new SKB for a new packet */
667− skb = netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH);
667+ skb = __netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH,
668+ GFP_ATOMIC | __GFP_NOWARN);
668669 if (!skb) {
669670 priv->mib.alloc_rx_buff_failed++;
670671 netif_err(priv, rx_err, ndev, "SKB alloc failed\n");
@@ -2475,7 +2476,6 @@ static int bcm_sysport_probe(struct platform_device *pdev) · 1804 unmodified lines
24752476 priv->wol_irq = platform_get_irq(pdev, 1);
24762477 }
24772478 if (priv->irq0 <= 0 || (priv->irq1 <= 0 && !priv->is_lite)) {
2478− dev_err(&pdev->dev, "invalid interrupts\n");
24792479 ret = -EINVAL;
24802480 goto err_free_netdev;
24812481 }
drivers/net/ethernet/broadcom/bgmac-platform.c+11−22
@@ -172,7 +172,6 @@ static int bgmac_probe(struct platform_device *pdev) · 171 unmodified lines
172172 {
173173 struct device_node *np = pdev->dev.of_node;
174174 struct bgmac *bgmac;
175− struct resource *regs;
176175 const u8 *mac_addr;
177176
178177 bgmac = bgmac_alloc(&pdev->dev);
@@ -202,31 +201,21 @@ static int bgmac_probe(struct platform_device *pdev) · 23 unmodified lines
202201 if (bgmac->irq < 0)
203202 return bgmac->irq;
204203
205− regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "amac_base");
206− if (!regs) {
207− dev_err(&pdev->dev, "Unable to obtain base resource\n");
208− return -EINVAL;
209− }
210−
211− bgmac->plat.base = devm_ioremap_resource(&pdev->dev, regs);
204+ bgmac->plat.base =
205+ devm_platform_ioremap_resource_byname(pdev, "amac_base");
212206 if (IS_ERR(bgmac->plat.base))
213207 return PTR_ERR(bgmac->plat.base);
214208
215− regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base");
216− if (regs) {
217− bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
218− if (IS_ERR(bgmac->plat.idm_base))
219− return PTR_ERR(bgmac->plat.idm_base);
220− bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK;
221− }
209+ bgmac->plat.idm_base =
210+ devm_platform_ioremap_resource_byname(pdev, "idm_base");
211+ if (IS_ERR(bgmac->plat.idm_base))
212+ return PTR_ERR(bgmac->plat.idm_base);
213+ bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK;
222214
223− regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base");
224− if (regs) {
225− bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev,
226− regs);
227− if (IS_ERR(bgmac->plat.nicpm_base))
228− return PTR_ERR(bgmac->plat.nicpm_base);
229− }
215+ bgmac->plat.nicpm_base =
216+ devm_platform_ioremap_resource_byname(pdev, "nicpm_base");
217+ if (IS_ERR(bgmac->plat.nicpm_base))
218+ return PTR_ERR(bgmac->plat.nicpm_base);
230219
231220 bgmac->read = platform_bgmac_read;
232221 bgmac->write = platform_bgmac_write;
drivers/net/ethernet/broadcom/genet/bcmgenet.c+5−1
@@ -934,6 +934,8 @@ static void bcmgenet_get_ethtool_stats(struct net_device *dev, · 933 unmodified lines
934934 if (netif_running(dev))
935935 bcmgenet_update_mib_counters(priv);
936936
937+ dev->netdev_ops->ndo_get_stats(dev);
938+
937939 for (i = 0; i < BCMGENET_STATS_LEN; i++) {
938940 const struct bcmgenet_stats *s;
939941 char *p;
@@ -1622,7 +1624,8 @@ static struct sk_buff *bcmgenet_rx_refill(struct bcmgenet_priv *priv, · 682 unmodified lines
16221624 dma_addr_t mapping;
16231625
16241626 /* Allocate a new Rx skb */
1625− skb = netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT);
1627+ skb = __netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT,
1628+ GFP_ATOMIC | __GFP_NOWARN);
16261629 if (!skb) {
16271630 priv->mib.alloc_rx_buff_failed++;
16281631 netif_err(priv, rx_err, priv->dev,
@@ -3156,6 +3159,7 @@ static struct net_device_stats *bcmgenet_get_stats(struct net_device *dev) · 1527 unmodified lines
31563159 dev->stats.rx_packets = rx_packets;
31573160 dev->stats.rx_errors = rx_errors;
31583161 dev->stats.rx_missed_errors = rx_errors;
3162+ dev->stats.rx_dropped = rx_dropped;
31593163 return &dev->stats;
31603164 }
31613165
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c+20−7
@@ -1049,9 +1049,9 @@ static void cudbg_t4_fwcache(struct cudbg_init *pdbg_init, · 1048 unmodified lines
10491049 }
10501050 }
10511051
1052−static unsigned long cudbg_mem_region_size(struct cudbg_init *pdbg_init,
1053− struct cudbg_error *cudbg_err,
1054− u8 mem_type)
1052+static int cudbg_mem_region_size(struct cudbg_init *pdbg_init,
1053+ struct cudbg_error *cudbg_err,
1054+ u8 mem_type, unsigned long *region_size)
10551055 {
10561056 struct adapter *padap = pdbg_init->adap;
10571057 struct cudbg_meminfo mem_info;
@@ -1060,15 +1060,23 @@ static unsigned long cudbg_mem_region_size(struct cudbg_init *pdbg_init, · 2 unmodified lines
10601060
10611061 memset(&mem_info, 0, sizeof(struct cudbg_meminfo));
10621062 rc = cudbg_fill_meminfo(padap, &mem_info);
1063− if (rc)
1063+ if (rc) {
1064+ cudbg_err->sys_err = rc;
10641065 return rc;
1066+ }
10651067
10661068 cudbg_t4_fwcache(pdbg_init, cudbg_err);
10671069 rc = cudbg_meminfo_get_mem_index(padap, &mem_info, mem_type, &mc_idx);
1068− if (rc)
1070+ if (rc) {
1071+ cudbg_err->sys_err = rc;
10691072 return rc;
1073+ }
1074+
1075+ if (region_size)
1076+ *region_size = mem_info.avail[mc_idx].limit -
1077+ mem_info.avail[mc_idx].base;
10701078
1071− return mem_info.avail[mc_idx].limit - mem_info.avail[mc_idx].base;
1079+ return 0;
10721080 }
10731081
10741082 static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init,
@@ -1076,7 +1084,12 @@ static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init, · 1 unmodified line
10761084 struct cudbg_error *cudbg_err,
10771085 u8 mem_type)
10781086 {
1079− unsigned long size = cudbg_mem_region_size(pdbg_init, cudbg_err, mem_type);
1087+ unsigned long size = 0;
1088+ int rc;
1089+
1090+ rc = cudbg_mem_region_size(pdbg_init, cudbg_err, mem_type, &size);
1091+ if (rc)
1092+ return rc;
10801093
10811094 return cudbg_read_fw_mem(pdbg_init, dbg_buff, mem_type, size,
10821095 cudbg_err);
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c+6−21
@@ -311,32 +311,17 @@ static int cxgb4_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) · 310 unmodified lines
311311 */
312312 static int cxgb4_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
313313 {
314− struct adapter *adapter = (struct adapter *)container_of(ptp,
315− struct adapter, ptp_clock_info);
316− struct fw_ptp_cmd c;
314+ struct adapter *adapter = container_of(ptp, struct adapter,
315+ ptp_clock_info);
317316 u64 ns;
318− int err;
319−
320− memset(&c, 0, sizeof(c));
321− c.op_to_portid = cpu_to_be32(FW_CMD_OP_V(FW_PTP_CMD) |
322− FW_CMD_REQUEST_F |
323− FW_CMD_READ_F |
324− FW_PTP_CMD_PORTID_V(0));
325− c.retval_len16 = cpu_to_be32(FW_CMD_LEN16_V(sizeof(c) / 16));
326− c.u.ts.sc = FW_PTP_SC_GET_TIME;
327317
328− err = t4_wr_mbox(adapter, adapter->mbox, &c, sizeof(c), &c);
329− if (err < 0) {
330− dev_err(adapter->pdev_dev,
331− "PTP: %s error %d\n", __func__, -err);
332− return err;
333− }
318+ ns = t4_read_reg(adapter, T5_PORT_REG(0, MAC_PORT_PTP_SUM_LO_A));
319+ ns |= (u64)t4_read_reg(adapter,
320+ T5_PORT_REG(0, MAC_PORT_PTP_SUM_HI_A)) << 32;
334321
335322 /* convert to timespec*/
336− ns = be64_to_cpu(c.u.ts.tm);
337323 *ts = ns_to_timespec64(ns);
338−
339− return err;
324+ return 0;
340325 }
341326
342327 /**
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c+1−1
@@ -3742,7 +3742,7 @@ int t4_phy_fw_ver(struct adapter *adap, int *phy_fw_ver) · 3741 unmodified lines
37423742 FW_PARAMS_PARAM_Z_V(FW_PARAMS_PARAM_DEV_PHYFW_VERSION));
37433743 ret = t4_query_params(adap, adap->mbox, adap->pf, 0, 1,
37443744 &param, &val);
3745− if (ret < 0)
3745+ if (ret)
37463746 return ret;
37473747 *phy_fw_ver = val;
37483748 return 0;
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h+3−0
@@ -1906,6 +1906,9 @@ · 1905 unmodified lines
19061906
19071907 #define MAC_PORT_CFG2_A 0x818
19081908
1909+#define MAC_PORT_PTP_SUM_LO_A 0x990
1910+#define MAC_PORT_PTP_SUM_HI_A 0x994
1911+
19091912 #define MPS_CMN_CTL_A 0x9000
19101913
19111914 #define COUNTPAUSEMCRX_S 5
drivers/net/ethernet/dec/tulip/tulip_core.c+1−1
@@ -1277,7 +1277,7 @@ static const struct net_device_ops tulip_netdev_ops = { · 1276 unmodified lines
12771277 #endif
12781278 };
12791279
1280−const struct pci_device_id early_486_chipsets[] = {
1280+static const struct pci_device_id early_486_chipsets[] = {
12811281 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
12821282 { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
12831283 { },
drivers/net/ethernet/freescale/fec.h+7−0
@@ -488,6 +488,12 @@ struct fec_enet_priv_rx_q { · 487 unmodified lines
488488 struct sk_buff *rx_skbuff[RX_RING_SIZE];
489489 };
490490
491+struct fec_stop_mode_gpr {
492+ struct regmap *gpr;
493+ u8 reg;
494+ u8 bit;
495+};
496+
491497 /* The FEC buffer descriptors track the ring buffers. The rx_bd_base and
492498 * tx_bd_base always point to the base of the buffer descriptors. The
493499 * cur_rx and cur_tx point to the currently available buffer.
@@ -562,6 +568,7 @@ struct fec_enet_private { · 68 unmodified lines
562568 int hwts_tx_en;
563569 struct delayed_work time_keep;
564570 struct regulator *reg_phy;
571+ struct fec_stop_mode_gpr stop_gpr;
565572
566573 unsigned int tx_align;
567574 unsigned int rx_align;
drivers/net/ethernet/freescale/fec_main.c+120−29
@@ -62,6 +62,8 @@ · 61 unmodified lines
6262 #include <linux/if_vlan.h>
6363 #include <linux/pinctrl/consumer.h>
6464 #include <linux/prefetch.h>
65+#include <linux/mfd/syscon.h>
66+#include <linux/regmap.h>
6567 #include <soc/imx/cpuidle.h>
6668
6769 #include <asm/cacheflush.h>
@@ -84,6 +86,56 @@ static void fec_enet_itr_coal_init(struct net_device *ndev); · 16 unmodified lines
8486 #define FEC_ENET_OPD_V 0xFFF0
8587 #define FEC_MDIO_PM_TIMEOUT 100 /* ms */
8688
89+struct fec_devinfo {
90+ u32 quirks;
91+ u8 stop_gpr_reg;
92+ u8 stop_gpr_bit;
93+};
94+
95+static const struct fec_devinfo fec_imx25_info = {
96+ .quirks = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR |
97+ FEC_QUIRK_HAS_FRREG,
98+};
99+
100+static const struct fec_devinfo fec_imx27_info = {
101+ .quirks = FEC_QUIRK_MIB_CLEAR | FEC_QUIRK_HAS_FRREG,
102+};
103+
104+static const struct fec_devinfo fec_imx28_info = {
105+ .quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME |
106+ FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC |
107+ FEC_QUIRK_HAS_FRREG,
108+};
109+
110+static const struct fec_devinfo fec_imx6q_info = {
111+ .quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
112+ FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
113+ FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR006358 |
114+ FEC_QUIRK_HAS_RACC,
115+ .stop_gpr_reg = 0x34,
116+ .stop_gpr_bit = 27,
117+};
118+
119+static const struct fec_devinfo fec_mvf600_info = {
120+ .quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_RACC,
121+};
122+
123+static const struct fec_devinfo fec_imx6x_info = {
124+ .quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
125+ FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
126+ FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |
127+ FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |
128+ FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE,
129+};
130+
131+static const struct fec_devinfo fec_imx6ul_info = {
132+ .quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
133+ FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
134+ FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR007885 |
135+ FEC_QUIRK_BUG_CAPTURE | FEC_QUIRK_HAS_RACC |
136+ FEC_QUIRK_HAS_COALESCE,
137+};
138+
87139 static struct platform_device_id fec_devtype[] = {
88140 {
89141 /* keep it for coldfire */
@@ -91,39 +143,25 @@ static struct platform_device_id fec_devtype[] = { · 1 unmodified line
91143 .driver_data = 0,
92144 }, {
93145 .name = "imx25-fec",
94− .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR |
95− FEC_QUIRK_HAS_FRREG,
146+ .driver_data = (kernel_ulong_t)&fec_imx25_info,
96147 }, {
97148 .name = "imx27-fec",
98− .driver_data = FEC_QUIRK_MIB_CLEAR | FEC_QUIRK_HAS_FRREG,
149+ .driver_data = (kernel_ulong_t)&fec_imx27_info,
99150 }, {
100151 .name = "imx28-fec",
101− .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME |
102− FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC |
103− FEC_QUIRK_HAS_FRREG,
152+ .driver_data = (kernel_ulong_t)&fec_imx28_info,
104153 }, {
105154 .name = "imx6q-fec",
106− .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
107− FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
108− FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR006358 |
109− FEC_QUIRK_HAS_RACC,
155+ .driver_data = (kernel_ulong_t)&fec_imx6q_info,
110156 }, {
111157 .name = "mvf600-fec",
112− .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_RACC,
158+ .driver_data = (kernel_ulong_t)&fec_mvf600_info,
113159 }, {
114160 .name = "imx6sx-fec",
115− .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
116− FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
117− FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |
118− FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |
119− FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE,
161+ .driver_data = (kernel_ulong_t)&fec_imx6x_info,
120162 }, {
121163 .name = "imx6ul-fec",
122− .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
123− FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
124− FEC_QUIRK_HAS_VLAN | FEC_QUIRK_ERR007885 |
125− FEC_QUIRK_BUG_CAPTURE | FEC_QUIRK_HAS_RACC |
126− FEC_QUIRK_HAS_COALESCE,
164+ .driver_data = (kernel_ulong_t)&fec_imx6ul_info,
127165 }, {
128166 /* sentinel */
129167 }
@@ -1092,11 +1130,28 @@ fec_restart(struct net_device *ndev) · 962 unmodified lines
10921130
10931131 }
10941132
1133+static void fec_enet_stop_mode(struct fec_enet_private *fep, bool enabled)
1134+{
1135+ struct fec_platform_data *pdata = fep->pdev->dev.platform_data;
1136+ struct fec_stop_mode_gpr *stop_gpr = &fep->stop_gpr;
1137+
1138+ if (stop_gpr->gpr) {
1139+ if (enabled)
1140+ regmap_update_bits(stop_gpr->gpr, stop_gpr->reg,
1141+ BIT(stop_gpr->bit),
1142+ BIT(stop_gpr->bit));
1143+ else
1144+ regmap_update_bits(stop_gpr->gpr, stop_gpr->reg,
1145+ BIT(stop_gpr->bit), 0);
1146+ } else if (pdata && pdata->sleep_mode_enable) {
1147+ pdata->sleep_mode_enable(enabled);
1148+ }
1149+}
1150+
10951151 static void
10961152 fec_stop(struct net_device *ndev)
10971153 {
10981154 struct fec_enet_private *fep = netdev_priv(ndev);
1099− struct fec_platform_data *pdata = fep->pdev->dev.platform_data;
11001155 u32 rmii_mode = readl(fep->hwp + FEC_R_CNTRL) & (1 << 8);
11011156 u32 val;
11021157
@@ -1125,9 +1180,7 @@ fec_stop(struct net_device *ndev) · 22 unmodified lines
11251180 val = readl(fep->hwp + FEC_ECNTRL);
11261181 val |= (FEC_ECR_MAGICEN | FEC_ECR_SLEEP);
11271182 writel(val, fep->hwp + FEC_ECNTRL);
1128−
1129− if (pdata && pdata->sleep_mode_enable)
1130− pdata->sleep_mode_enable(true);
1183+ fec_enet_stop_mode(fep, true);
11311184 }
11321185 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
11331186
@@ -3398,6 +3451,37 @@ static int fec_enet_get_irq_cnt(struct platform_device *pdev) · 2264 unmodified lines
33983451 return irq_cnt;
33993452 }
34003453
3454+static int fec_enet_init_stop_mode(struct fec_enet_private *fep,
3455+ struct fec_devinfo *dev_info,
3456+ struct device_node *np)
3457+{
3458+ struct device_node *gpr_np;
3459+ int ret = 0;
3460+
3461+ if (!dev_info)
3462+ return 0;
3463+
3464+ gpr_np = of_parse_phandle(np, "gpr", 0);
3465+ if (!gpr_np)
3466+ return 0;
3467+
3468+ fep->stop_gpr.gpr = syscon_node_to_regmap(gpr_np);
3469+ if (IS_ERR(fep->stop_gpr.gpr)) {
3470+ dev_err(&fep->pdev->dev, "could not find gpr regmap\n");
3471+ ret = PTR_ERR(fep->stop_gpr.gpr);
3472+ fep->stop_gpr.gpr = NULL;
3473+ goto out;
3474+ }
3475+
3476+ fep->stop_gpr.reg = dev_info->stop_gpr_reg;
3477+ fep->stop_gpr.bit = dev_info->stop_gpr_bit;
3478+
3479+out:
3480+ of_node_put(gpr_np);
3481+
3482+ return ret;
3483+}
3484+
34013485 static int
34023486 fec_probe(struct platform_device *pdev)
34033487 {
@@ -3413,6 +3497,7 @@ fec_probe(struct platform_device *pdev) · 9 unmodified lines
34133497 int num_rx_qs;
34143498 char irq_name[8];
34153499 int irq_cnt;
3500+ struct fec_devinfo *dev_info;
34163501
34173502 fec_enet_get_queue_num(pdev, &num_tx_qs, &num_rx_qs);
34183503
@@ -3430,7 +3515,9 @@ fec_probe(struct platform_device *pdev) · 11 unmodified lines
34303515 of_id = of_match_device(fec_dt_ids, &pdev->dev);
34313516 if (of_id)
34323517 pdev->id_entry = of_id->data;
3433− fep->quirks = pdev->id_entry->driver_data;
3518+ dev_info = (struct fec_devinfo *)pdev->id_entry->driver_data;
3519+ if (dev_info)
3520+ fep->quirks = dev_info->quirks;
34343521
34353522 fep->netdev = ndev;
34363523 fep->num_rx_queues = num_rx_qs;
@@ -3464,6 +3551,10 @@ fec_probe(struct platform_device *pdev) · 27 unmodified lines
34643551 if (of_get_property(np, "fsl,magic-packet", NULL))
34653552 fep->wol_flag |= FEC_WOL_HAS_MAGIC_PACKET;
34663553
3554+ ret = fec_enet_init_stop_mode(fep, dev_info, np);
3555+ if (ret)
3556+ goto failed_stop_mode;
3557+
34673558 phy_node = of_parse_phandle(np, "phy-handle", 0);
34683559 if (!phy_node && of_phy_is_fixed_link(np)) {
34693560 ret = of_phy_register_fixed_link(np);
@@ -3632,6 +3723,7 @@ failed_clk: · 162 unmodified lines
36323723 if (of_phy_is_fixed_link(np))
36333724 of_phy_deregister_fixed_link(np);
36343725 of_node_put(phy_node);
3726+failed_stop_mode:
36353727 failed_phy:
36363728 dev_id--;
36373729 failed_ioremap:
@@ -3709,7 +3801,6 @@ static int __maybe_unused fec_resume(struct device *dev) · 71 unmodified lines
37093801 {
37103802 struct net_device *ndev = dev_get_drvdata(dev);
37113803 struct fec_enet_private *fep = netdev_priv(ndev);
3712− struct fec_platform_data *pdata = fep->pdev->dev.platform_data;
37133804 int ret;
37143805 int val;
37153806
@@ -3727,8 +3818,8 @@ static int __maybe_unused fec_resume(struct device *dev) · 11 unmodified lines
37273818 goto failed_clk;
37283819 }
37293820 if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) {
3730− if (pdata && pdata->sleep_mode_enable)
3731− pdata->sleep_mode_enable(false);
3821+ fec_enet_stop_mode(fep, false);
3822+
37323823 val = readl(fep->hwp + FEC_ECNTRL);
37333824 val &= ~(FEC_ECR_MAGICEN | FEC_ECR_SLEEP);
37343825 writel(val, fep->hwp + FEC_ECNTRL);
drivers/net/ethernet/intel/e1000/e1000_main.c+1−1
@@ -1476,7 +1476,7 @@ static bool e1000_check_64k_bound(struct e1000_adapter *adapter, void *start, · 1475 unmodified lines
14761476 if (hw->mac_type == e1000_82545 ||
14771477 hw->mac_type == e1000_ce4100 ||
14781478 hw->mac_type == e1000_82546) {
1479− return ((begin ^ (end - 1)) >> 16) != 0 ? false : true;
1479+ return ((begin ^ (end - 1)) >> 16) == 0;
14801480 }
14811481
14821482 return true;
drivers/net/ethernet/intel/i40e/i40e_main.c+2−2
@@ -1611,7 +1611,7 @@ static int i40e_config_rss_aq(struct i40e_vsi *vsi, const u8 *seed, · 1610 unmodified lines
16111611 }
16121612 }
16131613 if (lut) {
1614− bool pf_lut = vsi->type == I40E_VSI_MAIN ? true : false;
1614+ bool pf_lut = vsi->type == I40E_VSI_MAIN;
16151615
16161616 ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, lut, lut_size);
16171617 if (ret) {
@@ -11436,7 +11436,7 @@ static int i40e_get_rss_aq(struct i40e_vsi *vsi, const u8 *seed, · 9818 unmodified lines
1143611436 }
1143711437
1143811438 if (lut) {
11439− bool pf_lut = vsi->type == I40E_VSI_MAIN ? true : false;
11439+ bool pf_lut = vsi->type == I40E_VSI_MAIN;
1144011440
1144111441 ret = i40e_aq_get_rss_lut(hw, vsi->id, pf_lut, lut, lut_size);
1144211442 if (ret) {
drivers/net/ethernet/marvell/mvneta.c+1−1
@@ -5383,7 +5383,7 @@ static int __init mvneta_driver_init(void) · 5382 unmodified lines
53835383 {
53845384 int ret;
53855385
5386− ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "net/mvmeta:online",
5386+ ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "net/mvneta:online",
53875387 mvneta_cpu_online,
53885388 mvneta_cpu_down_prepare);
53895389 if (ret < 0)
drivers/net/ethernet/mediatek/mtk_eth_soc.c+23−1
@@ -65,6 +65,17 @@ u32 mtk_r32(struct mtk_eth *eth, unsigned reg) · 64 unmodified lines
6565 return __raw_readl(eth->base + reg);
6666 }
6767
68+u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned reg)
69+{
70+ u32 val;
71+
72+ val = mtk_r32(eth, reg);
73+ val &= ~mask;
74+ val |= set;
75+ mtk_w32(eth, val, reg);
76+ return reg;
77+}
78+
6879 static int mtk_mdio_busy_wait(struct mtk_eth *eth)
6980 {
7081 unsigned long t_start = jiffies;
@@ -193,7 +204,7 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode, · 122 unmodified lines
193204 struct mtk_mac *mac = container_of(config, struct mtk_mac,
194205 phylink_config);
195206 struct mtk_eth *eth = mac->hw;
196− u32 mcr_cur, mcr_new, sid;
207+ u32 mcr_cur, mcr_new, sid, i;
197208 int val, ge_mode, err;
198209
199210 /* MT76x8 has no hardware settings between for the MAC */
@@ -255,6 +266,17 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode, · 55 unmodified lines
255266 PHY_INTERFACE_MODE_TRGMII)
256267 mtk_gmac0_rgmii_adjust(mac->hw,
257268 state->speed);
269+
270+ /* mt7623_pad_clk_setup */
271+ for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
272+ mtk_w32(mac->hw,
273+ TD_DM_DRVP(8) | TD_DM_DRVN(8),
274+ TRGMII_TD_ODT(i));
275+
276+ /* Assert/release MT7623 RXC reset */
277+ mtk_m32(mac->hw, 0, RXC_RST | RXC_DQSISEL,
278+ TRGMII_RCK_CTRL);
279+ mtk_m32(mac->hw, RXC_RST, 0, TRGMII_RCK_CTRL);
258280 }
259281 }
260282
drivers/net/ethernet/mediatek/mtk_eth_soc.h+8−0
@@ -352,10 +352,13 @@ · 351 unmodified lines
352352 #define DQSI0(x) ((x << 0) & GENMASK(6, 0))
353353 #define DQSI1(x) ((x << 8) & GENMASK(14, 8))
354354 #define RXCTL_DMWTLAT(x) ((x << 16) & GENMASK(18, 16))
355+#define RXC_RST BIT(31)
355356 #define RXC_DQSISEL BIT(30)
356357 #define RCK_CTRL_RGMII_1000 (RXC_DQSISEL | RXCTL_DMWTLAT(2) | DQSI1(16))
357358 #define RCK_CTRL_RGMII_10_100 RXCTL_DMWTLAT(2)
358359
360+#define NUM_TRGMII_CTRL 5
361+
359362 /* TRGMII RXC control register */
360363 #define TRGMII_TCK_CTRL 0x10340
361364 #define TXCTL_DMWTLAT(x) ((x << 16) & GENMASK(18, 16))
@@ -363,6 +366,11 @@ · 1 unmodified line
363366 #define TCK_CTRL_RGMII_1000 TXCTL_DMWTLAT(2)
364367 #define TCK_CTRL_RGMII_10_100 (TXC_INV | TXCTL_DMWTLAT(2))
365368
369+/* TRGMII TX Drive Strength */
370+#define TRGMII_TD_ODT(i) (0x10354 + 8 * (i))
371+#define TD_DM_DRVP(x) ((x) & 0xf)
372+#define TD_DM_DRVN(x) (((x) & 0xf) << 4)
373+
366374 /* TRGMII Interface mode register */
367375 #define INTF_MODE 0x10390
368376 #define TRGMII_INTF_DIS BIT(0)
drivers/net/ethernet/mellanox/mlx4/en_tx.c+13−1
@@ -43,6 +43,7 @@ · 42 unmodified lines
4343 #include <linux/ip.h>
4444 #include <linux/ipv6.h>
4545 #include <linux/moduleparam.h>
46+#include <linux/indirect_call_wrapper.h>
4647
4748 #include "mlx4_en.h"
4849
@@ -261,6 +262,10 @@ static void mlx4_en_stamp_wqe(struct mlx4_en_priv *priv, · 212 unmodified lines
261262 }
262263 }
263264
265+INDIRECT_CALLABLE_DECLARE(u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv,
266+ struct mlx4_en_tx_ring *ring,
267+ int index, u64 timestamp,
268+ int napi_mode));
264269
265270 u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv,
266271 struct mlx4_en_tx_ring *ring,
@@ -329,6 +334,11 @@ u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv, · 62 unmodified lines
329334 return tx_info->nr_txbb;
330335 }
331336
337+INDIRECT_CALLABLE_DECLARE(u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv,
338+ struct mlx4_en_tx_ring *ring,
339+ int index, u64 timestamp,
340+ int napi_mode));
341+
332342 u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv,
333343 struct mlx4_en_tx_ring *ring,
334344 int index, u64 timestamp,
@@ -449,7 +459,9 @@ bool mlx4_en_process_tx_cq(struct net_device *dev, · 114 unmodified lines
449459 timestamp = mlx4_en_get_cqe_ts(cqe);
450460
451461 /* free next descriptor */
452− last_nr_txbb = ring->free_tx_desc(
462+ last_nr_txbb = INDIRECT_CALL_2(ring->free_tx_desc,
463+ mlx4_en_free_tx_desc,
464+ mlx4_en_recycle_tx_desc,
453465 priv, ring, ring_index,
454466 timestamp, napi_budget);
455467
drivers/net/ethernet/mellanox/mlx5/core/Kconfig+4−4
@@ -7,10 +7,10 @@ config MLX5_CORE · 6 unmodified lines
77 tristate "Mellanox 5th generation network adapters (ConnectX series) core driver"
88 depends on PCI
99 select NET_DEVLINK
10− imply PTP_1588_CLOCK
11− imply VXLAN
12− imply MLXFW
13− imply PCI_HYPERV_INTERFACE
10+ depends on VXLAN || !VXLAN
11+ depends on MLXFW || !MLXFW
12+ depends on PTP_1588_CLOCK || !PTP_1588_CLOCK
13+ depends on PCI_HYPERV_INTERFACE || !PCI_HYPERV_INTERFACE
1414 default n
1515 ---help---
1616 Core driver for low level functionality of the ConnectX-4 and
drivers/net/ethernet/mellanox/mlx5/core/devlink.c+4−1
@@ -23,7 +23,10 @@ static int mlx5_devlink_flash_update(struct devlink *devlink, · 22 unmodified lines
2323 if (err)
2424 return err;
2525
26− return mlx5_firmware_flash(dev, fw, extack);
26+ err = mlx5_firmware_flash(dev, fw, extack);
27+ release_firmware(fw);
28+
29+ return err;
2730 }
2831
2932 static u8 mlx5_fw_ver_major(u32 version)
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c+3−3
@@ -935,7 +935,7 @@ struct mlx5_fw_tracer *mlx5_fw_tracer_create(struct mlx5_core_dev *dev) · 934 unmodified lines
935935 return NULL;
936936 }
937937
938− tracer = kzalloc(sizeof(*tracer), GFP_KERNEL);
938+ tracer = kvzalloc(sizeof(*tracer), GFP_KERNEL);
939939 if (!tracer)
940940 return ERR_PTR(-ENOMEM);
941941
@@ -982,7 +982,7 @@ destroy_workqueue: · 40 unmodified lines
982982 tracer->dev = NULL;
983983 destroy_workqueue(tracer->work_queue);
984984 free_tracer:
985− kfree(tracer);
985+ kvfree(tracer);
986986 return ERR_PTR(err);
987987 }
988988
@@ -1061,7 +1061,7 @@ void mlx5_fw_tracer_destroy(struct mlx5_fw_tracer *tracer) · 72 unmodified lines
10611061 mlx5_fw_tracer_destroy_log_buf(tracer);
10621062 flush_workqueue(tracer->work_queue);
10631063 destroy_workqueue(tracer->work_queue);
1064− kfree(tracer);
1064+ kvfree(tracer);
10651065 }
10661066
10671067 static int fw_tracer_event(struct notifier_block *nb, unsigned long action, void *data)
drivers/net/ethernet/mellanox/mlx5/core/en.h+2−1
@@ -367,6 +367,7 @@ enum { · 366 unmodified lines
367367 MLX5E_SQ_STATE_AM,
368368 MLX5E_SQ_STATE_TLS,
369369 MLX5E_SQ_STATE_VLAN_NEED_L2_INLINE,
370+ MLX5E_SQ_STATE_PENDING_XSK_TX,
370371 };
371372
372373 struct mlx5e_sq_wqe_info {
@@ -960,7 +961,7 @@ void mlx5e_page_release_dynamic(struct mlx5e_rq *rq, · 587 unmodified lines
960961 void mlx5e_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe);
961962 void mlx5e_handle_rx_cqe_mpwrq(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe);
962963 bool mlx5e_post_rx_wqes(struct mlx5e_rq *rq);
963−void mlx5e_poll_ico_cq(struct mlx5e_cq *cq);
964+int mlx5e_poll_ico_cq(struct mlx5e_cq *cq);
964965 bool mlx5e_post_rx_mpwqes(struct mlx5e_rq *rq);
965966 void mlx5e_dealloc_rx_wqe(struct mlx5e_rq *rq, u16 ix);
966967 void mlx5e_dealloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix);
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c+19−23
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <net/flow_offload.h>
1313 #include <net/netfilter/nf_flow_table.h>
1414 #include <linux/workqueue.h>
15+#include <linux/xarray.h>
1516
1617 #include "esw/chains.h"
1718 #include "en/tc_ct.h"
@@ -35,7 +36,7 @@ struct mlx5_tc_ct_priv { · 17 unmodified lines
3536 struct mlx5_eswitch *esw;
3637 const struct net_device *netdev;
3738 struct idr fte_ids;
38− struct idr tuple_ids;
39+ struct xarray tuple_ids;
3940 struct rhashtable zone_ht;
4041 struct mlx5_flow_table *ct;
4142 struct mlx5_flow_table *ct_nat;
@@ -67,11 +68,9 @@ struct mlx5_ct_ft { · 25 unmodified lines
6768 struct nf_flowtable *nf_ft;
6869 struct mlx5_tc_ct_priv *ct_priv;
6970 struct rhashtable ct_entries_ht;
70− struct list_head ct_entries_list;
7171 };
7272
7373 struct mlx5_ct_entry {
74− struct list_head list;
7574 u16 zone;
7675 struct rhash_head node;
7776 struct flow_rule *flow_rule;
@@ -240,7 +239,7 @@ mlx5_tc_ct_entry_del_rule(struct mlx5_tc_ct_priv *ct_priv, · 162 unmodified lines
240239
241240 mlx5_eswitch_del_offloaded_rule(esw, zone_rule->rule, attr);
242241 mlx5_modify_header_dealloc(esw->dev, attr->modify_hdr);
243− idr_remove(&ct_priv->tuple_ids, zone_rule->tupleid);
242+ xa_erase(&ct_priv->tuple_ids, zone_rule->tupleid);
244243 }
245244
246245 static void
@@ -485,7 +484,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv, · 238 unmodified lines
485484 struct mlx5_esw_flow_attr *attr = &zone_rule->attr;
486485 struct mlx5_eswitch *esw = ct_priv->esw;
487486 struct mlx5_flow_spec *spec = NULL;
488− u32 tupleid = 1;
487+ u32 tupleid;
489488 int err;
490489
491490 zone_rule->nat = nat;
@@ -495,12 +494,12 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv, · 3 unmodified lines
495494 return -ENOMEM;
496495
497496 /* Get tuple unique id */
498− err = idr_alloc_u32(&ct_priv->tuple_ids, zone_rule, &tupleid,
499− TUPLE_ID_MAX, GFP_KERNEL);
497+ err = xa_alloc(&ct_priv->tuple_ids, &tupleid, zone_rule,
498+ XA_LIMIT(1, TUPLE_ID_MAX), GFP_KERNEL);
500499 if (err) {
501500 netdev_warn(ct_priv->netdev,
502501 "Failed to allocate tuple id, err: %d\n", err);
503− goto err_idr_alloc;
502+ goto err_xa_alloc;
504503 }
505504 zone_rule->tupleid = tupleid;
506505
@@ -541,8 +540,8 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv, · 34 unmodified lines
541540 err_rule:
542541 mlx5_modify_header_dealloc(esw->dev, attr->modify_hdr);
543542 err_mod_hdr:
544− idr_remove(&ct_priv->tuple_ids, zone_rule->tupleid);
545−err_idr_alloc:
543+ xa_erase(&ct_priv->tuple_ids, zone_rule->tupleid);
544+err_xa_alloc:
546545 kfree(spec);
547546 return err;
548547 }
@@ -617,8 +616,6 @@ mlx5_tc_ct_block_flow_offload_add(struct mlx5_ct_ft *ft, · 68 unmodified lines
617616 if (err)
618617 goto err_insert;
619618
620− list_add(&entry->list, &ft->ct_entries_list);
621−
622619 return 0;
623620
624621 err_insert:
@@ -646,7 +643,6 @@ mlx5_tc_ct_block_flow_offload_del(struct mlx5_ct_ft *ft, · 21 unmodified lines
646643 WARN_ON(rhashtable_remove_fast(&ft->ct_entries_ht,
647644 &entry->node,
648645 cts_ht_params));
649− list_del(&entry->list);
650646 kfree(entry);
651647
652648 return 0;
@@ -818,7 +814,6 @@ mlx5_tc_ct_add_ft_cb(struct mlx5_tc_ct_priv *ct_priv, u16 zone, · 165 unmodified lines
818814 ft->zone = zone;
819815 ft->nf_ft = nf_ft;
820816 ft->ct_priv = ct_priv;
821− INIT_LIST_HEAD(&ft->ct_entries_list);
822817 refcount_set(&ft->refcount, 1);
823818
824819 err = rhashtable_init(&ft->ct_entries_ht, &cts_ht_params);
@@ -847,12 +842,12 @@ err_init: · 22 unmodified lines
847842 }
848843
849844 static void
850−mlx5_tc_ct_flush_ft(struct mlx5_tc_ct_priv *ct_priv, struct mlx5_ct_ft *ft)
845+mlx5_tc_ct_flush_ft_entry(void *ptr, void *arg)
851846 {
852− struct mlx5_ct_entry *entry;
847+ struct mlx5_tc_ct_priv *ct_priv = arg;
848+ struct mlx5_ct_entry *entry = ptr;
853849
854− list_for_each_entry(entry, &ft->ct_entries_list, list)
855− mlx5_tc_ct_entry_del_rules(ft->ct_priv, entry);
850+ mlx5_tc_ct_entry_del_rules(ct_priv, entry);
856851 }
857852
858853 static void
@@ -863,9 +858,10 @@ mlx5_tc_ct_del_ft_cb(struct mlx5_tc_ct_priv *ct_priv, struct mlx5_ct_ft *ft) · 4 unmodified lines
863858
864859 nf_flow_table_offload_del_cb(ft->nf_ft,
865860 mlx5_tc_ct_block_flow_offload, ft);
866− mlx5_tc_ct_flush_ft(ct_priv, ft);
867861 rhashtable_remove_fast(&ct_priv->zone_ht, &ft->node, zone_params);
868− rhashtable_destroy(&ft->ct_entries_ht);
862+ rhashtable_free_and_destroy(&ft->ct_entries_ht,
863+ mlx5_tc_ct_flush_ft_entry,
864+ ct_priv);
869865 kfree(ft);
870866 }
871867
@@ -1304,7 +1300,7 @@ mlx5_tc_ct_init(struct mlx5_rep_uplink_priv *uplink_priv) · 432 unmodified lines
13041300 }
13051301
13061302 idr_init(&ct_priv->fte_ids);
1307− idr_init(&ct_priv->tuple_ids);
1303+ xa_init_flags(&ct_priv->tuple_ids, XA_FLAGS_ALLOC1);
13081304 mutex_init(&ct_priv->control_lock);
13091305 rhashtable_init(&ct_priv->zone_ht, &zone_params);
13101306
@@ -1339,7 +1335,7 @@ mlx5_tc_ct_clean(struct mlx5_rep_uplink_priv *uplink_priv) · 28 unmodified lines
13391335
13401336 rhashtable_destroy(&ct_priv->zone_ht);
13411337 mutex_destroy(&ct_priv->control_lock);
1342− idr_destroy(&ct_priv->tuple_ids);
1338+ xa_destroy(&ct_priv->tuple_ids);
13431339 idr_destroy(&ct_priv->fte_ids);
13441340 kfree(ct_priv);
13451341
@@ -1357,7 +1353,7 @@ mlx5e_tc_ct_restore_flow(struct mlx5_rep_uplink_priv *uplink_priv, · 11 unmodified lines
13571353 if (!ct_priv || !tupleid)
13581354 return true;
13591355
1360− zone_rule = idr_find(&ct_priv->tuple_ids, tupleid);
1356+ zone_rule = xa_load(&ct_priv->tuple_ids, tupleid);
13611357 if (!zone_rule)
13621358 return false;
13631359
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c+3−0
@@ -33,6 +33,9 @@ int mlx5e_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags) · 32 unmodified lines
3333 if (unlikely(!test_bit(MLX5E_SQ_STATE_ENABLED, &c->xskicosq.state)))
3434 return 0;
3535
36+ if (test_and_set_bit(MLX5E_SQ_STATE_PENDING_XSK_TX, &c->xskicosq.state))
37+ return 0;
38+
3639 spin_lock(&c->xskicosq_lock);
3740 mlx5e_trigger_irq(&c->xskicosq);
3841 spin_unlock(&c->xskicosq_lock);
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+7−2
@@ -3583,7 +3583,12 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) · 3582 unmodified lines
35833583 struct mlx5e_vport_stats *vstats = &priv->stats.vport;
35843584 struct mlx5e_pport_stats *pstats = &priv->stats.pport;
35853585
3586− if (!mlx5e_monitor_counter_supported(priv)) {
3586+ /* In switchdev mode, monitor counters doesn't monitor
3587+ * rx/tx stats of 802_3. The update stats mechanism
3588+ * should keep the 802_3 layout counters updated
3589+ */
3590+ if (!mlx5e_monitor_counter_supported(priv) ||
3591+ mlx5e_is_uplink_rep(priv)) {
35873592 /* update HW stats in background for next time */
35883593 mlx5e_queue_update_stats(priv);
35893594 }
@@ -5526,8 +5531,8 @@ static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv) · 1936 unmodified lines
55265531 #ifdef CONFIG_MLX5_CORE_EN_DCB
55275532 mlx5e_dcbnl_delete_app(priv);
55285533 #endif
5529− mlx5e_devlink_port_unregister(priv);
55305534 unregister_netdev(priv->netdev);
5535+ mlx5e_devlink_port_unregister(priv);
55315536 mlx5e_detach(mdev, vpriv);
55325537 mlx5e_destroy_netdev(priv);
55335538 }
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c+5−4
@@ -2050,29 +2050,30 @@ static int register_devlink_port(struct mlx5_core_dev *dev, · 2049 unmodified lines
20502050 struct mlx5_eswitch_rep *rep = rpriv->rep;
20512051 struct netdev_phys_item_id ppid = {};
20522052 unsigned int dl_port_index = 0;
2053+ u16 pfnum;
20532054
20542055 if (!is_devlink_port_supported(dev, rpriv))
20552056 return 0;
20562057
20572058 mlx5e_rep_get_port_parent_id(rpriv->netdev, &ppid);
2059+ pfnum = PCI_FUNC(dev->pdev->devfn);
20582060
20592061 if (rep->vport == MLX5_VPORT_UPLINK) {
20602062 devlink_port_attrs_set(&rpriv->dl_port,
20612063 DEVLINK_PORT_FLAVOUR_PHYSICAL,
2062− PCI_FUNC(dev->pdev->devfn), false, 0,
2064+ pfnum, false, 0,
20632065 &ppid.id[0], ppid.id_len);
20642066 dl_port_index = vport_to_devlink_port_index(dev, rep->vport);
20652067 } else if (rep->vport == MLX5_VPORT_PF) {
20662068 devlink_port_attrs_pci_pf_set(&rpriv->dl_port,
20672069 &ppid.id[0], ppid.id_len,
2068− dev->pdev->devfn);
2070+ pfnum);
20692071 dl_port_index = rep->vport;
20702072 } else if (mlx5_eswitch_is_vf_vport(dev->priv.eswitch,
20712073 rpriv->rep->vport)) {
20722074 devlink_port_attrs_pci_vf_set(&rpriv->dl_port,
20732075 &ppid.id[0], ppid.id_len,
2074− dev->pdev->devfn,
2075− rep->vport - 1);
2076+ pfnum, rep->vport - 1);
20762077 dl_port_index = vport_to_devlink_port_index(dev, rep->vport);
20772078 }
20782079
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+5−3
@@ -589,7 +589,7 @@ bool mlx5e_post_rx_wqes(struct mlx5e_rq *rq) · 588 unmodified lines
589589 return !!err;
590590 }
591591
592−void mlx5e_poll_ico_cq(struct mlx5e_cq *cq)
592+int mlx5e_poll_ico_cq(struct mlx5e_cq *cq)
593593 {
594594 struct mlx5e_icosq *sq = container_of(cq, struct mlx5e_icosq, cq);
595595 struct mlx5_cqe64 *cqe;
@@ -597,11 +597,11 @@ void mlx5e_poll_ico_cq(struct mlx5e_cq *cq) · 1 unmodified line
597597 int i;
598598
599599 if (unlikely(!test_bit(MLX5E_SQ_STATE_ENABLED, &sq->state)))
600− return;
600+ return 0;
601601
602602 cqe = mlx5_cqwq_get_cqe(&cq->wq);
603603 if (likely(!cqe))
604− return;
604+ return 0;
605605
606606 /* sq->cc must be updated only after mlx5_cqwq_update_db_record(),
607607 * otherwise a cq overrun may occur
@@ -650,6 +650,8 @@ void mlx5e_poll_ico_cq(struct mlx5e_cq *cq) · 42 unmodified lines
650650 sq->cc = sqcc;
651651
652652 mlx5_cqwq_update_db_record(&cq->wq);
653+
654+ return i;
653655 }
654656
655657 bool mlx5e_post_rx_mpwqes(struct mlx5e_rq *rq)
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+5−3
@@ -1343,7 +1343,8 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv, · 1342 unmodified lines
13431343 if (err)
13441344 return err;
13451345
1346− if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR) {
1346+ if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR &&
1347+ !(attr->ct_attr.ct_action & TCA_CT_ACT_CLEAR)) {
13471348 err = mlx5e_attach_mod_hdr(priv, flow, parse_attr);
13481349 dealloc_mod_hdr_actions(&parse_attr->mod_hdr_acts);
13491350 if (err)
@@ -3558,12 +3559,13 @@ static int add_vlan_pop_action(struct mlx5e_priv *priv, · 2208 unmodified lines
35583559 struct mlx5_esw_flow_attr *attr,
35593560 u32 *action)
35603561 {
3561− int nest_level = attr->parse_attr->filter_dev->lower_level;
35623562 struct flow_action_entry vlan_act = {
35633563 .id = FLOW_ACTION_VLAN_POP,
35643564 };
3565− int err = 0;
3565+ int nest_level, err = 0;
35663566
3567+ nest_level = attr->parse_attr->filter_dev->lower_level -
3568+ priv->netdev->lower_level;
35673569 while (nest_level--) {
35683570 err = parse_tc_vlan_action(priv, &vlan_act, attr, action);
35693571 if (err)
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c+5−1
@@ -152,7 +152,11 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget) · 151 unmodified lines
152152 mlx5e_post_rx_wqes,
153153 rq);
154154 if (xsk_open) {
155− mlx5e_poll_ico_cq(&c->xskicosq.cq);
155+ if (mlx5e_poll_ico_cq(&c->xskicosq.cq))
156+ /* Don't clear the flag if nothing was polled to prevent
157+ * queueing more WQEs and overflowing XSKICOSQ.
158+ */
159+ clear_bit(MLX5E_SQ_STATE_PENDING_XSK_TX, &c->xskicosq.state);
156160 busy |= mlx5e_poll_xdpsq_cq(&xsksq->cq);
157161 busy_xsk |= mlx5e_napi_xsk_post(xsksq, xskrq);
158162 }
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h+0−1
@@ -403,7 +403,6 @@ enum { · 402 unmodified lines
403403 MLX5_ESW_ATTR_FLAG_VLAN_HANDLED = BIT(0),
404404 MLX5_ESW_ATTR_FLAG_SLOW_PATH = BIT(1),
405405 MLX5_ESW_ATTR_FLAG_NO_IN_PORT = BIT(2),
406− MLX5_ESW_ATTR_FLAG_HAIRPIN = BIT(3),
407406 };
408407
409408 struct mlx5_esw_flow_attr {
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c+3−9
@@ -300,7 +300,6 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw, · 299 unmodified lines
300300 bool split = !!(attr->split_count);
301301 struct mlx5_flow_handle *rule;
302302 struct mlx5_flow_table *fdb;
303− bool hairpin = false;
304303 int j, i = 0;
305304
306305 if (esw->mode != MLX5_ESWITCH_OFFLOADS)
@@ -398,21 +397,16 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw, · 91 unmodified lines
398397 goto err_esw_get;
399398 }
400399
401− if (mlx5_eswitch_termtbl_required(esw, attr, &flow_act, spec)) {
400+ if (mlx5_eswitch_termtbl_required(esw, attr, &flow_act, spec))
402401 rule = mlx5_eswitch_add_termtbl_rule(esw, fdb, spec, attr,
403402 &flow_act, dest, i);
404− hairpin = true;
405− } else {
403+ else
406404 rule = mlx5_add_flow_rules(fdb, spec, &flow_act, dest, i);
407− }
408405 if (IS_ERR(rule))
409406 goto err_add_rule;
410407 else
411408 atomic64_inc(&esw->offloads.num_flows);
412409
413− if (hairpin)
414− attr->flags |= MLX5_ESW_ATTR_FLAG_HAIRPIN;
415−
416410 return rule;
417411
418412 err_add_rule:
@@ -501,7 +495,7 @@ __mlx5_eswitch_del_rule(struct mlx5_eswitch *esw, · 82 unmodified lines
501495
502496 mlx5_del_flow_rules(rule);
503497
504− if (attr->flags & MLX5_ESW_ATTR_FLAG_HAIRPIN) {
498+ if (!(attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH)) {
505499 /* unref the term table */
506500 for (i = 0; i < MLX5_MAX_FLOW_FWD_VPORTS; i++) {
507501 if (attr->dests[i].termtbl)
drivers/net/ethernet/mellanox/mlx5/core/health.c+1−1
@@ -243,7 +243,7 @@ recover_from_sw_reset: · 242 unmodified lines
243243 if (mlx5_get_nic_state(dev) == MLX5_NIC_IFC_DISABLED)
244244 break;
245245
246− cond_resched();
246+ msleep(20);
247247 } while (!time_after(jiffies, end));
248248
249249 if (mlx5_get_nic_state(dev) != MLX5_NIC_IFC_DISABLED) {
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c+2−2
@@ -380,7 +380,7 @@ struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa) · 379 unmodified lines
380380
381381 block = kzalloc(sizeof(*block), GFP_KERNEL);
382382 if (!block)
383− return NULL;
383+ return ERR_PTR(-ENOMEM);
384384 INIT_LIST_HEAD(&block->resource_list);
385385 block->afa = mlxsw_afa;
386386
@@ -408,7 +408,7 @@ err_second_set_create: · 21 unmodified lines
408408 mlxsw_afa_set_destroy(block->first_set);
409409 err_first_set_create:
410410 kfree(block);
411− return NULL;
411+ return ERR_PTR(-ENOMEM);
412412 }
413413 EXPORT_SYMBOL(mlxsw_afa_block_create);
414414
drivers/net/ethernet/mellanox/mlxsw/spectrum2_acl_tcam.c+2−2
@@ -88,8 +88,8 @@ static int mlxsw_sp2_acl_tcam_init(struct mlxsw_sp *mlxsw_sp, void *priv, · 87 unmodified lines
8888 * to be written using PEFA register to all indexes for all regions.
8989 */
9090 afa_block = mlxsw_afa_block_create(mlxsw_sp->afa);
91− if (!afa_block) {
92− err = -ENOMEM;
91+ if (IS_ERR(afa_block)) {
92+ err = PTR_ERR(afa_block);
9393 goto err_afa_block;
9494 }
9595 err = mlxsw_afa_block_continue(afa_block);
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c+1−1
@@ -464,7 +464,7 @@ mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl, · 463 unmodified lines
464464
465465 rulei = kzalloc(sizeof(*rulei), GFP_KERNEL);
466466 if (!rulei)
467− return NULL;
467+ return ERR_PTR(-ENOMEM);
468468
469469 if (afa_block) {
470470 rulei->act_block = afa_block;
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c+2−2
@@ -199,8 +199,8 @@ mlxsw_sp_mr_tcam_afa_block_create(struct mlxsw_sp *mlxsw_sp, · 198 unmodified lines
199199 int err;
200200
201201 afa_block = mlxsw_afa_block_create(mlxsw_sp->afa);
202− if (!afa_block)
203− return ERR_PTR(-ENOMEM);
202+ if (IS_ERR(afa_block))
203+ return afa_block;
204204
205205 err = mlxsw_afa_block_append_allocated_counter(afa_block,
206206 counter_index);
drivers/net/ethernet/mscc/ocelot.c+43−41
@@ -183,44 +183,47 @@ static void ocelot_vlan_mode(struct ocelot *ocelot, int port, · 182 unmodified lines
183183 ocelot_write(ocelot, val, ANA_VLANMASK);
184184 }
185185
186−void ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
187− bool vlan_aware)
186+static int ocelot_port_set_native_vlan(struct ocelot *ocelot, int port,
187+ u16 vid)
188188 {
189189 struct ocelot_port *ocelot_port = ocelot->ports[port];
190− u32 val;
190+ u32 val = 0;
191191
192− if (vlan_aware)
193− val = ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
194− ANA_PORT_VLAN_CFG_VLAN_POP_CNT(1);
195− else
196− val = 0;
197− ocelot_rmw_gix(ocelot, val,
198− ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
199− ANA_PORT_VLAN_CFG_VLAN_POP_CNT_M,
200− ANA_PORT_VLAN_CFG, port);
192+ if (ocelot_port->vid != vid) {
193+ /* Always permit deleting the native VLAN (vid = 0) */
194+ if (ocelot_port->vid && vid) {
195+ dev_err(ocelot->dev,
196+ "Port already has a native VLAN: %d\n",
197+ ocelot_port->vid);
198+ return -EBUSY;
199+ }
200+ ocelot_port->vid = vid;
201+ }
202+
203+ ocelot_rmw_gix(ocelot, REW_PORT_VLAN_CFG_PORT_VID(vid),
204+ REW_PORT_VLAN_CFG_PORT_VID_M,
205+ REW_PORT_VLAN_CFG, port);
201206
202− if (vlan_aware && !ocelot_port->vid)
207+ if (ocelot_port->vlan_aware && !ocelot_port->vid)
203208 /* If port is vlan-aware and tagged, drop untagged and priority
204209 * tagged frames.
205210 */
206211 val = ANA_PORT_DROP_CFG_DROP_UNTAGGED_ENA |
207212 ANA_PORT_DROP_CFG_DROP_PRIO_S_TAGGED_ENA |
208213 ANA_PORT_DROP_CFG_DROP_PRIO_C_TAGGED_ENA;
209− else
210− val = 0;
211214 ocelot_rmw_gix(ocelot, val,
212215 ANA_PORT_DROP_CFG_DROP_UNTAGGED_ENA |
213216 ANA_PORT_DROP_CFG_DROP_PRIO_S_TAGGED_ENA |
214217 ANA_PORT_DROP_CFG_DROP_PRIO_C_TAGGED_ENA,
215218 ANA_PORT_DROP_CFG, port);
216219
217− if (vlan_aware) {
220+ if (ocelot_port->vlan_aware) {
218221 if (ocelot_port->vid)
219222 /* Tag all frames except when VID == DEFAULT_VLAN */
220− val |= REW_TAG_CFG_TAG_CFG(1);
223+ val = REW_TAG_CFG_TAG_CFG(1);
221224 else
222225 /* Tag all frames */
223− val |= REW_TAG_CFG_TAG_CFG(3);
226+ val = REW_TAG_CFG_TAG_CFG(3);
224227 } else {
225228 /* Port tagging disabled. */
226229 val = REW_TAG_CFG_TAG_CFG(0);
@@ -228,31 +231,31 @@ void ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, · 1 unmodified line
228231 ocelot_rmw_gix(ocelot, val,
229232 REW_TAG_CFG_TAG_CFG_M,
230233 REW_TAG_CFG, port);
234+
235+ return 0;
231236 }
232−EXPORT_SYMBOL(ocelot_port_vlan_filtering);
233237
234−static int ocelot_port_set_native_vlan(struct ocelot *ocelot, int port,
235− u16 vid)
238+void ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
239+ bool vlan_aware)
236240 {
237241 struct ocelot_port *ocelot_port = ocelot->ports[port];
242+ u32 val;
238243
239− if (ocelot_port->vid != vid) {
240− /* Always permit deleting the native VLAN (vid = 0) */
241− if (ocelot_port->vid && vid) {
242− dev_err(ocelot->dev,
243− "Port already has a native VLAN: %d\n",
244− ocelot_port->vid);
245− return -EBUSY;
246− }
247− ocelot_port->vid = vid;
248− }
244+ ocelot_port->vlan_aware = vlan_aware;
249245
250− ocelot_rmw_gix(ocelot, REW_PORT_VLAN_CFG_PORT_VID(vid),
251− REW_PORT_VLAN_CFG_PORT_VID_M,
252− REW_PORT_VLAN_CFG, port);
246+ if (vlan_aware)
247+ val = ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
248+ ANA_PORT_VLAN_CFG_VLAN_POP_CNT(1);
249+ else
250+ val = 0;
251+ ocelot_rmw_gix(ocelot, val,
252+ ANA_PORT_VLAN_CFG_VLAN_AWARE_ENA |
253+ ANA_PORT_VLAN_CFG_VLAN_POP_CNT_M,
254+ ANA_PORT_VLAN_CFG, port);
253255
254− return 0;
256+ ocelot_port_set_native_vlan(ocelot, port, ocelot_port->vid);
255257 }
258+EXPORT_SYMBOL(ocelot_port_vlan_filtering);
256259
257260 /* Default vlan to clasify for untagged frames (may be zero) */
258261 static void ocelot_port_set_pvid(struct ocelot *ocelot, int port, u16 pvid)
@@ -873,12 +876,12 @@ static void ocelot_get_stats64(struct net_device *dev, · 614 unmodified lines
873876 }
874877
875878 int ocelot_fdb_add(struct ocelot *ocelot, int port,
876− const unsigned char *addr, u16 vid, bool vlan_aware)
879+ const unsigned char *addr, u16 vid)
877880 {
878881 struct ocelot_port *ocelot_port = ocelot->ports[port];
879882
880883 if (!vid) {
881− if (!vlan_aware)
884+ if (!ocelot_port->vlan_aware)
882885 /* If the bridge is not VLAN aware and no VID was
883886 * provided, set it to pvid to ensure the MAC entry
884887 * matches incoming untagged packets
@@ -905,7 +908,7 @@ static int ocelot_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], · 20 unmodified lines
905908 struct ocelot *ocelot = priv->port.ocelot;
906909 int port = priv->chip_port;
907910
908− return ocelot_fdb_add(ocelot, port, addr, vid, priv->vlan_aware);
911+ return ocelot_fdb_add(ocelot, port, addr, vid);
909912 }
910913
911914 int ocelot_fdb_del(struct ocelot *ocelot, int port,
@@ -1496,8 +1499,8 @@ static int ocelot_port_attr_set(struct net_device *dev, · 584 unmodified lines
14961499 ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
14971500 break;
14981501 case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
1499− priv->vlan_aware = attr->u.vlan_filtering;
1500− ocelot_port_vlan_filtering(ocelot, port, priv->vlan_aware);
1502+ ocelot_port_vlan_filtering(ocelot, port,
1503+ attr->u.vlan_filtering);
15011504 break;
15021505 case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
15031506 ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
@@ -1868,7 +1871,6 @@ static int ocelot_netdevice_port_event(struct net_device *dev, · 364 unmodified lines
18681871 } else {
18691872 err = ocelot_port_bridge_leave(ocelot, port,
18701873 info->upper_dev);
1871− priv->vlan_aware = false;
18721874 }
18731875 }
18741876 if (netif_is_lag_master(info->upper_dev)) {
drivers/net/ethernet/mscc/ocelot.h+0−2
@@ -56,8 +56,6 @@ struct ocelot_port_private { · 55 unmodified lines
5656 struct phy_device *phy;
5757 u8 chip_port;
5858
59− u8 vlan_aware;
60−
6159 struct phy *serdes;
6260
6361 struct ocelot_port_tc tc;
drivers/net/ethernet/neterion/s2io.c+1−1
@@ -5155,7 +5155,7 @@ static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr) · 5154 unmodified lines
51555155 /* read mac entries from CAM */
51565156 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset)
51575157 {
5158− u64 tmp64 = 0xffffffffffff0000ULL, val64;
5158+ u64 tmp64, val64;
51595159 struct XENA_dev_config __iomem *bar0 = sp->bar0;
51605160
51615161 /* read mac addr */
drivers/net/ethernet/pensando/ionic/ionic_lif.c+27−17
@@ -2127,6 +2127,8 @@ static void ionic_lif_handle_fw_up(struct ionic_lif *lif) · 2126 unmodified lines
21272127 if (lif->registered)
21282128 ionic_lif_set_netdev_info(lif);
21292129
2130+ ionic_rx_filter_replay(lif);
2131+
21302132 if (netif_running(lif->netdev)) {
21312133 err = ionic_txrx_alloc(lif);
21322134 if (err)
@@ -2206,9 +2208,9 @@ static void ionic_lif_deinit(struct ionic_lif *lif) · 73 unmodified lines
22062208 if (!test_bit(IONIC_LIF_F_FW_RESET, lif->state)) {
22072209 cancel_work_sync(&lif->deferred.work);
22082210 cancel_work_sync(&lif->tx_timeout_work);
2211+ ionic_rx_filters_deinit(lif);
22092212 }
22102213
2211− ionic_rx_filters_deinit(lif);
22122214 if (lif->netdev->features & NETIF_F_RXHASH)
22132215 ionic_lif_rss_deinit(lif);
22142216
@@ -2339,24 +2341,30 @@ static int ionic_station_set(struct ionic_lif *lif) · 124 unmodified lines
23392341 err = ionic_adminq_post_wait(lif, &ctx);
23402342 if (err)
23412343 return err;
2342−
2344+ netdev_dbg(lif->netdev, "found initial MAC addr %pM\n",
2345+ ctx.comp.lif_getattr.mac);
23432346 if (is_zero_ether_addr(ctx.comp.lif_getattr.mac))
23442347 return 0;
23452348
2346− memcpy(addr.sa_data, ctx.comp.lif_getattr.mac, netdev->addr_len);
2347− addr.sa_family = AF_INET;
2348− err = eth_prepare_mac_addr_change(netdev, &addr);
2349− if (err) {
2350− netdev_warn(lif->netdev, "ignoring bad MAC addr from NIC %pM - err %d\n",
2351− addr.sa_data, err);
2352− return 0;
2353− }
2349+ if (!ether_addr_equal(ctx.comp.lif_getattr.mac, netdev->dev_addr)) {
2350+ memcpy(addr.sa_data, ctx.comp.lif_getattr.mac, netdev->addr_len);
2351+ addr.sa_family = AF_INET;
2352+ err = eth_prepare_mac_addr_change(netdev, &addr);
2353+ if (err) {
2354+ netdev_warn(lif->netdev, "ignoring bad MAC addr from NIC %pM - err %d\n",
2355+ addr.sa_data, err);
2356+ return 0;
2357+ }
23542358
2355− netdev_dbg(lif->netdev, "deleting station MAC addr %pM\n",
2356− netdev->dev_addr);
2357− ionic_lif_addr(lif, netdev->dev_addr, false);
2359+ if (!is_zero_ether_addr(netdev->dev_addr)) {
2360+ netdev_dbg(lif->netdev, "deleting station MAC addr %pM\n",
2361+ netdev->dev_addr);
2362+ ionic_lif_addr(lif, netdev->dev_addr, false);
2363+ }
2364+
2365+ eth_commit_mac_addr_change(netdev, &addr);
2366+ }
23582367
2359− eth_commit_mac_addr_change(netdev, &addr);
23602368 netdev_dbg(lif->netdev, "adding station MAC addr %pM\n",
23612369 netdev->dev_addr);
23622370 ionic_lif_addr(lif, netdev->dev_addr, true);
@@ -2421,9 +2429,11 @@ static int ionic_lif_init(struct ionic_lif *lif) · 58 unmodified lines
24212429 if (err)
24222430 goto err_out_notifyq_deinit;
24232431
2424− err = ionic_rx_filters_init(lif);
2425− if (err)
2426− goto err_out_notifyq_deinit;
2432+ if (!test_bit(IONIC_LIF_F_FW_RESET, lif->state)) {
2433+ err = ionic_rx_filters_init(lif);
2434+ if (err)
2435+ goto err_out_notifyq_deinit;
2436+ }
24272437
24282438 err = ionic_station_set(lif);
24292439 if (err)
drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c+43−10
@@ -2,6 +2,7 @@ · 1 unmodified line
22 /* Copyright(c) 2017 - 2019 Pensando Systems, Inc */
33
44 #include <linux/netdevice.h>
5+#include <linux/dynamic_debug.h>
56 #include <linux/etherdevice.h>
67
78 #include "ionic.h"
@@ -17,17 +18,49 @@ void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f) · 9 unmodified lines
1718 devm_kfree(dev, f);
1819 }
1920
20−int ionic_rx_filter_del(struct ionic_lif *lif, struct ionic_rx_filter *f)
21+void ionic_rx_filter_replay(struct ionic_lif *lif)
2122 {
22− struct ionic_admin_ctx ctx = {
23− .work = COMPLETION_INITIALIZER_ONSTACK(ctx.work),
24− .cmd.rx_filter_del = {
25− .opcode = IONIC_CMD_RX_FILTER_DEL,
26− .filter_id = cpu_to_le32(f->filter_id),
27− },
28− };
29−
30− return ionic_adminq_post_wait(lif, &ctx);
23+ struct ionic_rx_filter_add_cmd *ac;
24+ struct ionic_admin_ctx ctx;
25+ struct ionic_rx_filter *f;
26+ struct hlist_head *head;
27+ struct hlist_node *tmp;
28+ unsigned int i;
29+ int err;
30+
31+ ac = &ctx.cmd.rx_filter_add;
32+
33+ for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
34+ head = &lif->rx_filters.by_id[i];
35+ hlist_for_each_entry_safe(f, tmp, head, by_id) {
36+ ctx.work = COMPLETION_INITIALIZER_ONSTACK(ctx.work);
37+ memcpy(ac, &f->cmd, sizeof(f->cmd));
38+ dev_dbg(&lif->netdev->dev, "replay filter command:\n");
39+ dynamic_hex_dump("cmd ", DUMP_PREFIX_OFFSET, 16, 1,
40+ &ctx.cmd, sizeof(ctx.cmd), true);
41+
42+ err = ionic_adminq_post_wait(lif, &ctx);
43+ if (err) {
44+ switch (le16_to_cpu(ac->match)) {
45+ case IONIC_RX_FILTER_MATCH_VLAN:
46+ netdev_info(lif->netdev, "Replay failed - %d: vlan %d\n",
47+ err,
48+ le16_to_cpu(ac->vlan.vlan));
49+ break;
50+ case IONIC_RX_FILTER_MATCH_MAC:
51+ netdev_info(lif->netdev, "Replay failed - %d: mac %pM\n",
52+ err, ac->mac.addr);
53+ break;
54+ case IONIC_RX_FILTER_MATCH_MAC_VLAN:
55+ netdev_info(lif->netdev, "Replay failed - %d: vlan %d mac %pM\n",
56+ err,
57+ le16_to_cpu(ac->vlan.vlan),
58+ ac->mac.addr);
59+ break;
60+ }
61+ }
62+ }
63+ }
3164 }
3265
3366 int ionic_rx_filters_init(struct ionic_lif *lif)
drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h+1−1
@@ -24,7 +24,7 @@ struct ionic_rx_filters { · 23 unmodified lines
2424 };
2525
2626 void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f);
27−int ionic_rx_filter_del(struct ionic_lif *lif, struct ionic_rx_filter *f);
27+void ionic_rx_filter_replay(struct ionic_lif *lif);
2828 int ionic_rx_filters_init(struct ionic_lif *lif);
2929 void ionic_rx_filters_deinit(struct ionic_lif *lif);
3030 int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
drivers/net/ethernet/sgi/meth.h+0−16
@@ -1,19 +1,3 @@
1−
2−/*
3− * snull.h -- definitions for the network module
4− *
5− * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet
6− * Copyright (C) 2001 O'Reilly & Associates
7− *
8− * The source code in this file can be freely used, adapted,
9− * and redistributed in source or binary form, so long as an
10− * acknowledgment appears in derived source files. The citation
11− * should list that the code comes from the book "Linux Device
12− * Drivers" by Alessandro Rubini and Jonathan Corbet, published
13− * by O'Reilly & Associates. No warranty is attached;
14− * we cannot take responsibility for errors or fitness for use.
15− */
16−
171 /* version dependencies have been confined to a separate file */
182
193 /* Tunable parameters */
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c+189−0
@@ -5,8 +5,13 @@ · 4 unmodified lines
55 #include <linux/clk-provider.h>
66 #include <linux/pci.h>
77 #include <linux/dmi.h>
8+#include "dwmac-intel.h"
89 #include "stmmac.h"
910
11+struct intel_priv_data {
12+ int mdio_adhoc_addr; /* mdio address for serdes & etc */
13+};
14+
1015 /* This struct is used to associate PCI Function of MAC controller on a board,
1116 * discovered via DMI, with the address of PHY connected to the MAC. The
1217 * negative value of the address means that MAC controller is not connected
@@ -49,6 +54,172 @@ static int stmmac_pci_find_phy_addr(struct pci_dev *pdev, · 36 unmodified lines
4954 return -ENODEV;
5055 }
5156
57+static int serdes_status_poll(struct stmmac_priv *priv, int phyaddr,
58+ int phyreg, u32 mask, u32 val)
59+{
60+ unsigned int retries = 10;
61+ int val_rd;
62+
63+ do {
64+ val_rd = mdiobus_read(priv->mii, phyaddr, phyreg);
65+ if ((val_rd & mask) == (val & mask))
66+ return 0;
67+ udelay(POLL_DELAY_US);
68+ } while (--retries);
69+
70+ return -ETIMEDOUT;
71+}
72+
73+static int intel_serdes_powerup(struct net_device *ndev, void *priv_data)
74+{
75+ struct intel_priv_data *intel_priv = priv_data;
76+ struct stmmac_priv *priv = netdev_priv(ndev);
77+ int serdes_phy_addr = 0;
78+ u32 data = 0;
79+
80+ if (!intel_priv->mdio_adhoc_addr)
81+ return 0;
82+
83+ serdes_phy_addr = intel_priv->mdio_adhoc_addr;
84+
85+ /* assert clk_req */
86+ data = mdiobus_read(priv->mii, serdes_phy_addr,
87+ SERDES_GCR0);
88+
89+ data |= SERDES_PLL_CLK;
90+
91+ mdiobus_write(priv->mii, serdes_phy_addr,
92+ SERDES_GCR0, data);
93+
94+ /* check for clk_ack assertion */
95+ data = serdes_status_poll(priv, serdes_phy_addr,
96+ SERDES_GSR0,
97+ SERDES_PLL_CLK,
98+ SERDES_PLL_CLK);
99+
100+ if (data) {
101+ dev_err(priv->device, "Serdes PLL clk request timeout\n");
102+ return data;
103+ }
104+
105+ /* assert lane reset */
106+ data = mdiobus_read(priv->mii, serdes_phy_addr,
107+ SERDES_GCR0);
108+
109+ data |= SERDES_RST;
110+
111+ mdiobus_write(priv->mii, serdes_phy_addr,
112+ SERDES_GCR0, data);
113+
114+ /* check for assert lane reset reflection */
115+ data = serdes_status_poll(priv, serdes_phy_addr,
116+ SERDES_GSR0,
117+ SERDES_RST,
118+ SERDES_RST);
119+
120+ if (data) {
121+ dev_err(priv->device, "Serdes assert lane reset timeout\n");
122+ return data;
123+ }
124+
125+ /* move power state to P0 */
126+ data = mdiobus_read(priv->mii, serdes_phy_addr,
127+ SERDES_GCR0);
128+
129+ data &= ~SERDES_PWR_ST_MASK;
130+ data |= SERDES_PWR_ST_P0 << SERDES_PWR_ST_SHIFT;
131+
132+ mdiobus_write(priv->mii, serdes_phy_addr,
133+ SERDES_GCR0, data);
134+
135+ /* Check for P0 state */
136+ data = serdes_status_poll(priv, serdes_phy_addr,
137+ SERDES_GSR0,
138+ SERDES_PWR_ST_MASK,
139+ SERDES_PWR_ST_P0 << SERDES_PWR_ST_SHIFT);
140+
141+ if (data) {
142+ dev_err(priv->device, "Serdes power state P0 timeout.\n");
143+ return data;
144+ }
145+
146+ return 0;
147+}
148+
149+static void intel_serdes_powerdown(struct net_device *ndev, void *intel_data)
150+{
151+ struct intel_priv_data *intel_priv = intel_data;
152+ struct stmmac_priv *priv = netdev_priv(ndev);
153+ int serdes_phy_addr = 0;
154+ u32 data = 0;
155+
156+ if (!intel_priv->mdio_adhoc_addr)
157+ return;
158+
159+ serdes_phy_addr = intel_priv->mdio_adhoc_addr;
160+
161+ /* move power state to P3 */
162+ data = mdiobus_read(priv->mii, serdes_phy_addr,
163+ SERDES_GCR0);
164+
165+ data &= ~SERDES_PWR_ST_MASK;
166+ data |= SERDES_PWR_ST_P3 << SERDES_PWR_ST_SHIFT;
167+
168+ mdiobus_write(priv->mii, serdes_phy_addr,
169+ SERDES_GCR0, data);
170+
171+ /* Check for P3 state */
172+ data = serdes_status_poll(priv, serdes_phy_addr,
173+ SERDES_GSR0,
174+ SERDES_PWR_ST_MASK,
175+ SERDES_PWR_ST_P3 << SERDES_PWR_ST_SHIFT);
176+
177+ if (data) {
178+ dev_err(priv->device, "Serdes power state P3 timeout\n");
179+ return;
180+ }
181+
182+ /* de-assert clk_req */
183+ data = mdiobus_read(priv->mii, serdes_phy_addr,
184+ SERDES_GCR0);
185+
186+ data &= ~SERDES_PLL_CLK;
187+
188+ mdiobus_write(priv->mii, serdes_phy_addr,
189+ SERDES_GCR0, data);
190+
191+ /* check for clk_ack de-assert */
192+ data = serdes_status_poll(priv, serdes_phy_addr,
193+ SERDES_GSR0,
194+ SERDES_PLL_CLK,
195+ (u32)~SERDES_PLL_CLK);
196+
197+ if (data) {
198+ dev_err(priv->device, "Serdes PLL clk de-assert timeout\n");
199+ return;
200+ }
201+
202+ /* de-assert lane reset */
203+ data = mdiobus_read(priv->mii, serdes_phy_addr,
204+ SERDES_GCR0);
205+
206+ data &= ~SERDES_RST;
207+
208+ mdiobus_write(priv->mii, serdes_phy_addr,
209+ SERDES_GCR0, data);
210+
211+ /* check for de-assert lane reset reflection */
212+ data = serdes_status_poll(priv, serdes_phy_addr,
213+ SERDES_GSR0,
214+ SERDES_RST,
215+ (u32)~SERDES_RST);
216+
217+ if (data) {
218+ dev_err(priv->device, "Serdes de-assert lane reset timeout\n");
219+ return;
220+ }
221+}
222+
52223 static void common_default_data(struct plat_stmmacenet_data *plat)
53224 {
54225 plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
@@ -189,6 +360,9 @@ static int ehl_sgmii_data(struct pci_dev *pdev, · 134 unmodified lines
189360 plat->phy_addr = 0;
190361 plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
191362
363+ plat->serdes_powerup = intel_serdes_powerup;
364+ plat->serdes_powerdown = intel_serdes_powerdown;
365+
192366 return ehl_common_data(pdev, plat);
193367 }
194368
@@ -233,6 +407,8 @@ static int ehl_pse0_sgmii1g_data(struct pci_dev *pdev, · 38 unmodified lines
233407 struct plat_stmmacenet_data *plat)
234408 {
235409 plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
410+ plat->serdes_powerup = intel_serdes_powerup;
411+ plat->serdes_powerdown = intel_serdes_powerdown;
236412 return ehl_pse0_common_data(pdev, plat);
237413 }
238414
@@ -263,6 +439,8 @@ static int ehl_pse1_sgmii1g_data(struct pci_dev *pdev, · 24 unmodified lines
263439 struct plat_stmmacenet_data *plat)
264440 {
265441 plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
442+ plat->serdes_powerup = intel_serdes_powerup;
443+ plat->serdes_powerdown = intel_serdes_powerdown;
266444 return ehl_pse1_common_data(pdev, plat);
267445 }
268446
@@ -291,6 +469,8 @@ static int tgl_sgmii_data(struct pci_dev *pdev, · 22 unmodified lines
291469 plat->bus_id = 1;
292470 plat->phy_addr = 0;
293471 plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
472+ plat->serdes_powerup = intel_serdes_powerup;
473+ plat->serdes_powerdown = intel_serdes_powerdown;
294474 return tgl_common_data(pdev, plat);
295475 }
296476
@@ -417,11 +597,17 @@ static int intel_eth_pci_probe(struct pci_dev *pdev, · 120 unmodified lines
417597 const struct pci_device_id *id)
418598 {
419599 struct stmmac_pci_info *info = (struct stmmac_pci_info *)id->driver_data;
600+ struct intel_priv_data *intel_priv;
420601 struct plat_stmmacenet_data *plat;
421602 struct stmmac_resources res;
422603 int i;
423604 int ret;
424605
606+ intel_priv = devm_kzalloc(&pdev->dev, sizeof(*intel_priv),
607+ GFP_KERNEL);
608+ if (!intel_priv)
609+ return -ENOMEM;
610+
425611 plat = devm_kzalloc(&pdev->dev, sizeof(*plat), GFP_KERNEL);
426612 if (!plat)
427613 return -ENOMEM;
@@ -457,6 +643,9 @@ static int intel_eth_pci_probe(struct pci_dev *pdev, · 29 unmodified lines
457643
458644 pci_set_master(pdev);
459645
646+ plat->bsp_priv = intel_priv;
647+ intel_priv->mdio_adhoc_addr = 0x15;
648+
460649 ret = info->setup(pdev, plat);
461650 if (ret)
462651 return ret;
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.h+23−0
@@ -0,0 +1,23 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+/* Copyright (c) 2020, Intel Corporation
3+ * DWMAC Intel header file
4+ */
5+
6+#ifndef __DWMAC_INTEL_H__
7+#define __DWMAC_INTEL_H__
8+
9+#define POLL_DELAY_US 8
10+
11+/* SERDES Register */
12+#define SERDES_GSR0 0x5 /* Global Status Reg0 */
13+#define SERDES_GCR0 0xb /* Global Configuration Reg0 */
14+
15+/* SERDES defines */
16+#define SERDES_PLL_CLK BIT(0) /* PLL clk valid signal */
17+#define SERDES_RST BIT(2) /* Serdes Reset */
18+#define SERDES_PWR_ST_MASK GENMASK(6, 4) /* Serdes Power state*/
19+#define SERDES_PWR_ST_SHIFT 4
20+#define SERDES_PWR_ST_P0 0x0
21+#define SERDES_PWR_ST_P3 0x3
22+
23+#endif /* __DWMAC_INTEL_H__ */
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c+1−0
@@ -119,6 +119,7 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac) · 118 unmodified lines
119119 { .div = 5, .val = 5, },
120120 { .div = 6, .val = 6, },
121121 { .div = 7, .val = 7, },
122+ { /* end of array */ }
122123 };
123124
124125 clk_configs = devm_kzalloc(dev, sizeof(*clk_configs), GFP_KERNEL);
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c+8−3
@@ -241,6 +241,8 @@ static int socfpga_set_phy_mode_common(int phymode, u32 *val) · 240 unmodified lines
241241 switch (phymode) {
242242 case PHY_INTERFACE_MODE_RGMII:
243243 case PHY_INTERFACE_MODE_RGMII_ID:
244+ case PHY_INTERFACE_MODE_RGMII_RXID:
245+ case PHY_INTERFACE_MODE_RGMII_TXID:
244246 *val = SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII;
245247 break;
246248 case PHY_INTERFACE_MODE_MII:
@@ -289,16 +291,19 @@ static int socfpga_gen5_set_phy_mode(struct socfpga_dwmac *dwmac) · 42 unmodified lines
289291 phymode == PHY_INTERFACE_MODE_MII ||
290292 phymode == PHY_INTERFACE_MODE_GMII ||
291293 phymode == PHY_INTERFACE_MODE_SGMII) {
292− ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
293294 regmap_read(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
294295 &module);
295296 module |= (SYSMGR_FPGAGRP_MODULE_EMAC << (reg_shift / 2));
296297 regmap_write(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
297298 module);
298− } else {
299− ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2));
300299 }
301300
301+ if (dwmac->f2h_ptp_ref_clk)
302+ ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
303+ else
304+ ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK <<
305+ (reg_shift / 2));
306+
302307 regmap_write(sys_mgr_base_addr, reg_offset, ctrl);
303308
304309 /* Deassert reset for the phy configuration to be sampled by
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c+2−0
@@ -150,6 +150,8 @@ static int sun7i_gmac_probe(struct platform_device *pdev) · 149 unmodified lines
150150 plat_dat->init = sun7i_gmac_init;
151151 plat_dat->exit = sun7i_gmac_exit;
152152 plat_dat->fix_mac_speed = sun7i_fix_speed;
153+ plat_dat->tx_fifo_size = 4096;
154+ plat_dat->rx_fifo_size = 16384;
153155
154156 ret = sun7i_gmac_init(pdev, plat_dat->bsp_priv);
155157 if (ret)
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c+8−4
@@ -27,12 +27,16 @@ static void config_sub_second_increment(void __iomem *ioaddr, · 26 unmodified lines
2727 unsigned long data;
2828 u32 reg_value;
2929
30− /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second
31− * formula = (1/ptp_clock) * 1000000000
32− * where ptp_clock is 50MHz if fine method is used to update system
30+ /* For GMAC3.x, 4.x versions, in "fine adjustement mode" set sub-second
31+ * increment to twice the number of nanoseconds of a clock cycle.
32+ * The calculation of the default_addend value by the caller will set it
33+ * to mid-range = 2^31 when the remainder of this division is zero,
34+ * which will make the accumulator overflow once every 2 ptp_clock
35+ * cycles, adding twice the number of nanoseconds of a clock cycle :
36+ * 2000000000ULL / ptp_clock.
3337 */
3438 if (value & PTP_TCR_TSCFUPDT)
35− data = (1000000000ULL / 50000000);
39+ data = (2000000000ULL / ptp_clock);
3640 else
3741 data = (1000000000ULL / ptp_clock);
3842
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c+23−0
@@ -4986,6 +4986,14 @@ int stmmac_dvr_probe(struct device *device, · 4985 unmodified lines
49864986 goto error_netdev_register;
49874987 }
49884988
4989+ if (priv->plat->serdes_powerup) {
4990+ ret = priv->plat->serdes_powerup(ndev,
4991+ priv->plat->bsp_priv);
4992+
4993+ if (ret < 0)
4994+ return ret;
4995+ }
4996+
49894997 #ifdef CONFIG_DEBUG_FS
49904998 stmmac_init_fs(ndev);
49914999 #endif
@@ -5029,6 +5037,9 @@ int stmmac_dvr_remove(struct device *dev) · 37 unmodified lines
50295037
50305038 stmmac_stop_all_dma(priv);
50315039
5040+ if (priv->plat->serdes_powerdown)
5041+ priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv);
5042+
50325043 stmmac_mac_set(priv, priv->ioaddr, false);
50335044 netif_carrier_off(ndev);
50345045 unregister_netdev(ndev);
@@ -5081,6 +5092,9 @@ int stmmac_suspend(struct device *dev) · 46 unmodified lines
50815092 /* Stop TX/RX DMA */
50825093 stmmac_stop_all_dma(priv);
50835094
5095+ if (priv->plat->serdes_powerdown)
5096+ priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv);
5097+
50845098 /* Enable Power down mode by programming the PMT regs */
50855099 if (device_may_wakeup(priv->device)) {
50865100 stmmac_pmt(priv, priv->hw, priv->wolopts);
@@ -5143,6 +5157,7 @@ int stmmac_resume(struct device *dev) · 56 unmodified lines
51435157 {
51445158 struct net_device *ndev = dev_get_drvdata(dev);
51455159 struct stmmac_priv *priv = netdev_priv(ndev);
5160+ int ret;
51465161
51475162 if (!netif_running(ndev))
51485163 return 0;
@@ -5170,6 +5185,14 @@ int stmmac_resume(struct device *dev) · 21 unmodified lines
51705185 stmmac_mdio_reset(priv->mii);
51715186 }
51725187
5188+ if (priv->plat->serdes_powerup) {
5189+ ret = priv->plat->serdes_powerup(ndev,
5190+ priv->plat->bsp_priv);
5191+
5192+ if (ret < 0)
5193+ return ret;
5194+ }
5195+
51735196 netif_device_attach(ndev);
51745197
51755198 mutex_lock(&priv->lock);
drivers/net/ethernet/ti/am65-cpsw-nuss.c+3−3
@@ -1372,7 +1372,7 @@ static int am65_cpsw_nuss_init_tx_chns(struct am65_cpsw_common *common) · 1371 unmodified lines
13721372 err:
13731373 i = devm_add_action(dev, am65_cpsw_nuss_free_tx_chns, common);
13741374 if (i) {
1375− dev_err(dev, "failed to add free_tx_chns action %d", i);
1375+ dev_err(dev, "Failed to add free_tx_chns action %d\n", i);
13761376 return i;
13771377 }
13781378
@@ -1481,7 +1481,7 @@ static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common) · 102 unmodified lines
14811481 err:
14821482 i = devm_add_action(dev, am65_cpsw_nuss_free_rx_chns, common);
14831483 if (i) {
1484− dev_err(dev, "failed to add free_rx_chns action %d", i);
1484+ dev_err(dev, "Failed to add free_rx_chns action %d\n", i);
14851485 return i;
14861486 }
14871487
@@ -1691,7 +1691,7 @@ static int am65_cpsw_nuss_init_ndev_2g(struct am65_cpsw_common *common) · 203 unmodified lines
16911691 ret = devm_add_action_or_reset(dev, am65_cpsw_pcpu_stats_free,
16921692 ndev_priv->stats);
16931693 if (ret) {
1694− dev_err(dev, "failed to add percpu stat free action %d", ret);
1694+ dev_err(dev, "Failed to add percpu stat free action %d\n", ret);
16951695 return ret;
16961696 }
16971697
drivers/net/ethernet/xscale/ixp4xx_eth.c+2−0
@@ -1387,6 +1387,8 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) · 1386 unmodified lines
13871387 return -ENODEV;
13881388 regs_phys = res->start;
13891389 port->regs = devm_ioremap_resource(dev, res);
1390+ if (IS_ERR(port->regs))
1391+ return PTR_ERR(port->regs);
13901392
13911393 switch (port->id) {
13921394 case IXP4XX_ETH_NPEA:
drivers/net/geneve.c+1−1
@@ -1207,7 +1207,7 @@ static int geneve_validate(struct nlattr *tb[], struct nlattr *data[], · 1206 unmodified lines
12071207 enum ifla_geneve_df df = nla_get_u8(data[IFLA_GENEVE_DF]);
12081208
12091209 if (df < 0 || df > GENEVE_DF_MAX) {
1210− NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_GENEVE_DF],
1210+ NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_DF],
12111211 "Invalid DF attribute");
12121212 return -EINVAL;
12131213 }
drivers/net/ipa/ipa_modem.c+2−3
@@ -297,14 +297,13 @@ static void ipa_modem_crashed(struct ipa *ipa) · 296 unmodified lines
297297
298298 ret = ipa_endpoint_modem_exception_reset_all(ipa);
299299 if (ret)
300− dev_err(dev, "error %d resetting exception endpoint",
301− ret);
300+ dev_err(dev, "error %d resetting exception endpoint\n", ret);
302301
303302 ipa_endpoint_modem_pause_all(ipa, false);
304303
305304 ret = ipa_modem_stop(ipa);
306305 if (ret)
307− dev_err(dev, "error %d stopping modem", ret);
306+ dev_err(dev, "error %d stopping modem\n", ret);
308307
309308 /* Now prepare for the next modem boot */
310309 ret = ipa_mem_zero_modem(ipa);
drivers/net/macsec.c+9−5
@@ -3809,7 +3809,7 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[], · 3808 unmodified lines
38093809 struct netlink_ext_ack *extack)
38103810 {
38113811 struct macsec_dev *macsec = macsec_priv(dev);
3812− struct macsec_tx_sa tx_sc;
3812+ struct macsec_tx_sc tx_sc;
38133813 struct macsec_secy secy;
38143814 int ret;
38153815
@@ -4002,11 +4002,11 @@ static int macsec_newlink(struct net *net, struct net_device *dev, · 186 unmodified lines
40024002 struct netlink_ext_ack *extack)
40034003 {
40044004 struct macsec_dev *macsec = macsec_priv(dev);
4005+ rx_handler_func_t *rx_handler;
4006+ u8 icv_len = DEFAULT_ICV_LEN;
40054007 struct net_device *real_dev;
4006− int err;
4008+ int err, mtu;
40074009 sci_t sci;
4008− u8 icv_len = DEFAULT_ICV_LEN;
4009− rx_handler_func_t *rx_handler;
40104010
40114011 if (!tb[IFLA_LINK])
40124012 return -EINVAL;
@@ -4033,7 +4033,11 @@ static int macsec_newlink(struct net *net, struct net_device *dev, · 20 unmodified lines
40334033
40344034 if (data && data[IFLA_MACSEC_ICV_LEN])
40354035 icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]);
4036− dev->mtu = real_dev->mtu - icv_len - macsec_extra_len(true);
4036+ mtu = real_dev->mtu - icv_len - macsec_extra_len(true);
4037+ if (mtu < 0)
4038+ dev->mtu = 0;
4039+ else
4040+ dev->mtu = mtu;
40374041
40384042 rx_handler = rtnl_dereference(real_dev->rx_handler);
40394043 if (rx_handler && rx_handler != macsec_handle_frame)
drivers/net/macvlan.c+1−1
@@ -1704,7 +1704,7 @@ static int macvlan_device_event(struct notifier_block *unused, · 1703 unmodified lines
17041704 struct macvlan_dev,
17051705 list);
17061706
1707− if (macvlan_sync_address(vlan->dev, dev->dev_addr))
1707+ if (vlan && macvlan_sync_address(vlan->dev, dev->dev_addr))
17081708 return NOTIFY_BAD;
17091709
17101710 break;
drivers/net/phy/bcm84881.c+3−3
@@ -155,9 +155,6 @@ static int bcm84881_read_status(struct phy_device *phydev) · 154 unmodified lines
155155 if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete)
156156 phydev->link = false;
157157
158− if (!phydev->link)
159− return 0;
160−
161158 linkmode_zero(phydev->lp_advertising);
162159 phydev->speed = SPEED_UNKNOWN;
163160 phydev->duplex = DUPLEX_UNKNOWN;
@@ -165,6 +162,9 @@ static int bcm84881_read_status(struct phy_device *phydev) · 1 unmodified line
165162 phydev->asym_pause = 0;
166163 phydev->mdix = 0;
167164
165+ if (!phydev->link)
166+ return 0;
167+
168168 if (phydev->autoneg_complete) {
169169 val = genphy_c45_read_lpa(phydev);
170170 if (val < 0)
drivers/net/phy/marvell.c+24−22
@@ -1263,6 +1263,30 @@ static int marvell_read_status_page_an(struct phy_device *phydev, · 1262 unmodified lines
12631263 int lpa;
12641264 int err;
12651265
1266+ if (!(status & MII_M1011_PHY_STATUS_RESOLVED)) {
1267+ phydev->link = 0;
1268+ return 0;
1269+ }
1270+
1271+ if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
1272+ phydev->duplex = DUPLEX_FULL;
1273+ else
1274+ phydev->duplex = DUPLEX_HALF;
1275+
1276+ switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
1277+ case MII_M1011_PHY_STATUS_1000:
1278+ phydev->speed = SPEED_1000;
1279+ break;
1280+
1281+ case MII_M1011_PHY_STATUS_100:
1282+ phydev->speed = SPEED_100;
1283+ break;
1284+
1285+ default:
1286+ phydev->speed = SPEED_10;
1287+ break;
1288+ }
1289+
12661290 if (!fiber) {
12671291 err = genphy_read_lpa(phydev);
12681292 if (err < 0)
@@ -1291,28 +1315,6 @@ static int marvell_read_status_page_an(struct phy_device *phydev, · 22 unmodified lines
12911315 }
12921316 }
12931317
1294− if (!(status & MII_M1011_PHY_STATUS_RESOLVED))
1295− return 0;
1296−
1297− if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
1298− phydev->duplex = DUPLEX_FULL;
1299− else
1300− phydev->duplex = DUPLEX_HALF;
1301−
1302− switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
1303− case MII_M1011_PHY_STATUS_1000:
1304− phydev->speed = SPEED_1000;
1305− break;
1306−
1307− case MII_M1011_PHY_STATUS_100:
1308− phydev->speed = SPEED_100;
1309− break;
1310−
1311− default:
1312− phydev->speed = SPEED_10;
1313− break;
1314− }
1315−
13161318 return 0;
13171319 }
13181320
drivers/net/phy/marvell10g.c+34−3
@@ -33,6 +33,8 @@ · 32 unmodified lines
3333 #define MV_PHY_ALASKA_NBT_QUIRK_REV (MARVELL_PHY_ID_88X3310 | 0xa)
3434
3535 enum {
36+ MV_PMA_FW_VER0 = 0xc011,
37+ MV_PMA_FW_VER1 = 0xc012,
3638 MV_PMA_BOOT = 0xc050,
3739 MV_PMA_BOOT_FATAL = BIT(0),
3840
@@ -73,7 +75,8 @@ enum { · 34 unmodified lines
7375
7476 /* Vendor2 MMD registers */
7577 MV_V2_PORT_CTRL = 0xf001,
76− MV_V2_PORT_CTRL_PWRDOWN = 0x0800,
78+ MV_V2_PORT_CTRL_SWRST = BIT(15),
79+ MV_V2_PORT_CTRL_PWRDOWN = BIT(11),
7780 MV_V2_TEMP_CTRL = 0xf08a,
7881 MV_V2_TEMP_CTRL_MASK = 0xc000,
7982 MV_V2_TEMP_CTRL_SAMPLE = 0x0000,
@@ -83,6 +86,8 @@ enum { · 3 unmodified lines
8386 };
8487
8588 struct mv3310_priv {
89+ u32 firmware_ver;
90+
8691 struct device *hwmon_dev;
8792 char *hwmon_name;
8893 };
@@ -235,8 +240,18 @@ static int mv3310_power_down(struct phy_device *phydev) · 146 unmodified lines
235240
236241 static int mv3310_power_up(struct phy_device *phydev)
237242 {
238− return phy_clear_bits_mmd(phydev, MDIO_MMD_VEND2, MV_V2_PORT_CTRL,
239− MV_V2_PORT_CTRL_PWRDOWN);
243+ struct mv3310_priv *priv = dev_get_drvdata(&phydev->mdio.dev);
244+ int ret;
245+
246+ ret = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND2, MV_V2_PORT_CTRL,
247+ MV_V2_PORT_CTRL_PWRDOWN);
248+
249+ if (phydev->drv->phy_id != MARVELL_PHY_ID_88X3310 ||
250+ priv->firmware_ver < 0x00030000)
251+ return ret;
252+
253+ return phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, MV_V2_PORT_CTRL,
254+ MV_V2_PORT_CTRL_SWRST);
240255 }
241256
242257 static int mv3310_reset(struct phy_device *phydev, u32 unit)
@@ -355,6 +370,22 @@ static int mv3310_probe(struct phy_device *phydev) · 112 unmodified lines
355370
356371 dev_set_drvdata(&phydev->mdio.dev, priv);
357372
373+ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MV_PMA_FW_VER0);
374+ if (ret < 0)
375+ return ret;
376+
377+ priv->firmware_ver = ret << 16;
378+
379+ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MV_PMA_FW_VER1);
380+ if (ret < 0)
381+ return ret;
382+
383+ priv->firmware_ver |= ret;
384+
385+ phydev_info(phydev, "Firmware version %u.%u.%u.%u\n",
386+ priv->firmware_ver >> 24, (priv->firmware_ver >> 16) & 255,
387+ (priv->firmware_ver >> 8) & 255, priv->firmware_ver & 255);
388+
358389 /* Powering down the port when not in use saves about 600mW */
359390 ret = mv3310_power_down(phydev);
360391 if (ret)
drivers/net/phy/mdio_bus.c+1−1
@@ -464,7 +464,7 @@ static struct class mdio_bus_class = { · 463 unmodified lines
464464
465465 /**
466466 * mdio_find_bus - Given the name of a mdiobus, find the mii_bus.
467− * @mdio_bus_np: Pointer to the mii_bus.
467+ * @mdio_name: The name of a mdiobus.
468468 *
469469 * Returns a reference to the mii_bus, or NULL if none found. The
470470 * embedded struct device will have its reference count incremented,
drivers/net/phy/micrel.c+1−1
@@ -1204,7 +1204,7 @@ static struct phy_driver ksphy_driver[] = { · 1203 unmodified lines
12041204 .driver_data = &ksz9021_type,
12051205 .probe = kszphy_probe,
12061206 .config_init = ksz9131_config_init,
1207− .read_status = ksz9031_read_status,
1207+ .read_status = genphy_read_status,
12081208 .ack_interrupt = kszphy_ack_interrupt,
12091209 .config_intr = kszphy_config_intr,
12101210 .get_sset_count = kszphy_get_sset_count,
drivers/net/phy/microchip_t1.c+171−0
@@ -3,9 +3,21 @@ · 2 unmodified lines
33
44 #include <linux/kernel.h>
55 #include <linux/module.h>
6+#include <linux/delay.h>
67 #include <linux/mii.h>
78 #include <linux/phy.h>
89
10+/* External Register Control Register */
11+#define LAN87XX_EXT_REG_CTL (0x14)
12+#define LAN87XX_EXT_REG_CTL_RD_CTL (0x1000)
13+#define LAN87XX_EXT_REG_CTL_WR_CTL (0x0800)
14+
15+/* External Register Read Data Register */
16+#define LAN87XX_EXT_REG_RD_DATA (0x15)
17+
18+/* External Register Write Data Register */
19+#define LAN87XX_EXT_REG_WR_DATA (0x16)
20+
921 /* Interrupt Source Register */
1022 #define LAN87XX_INTERRUPT_SOURCE (0x18)
1123
@@ -14,9 +26,160 @@ · 2 unmodified lines
1426 #define LAN87XX_MASK_LINK_UP (0x0004)
1527 #define LAN87XX_MASK_LINK_DOWN (0x0002)
1628
29+/* phyaccess nested types */
30+#define PHYACC_ATTR_MODE_READ 0
31+#define PHYACC_ATTR_MODE_WRITE 1
32+#define PHYACC_ATTR_MODE_MODIFY 2
33+
34+#define PHYACC_ATTR_BANK_SMI 0
35+#define PHYACC_ATTR_BANK_MISC 1
36+#define PHYACC_ATTR_BANK_PCS 2
37+#define PHYACC_ATTR_BANK_AFE 3
38+#define PHYACC_ATTR_BANK_MAX 7
39+
1740 #define DRIVER_AUTHOR "Nisar Sayed <nisar.sayed@microchip.com>"
1841 #define DRIVER_DESC "Microchip LAN87XX T1 PHY driver"
1942
43+struct access_ereg_val {
44+ u8 mode;
45+ u8 bank;
46+ u8 offset;
47+ u16 val;
48+ u16 mask;
49+};
50+
51+static int access_ereg(struct phy_device *phydev, u8 mode, u8 bank,
52+ u8 offset, u16 val)
53+{
54+ u16 ereg = 0;
55+ int rc = 0;
56+
57+ if (mode > PHYACC_ATTR_MODE_WRITE || bank > PHYACC_ATTR_BANK_MAX)
58+ return -EINVAL;
59+
60+ if (bank == PHYACC_ATTR_BANK_SMI) {
61+ if (mode == PHYACC_ATTR_MODE_WRITE)
62+ rc = phy_write(phydev, offset, val);
63+ else
64+ rc = phy_read(phydev, offset);
65+ return rc;
66+ }
67+
68+ if (mode == PHYACC_ATTR_MODE_WRITE) {
69+ ereg = LAN87XX_EXT_REG_CTL_WR_CTL;
70+ rc = phy_write(phydev, LAN87XX_EXT_REG_WR_DATA, val);
71+ if (rc < 0)
72+ return rc;
73+ } else {
74+ ereg = LAN87XX_EXT_REG_CTL_RD_CTL;
75+ }
76+
77+ ereg |= (bank << 8) | offset;
78+
79+ rc = phy_write(phydev, LAN87XX_EXT_REG_CTL, ereg);
80+ if (rc < 0)
81+ return rc;
82+
83+ if (mode == PHYACC_ATTR_MODE_READ)
84+ rc = phy_read(phydev, LAN87XX_EXT_REG_RD_DATA);
85+
86+ return rc;
87+}
88+
89+static int access_ereg_modify_changed(struct phy_device *phydev,
90+ u8 bank, u8 offset, u16 val, u16 mask)
91+{
92+ int new = 0, rc = 0;
93+
94+ if (bank > PHYACC_ATTR_BANK_MAX)
95+ return -EINVAL;
96+
97+ rc = access_ereg(phydev, PHYACC_ATTR_MODE_READ, bank, offset, val);
98+ if (rc < 0)
99+ return rc;
100+
101+ new = val | (rc & (mask ^ 0xFFFF));
102+ rc = access_ereg(phydev, PHYACC_ATTR_MODE_WRITE, bank, offset, new);
103+
104+ return rc;
105+}
106+
107+static int lan87xx_phy_init(struct phy_device *phydev)
108+{
109+ static const struct access_ereg_val init[] = {
110+ /* TX Amplitude = 5 */
111+ {PHYACC_ATTR_MODE_MODIFY, PHYACC_ATTR_BANK_AFE, 0x0B,
112+ 0x000A, 0x001E},
113+ /* Clear SMI interrupts */
114+ {PHYACC_ATTR_MODE_READ, PHYACC_ATTR_BANK_SMI, 0x18,
115+ 0, 0},
116+ /* Clear MISC interrupts */
117+ {PHYACC_ATTR_MODE_READ, PHYACC_ATTR_BANK_MISC, 0x08,
118+ 0, 0},
119+ /* Turn on TC10 Ring Oscillator (ROSC) */
120+ {PHYACC_ATTR_MODE_MODIFY, PHYACC_ATTR_BANK_MISC, 0x20,
121+ 0x0020, 0x0020},
122+ /* WUR Detect Length to 1.2uS, LPC Detect Length to 1.09uS */
123+ {PHYACC_ATTR_MODE_WRITE, PHYACC_ATTR_BANK_PCS, 0x20,
124+ 0x283C, 0},
125+ /* Wake_In Debounce Length to 39uS, Wake_Out Length to 79uS */
126+ {PHYACC_ATTR_MODE_WRITE, PHYACC_ATTR_BANK_MISC, 0x21,
127+ 0x274F, 0},
128+ /* Enable Auto Wake Forward to Wake_Out, ROSC on, Sleep,
129+ * and Wake_In to wake PHY
130+ */
131+ {PHYACC_ATTR_MODE_WRITE, PHYACC_ATTR_BANK_MISC, 0x20,
132+ 0x80A7, 0},
133+ /* Enable WUP Auto Fwd, Enable Wake on MDI, Wakeup Debouncer
134+ * to 128 uS
135+ */
136+ {PHYACC_ATTR_MODE_WRITE, PHYACC_ATTR_BANK_MISC, 0x24,
137+ 0xF110, 0},
138+ /* Enable HW Init */
139+ {PHYACC_ATTR_MODE_MODIFY, PHYACC_ATTR_BANK_SMI, 0x1A,
140+ 0x0100, 0x0100},
141+ };
142+ int rc, i;
143+
144+ /* Start manual initialization procedures in Managed Mode */
145+ rc = access_ereg_modify_changed(phydev, PHYACC_ATTR_BANK_SMI,
146+ 0x1a, 0x0000, 0x0100);
147+ if (rc < 0)
148+ return rc;
149+
150+ /* Soft Reset the SMI block */
151+ rc = access_ereg_modify_changed(phydev, PHYACC_ATTR_BANK_SMI,
152+ 0x00, 0x8000, 0x8000);
153+ if (rc < 0)
154+ return rc;
155+
156+ /* Check to see if the self-clearing bit is cleared */
157+ usleep_range(1000, 2000);
158+ rc = access_ereg(phydev, PHYACC_ATTR_MODE_READ,
159+ PHYACC_ATTR_BANK_SMI, 0x00, 0);
160+ if (rc < 0)
161+ return rc;
162+ if ((rc & 0x8000) != 0)
163+ return -ETIMEDOUT;
164+
165+ /* PHY Initialization */
166+ for (i = 0; i < ARRAY_SIZE(init); i++) {
167+ if (init[i].mode == PHYACC_ATTR_MODE_MODIFY) {
168+ rc = access_ereg_modify_changed(phydev, init[i].bank,
169+ init[i].offset,
170+ init[i].val,
171+ init[i].mask);
172+ } else {
173+ rc = access_ereg(phydev, init[i].mode, init[i].bank,
174+ init[i].offset, init[i].val);
175+ }
176+ if (rc < 0)
177+ return rc;
178+ }
179+
180+ return 0;
181+}
182+
20183 static int lan87xx_phy_config_intr(struct phy_device *phydev)
21184 {
22185 int rc, val = 0;
@@ -40,6 +203,13 @@ static int lan87xx_phy_ack_interrupt(struct phy_device *phydev) · 17 unmodified lines
40203 return rc < 0 ? rc : 0;
41204 }
42205
206+static int lan87xx_config_init(struct phy_device *phydev)
207+{
208+ int rc = lan87xx_phy_init(phydev);
209+
210+ return rc < 0 ? rc : 0;
211+}
212+
43213 static struct phy_driver microchip_t1_phy_driver[] = {
44214 {
45215 .phy_id = 0x0007c150,
@@ -48,6 +218,7 @@ static struct phy_driver microchip_t1_phy_driver[] = { · 2 unmodified lines
48218
49219 .features = PHY_BASIC_T1_FEATURES,
50220
221+ .config_init = lan87xx_config_init,
51222 .config_aneg = genphy_config_aneg,
52223
53224 .ack_interrupt = lan87xx_phy_ack_interrupt,
drivers/net/team/team.c+4−0
@@ -468,6 +468,9 @@ static const struct team_mode *team_mode_get(const char *kind) · 467 unmodified lines
468468 struct team_mode_item *mitem;
469469 const struct team_mode *mode = NULL;
470470
471+ if (!try_module_get(THIS_MODULE))
472+ return NULL;
473+
471474 spin_lock(&mode_list_lock);
472475 mitem = __find_mode(kind);
473476 if (!mitem) {
@@ -483,6 +486,7 @@ static const struct team_mode *team_mode_get(const char *kind) · 9 unmodified lines
483486 }
484487
485488 spin_unlock(&mode_list_lock);
489+ module_put(THIS_MODULE);
486490 return mode;
487491 }
488492
drivers/net/tun.c+2−1
@@ -1888,6 +1888,7 @@ drop: · 1887 unmodified lines
18881888
18891889 skb_reset_network_header(skb);
18901890 skb_probe_transport_header(skb);
1891+ skb_record_rx_queue(skb, tfile->queue_index);
18911892
18921893 if (skb_xdp) {
18931894 struct bpf_prog *xdp_prog;
@@ -2459,6 +2460,7 @@ build: · 565 unmodified lines
24592460 skb->protocol = eth_type_trans(skb, tun->dev);
24602461 skb_reset_network_header(skb);
24612462 skb_probe_transport_header(skb);
2463+ skb_record_rx_queue(skb, tfile->queue_index);
24622464
24632465 if (skb_xdp) {
24642466 err = do_xdp_generic(xdp_prog, skb);
@@ -2470,7 +2472,6 @@ build: · 5 unmodified lines
24702472 !tfile->detached)
24712473 rxhash = __skb_get_hash_symmetric(skb);
24722474
2473− skb_record_rx_queue(skb, tfile->queue_index);
24742475 netif_receive_skb(skb);
24752476
24762477 /* No need for get_cpu_ptr() here since this function is
drivers/net/vrf.c+6−4
@@ -188,8 +188,8 @@ static netdev_tx_t vrf_process_v6_outbound(struct sk_buff *skb, · 187 unmodified lines
188188 fl6.flowi6_proto = iph->nexthdr;
189189 fl6.flowi6_flags = FLOWI_FLAG_SKIP_NH_OIF;
190190
191− dst = ip6_route_output(net, NULL, &fl6);
192− if (dst == dst_null)
191+ dst = ip6_dst_lookup_flow(net, NULL, &fl6, NULL);
192+ if (IS_ERR(dst) || dst == dst_null)
193193 goto err;
194194
195195 skb_dst_drop(skb);
@@ -474,7 +474,8 @@ static struct sk_buff *vrf_ip6_out(struct net_device *vrf_dev, · 278 unmodified lines
474474 if (rt6_need_strict(&ipv6_hdr(skb)->daddr))
475475 return skb;
476476
477− if (qdisc_tx_is_default(vrf_dev))
477+ if (qdisc_tx_is_default(vrf_dev) ||
478+ IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED)
478479 return vrf_ip6_out_direct(vrf_dev, sk, skb);
479480
480481 return vrf_ip6_out_redirect(vrf_dev, skb);
@@ -686,7 +687,8 @@ static struct sk_buff *vrf_ip_out(struct net_device *vrf_dev, · 205 unmodified lines
686687 ipv4_is_lbcast(ip_hdr(skb)->daddr))
687688 return skb;
688689
689− if (qdisc_tx_is_default(vrf_dev))
690+ if (qdisc_tx_is_default(vrf_dev) ||
691+ IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED)
690692 return vrf_ip_out_direct(vrf_dev, sk, skb);
691693
692694 return vrf_ip_out_redirect(vrf_dev, skb);
drivers/net/vxlan.c+3−3
@@ -3144,7 +3144,7 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[], · 3143 unmodified lines
31443144 u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
31453145
31463146 if (id >= VXLAN_N_VID) {
3147− NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_ID],
3147+ NL_SET_ERR_MSG_ATTR(extack, data[IFLA_VXLAN_ID],
31483148 "VXLAN ID must be lower than 16777216");
31493149 return -ERANGE;
31503150 }
@@ -3155,7 +3155,7 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[], · 4 unmodified lines
31553155 = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
31563156
31573157 if (ntohs(p->high) < ntohs(p->low)) {
3158− NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_PORT_RANGE],
3158+ NL_SET_ERR_MSG_ATTR(extack, data[IFLA_VXLAN_PORT_RANGE],
31593159 "Invalid source port range");
31603160 return -EINVAL;
31613161 }
@@ -3165,7 +3165,7 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[], · 3 unmodified lines
31653165 enum ifla_vxlan_df df = nla_get_u8(data[IFLA_VXLAN_DF]);
31663166
31673167 if (df < 0 || df > VXLAN_DF_MAX) {
3168− NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_VXLAN_DF],
3168+ NL_SET_ERR_MSG_ATTR(extack, data[IFLA_VXLAN_DF],
31693169 "Invalid DF attribute");
31703170 return -EINVAL;
31713171 }
drivers/net/wimax/i2400m/usb-fw.c+1−0
@@ -354,6 +354,7 @@ out: · 353 unmodified lines
354354 usb_autopm_put_interface(i2400mu->usb_iface);
355355 d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n",
356356 i2400m, ack, ack_size, (long) result);
357+ usb_put_urb(&notif_urb);
357358 return result;
358359
359360 error_exceeded:
drivers/net/wireless/ath/ath11k/thermal.h+2−1
@@ -36,12 +36,13 @@ static inline int ath11k_thermal_register(struct ath11k_base *sc) · 35 unmodified lines
3636 return 0;
3737 }
3838
39−static inline void ath11k_thermal_unregister(struct ath11k *ar)
39+static inline void ath11k_thermal_unregister(struct ath11k_base *sc)
4040 {
4141 }
4242
4343 static inline int ath11k_thermal_set_throttling(struct ath11k *ar, u32 throttle_state)
4444 {
45+ return 0;
4546 }
4647
4748 static inline void ath11k_thermal_event_temperature(struct ath11k *ar,
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c+9−0
@@ -729,9 +729,18 @@ static int brcmf_net_mon_stop(struct net_device *ndev) · 728 unmodified lines
729729 return err;
730730 }
731731
732+static netdev_tx_t brcmf_net_mon_start_xmit(struct sk_buff *skb,
733+ struct net_device *ndev)
734+{
735+ dev_kfree_skb_any(skb);
736+
737+ return NETDEV_TX_OK;
738+}
739+
732740 static const struct net_device_ops brcmf_netdev_ops_mon = {
733741 .ndo_open = brcmf_net_mon_open,
734742 .ndo_stop = brcmf_net_mon_stop,
743+ .ndo_start_xmit = brcmf_net_mon_start_xmit,
735744 };
736745
737746 int brcmf_net_mon_attach(struct brcmf_if *ifp)
drivers/net/wireless/intel/iwlegacy/3945-rs.c+1−1
@@ -374,7 +374,7 @@ out: · 373 unmodified lines
374374 }
375375
376376 static void *
377−il3945_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
377+il3945_rs_alloc(struct ieee80211_hw *hw)
378378 {
379379 return hw->priv;
380380 }
drivers/net/wireless/intel/iwlegacy/4965-rs.c+1−1
@@ -2474,7 +2474,7 @@ il4965_rs_fill_link_cmd(struct il_priv *il, struct il_lq_sta *lq_sta, · 2473 unmodified lines
24742474 }
24752475
24762476 static void *
2477−il4965_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
2477+il4965_rs_alloc(struct ieee80211_hw *hw)
24782478 {
24792479 return hw->priv;
24802480 }
drivers/net/wireless/intel/iwlwifi/dvm/rs.c+1−1
@@ -3019,7 +3019,7 @@ static void rs_fill_link_cmd(struct iwl_priv *priv, · 3018 unmodified lines
30193019 cpu_to_le16(priv->lib->bt_params->agg_time_limit);
30203020 }
30213021
3022−static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
3022+static void *rs_alloc(struct ieee80211_hw *hw)
30233023 {
30243024 return hw->priv;
30253025 }
drivers/net/wireless/intel/iwlwifi/fw/acpi.c+7−2
@@ -296,9 +296,14 @@ int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt, · 295 unmodified lines
296296 if (!prof->enabled) {
297297 IWL_DEBUG_RADIO(fwrt, "SAR profile %d is disabled.\n",
298298 profs[i]);
299− /* if one of the profiles is disabled, we fail all */
300− return -ENOENT;
299+ /*
300+ * if one of the profiles is disabled, we
301+ * ignore all of them and return 1 to
302+ * differentiate disabled from other failures.
303+ */
304+ return 1;
301305 }
306+
302307 IWL_DEBUG_INFO(fwrt,
303308 "SAR EWRD: chain %d profile index %d\n",
304309 i, profs[i]);
drivers/net/wireless/intel/iwlwifi/fw/api/txq.h+3−3
@@ -8,7 +8,7 @@ · 7 unmodified lines
88 * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved.
99 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
1010 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
11− * Copyright(c) 2019 Intel Corporation
11+ * Copyright(c) 2019 - 2020 Intel Corporation
1212 *
1313 * This program is free software; you can redistribute it and/or modify
1414 * it under the terms of version 2 of the GNU General Public License as
@@ -31,7 +31,7 @@ · 16 unmodified lines
3131 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
3232 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3333 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
34− * Copyright(c) 2019 Intel Corporation
34+ * Copyright(c) 2019 - 2020 Intel Corporation
3535 * All rights reserved.
3636 *
3737 * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@ enum iwl_mvm_dqa_txq { · 61 unmodified lines
9999 IWL_MVM_DQA_MAX_MGMT_QUEUE = 8,
100100 IWL_MVM_DQA_AP_PROBE_RESP_QUEUE = 9,
101101 IWL_MVM_DQA_MIN_DATA_QUEUE = 10,
102− IWL_MVM_DQA_MAX_DATA_QUEUE = 31,
102+ IWL_MVM_DQA_MAX_DATA_QUEUE = 30,
103103 };
104104
105105 enum iwl_mvm_tx_fifo {
drivers/net/wireless/intel/iwlwifi/iwl-drv.c+1−1
@@ -1467,7 +1467,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context) · 1466 unmodified lines
14671467 kmemdup(pieces->dbg_conf_tlv[i],
14681468 pieces->dbg_conf_tlv_len[i],
14691469 GFP_KERNEL);
1470− if (!pieces->dbg_conf_tlv[i])
1470+ if (!drv->fw.dbg.conf_tlv[i])
14711471 goto out_free_fw;
14721472 }
14731473 }
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c+2−4
@@ -532,8 +532,7 @@ static struct ieee80211_sband_iftype_data iwl_he_capa[] = { · 531 unmodified lines
532532 IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US |
533533 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8,
534534 .mac_cap_info[2] =
535− IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP |
536− IEEE80211_HE_MAC_CAP2_ACK_EN,
535+ IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP,
537536 .mac_cap_info[3] =
538537 IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
539538 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
@@ -617,8 +616,7 @@ static struct ieee80211_sband_iftype_data iwl_he_capa[] = { · 77 unmodified lines
617616 IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US |
618617 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8,
619618 .mac_cap_info[2] =
620− IEEE80211_HE_MAC_CAP2_BSR |
621− IEEE80211_HE_MAC_CAP2_ACK_EN,
619+ IEEE80211_HE_MAC_CAP2_BSR,
622620 .mac_cap_info[3] =
623621 IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
624622 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
drivers/net/wireless/intel/iwlwifi/mvm/fw.c+11−14
@@ -727,6 +727,7 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b) · 726 unmodified lines
727727 struct iwl_dev_tx_power_cmd_v4 v4;
728728 } cmd;
729729
730+ int ret;
730731 u16 len = 0;
731732
732733 cmd.v5.v3.set_mode = cpu_to_le32(IWL_TX_POWER_MODE_SET_CHAINS);
@@ -741,9 +742,14 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b) · 8 unmodified lines
741742 len = sizeof(cmd.v4.v3);
742743
743744
744− if (iwl_sar_select_profile(&mvm->fwrt, cmd.v5.v3.per_chain_restriction,
745− prof_a, prof_b))
746− return -ENOENT;
745+ ret = iwl_sar_select_profile(&mvm->fwrt,
746+ cmd.v5.v3.per_chain_restriction,
747+ prof_a, prof_b);
748+
749+ /* return on error or if the profile is disabled (positive number) */
750+ if (ret)
751+ return ret;
752+
747753 IWL_DEBUG_RADIO(mvm, "Sending REDUCE_TX_POWER_CMD per chain\n");
748754 return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, len, &cmd);
749755 }
@@ -1034,16 +1040,7 @@ static int iwl_mvm_sar_init(struct iwl_mvm *mvm) · 284 unmodified lines
10341040 "EWRD SAR BIOS table invalid or unavailable. (%d)\n",
10351041 ret);
10361042
1037− ret = iwl_mvm_sar_select_profile(mvm, 1, 1);
1038− /*
1039− * If we don't have profile 0 from BIOS, just skip it. This
1040− * means that SAR Geo will not be enabled either, even if we
1041− * have other valid profiles.
1042− */
1043− if (ret == -ENOENT)
1044− return 1;
1045−
1046− return ret;
1043+ return iwl_mvm_sar_select_profile(mvm, 1, 1);
10471044 }
10481045
10491046 static int iwl_mvm_load_rt_fw(struct iwl_mvm *mvm)
@@ -1272,7 +1269,7 @@ int iwl_mvm_up(struct iwl_mvm *mvm) · 222 unmodified lines
12721269 ret = iwl_mvm_sar_init(mvm);
12731270 if (ret == 0) {
12741271 ret = iwl_mvm_sar_geo_init(mvm);
1275− } else if (ret > 0 && !iwl_sar_get_wgds_table(&mvm->fwrt)) {
1272+ } else if (ret == -ENOENT && !iwl_sar_get_wgds_table(&mvm->fwrt)) {
12761273 /*
12771274 * If basic SAR is not available, we check for WGDS,
12781275 * which should *not* be available either. If it is
drivers/net/wireless/intel/iwlwifi/mvm/rs.c+1−1
@@ -3665,7 +3665,7 @@ static void rs_fill_lq_cmd(struct iwl_mvm *mvm, · 3664 unmodified lines
36653665 cpu_to_le16(iwl_mvm_coex_agg_time_limit(mvm, sta));
36663666 }
36673667
3668−static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
3668+static void *rs_alloc(struct ieee80211_hw *hw)
36693669 {
36703670 return hw->priv;
36713671 }
drivers/net/wireless/intel/iwlwifi/mvm/rx.c+11−2
@@ -8,7 +8,7 @@ · 7 unmodified lines
88 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
99 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
1010 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
11− * Copyright(c) 2018 - 2019 Intel Corporation
11+ * Copyright(c) 2018 - 2020 Intel Corporation
1212 *
1313 * This program is free software; you can redistribute it and/or modify
1414 * it under the terms of version 2 of the GNU General Public License as
@@ -31,7 +31,7 @@ · 16 unmodified lines
3131 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3232 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3333 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
34− * Copyright(c) 2018 - 2019 Intel Corporation
34+ * Copyright(c) 2018 - 2020 Intel Corporation
3535 * All rights reserved.
3636 *
3737 * Redistribution and use in source and binary forms, with or without
@@ -566,6 +566,7 @@ void iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct napi_struct *napi, · 528 unmodified lines
566566
567567 struct iwl_mvm_stat_data {
568568 struct iwl_mvm *mvm;
569+ __le32 flags;
569570 __le32 mac_id;
570571 u8 beacon_filter_average_energy;
571572 void *general;
@@ -606,6 +607,13 @@ static void iwl_mvm_stat_iterator(void *_data, u8 *mac, · 34 unmodified lines
606607 -general->beacon_average_energy[vif_id];
607608 }
608609
610+ /* make sure that beacon statistics don't go backwards with TCM
611+ * request to clear statistics
612+ */
613+ if (le32_to_cpu(data->flags) & IWL_STATISTICS_REPLY_FLG_CLEAR)
614+ mvmvif->beacon_stats.accu_num_beacons +=
615+ mvmvif->beacon_stats.num_beacons;
616+
609617 if (mvmvif->id != id)
610618 return;
611619
@@ -763,6 +771,7 @@ void iwl_mvm_handle_rx_statistics(struct iwl_mvm *mvm, · 151 unmodified lines
763771
764772 flags = stats->flag;
765773 }
774+ data.flags = flags;
766775
767776 iwl_mvm_rx_stats_check_trigger(mvm, pkt);
768777
drivers/net/wireless/intel/iwlwifi/mvm/sta.c+7−2
@@ -722,6 +722,11 @@ static int iwl_mvm_find_free_queue(struct iwl_mvm *mvm, u8 sta_id, · 721 unmodified lines
722722
723723 lockdep_assert_held(&mvm->mutex);
724724
725+ if (WARN(maxq >= mvm->trans->trans_cfg->base_params->num_of_queues,
726+ "max queue %d >= num_of_queues (%d)", maxq,
727+ mvm->trans->trans_cfg->base_params->num_of_queues))
728+ maxq = mvm->trans->trans_cfg->base_params->num_of_queues - 1;
729+
725730 /* This should not be hit with new TX path */
726731 if (WARN_ON(iwl_mvm_has_new_tx_api(mvm)))
727732 return -ENOSPC;
@@ -1164,9 +1169,9 @@ static int iwl_mvm_inactivity_check(struct iwl_mvm *mvm, u8 alloc_for_sta) · 436 unmodified lines
11641169 inactive_tid_bitmap,
11651170 &unshare_queues,
11661171 &changetid_queues);
1167− if (ret >= 0 && free_queue < 0) {
1172+ if (ret && free_queue < 0) {
11681173 queue_owner = sta;
1169− free_queue = ret;
1174+ free_queue = i;
11701175 }
11711176 /* only unlock sta lock - we still need the queue info lock */
11721177 spin_unlock_bh(&mvmsta->lock);
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c+14−4
@@ -129,6 +129,18 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans, · 128 unmodified lines
129129 int cmdq_size = max_t(u32, IWL_CMD_QUEUE_SIZE,
130130 trans->cfg->min_txq_size);
131131
132+ switch (trans_pcie->rx_buf_size) {
133+ case IWL_AMSDU_DEF:
134+ return -EINVAL;
135+ case IWL_AMSDU_2K:
136+ break;
137+ case IWL_AMSDU_4K:
138+ case IWL_AMSDU_8K:
139+ case IWL_AMSDU_12K:
140+ control_flags |= IWL_PRPH_SCRATCH_RB_SIZE_4K;
141+ break;
142+ }
143+
132144 /* Allocate prph scratch */
133145 prph_scratch = dma_alloc_coherent(trans->dev, sizeof(*prph_scratch),
134146 &trans_pcie->prph_scratch_dma_addr,
@@ -143,10 +155,8 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans, · 8 unmodified lines
143155 cpu_to_le16((u16)iwl_read32(trans, CSR_HW_REV));
144156 prph_sc_ctrl->version.size = cpu_to_le16(sizeof(*prph_scratch) / 4);
145157
146− control_flags = IWL_PRPH_SCRATCH_RB_SIZE_4K |
147− IWL_PRPH_SCRATCH_MTR_MODE |
148− (IWL_PRPH_MTR_FORMAT_256B &
149− IWL_PRPH_SCRATCH_MTR_FORMAT);
158+ control_flags |= IWL_PRPH_SCRATCH_MTR_MODE;
159+ control_flags |= IWL_PRPH_MTR_FORMAT_256B & IWL_PRPH_SCRATCH_MTR_FORMAT;
150160
151161 /* initialize RX default queue */
152162 prph_sc_ctrl->rbd_cfg.free_rbd_addr =
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c+3−0
@@ -1418,6 +1418,9 @@ void iwl_trans_pcie_dyn_txq_free(struct iwl_trans *trans, int queue) · 1417 unmodified lines
14181418
14191419 iwl_pcie_gen2_txq_unmap(trans, queue);
14201420
1421+ iwl_pcie_gen2_txq_free_memory(trans, trans_pcie->txq[queue]);
1422+ trans_pcie->txq[queue] = NULL;
1423+
14211424 IWL_DEBUG_TX_QUEUES(trans, "Deactivate queue %d\n", queue);
14221425 }
14231426
drivers/net/wireless/mac80211_hwsim.c+7−7
@@ -3669,9 +3669,9 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info) · 3668 unmodified lines
36693669 }
36703670
36713671 if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
3672− hwname = kasprintf(GFP_KERNEL, "%.*s",
3673− nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3674− (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
3672+ hwname = kstrndup((char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3673+ nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3674+ GFP_KERNEL);
36753675 if (!hwname)
36763676 return -ENOMEM;
36773677 param.hwname = hwname;
@@ -3691,9 +3691,9 @@ static int hwsim_del_radio_nl(struct sk_buff *msg, struct genl_info *info) · 13 unmodified lines
36913691 if (info->attrs[HWSIM_ATTR_RADIO_ID]) {
36923692 idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
36933693 } else if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
3694− hwname = kasprintf(GFP_KERNEL, "%.*s",
3695− nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3696− (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
3694+ hwname = kstrndup((char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3695+ nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3696+ GFP_KERNEL);
36973697 if (!hwname)
36983698 return -ENOMEM;
36993699 } else
@@ -4068,7 +4068,7 @@ static void hwsim_virtio_rx_work(struct work_struct *work) · 368 unmodified lines
40684068 }
40694069 vq = hwsim_vqs[HWSIM_VQ_RX];
40704070 sg_init_one(sg, skb->head, skb_end_offset(skb));
4071− err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_KERNEL);
4071+ err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_ATOMIC);
40724072 if (WARN(err, "virtqueue_add_inbuf returned %d\n", err))
40734073 nlmsg_free(skb);
40744074 else
drivers/net/wireless/realtek/rtlwifi/rc.c+1−1
@@ -261,7 +261,7 @@ static void rtl_rate_update(void *ppriv, · 260 unmodified lines
261261 {
262262 }
263263
264−static void *rtl_rate_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
264+static void *rtl_rate_alloc(struct ieee80211_hw *hw)
265265 {
266266 struct rtl_priv *rtlpriv = rtl_priv(hw);
267267 return rtlpriv;
drivers/net/wireless/realtek/rtw88/pci.c+3−8
@@ -1338,22 +1338,17 @@ static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev) · 1337 unmodified lines
13381338 rtw_pci_link_cfg(rtwdev);
13391339 }
13401340
1341−#ifdef CONFIG_PM
1342−static int rtw_pci_suspend(struct device *dev)
1341+static int __maybe_unused rtw_pci_suspend(struct device *dev)
13431342 {
13441343 return 0;
13451344 }
13461345
1347−static int rtw_pci_resume(struct device *dev)
1346+static int __maybe_unused rtw_pci_resume(struct device *dev)
13481347 {
13491348 return 0;
13501349 }
13511350
13521351 static SIMPLE_DEV_PM_OPS(rtw_pm_ops, rtw_pci_suspend, rtw_pci_resume);
1353−#define RTW_PM_OPS (&rtw_pm_ops)
1354−#else
1355−#define RTW_PM_OPS NULL
1356−#endif
13571352
13581353 static int rtw_pci_claim(struct rtw_dev *rtwdev, struct pci_dev *pdev)
13591354 {
@@ -1582,7 +1577,7 @@ static struct pci_driver rtw_pci_driver = { · 222 unmodified lines
15821577 .id_table = rtw_pci_id_table,
15831578 .probe = rtw_pci_probe,
15841579 .remove = rtw_pci_remove,
1585− .driver.pm = RTW_PM_OPS,
1580+ .driver.pm = &rtw_pm_ops,
15861581 };
15871582 module_pci_driver(rtw_pci_driver);
15881583
drivers/of/overlay.c+2−0
@@ -261,6 +261,8 @@ static struct property *dup_and_fixup_symbol_prop( · 260 unmodified lines
261261
262262 of_property_set_flag(new_prop, OF_DYNAMIC);
263263
264+ kfree(target_path);
265+
264266 return new_prop;
265267
266268 err_free_new_prop:
drivers/of/unittest-data/overlay_bad_add_dup_prop.dts+19−4
@@ -3,22 +3,37 @@ · 2 unmodified lines
33 /plugin/;
44
55 /*
6− * &electric_1/motor-1 and &spin_ctrl_1 are the same node:
7− * /testcase-data-2/substation@100/motor-1
6+ * &electric_1/motor-1/electric and &spin_ctrl_1/electric are the same node:
7+ * /testcase-data-2/substation@100/motor-1/electric
88 *
99 * Thus the property "rpm_avail" in each fragment will
1010 * result in an attempt to update the same property twice.
1111 * This will result in an error and the overlay apply
1212 * will fail.
13+ *
14+ * The previous version of this test did not include the extra
15+ * level of node 'electric'. That resulted in the 'rpm_avail'
16+ * property being located in the pre-existing node 'motor-1'.
17+ * Modifying a property results in a WARNING that a memory leak
18+ * will occur if the overlay is removed. Since the overlay apply
19+ * fails, the memory leak does actually occur, and kmemleak will
20+ * further report the memory leak if CONFIG_DEBUG_KMEMLEAK is
21+ * enabled. Adding the overlay node 'electric' avoids the
22+ * memory leak and thus people who use kmemleak will not
23+ * have to debug this non-problem again.
1324 */
1425
1526 &electric_1 {
1627
1728 motor-1 {
18− rpm_avail = < 100 >;
29+ electric {
30+ rpm_avail = < 100 >;
31+ };
1932 };
2033 };
2134
2235 &spin_ctrl_1 {
23− rpm_avail = < 100 200 >;
36+ electric {
37+ rpm_avail = < 100 200 >;
38+ };
2439 };
drivers/of/unittest.c+19−9
@@ -861,6 +861,10 @@ static void __init of_unittest_changeset(void) · 860 unmodified lines
861861 unittest(!of_changeset_revert(&chgset), "revert failed\n");
862862
863863 of_changeset_destroy(&chgset);
864+
865+ of_node_put(n1);
866+ of_node_put(n2);
867+ of_node_put(n21);
864868 #endif
865869 }
866870
@@ -1243,10 +1247,13 @@ static void __init of_unittest_platform_populate(void) · 376 unmodified lines
12431247
12441248 of_platform_populate(np, match, NULL, &test_bus->dev);
12451249 for_each_child_of_node(np, child) {
1246− for_each_child_of_node(child, grandchild)
1247− unittest(of_find_device_by_node(grandchild),
1250+ for_each_child_of_node(child, grandchild) {
1251+ pdev = of_find_device_by_node(grandchild);
1252+ unittest(pdev,
12481253 "Could not create device for node '%pOFn'\n",
12491254 grandchild);
1255+ of_dev_put(pdev);
1256+ }
12501257 }
12511258
12521259 of_platform_depopulate(&test_bus->dev);
@@ -3087,8 +3094,11 @@ static __init void of_unittest_overlay_high_level(void) · 1834 unmodified lines
30873094 goto err_unlock;
30883095 }
30893096 if (__of_add_property(of_symbols, new_prop)) {
3097+ kfree(new_prop->name);
3098+ kfree(new_prop->value);
3099+ kfree(new_prop);
30903100 /* "name" auto-generated by unflatten */
3091− if (!strcmp(new_prop->name, "name"))
3101+ if (!strcmp(prop->name, "name"))
30923102 continue;
30933103 unittest(0, "duplicate property '%s' in overlay_base node __symbols__",
30943104 prop->name);
@@ -3171,21 +3181,21 @@ static __init void of_unittest_overlay_high_level(void) · 76 unmodified lines
31713181 "OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/controller");
31723182
31733183 EXPECT_BEGIN(KERN_ERR,
3174− "OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/motor-1/rpm_avail");
3184+ "OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric");
31753185 EXPECT_BEGIN(KERN_ERR,
3176− "OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/motor-1/rpm_avail");
3186+ "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail");
31773187 EXPECT_BEGIN(KERN_ERR,
3178− "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/rpm_avail");
3188+ "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name");
31793189
31803190 unittest(overlay_data_apply("overlay_bad_add_dup_prop", NULL),
31813191 "Adding overlay 'overlay_bad_add_dup_prop' failed\n");
31823192
31833193 EXPECT_END(KERN_ERR,
3184− "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/rpm_avail");
3194+ "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name");
31853195 EXPECT_END(KERN_ERR,
3186− "OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/motor-1/rpm_avail");
3196+ "OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail");
31873197 EXPECT_END(KERN_ERR,
3188− "OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/motor-1/rpm_avail");
3198+ "OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric");
31893199
31903200 unittest(overlay_data_apply("overlay_bad_phandle", NULL),
31913201 "Adding overlay 'overlay_bad_phandle' failed\n");
drivers/opp/core.c+14−0
@@ -819,6 +819,8 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) · 818 unmodified lines
819819 if (unlikely(!target_freq)) {
820820 if (opp_table->required_opp_tables) {
821821 ret = _set_required_opps(dev, opp_table, NULL);
822+ } else if (!_get_opp_count(opp_table)) {
823+ return 0;
822824 } else {
823825 dev_err(dev, "target frequency can't be 0\n");
824826 ret = -EINVAL;
@@ -849,6 +851,18 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) · 24 unmodified lines
849851 goto put_opp_table;
850852 }
851853
854+ /*
855+ * For IO devices which require an OPP on some platforms/SoCs
856+ * while just needing to scale the clock on some others
857+ * we look for empty OPP tables with just a clock handle and
858+ * scale only the clk. This makes dev_pm_opp_set_rate()
859+ * equivalent to a clk_set_rate()
860+ */
861+ if (!_get_opp_count(opp_table)) {
862+ ret = _generic_set_opp_clk_only(dev, clk, freq);
863+ goto put_opp_table;
864+ }
865+
852866 temp_freq = old_freq;
853867 old_opp = _find_freq_ceil(opp_table, &temp_freq);
854868 if (IS_ERR(old_opp)) {
drivers/pci/quirks.c+7−0
@@ -5567,3 +5567,10 @@ static void pci_fixup_no_d0_pme(struct pci_dev *dev) · 5566 unmodified lines
55675567 dev->pme_support &= ~(PCI_PM_CAP_PME_D0 >> PCI_PM_CAP_PME_SHIFT);
55685568 }
55695569 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASMEDIA, 0x2142, pci_fixup_no_d0_pme);
5570+
5571+static void apex_pci_fixup_class(struct pci_dev *pdev)
5572+{
5573+ pdev->class = (PCI_CLASS_SYSTEM_OTHER << 8) | pdev->class;
5574+}
5575+DECLARE_PCI_FIXUP_CLASS_HEADER(0x1ac1, 0x089a,
5576+ PCI_CLASS_NOT_DEFINED, 8, apex_pci_fixup_class);
drivers/phy/tegra/Kconfig+2−1
@@ -1,7 +1,8 @@
11 # SPDX-License-Identifier: GPL-2.0-only
22 config PHY_TEGRA_XUSB
33 tristate "NVIDIA Tegra XUSB pad controller driver"
4− depends on ARCH_TEGRA
4+ depends on ARCH_TEGRA && USB_SUPPORT
5+ select USB_COMMON
56 select USB_CONN_GPIO
67 select USB_PHY
78 help
drivers/platform/chrome/cros_ec_sensorhub_ring.c+4−4
@@ -40,7 +40,7 @@ cros_sensorhub_send_sample(struct cros_ec_sensorhub *sensorhub, · 39 unmodified lines
4040 int id = sample->sensor_id;
4141 struct iio_dev *indio_dev;
4242
43− if (id > sensorhub->sensor_num)
43+ if (id >= sensorhub->sensor_num)
4444 return -EINVAL;
4545
4646 cb = sensorhub->push_data[id].push_data_cb;
@@ -820,7 +820,7 @@ static void cros_ec_sensorhub_ring_handler(struct cros_ec_sensorhub *sensorhub) · 773 unmodified lines
820820 if (fifo_info->count > sensorhub->fifo_size ||
821821 fifo_info->size != sensorhub->fifo_size) {
822822 dev_warn(sensorhub->dev,
823− "Mismatch EC data: count %d, size %d - expected %d",
823+ "Mismatch EC data: count %d, size %d - expected %d\n",
824824 fifo_info->count, fifo_info->size,
825825 sensorhub->fifo_size);
826826 goto error;
@@ -851,14 +851,14 @@ static void cros_ec_sensorhub_ring_handler(struct cros_ec_sensorhub *sensorhub) · 24 unmodified lines
851851 }
852852 if (number_data > fifo_info->count - i) {
853853 dev_warn(sensorhub->dev,
854− "Invalid EC data: too many entry received: %d, expected %d",
854+ "Invalid EC data: too many entry received: %d, expected %d\n",
855855 number_data, fifo_info->count - i);
856856 break;
857857 }
858858 if (out + number_data >
859859 sensorhub->ring + fifo_info->count) {
860860 dev_warn(sensorhub->dev,
861− "Too many samples: %d (%zd data) to %d entries for expected %d entries",
861+ "Too many samples: %d (%zd data) to %d entries for expected %d entries\n",
862862 i, out - sensorhub->ring, i + number_data,
863863 fifo_info->count);
864864 break;
drivers/ptp/ptp_ines.c+2−2
@@ -400,8 +400,8 @@ static int ines_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr) · 399 unmodified lines
400400 ines_write32(port, ts_stat_rx, ts_stat_rx);
401401 ines_write32(port, ts_stat_tx, ts_stat_tx);
402402
403− port->rxts_enabled = ts_stat_rx == TS_ENABLE ? true : false;
404− port->txts_enabled = ts_stat_tx == TS_ENABLE ? true : false;
403+ port->rxts_enabled = ts_stat_rx == TS_ENABLE;
404+ port->txts_enabled = ts_stat_tx == TS_ENABLE;
405405
406406 spin_unlock_irqrestore(&port->lock, flags);
407407
drivers/remoteproc/mtk_common.h+1−1
@@ -68,7 +68,7 @@ struct mtk_scp { · 67 unmodified lines
6868 wait_queue_head_t ack_wq;
6969
7070 void __iomem *cpu_addr;
71− phys_addr_t phys_addr;
71+ dma_addr_t dma_addr;
7272 size_t dram_size;
7373
7474 struct rproc_subdev *rpmsg_subdev;
drivers/remoteproc/mtk_scp.c+3−3
@@ -330,7 +330,7 @@ static void *scp_da_to_va(struct rproc *rproc, u64 da, size_t len) · 329 unmodified lines
330330 if (offset >= 0 && (offset + len) < scp->sram_size)
331331 return (void __force *)scp->sram_base + offset;
332332 } else {
333− offset = da - scp->phys_addr;
333+ offset = da - scp->dma_addr;
334334 if (offset >= 0 && (offset + len) < scp->dram_size)
335335 return (void __force *)scp->cpu_addr + offset;
336336 }
@@ -451,7 +451,7 @@ static int scp_map_memory_region(struct mtk_scp *scp) · 114 unmodified lines
451451 /* Reserved SCP code size */
452452 scp->dram_size = MAX_CODE_SIZE;
453453 scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size,
454− &scp->phys_addr, GFP_KERNEL);
454+ &scp->dma_addr, GFP_KERNEL);
455455 if (!scp->cpu_addr)
456456 return -ENOMEM;
457457
@@ -461,7 +461,7 @@ static int scp_map_memory_region(struct mtk_scp *scp) · 3 unmodified lines
461461 static void scp_unmap_memory_region(struct mtk_scp *scp)
462462 {
463463 dma_free_coherent(scp->dev, scp->dram_size, scp->cpu_addr,
464− scp->phys_addr);
464+ scp->dma_addr);
465465 of_reserved_mem_device_release(scp->dev);
466466 }
467467
drivers/remoteproc/qcom_q6v5_mss.c+20−13
@@ -367,7 +367,7 @@ unroll_pd_votes: · 366 unmodified lines
367367 }
368368
369369 return ret;
370−};
370+}
371371
372372 static void q6v5_pds_disable(struct q6v5 *qproc, struct device **pds,
373373 size_t pd_count)
@@ -1527,7 +1527,7 @@ unroll_attach: · 1153 unmodified lines
15271527 dev_pm_domain_detach(devs[i], false);
15281528
15291529 return ret;
1530−};
1530+}
15311531
15321532 static void q6v5_pds_detach(struct q6v5 *qproc, struct device **pds,
15331533 size_t pd_count)
@@ -1675,7 +1675,7 @@ static int q6v5_probe(struct platform_device *pdev) · 141 unmodified lines
16751675 ret = of_property_read_string_index(pdev->dev.of_node, "firmware-name",
16761676 1, &qproc->hexagon_mdt_image);
16771677 if (ret < 0 && ret != -EINVAL)
1678− return ret;
1678+ goto free_rproc;
16791679
16801680 platform_set_drvdata(pdev, qproc);
16811681
@@ -1766,17 +1766,23 @@ static int q6v5_probe(struct platform_device *pdev) · 84 unmodified lines
17661766 qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12);
17671767 if (IS_ERR(qproc->sysmon)) {
17681768 ret = PTR_ERR(qproc->sysmon);
1769− goto detach_proxy_pds;
1769+ goto remove_subdevs;
17701770 }
17711771
17721772 ret = rproc_add(rproc);
17731773 if (ret)
1774− goto detach_proxy_pds;
1774+ goto remove_sysmon_subdev;
17751775
17761776 return 0;
17771777
1778−detach_proxy_pds:
1778+remove_sysmon_subdev:
1779+ qcom_remove_sysmon_subdev(qproc->sysmon);
1780+remove_subdevs:
17791781 qcom_remove_ipa_notify_subdev(qproc->rproc, &qproc->ipa_notify_subdev);
1782+ qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
1783+ qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
1784+ qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
1785+detach_proxy_pds:
17801786 q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
17811787 detach_active_pds:
17821788 q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
@@ -1789,19 +1795,20 @@ free_rproc: · 6 unmodified lines
17891795 static int q6v5_remove(struct platform_device *pdev)
17901796 {
17911797 struct q6v5 *qproc = platform_get_drvdata(pdev);
1798+ struct rproc *rproc = qproc->rproc;
17921799
1793− rproc_del(qproc->rproc);
1800+ rproc_del(rproc);
17941801
17951802 qcom_remove_sysmon_subdev(qproc->sysmon);
1796− qcom_remove_ipa_notify_subdev(qproc->rproc, &qproc->ipa_notify_subdev);
1797− qcom_remove_glink_subdev(qproc->rproc, &qproc->glink_subdev);
1798− qcom_remove_smd_subdev(qproc->rproc, &qproc->smd_subdev);
1799− qcom_remove_ssr_subdev(qproc->rproc, &qproc->ssr_subdev);
1803+ qcom_remove_ipa_notify_subdev(rproc, &qproc->ipa_notify_subdev);
1804+ qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
1805+ qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
1806+ qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
18001807
1801− q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
18021808 q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
1809+ q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
18031810
1804− rproc_free(qproc->rproc);
1811+ rproc_free(rproc);
18051812
18061813 return 0;
18071814 }
drivers/remoteproc/remoteproc_sysfs.c+1−0
@@ -4,6 +4,7 @@ · 3 unmodified lines
44 */
55
66 #include <linux/remoteproc.h>
7+#include <linux/slab.h>
78
89 #include "remoteproc_internal.h"
910
drivers/remoteproc/stm32_rproc.c+1−0
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include <linux/regmap.h>
2020 #include <linux/remoteproc.h>
2121 #include <linux/reset.h>
22+#include <linux/slab.h>
2223 #include <linux/workqueue.h>
2324
2425 #include "remoteproc_internal.h"
drivers/rpmsg/mtk_rpmsg.c+1−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
88 #include <linux/platform_device.h>
99 #include <linux/remoteproc.h>
1010 #include <linux/rpmsg/mtk_rpmsg.h>
11+#include <linux/slab.h>
1112 #include <linux/workqueue.h>
1213
1314 #include "rpmsg_internal.h"
drivers/s390/block/Kconfig+0−1
@@ -26,7 +26,6 @@ config DASD · 25 unmodified lines
2626 def_tristate y
2727 prompt "Support for DASD devices"
2828 depends on CCW && BLOCK
29− select IOSCHED_DEADLINE
3029 help
3130 Enable this option if you want to access DASDs directly utilizing
3231 S/390s channel subsystem commands. This is necessary for running
drivers/scsi/Kconfig+1−1
@@ -127,7 +127,7 @@ config CHR_DEV_SG · 126 unmodified lines
127127
128128 For scanners, look at SANE (<http://www.sane-project.org/>). For CD
129129 writer software look at Cdrtools
130− (<http://cdrecord.berlios.de/private/cdrecord.html>)
130+ (<http://cdrtools.sourceforge.net/>)
131131 and for burning a "disk at once": CDRDAO
132132 (<http://cdrdao.sourceforge.net/>). Cdparanoia is a high
133133 quality digital reader of audio CDs (<http://www.xiph.org/paranoia/>).
drivers/scsi/hisi_sas/Kconfig+1−0
@@ -6,6 +6,7 @@ config SCSI_HISI_SAS · 5 unmodified lines
66 select SCSI_SAS_LIBSAS
77 select BLK_DEV_INTEGRITY
88 depends on ATA
9+ select SATA_HOST
910 help
1011 This driver supports HiSilicon's SAS HBA, including support based
1112 on platform device
drivers/scsi/qla2xxx/qla_dbg.c+2−1
@@ -2539,7 +2539,6 @@ ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) · 2538 unmodified lines
25392539 {
25402540 va_list va;
25412541 struct va_format vaf;
2542− char pbuf[64];
25432542
25442543 va_start(va, fmt);
25452544
@@ -2547,6 +2546,8 @@ ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) · 1 unmodified line
25472546 vaf.va = &va;
25482547
25492548 if (!ql_mask_match(level)) {
2549+ char pbuf[64];
2550+
25502551 if (vha != NULL) {
25512552 const struct pci_dev *pdev = vha->hw->pdev;
25522553 /* <module-name> <msg-id>:<host> Message */
drivers/scsi/qla2xxx/qla_init.c+0−2
@@ -3611,8 +3611,6 @@ qla24xx_detect_sfp(scsi_qla_host_t *vha) · 3610 unmodified lines
36113611 ha->lr_distance = LR_DISTANCE_5K;
36123612 }
36133613
3614− if (!vha->flags.init_done)
3615− rc = QLA_SUCCESS;
36163614 out:
36173615 ql_dbg(ql_dbg_async, vha, 0x507b,
36183616 "SFP detect: %s-Range SFP %s (nvr=%x ll=%x lr=%x lrd=%x).\n",
drivers/scsi/qla2xxx/qla_isr.c+0−1
@@ -87,7 +87,6 @@ qla24xx_process_abts(struct scsi_qla_host *vha, void *pkt) · 86 unmodified lines
8787 }
8888
8989 /* terminate exchange */
90− memset(rsp_els, 0, sizeof(*rsp_els));
9190 rsp_els->entry_type = ELS_IOCB_TYPE;
9291 rsp_els->entry_count = 1;
9392 rsp_els->nport_handle = ~0;
drivers/scsi/qla2xxx/qla_mbx.c+0−2
@@ -4894,8 +4894,6 @@ qla25xx_set_els_cmds_supported(scsi_qla_host_t *vha) · 4893 unmodified lines
48944894 return QLA_MEMORY_ALLOC_FAILED;
48954895 }
48964896
4897− memset(els_cmd_map, 0, ELS_CMD_MAP_SIZE);
4898−
48994897 els_cmd_map[index] |= 1 << bit;
49004898
49014899 mcp->mb[0] = MBC_SET_RNID_PARAMS;
drivers/scsi/sg.c+6−2
@@ -685,8 +685,10 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos) · 684 unmodified lines
685685 hp->flags = input_size; /* structure abuse ... */
686686 hp->pack_id = old_hdr.pack_id;
687687 hp->usr_ptr = NULL;
688− if (copy_from_user(cmnd, buf, cmd_size))
688+ if (copy_from_user(cmnd, buf, cmd_size)) {
689+ sg_remove_request(sfp, srp);
689690 return -EFAULT;
691+ }
690692 /*
691693 * SG_DXFER_TO_FROM_DEV is functionally equivalent to SG_DXFER_FROM_DEV,
692694 * but is is possible that the app intended SG_DXFER_TO_DEV, because there
@@ -793,8 +795,10 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp, · 100 unmodified lines
793795 "sg_common_write: scsi opcode=0x%02x, cmd_size=%d\n",
794796 (int) cmnd[0], (int) hp->cmd_len));
795797
796− if (hp->dxfer_len >= SZ_256M)
798+ if (hp->dxfer_len >= SZ_256M) {
799+ sg_remove_request(sfp, srp);
797800 return -EINVAL;
801+ }
798802
799803 k = sg_start_req(srp, cmnd);
800804 if (k) {
drivers/soc/fsl/dpio/dpio-service.c+14−5
@@ -478,12 +478,18 @@ int dpaa2_io_service_enqueue_multiple_desc_fq(struct dpaa2_io *d, · 477 unmodified lines
478478 const struct dpaa2_fd *fd,
479479 int nb)
480480 {
481− int i;
482− struct qbman_eq_desc ed[32];
481+ struct qbman_eq_desc *ed;
482+ int i, ret;
483+
484+ ed = kcalloc(sizeof(struct qbman_eq_desc), 32, GFP_KERNEL);
485+ if (!ed)
486+ return -ENOMEM;
483487
484488 d = service_select(d);
485− if (!d)
486− return -ENODEV;
489+ if (!d) {
490+ ret = -ENODEV;
491+ goto out;
492+ }
487493
488494 for (i = 0; i < nb; i++) {
489495 qbman_eq_desc_clear(&ed[i]);
@@ -491,7 +497,10 @@ int dpaa2_io_service_enqueue_multiple_desc_fq(struct dpaa2_io *d, · 1 unmodified line
491497 qbman_eq_desc_set_fq(&ed[i], fqid[i]);
492498 }
493499
494− return qbman_swp_enqueue_multiple_desc(d->swp, &ed[0], fd, nb);
500+ ret = qbman_swp_enqueue_multiple_desc(d->swp, &ed[0], fd, nb);
501+out:
502+ kfree(ed);
503+ return ret;
495504 }
496505 EXPORT_SYMBOL(dpaa2_io_service_enqueue_multiple_desc_fq);
497506
drivers/soc/fsl/dpio/qbman-portal.c+2−4
@@ -753,7 +753,7 @@ int qbman_swp_enqueue_multiple_mem_back(struct qbman_swp *s, · 752 unmodified lines
753753 if (!s->eqcr.available) {
754754 eqcr_ci = s->eqcr.ci;
755755 p = s->addr_cena + QBMAN_CENA_SWP_EQCR_CI_MEMBACK;
756− s->eqcr.ci = __raw_readl(p) & full_mask;
756+ s->eqcr.ci = *p & full_mask;
757757 s->eqcr.available = qm_cyc_diff(s->eqcr.pi_ring_size,
758758 eqcr_ci, s->eqcr.ci);
759759 if (!s->eqcr.available) {
@@ -823,7 +823,6 @@ int qbman_swp_enqueue_multiple_desc_direct(struct qbman_swp *s, · 63 unmodified lines
823823 const uint32_t *cl;
824824 uint32_t eqcr_ci, eqcr_pi, half_mask, full_mask;
825825 int i, num_enqueued = 0;
826− uint64_t addr_cena;
827826
828827 half_mask = (s->eqcr.pi_ci_mask>>1);
829828 full_mask = s->eqcr.pi_ci_mask;
@@ -867,7 +866,6 @@ int qbman_swp_enqueue_multiple_desc_direct(struct qbman_swp *s, · 37 unmodified lines
867866
868867 /* Flush all the cacheline without load/store in between */
869868 eqcr_pi = s->eqcr.pi;
870− addr_cena = (uint64_t)s->addr_cena;
871869 for (i = 0; i < num_enqueued; i++)
872870 eqcr_pi++;
873871 s->eqcr.pi = eqcr_pi & full_mask;
@@ -901,7 +899,7 @@ int qbman_swp_enqueue_multiple_desc_mem_back(struct qbman_swp *s, · 27 unmodified lines
901899 if (!s->eqcr.available) {
902900 eqcr_ci = s->eqcr.ci;
903901 p = s->addr_cena + QBMAN_CENA_SWP_EQCR_CI_MEMBACK;
904− s->eqcr.ci = __raw_readl(p) & full_mask;
902+ s->eqcr.ci = *p & full_mask;
905903 s->eqcr.available = qm_cyc_diff(s->eqcr.pi_ring_size,
906904 eqcr_ci, s->eqcr.ci);
907905 if (!s->eqcr.available)
drivers/soc/imx/Kconfig+1−0
@@ -21,6 +21,7 @@ config SOC_IMX8M · 20 unmodified lines
2121 bool "i.MX8M SoC family support"
2222 depends on ARCH_MXC || COMPILE_TEST
2323 default ARCH_MXC && ARM64
24+ select SOC_BUS
2425 help
2526 If you say yes here you get support for the NXP i.MX8M family
2627 support, it will provide the SoC info like SoC family,
drivers/soc/xilinx/Kconfig+2−2
@@ -19,7 +19,7 @@ config XILINX_VCU · 18 unmodified lines
1919
2020 config ZYNQMP_POWER
2121 bool "Enable Xilinx Zynq MPSoC Power Management driver"
22− depends on PM && ARCH_ZYNQMP
22+ depends on PM && ZYNQMP_FIRMWARE
2323 default y
2424 select MAILBOX
2525 select ZYNQMP_IPI_MBOX
@@ -35,7 +35,7 @@ config ZYNQMP_POWER · 9 unmodified lines
3535 config ZYNQMP_PM_DOMAINS
3636 bool "Enable Zynq MPSoC generic PM domains"
3737 default y
38− depends on PM && ARCH_ZYNQMP && ZYNQMP_FIRMWARE
38+ depends on PM && ZYNQMP_FIRMWARE
3939 select PM_GENERIC_DOMAINS
4040 help
4141 Say yes to enable device power management through PM domains
drivers/staging/comedi/comedi_fops.c+3−1
@@ -2725,8 +2725,10 @@ static int comedi_open(struct inode *inode, struct file *file) · 2724 unmodified lines
27252725 }
27262726
27272727 cfp = kzalloc(sizeof(*cfp), GFP_KERNEL);
2728− if (!cfp)
2728+ if (!cfp) {
2729+ comedi_dev_put(dev);
27292730 return -ENOMEM;
2731+ }
27302732
27312733 cfp->dev = dev;
27322734
drivers/staging/comedi/drivers/dt2815.c+3−0
@@ -92,6 +92,7 @@ static int dt2815_ao_insn(struct comedi_device *dev, struct comedi_subdevice *s, · 91 unmodified lines
9292 int ret;
9393
9494 for (i = 0; i < insn->n; i++) {
95+ /* FIXME: lo bit 0 chooses voltage output or current output */
9596 lo = ((data[i] & 0x0f) << 4) | (chan << 1) | 0x01;
9697 hi = (data[i] & 0xff0) >> 4;
9798
@@ -105,6 +106,8 @@ static int dt2815_ao_insn(struct comedi_device *dev, struct comedi_subdevice *s, · 7 unmodified lines
105106 if (ret)
106107 return ret;
107108
109+ outb(hi, dev->iobase + DT2815_DATA);
110+
108111 devpriv->ao_readback[chan] = data[i];
109112 }
110113 return i;
drivers/staging/gasket/apex_driver.c+0−7
@@ -570,13 +570,6 @@ static const struct pci_device_id apex_pci_ids[] = { · 569 unmodified lines
570570 { PCI_DEVICE(APEX_PCI_VENDOR_ID, APEX_PCI_DEVICE_ID) }, { 0 }
571571 };
572572
573−static void apex_pci_fixup_class(struct pci_dev *pdev)
574−{
575− pdev->class = (PCI_CLASS_SYSTEM_OTHER << 8) | pdev->class;
576−}
577−DECLARE_PCI_FIXUP_CLASS_HEADER(APEX_PCI_VENDOR_ID, APEX_PCI_DEVICE_ID,
578− PCI_CLASS_NOT_DEFINED, 8, apex_pci_fixup_class);
579−
580573 static int apex_pci_probe(struct pci_dev *pci_dev,
581574 const struct pci_device_id *id)
582575 {
drivers/staging/gasket/gasket_sysfs.c+1−2
@@ -228,8 +228,7 @@ int gasket_sysfs_create_entries(struct device *device, · 227 unmodified lines
228228 }
229229
230230 mutex_lock(&mapping->mutex);
231− for (i = 0; strcmp(attrs[i].attr.attr.name, GASKET_ARRAY_END_MARKER);
232− i++) {
231+ for (i = 0; attrs[i].attr.attr.name != NULL; i++) {
233232 if (mapping->attribute_count == GASKET_SYSFS_MAX_NODES) {
234233 dev_err(device,
235234 "Maximum number of sysfs nodes reached for device\n");
drivers/staging/gasket/gasket_sysfs.h+0−4
@@ -30,10 +30,6 @@ · 29 unmodified lines
3030 */
3131 #define GASKET_SYSFS_MAX_NODES 196
3232
33−/* End markers for sysfs struct arrays. */
34−#define GASKET_ARRAY_END_TOKEN GASKET_RESERVED_ARRAY_END
35−#define GASKET_ARRAY_END_MARKER __stringify(GASKET_ARRAY_END_TOKEN)
36−
3733 /*
3834 * Terminator struct for a gasket_sysfs_attr array. Must be at the end of
3935 * all gasket_sysfs_attribute arrays.
drivers/staging/vt6656/key.c+3−11
@@ -83,9 +83,6 @@ static int vnt_set_keymode(struct ieee80211_hw *hw, u8 *mac_addr, · 82 unmodified lines
8383 case VNT_KEY_PAIRWISE:
8484 key_mode |= mode;
8585 key_inx = 4;
86− /* Don't save entry for pairwise key for station mode */
87− if (priv->op_mode == NL80211_IFTYPE_STATION)
88− clear_bit(entry, &priv->key_entry_inuse);
8986 break;
9087 default:
9188 return -EINVAL;
@@ -109,7 +106,6 @@ static int vnt_set_keymode(struct ieee80211_hw *hw, u8 *mac_addr, · 17 unmodified lines
109106 int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
110107 struct ieee80211_vif *vif, struct ieee80211_key_conf *key)
111108 {
112− struct ieee80211_bss_conf *conf = &vif->bss_conf;
113109 struct vnt_private *priv = hw->priv;
114110 u8 *mac_addr = NULL;
115111 u8 key_dec_mode = 0;
@@ -154,16 +150,12 @@ int vnt_set_keys(struct ieee80211_hw *hw, struct ieee80211_sta *sta, · 38 unmodified lines
154150 return -EOPNOTSUPP;
155151 }
156152
157− if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) {
153+ if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
158154 vnt_set_keymode(hw, mac_addr, key, VNT_KEY_PAIRWISE,
159155 key_dec_mode, true);
160− } else {
161− vnt_set_keymode(hw, mac_addr, key, VNT_KEY_DEFAULTKEY,
156+ else
157+ vnt_set_keymode(hw, mac_addr, key, VNT_KEY_GROUP_ADDRESS,
162158 key_dec_mode, true);
163159
164− vnt_set_keymode(hw, (u8 *)conf->bssid, key,
165− VNT_KEY_GROUP_ADDRESS, key_dec_mode, true);
166− }
167−
168160 return 0;
169161 }
drivers/staging/vt6656/main_usb.c+17−14
@@ -625,8 +625,6 @@ static int vnt_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) · 624 unmodified lines
625625
626626 priv->op_mode = vif->type;
627627
628− vnt_set_bss_mode(priv);
629−
630628 /* LED blink on TX */
631629 vnt_mac_set_led(priv, LEDSTS_STS, LEDSTS_INTER);
632630
@@ -713,7 +711,6 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, · 80 unmodified lines
713711 priv->basic_rates = conf->basic_rates;
714712
715713 vnt_update_top_rates(priv);
716− vnt_set_bss_mode(priv);
717714
718715 dev_dbg(&priv->usb->dev, "basic rates %x\n", conf->basic_rates);
719716 }
@@ -742,11 +739,14 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, · 22 unmodified lines
742739 priv->short_slot_time = false;
743740
744741 vnt_set_short_slot_time(priv);
745− vnt_update_ifs(priv);
746742 vnt_set_vga_gain_offset(priv, priv->bb_vga[0]);
747743 vnt_update_pre_ed_threshold(priv, false);
748744 }
749745
746+ if (changed & (BSS_CHANGED_BASIC_RATES | BSS_CHANGED_ERP_PREAMBLE |
747+ BSS_CHANGED_ERP_SLOT))
748+ vnt_set_bss_mode(priv);
749+
750750 if (changed & BSS_CHANGED_TXPOWER)
751751 vnt_rf_setpower(priv, priv->current_rate,
752752 conf->chandef.chan->hw_value);
@@ -770,12 +770,15 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, · 17 unmodified lines
770770 vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL,
771771 TFTCTL_TSFCNTREN);
772772
773− vnt_adjust_tsf(priv, conf->beacon_rate->hw_value,
774− conf->sync_tsf, priv->current_tsf);
775−
776773 vnt_mac_set_beacon_interval(priv, conf->beacon_int);
777774
778775 vnt_reset_next_tbtt(priv, conf->beacon_int);
776+
777+ vnt_adjust_tsf(priv, conf->beacon_rate->hw_value,
778+ conf->sync_tsf, priv->current_tsf);
779+
780+ vnt_update_next_tbtt(priv,
781+ conf->sync_tsf, conf->beacon_int);
779782 } else {
780783 vnt_clear_current_tsf(priv);
781784
@@ -809,15 +812,11 @@ static void vnt_configure(struct ieee80211_hw *hw, · 27 unmodified lines
809812 {
810813 struct vnt_private *priv = hw->priv;
811814 u8 rx_mode = 0;
812− int rc;
813815
814816 *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
815817
816− rc = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR,
817− MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode);
818−
819− if (!rc)
820− rx_mode = RCR_MULTICAST | RCR_BROADCAST;
818+ vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR,
819+ MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode);
821820
822821 dev_dbg(&priv->usb->dev, "rx mode in = %x\n", rx_mode);
823822
@@ -856,8 +855,12 @@ static int vnt_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, · 32 unmodified lines
856855 case SET_KEY:
857856 return vnt_set_keys(hw, sta, vif, key);
858857 case DISABLE_KEY:
859− if (test_bit(key->hw_key_idx, &priv->key_entry_inuse))
858+ if (test_bit(key->hw_key_idx, &priv->key_entry_inuse)) {
860859 clear_bit(key->hw_key_idx, &priv->key_entry_inuse);
860+
861+ vnt_mac_disable_keyentry(priv, key->hw_key_idx);
862+ }
863+
861864 default:
862865 break;
863866 }
drivers/staging/vt6656/usbpipe.c+2−1
@@ -207,7 +207,8 @@ static void vnt_int_process_data(struct vnt_private *priv) · 206 unmodified lines
207207 priv->wake_up_count =
208208 priv->hw->conf.listen_interval;
209209
210− --priv->wake_up_count;
210+ if (priv->wake_up_count)
211+ --priv->wake_up_count;
211212
212213 /* Turn on wake up to listen next beacon */
213214 if (priv->wake_up_count == 1)
drivers/target/target_core_fabric_lib.c+3−2
@@ -63,7 +63,7 @@ static int fc_get_pr_transport_id( · 62 unmodified lines
6363 * encoded TransportID.
6464 */
6565 ptr = &se_nacl->initiatorname[0];
66− for (i = 0; i < 24; ) {
66+ for (i = 0; i < 23; ) {
6767 if (!strncmp(&ptr[i], ":", 1)) {
6868 i++;
6969 continue;
@@ -341,7 +341,8 @@ static char *iscsi_parse_pr_out_transport_id( · 271 unmodified lines
341341 *p = tolower(*p);
342342 p++;
343343 }
344− }
344+ } else
345+ *port_nexus_ptr = NULL;
345346
346347 return &buf[4];
347348 }
drivers/target/target_core_user.c+1−0
@@ -2073,6 +2073,7 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level) · 2072 unmodified lines
20732073 mb->cmd_tail = 0;
20742074 mb->cmd_head = 0;
20752075 tcmu_flush_dcache_range(mb, sizeof(*mb));
2076+ clear_bit(TCMU_DEV_BIT_BROKEN, &udev->flags);
20762077
20772078 del_timer(&udev->cmd_timer);
20782079
drivers/tty/hvc/hvc_console.c+14−9
@@ -302,10 +302,6 @@ int hvc_instantiate(uint32_t vtermno, int index, const struct hv_ops *ops) · 301 unmodified lines
302302 vtermnos[index] = vtermno;
303303 cons_ops[index] = ops;
304304
305− /* reserve all indices up to and including this index */
306− if (last_hvc < index)
307− last_hvc = index;
308−
309305 /* check if we need to re-register the kernel console */
310306 hvc_check_console(index);
311307
@@ -960,13 +956,22 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data, · 648 unmodified lines
960956 cons_ops[i] == hp->ops)
961957 break;
962958
963− /* no matching slot, just use a counter */
964− if (i >= MAX_NR_HVC_CONSOLES)
965− i = ++last_hvc;
959+ if (i >= MAX_NR_HVC_CONSOLES) {
960+
961+ /* find 'empty' slot for console */
962+ for (i = 0; i < MAX_NR_HVC_CONSOLES && vtermnos[i] != -1; i++) {
963+ }
964+
965+ /* no matching slot, just use a counter */
966+ if (i == MAX_NR_HVC_CONSOLES)
967+ i = ++last_hvc + MAX_NR_HVC_CONSOLES;
968+ }
966969
967970 hp->index = i;
968− cons_ops[i] = ops;
969− vtermnos[i] = vtermno;
971+ if (i < MAX_NR_HVC_CONSOLES) {
972+ cons_ops[i] = ops;
973+ vtermnos[i] = vtermno;
974+ }
970975
971976 list_add_tail(&(hp->next), &hvc_structs);
972977 mutex_unlock(&hvc_structs_mutex);
drivers/tty/rocket.c+14−11
@@ -632,18 +632,21 @@ init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) · 631 unmodified lines
632632 tty_port_init(&info->port);
633633 info->port.ops = &rocket_port_ops;
634634 info->flags &= ~ROCKET_MODE_MASK;
635− switch (pc104[board][line]) {
636− case 422:
637− info->flags |= ROCKET_MODE_RS422;
638− break;
639− case 485:
640− info->flags |= ROCKET_MODE_RS485;
641− break;
642− case 232:
643− default:
635+ if (board < ARRAY_SIZE(pc104) && line < ARRAY_SIZE(pc104_1))
636+ switch (pc104[board][line]) {
637+ case 422:
638+ info->flags |= ROCKET_MODE_RS422;
639+ break;
640+ case 485:
641+ info->flags |= ROCKET_MODE_RS485;
642+ break;
643+ case 232:
644+ default:
645+ info->flags |= ROCKET_MODE_RS232;
646+ break;
647+ }
648+ else
644649 info->flags |= ROCKET_MODE_RS232;
645− break;
646− }
647650
648651 info->intmask = RXF_TRIG | TXFIFO_MT | SRC_INT | DELTA_CD | DELTA_CTS | DELTA_DSR;
649652 if (sInitChan(ctlp, &info->channel, aiop, chan) == 0) {
drivers/tty/serial/bcm63xx_uart.c+3−1
@@ -843,8 +843,10 @@ static int bcm_uart_probe(struct platform_device *pdev) · 842 unmodified lines
843843 if (IS_ERR(clk) && pdev->dev.of_node)
844844 clk = of_clk_get(pdev->dev.of_node, 0);
845845
846− if (IS_ERR(clk))
846+ if (IS_ERR(clk)) {
847+ clk_put(clk);
847848 return -ENODEV;
849+ }
848850
849851 port->iotype = UPIO_MEM;
850852 port->irq = res_irq->start;
drivers/tty/serial/owl-uart.c+7−0
@@ -680,6 +680,12 @@ static int owl_uart_probe(struct platform_device *pdev) · 679 unmodified lines
680680 return PTR_ERR(owl_port->clk);
681681 }
682682
683+ ret = clk_prepare_enable(owl_port->clk);
684+ if (ret) {
685+ dev_err(&pdev->dev, "could not enable clk\n");
686+ return ret;
687+ }
688+
683689 owl_port->port.dev = &pdev->dev;
684690 owl_port->port.line = pdev->id;
685691 owl_port->port.type = PORT_OWL;
@@ -712,6 +718,7 @@ static int owl_uart_remove(struct platform_device *pdev) · 26 unmodified lines
712718
713719 uart_remove_one_port(&owl_uart_driver, &owl_port->port);
714720 owl_uart_ports[pdev->id] = NULL;
721+ clk_disable_unprepare(owl_port->clk);
715722
716723 return 0;
717724 }
drivers/tty/serial/sh-sci.c+10−3
@@ -870,9 +870,16 @@ static void sci_receive_chars(struct uart_port *port) · 869 unmodified lines
870870 tty_insert_flip_char(tport, c, TTY_NORMAL);
871871 } else {
872872 for (i = 0; i < count; i++) {
873− char c = serial_port_in(port, SCxRDR);
874−
875− status = serial_port_in(port, SCxSR);
873+ char c;
874+
875+ if (port->type == PORT_SCIF ||
876+ port->type == PORT_HSCIF) {
877+ status = serial_port_in(port, SCxSR);
878+ c = serial_port_in(port, SCxRDR);
879+ } else {
880+ c = serial_port_in(port, SCxRDR);
881+ status = serial_port_in(port, SCxSR);
882+ }
876883 if (uart_handle_sysrq_char(port, c)) {
877884 count--; i--;
878885 continue;
drivers/tty/serial/sunhv.c+3−0
@@ -567,6 +567,9 @@ static int hv_probe(struct platform_device *op) · 566 unmodified lines
567567 sunserial_console_match(&sunhv_console, op->dev.of_node,
568568 &sunhv_reg, port->line, false);
569569
570+ /* We need to initialize lock even for non-registered console */
571+ spin_lock_init(&port->lock);
572+
570573 err = uart_add_one_port(&sunhv_reg, port);
571574 if (err)
572575 goto out_unregister_driver;
drivers/tty/serial/xilinx_uartps.c+49−162
@@ -26,13 +26,15 @@ · 25 unmodified lines
2626
2727 #define CDNS_UART_TTY_NAME "ttyPS"
2828 #define CDNS_UART_NAME "xuartps"
29+#define CDNS_UART_MAJOR 0 /* use dynamic node allocation */
30+#define CDNS_UART_MINOR 0 /* works best with devtmpfs */
31+#define CDNS_UART_NR_PORTS 16
2932 #define CDNS_UART_FIFO_SIZE 64 /* FIFO size */
3033 #define CDNS_UART_REGISTER_SPACE 0x1000
3134 #define TX_TIMEOUT 500000
3235
3336 /* Rx Trigger level */
3437 static int rx_trigger_level = 56;
35−static int uartps_major;
3638 module_param(rx_trigger_level, uint, 0444);
3739 MODULE_PARM_DESC(rx_trigger_level, "Rx trigger level, 1-63 bytes");
3840
@@ -188,7 +190,6 @@ MODULE_PARM_DESC(rx_timeout, "Rx timeout, 1-255"); · 149 unmodified lines
188190 * @pclk: APB clock
189191 * @cdns_uart_driver: Pointer to UART driver
190192 * @baud: Current baud rate
191− * @id: Port ID
192193 * @clk_rate_change_nb: Notifier block for clock changes
193194 * @quirks: Flags for RXBS support.
194195 */
@@ -198,7 +199,6 @@ struct cdns_uart { · 3 unmodified lines
198199 struct clk *pclk;
199200 struct uart_driver *cdns_uart_driver;
200201 unsigned int baud;
201− int id;
202202 struct notifier_block clk_rate_change_nb;
203203 u32 quirks;
204204 bool cts_override;
@@ -1133,6 +1133,8 @@ static const struct uart_ops cdns_uart_ops = { · 928 unmodified lines
11331133 #endif
11341134 };
11351135
1136+static struct uart_driver cdns_uart_uart_driver;
1137+
11361138 #ifdef CONFIG_SERIAL_XILINX_PS_UART_CONSOLE
11371139 /**
11381140 * cdns_uart_console_putchar - write the character to the FIFO buffer
@@ -1272,6 +1274,16 @@ static int cdns_uart_console_setup(struct console *co, char *options) · 133 unmodified lines
12721274
12731275 return uart_set_options(port, co, baud, parity, bits, flow);
12741276 }
1277+
1278+static struct console cdns_uart_console = {
1279+ .name = CDNS_UART_TTY_NAME,
1280+ .write = cdns_uart_console_write,
1281+ .device = uart_console_device,
1282+ .setup = cdns_uart_console_setup,
1283+ .flags = CON_PRINTBUFFER,
1284+ .index = -1, /* Specified on the cmdline (e.g. console=ttyPS ) */
1285+ .data = &cdns_uart_uart_driver,
1286+};
12751287 #endif /* CONFIG_SERIAL_XILINX_PS_UART_CONSOLE */
12761288
12771289 #ifdef CONFIG_PM_SLEEP
@@ -1403,89 +1415,8 @@ static const struct of_device_id cdns_uart_of_match[] = { · 125 unmodified lines
14031415 };
14041416 MODULE_DEVICE_TABLE(of, cdns_uart_of_match);
14051417
1406−/*
1407− * Maximum number of instances without alias IDs but if there is alias
1408− * which target "< MAX_UART_INSTANCES" range this ID can't be used.
1409− */
1410−#define MAX_UART_INSTANCES 32
1411−
1412−/* Stores static aliases list */
1413−static DECLARE_BITMAP(alias_bitmap, MAX_UART_INSTANCES);
1414−static int alias_bitmap_initialized;
1415−
1416−/* Stores actual bitmap of allocated IDs with alias IDs together */
1417−static DECLARE_BITMAP(bitmap, MAX_UART_INSTANCES);
1418−/* Protect bitmap operations to have unique IDs */
1419−static DEFINE_MUTEX(bitmap_lock);
1420−
1421−static int cdns_get_id(struct platform_device *pdev)
1422−{
1423− int id, ret;
1424−
1425− mutex_lock(&bitmap_lock);
1426−
1427− /* Alias list is stable that's why get alias bitmap only once */
1428− if (!alias_bitmap_initialized) {
1429− ret = of_alias_get_alias_list(cdns_uart_of_match, "serial",
1430− alias_bitmap, MAX_UART_INSTANCES);
1431− if (ret && ret != -EOVERFLOW) {
1432− mutex_unlock(&bitmap_lock);
1433− return ret;
1434− }
1435−
1436− alias_bitmap_initialized++;
1437− }
1438−
1439− /* Make sure that alias ID is not taken by instance without alias */
1440− bitmap_or(bitmap, bitmap, alias_bitmap, MAX_UART_INSTANCES);
1441−
1442− dev_dbg(&pdev->dev, "Alias bitmap: %*pb\n",
1443− MAX_UART_INSTANCES, bitmap);
1444−
1445− /* Look for a serialN alias */
1446− id = of_alias_get_id(pdev->dev.of_node, "serial");
1447− if (id < 0) {
1448− dev_warn(&pdev->dev,
1449− "No serial alias passed. Using the first free id\n");
1450−
1451− /*
1452− * Start with id 0 and check if there is no serial0 alias
1453− * which points to device which is compatible with this driver.
1454− * If alias exists then try next free position.
1455− */
1456− id = 0;
1457−
1458− for (;;) {
1459− dev_info(&pdev->dev, "Checking id %d\n", id);
1460− id = find_next_zero_bit(bitmap, MAX_UART_INSTANCES, id);
1461−
1462− /* No free empty instance */
1463− if (id == MAX_UART_INSTANCES) {
1464− dev_err(&pdev->dev, "No free ID\n");
1465− mutex_unlock(&bitmap_lock);
1466− return -EINVAL;
1467− }
1468−
1469− dev_dbg(&pdev->dev, "The empty id is %d\n", id);
1470− /* Check if ID is empty */
1471− if (!test_and_set_bit(id, bitmap)) {
1472− /* Break the loop if bit is taken */
1473− dev_dbg(&pdev->dev,
1474− "Selected ID %d allocation passed\n",
1475− id);
1476− break;
1477− }
1478− dev_dbg(&pdev->dev,
1479− "Selected ID %d allocation failed\n", id);
1480− /* if taking bit fails then try next one */
1481− id++;
1482− }
1483− }
1484−
1485− mutex_unlock(&bitmap_lock);
1486−
1487− return id;
1488−}
1418+/* Temporary variable for storing number of instances */
1419+static int instances;
14891420
14901421 /**
14911422 * cdns_uart_probe - Platform driver probe
@@ -1495,16 +1426,11 @@ static int cdns_get_id(struct platform_device *pdev) · 3 unmodified lines
14951426 */
14961427 static int cdns_uart_probe(struct platform_device *pdev)
14971428 {
1498− int rc, irq;
1429+ int rc, id, irq;
14991430 struct uart_port *port;
15001431 struct resource *res;
15011432 struct cdns_uart *cdns_uart_data;
15021433 const struct of_device_id *match;
1503− struct uart_driver *cdns_uart_uart_driver;
1504− char *driver_name;
1505−#ifdef CONFIG_SERIAL_XILINX_PS_UART_CONSOLE
1506− struct console *cdns_uart_console;
1507−#endif
15081434
15091435 cdns_uart_data = devm_kzalloc(&pdev->dev, sizeof(*cdns_uart_data),
15101436 GFP_KERNEL);
@@ -1514,64 +1440,35 @@ static int cdns_uart_probe(struct platform_device *pdev) · 3 unmodified lines
15141440 if (!port)
15151441 return -ENOMEM;
15161442
1517− cdns_uart_uart_driver = devm_kzalloc(&pdev->dev,
1518− sizeof(*cdns_uart_uart_driver),
1519− GFP_KERNEL);
1520− if (!cdns_uart_uart_driver)
1521− return -ENOMEM;
1522−
1523− cdns_uart_data->id = cdns_get_id(pdev);
1524− if (cdns_uart_data->id < 0)
1525− return cdns_uart_data->id;
1443+ /* Look for a serialN alias */
1444+ id = of_alias_get_id(pdev->dev.of_node, "serial");
1445+ if (id < 0)
1446+ id = 0;
15261447
1527− /* There is a need to use unique driver name */
1528− driver_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s%d",
1529− CDNS_UART_NAME, cdns_uart_data->id);
1530− if (!driver_name) {
1531− rc = -ENOMEM;
1532− goto err_out_id;
1448+ if (id >= CDNS_UART_NR_PORTS) {
1449+ dev_err(&pdev->dev, "Cannot get uart_port structure\n");
1450+ return -ENODEV;
15331451 }
15341452
1535− cdns_uart_uart_driver->owner = THIS_MODULE;
1536− cdns_uart_uart_driver->driver_name = driver_name;
1537− cdns_uart_uart_driver->dev_name = CDNS_UART_TTY_NAME;
1538− cdns_uart_uart_driver->major = uartps_major;
1539− cdns_uart_uart_driver->minor = cdns_uart_data->id;
1540− cdns_uart_uart_driver->nr = 1;
1541−
1453+ if (!cdns_uart_uart_driver.state) {
1454+ cdns_uart_uart_driver.owner = THIS_MODULE;
1455+ cdns_uart_uart_driver.driver_name = CDNS_UART_NAME;
1456+ cdns_uart_uart_driver.dev_name = CDNS_UART_TTY_NAME;
1457+ cdns_uart_uart_driver.major = CDNS_UART_MAJOR;
1458+ cdns_uart_uart_driver.minor = CDNS_UART_MINOR;
1459+ cdns_uart_uart_driver.nr = CDNS_UART_NR_PORTS;
15421460 #ifdef CONFIG_SERIAL_XILINX_PS_UART_CONSOLE
1543− cdns_uart_console = devm_kzalloc(&pdev->dev, sizeof(*cdns_uart_console),
1544− GFP_KERNEL);
1545− if (!cdns_uart_console) {
1546− rc = -ENOMEM;
1547− goto err_out_id;
1548− }
1549−
1550− strncpy(cdns_uart_console->name, CDNS_UART_TTY_NAME,
1551− sizeof(cdns_uart_console->name));
1552− cdns_uart_console->index = cdns_uart_data->id;
1553− cdns_uart_console->write = cdns_uart_console_write;
1554− cdns_uart_console->device = uart_console_device;
1555− cdns_uart_console->setup = cdns_uart_console_setup;
1556− cdns_uart_console->flags = CON_PRINTBUFFER;
1557− cdns_uart_console->data = cdns_uart_uart_driver;
1558− cdns_uart_uart_driver->cons = cdns_uart_console;
1461+ cdns_uart_uart_driver.cons = &cdns_uart_console;
15591462 #endif
15601463
1561− rc = uart_register_driver(cdns_uart_uart_driver);
1562− if (rc < 0) {
1563− dev_err(&pdev->dev, "Failed to register driver\n");
1564− goto err_out_id;
1464+ rc = uart_register_driver(&cdns_uart_uart_driver);
1465+ if (rc < 0) {
1466+ dev_err(&pdev->dev, "Failed to register driver\n");
1467+ return rc;
1468+ }
15651469 }
15661470
1567− cdns_uart_data->cdns_uart_driver = cdns_uart_uart_driver;
1568−
1569− /*
1570− * Setting up proper name_base needs to be done after uart
1571− * registration because tty_driver structure is not filled.
1572− * name_base is 0 by default.
1573− */
1574− cdns_uart_uart_driver->tty_driver->name_base = cdns_uart_data->id;
1471+ cdns_uart_data->cdns_uart_driver = &cdns_uart_uart_driver;
15751472
15761473 match = of_match_node(cdns_uart_of_match, pdev->dev.of_node);
15771474 if (match && match->data) {
@@ -1649,6 +1546,7 @@ static int cdns_uart_probe(struct platform_device *pdev) · 71 unmodified lines
16491546 port->ops = &cdns_uart_ops;
16501547 port->fifosize = CDNS_UART_FIFO_SIZE;
16511548 port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_XILINX_PS_UART_CONSOLE);
1549+ port->line = id;
16521550
16531551 /*
16541552 * Register the port.
@@ -1680,7 +1578,7 @@ static int cdns_uart_probe(struct platform_device *pdev) · 25 unmodified lines
16801578 console_port = port;
16811579 #endif
16821580
1683− rc = uart_add_one_port(cdns_uart_uart_driver, port);
1581+ rc = uart_add_one_port(&cdns_uart_uart_driver, port);
16841582 if (rc) {
16851583 dev_err(&pdev->dev,
16861584 "uart_add_one_port() failed; err=%i\n", rc);
@@ -1690,13 +1588,15 @@ static int cdns_uart_probe(struct platform_device *pdev) · 3 unmodified lines
16901588 #ifdef CONFIG_SERIAL_XILINX_PS_UART_CONSOLE
16911589 /* This is not port which is used for console that's why clean it up */
16921590 if (console_port == port &&
1693− !(cdns_uart_uart_driver->cons->flags & CON_ENABLED))
1591+ !(cdns_uart_uart_driver.cons->flags & CON_ENABLED))
16941592 console_port = NULL;
16951593 #endif
16961594
1697− uartps_major = cdns_uart_uart_driver->tty_driver->major;
16981595 cdns_uart_data->cts_override = of_property_read_bool(pdev->dev.of_node,
16991596 "cts-override");
1597+
1598+ instances++;
1599+
17001600 return 0;
17011601
17021602 err_out_pm_disable:
@@ -1712,12 +1612,8 @@ err_out_clk_disable: · 9 unmodified lines
17121612 err_out_clk_dis_pclk:
17131613 clk_disable_unprepare(cdns_uart_data->pclk);
17141614 err_out_unregister_driver:
1715− uart_unregister_driver(cdns_uart_data->cdns_uart_driver);
1716−err_out_id:
1717− mutex_lock(&bitmap_lock);
1718− if (cdns_uart_data->id < MAX_UART_INSTANCES)
1719− clear_bit(cdns_uart_data->id, bitmap);
1720− mutex_unlock(&bitmap_lock);
1615+ if (!instances)
1616+ uart_unregister_driver(cdns_uart_data->cdns_uart_driver);
17211617 return rc;
17221618 }
17231619
@@ -1740,10 +1636,6 @@ static int cdns_uart_remove(struct platform_device *pdev) · 16 unmodified lines
17401636 #endif
17411637 rc = uart_remove_one_port(cdns_uart_data->cdns_uart_driver, port);
17421638 port->mapbase = 0;
1743− mutex_lock(&bitmap_lock);
1744− if (cdns_uart_data->id < MAX_UART_INSTANCES)
1745− clear_bit(cdns_uart_data->id, bitmap);
1746− mutex_unlock(&bitmap_lock);
17471639 clk_disable_unprepare(cdns_uart_data->uartclk);
17481640 clk_disable_unprepare(cdns_uart_data->pclk);
17491641 pm_runtime_disable(&pdev->dev);
@@ -1756,13 +1648,8 @@ static int cdns_uart_remove(struct platform_device *pdev) · 6 unmodified lines
17561648 console_port = NULL;
17571649 #endif
17581650
1759− /* If this is last instance major number should be initialized */
1760− mutex_lock(&bitmap_lock);
1761− if (bitmap_empty(bitmap, MAX_UART_INSTANCES))
1762− uartps_major = 0;
1763− mutex_unlock(&bitmap_lock);
1764−
1765− uart_unregister_driver(cdns_uart_data->cdns_uart_driver);
1651+ if (!--instances)
1652+ uart_unregister_driver(cdns_uart_data->cdns_uart_driver);
17661653 return rc;
17671654 }
17681655
drivers/tty/sysrq.c+2−0
@@ -74,6 +74,7 @@ int sysrq_mask(void) · 73 unmodified lines
7474 return 1;
7575 return sysrq_enabled;
7676 }
77+EXPORT_SYMBOL_GPL(sysrq_mask);
7778
7879 /*
7980 * A value of 1 means 'all', other nonzero values are an op mask:
@@ -1058,6 +1059,7 @@ int sysrq_toggle_support(int enable_mask) · 978 unmodified lines
10581059
10591060 return 0;
10601061 }
1062+EXPORT_SYMBOL_GPL(sysrq_toggle_support);
10611063
10621064 static int __sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p,
10631065 struct sysrq_key_op *remove_op_p)
drivers/tty/vt/vt.c+4−3
@@ -81,6 +81,7 @@ · 80 unmodified lines
8181 #include <linux/errno.h>
8282 #include <linux/kd.h>
8383 #include <linux/slab.h>
84+#include <linux/vmalloc.h>
8485 #include <linux/major.h>
8586 #include <linux/mm.h>
8687 #include <linux/console.h>
@@ -350,7 +351,7 @@ static struct uni_screen *vc_uniscr_alloc(unsigned int cols, unsigned int rows) · 263 unmodified lines
350351 /* allocate everything in one go */
351352 memsize = cols * rows * sizeof(char32_t);
352353 memsize += rows * sizeof(char32_t *);
353− p = kmalloc(memsize, GFP_KERNEL);
354+ p = vmalloc(memsize);
354355 if (!p)
355356 return NULL;
356357
@@ -366,7 +367,7 @@ static struct uni_screen *vc_uniscr_alloc(unsigned int cols, unsigned int rows) · 9 unmodified lines
366367
367368 static void vc_uniscr_set(struct vc_data *vc, struct uni_screen *new_uniscr)
368369 {
369− kfree(vc->vc_uni_screen);
370+ vfree(vc->vc_uni_screen);
370371 vc->vc_uni_screen = new_uniscr;
371372 }
372373
@@ -1206,7 +1207,7 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, · 833 unmodified lines
12061207 if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
12071208 return 0;
12081209
1209− if (new_screen_size > (4 << 20))
1210+ if (new_screen_size > KMALLOC_MAX_SIZE)
12101211 return -EINVAL;
12111212 newscreen = kzalloc(new_screen_size, GFP_USER);
12121213 if (!newscreen)
drivers/usb/class/cdc-acm.c+31−5
@@ -412,9 +412,12 @@ static void acm_ctrl_irq(struct urb *urb) · 411 unmodified lines
412412
413413 exit:
414414 retval = usb_submit_urb(urb, GFP_ATOMIC);
415− if (retval && retval != -EPERM)
415+ if (retval && retval != -EPERM && retval != -ENODEV)
416416 dev_err(&acm->control->dev,
417417 "%s - usb_submit_urb failed: %d\n", __func__, retval);
418+ else
419+ dev_vdbg(&acm->control->dev,
420+ "control resubmission terminated %d\n", retval);
418421 }
419422
420423 static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
@@ -430,6 +433,8 @@ static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags) · 9 unmodified lines
430433 dev_err(&acm->data->dev,
431434 "urb %d failed submission with %d\n",
432435 index, res);
436+ } else {
437+ dev_vdbg(&acm->data->dev, "intended failure %d\n", res);
433438 }
434439 set_bit(index, &acm->read_urbs_free);
435440 return res;
@@ -471,6 +476,7 @@ static void acm_read_bulk_callback(struct urb *urb) · 35 unmodified lines
471476 int status = urb->status;
472477 bool stopped = false;
473478 bool stalled = false;
479+ bool cooldown = false;
474480
475481 dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
476482 rb->index, urb->actual_length, status);
@@ -497,6 +503,14 @@ static void acm_read_bulk_callback(struct urb *urb) · 20 unmodified lines
497503 __func__, status);
498504 stopped = true;
499505 break;
506+ case -EOVERFLOW:
507+ case -EPROTO:
508+ dev_dbg(&acm->data->dev,
509+ "%s - cooling babbling device\n", __func__);
510+ usb_mark_last_busy(acm->dev);
511+ set_bit(rb->index, &acm->urbs_in_error_delay);
512+ cooldown = true;
513+ break;
500514 default:
501515 dev_dbg(&acm->data->dev,
502516 "%s - nonzero urb status received: %d\n",
@@ -518,9 +532,11 @@ static void acm_read_bulk_callback(struct urb *urb) · 15 unmodified lines
518532 */
519533 smp_mb__after_atomic();
520534
521− if (stopped || stalled) {
535+ if (stopped || stalled || cooldown) {
522536 if (stalled)
523537 schedule_work(&acm->work);
538+ else if (cooldown)
539+ schedule_delayed_work(&acm->dwork, HZ / 2);
524540 return;
525541 }
526542
@@ -557,14 +573,20 @@ static void acm_softint(struct work_struct *work) · 30 unmodified lines
557573 struct acm *acm = container_of(work, struct acm, work);
558574
559575 if (test_bit(EVENT_RX_STALL, &acm->flags)) {
560− if (!(usb_autopm_get_interface(acm->data))) {
576+ smp_mb(); /* against acm_suspend() */
577+ if (!acm->susp_count) {
561578 for (i = 0; i < acm->rx_buflimit; i++)
562579 usb_kill_urb(acm->read_urbs[i]);
563580 usb_clear_halt(acm->dev, acm->in);
564581 acm_submit_read_urbs(acm, GFP_KERNEL);
565− usb_autopm_put_interface(acm->data);
582+ clear_bit(EVENT_RX_STALL, &acm->flags);
566583 }
567− clear_bit(EVENT_RX_STALL, &acm->flags);
584+ }
585+
586+ if (test_and_clear_bit(ACM_ERROR_DELAY, &acm->flags)) {
587+ for (i = 0; i < ACM_NR; i++)
588+ if (test_and_clear_bit(i, &acm->urbs_in_error_delay))
589+ acm_submit_read_urb(acm, i, GFP_NOIO);
568590 }
569591
570592 if (test_and_clear_bit(EVENT_TTY_WAKEUP, &acm->flags))
@@ -1333,6 +1355,7 @@ made_compressed_probe: · 762 unmodified lines
13331355 acm->readsize = readsize;
13341356 acm->rx_buflimit = num_rx_buf;
13351357 INIT_WORK(&acm->work, acm_softint);
1358+ INIT_DELAYED_WORK(&acm->dwork, acm_softint);
13361359 init_waitqueue_head(&acm->wioctl);
13371360 spin_lock_init(&acm->write_lock);
13381361 spin_lock_init(&acm->read_lock);
@@ -1542,6 +1565,7 @@ static void acm_disconnect(struct usb_interface *intf) · 203 unmodified lines
15421565
15431566 acm_kill_urbs(acm);
15441567 cancel_work_sync(&acm->work);
1568+ cancel_delayed_work_sync(&acm->dwork);
15451569
15461570 tty_unregister_device(acm_tty_driver, acm->minor);
15471571
@@ -1584,6 +1608,8 @@ static int acm_suspend(struct usb_interface *intf, pm_message_t message) · 36 unmodified lines
15841608
15851609 acm_kill_urbs(acm);
15861610 cancel_work_sync(&acm->work);
1611+ cancel_delayed_work_sync(&acm->dwork);
1612+ acm->urbs_in_error_delay = 0;
15871613
15881614 return 0;
15891615 }
drivers/usb/class/cdc-acm.h+4−1
@@ -109,8 +109,11 @@ struct acm { · 108 unmodified lines
109109 # define EVENT_TTY_WAKEUP 0
110110 # define EVENT_RX_STALL 1
111111 # define ACM_THROTTLED 2
112+# define ACM_ERROR_DELAY 3
113+ unsigned long urbs_in_error_delay; /* these need to be restarted after a delay */
112114 struct usb_cdc_line_coding line; /* bits, stop, parity */
113− struct work_struct work; /* work queue entry for line discipline waking up */
115+ struct work_struct work; /* work queue entry for various purposes*/
116+ struct delayed_work dwork; /* for cool downs needed in error recovery */
114117 unsigned int ctrlin; /* input control lines (DCD, DSR, RI, break, overruns) */
115118 unsigned int ctrlout; /* output control lines (DTR, RTS) */
116119 struct async_icount iocount; /* counters for control line changes */
drivers/usb/core/hub.c+15−3
@@ -1223,6 +1223,11 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) · 1222 unmodified lines
12231223 #ifdef CONFIG_PM
12241224 udev->reset_resume = 1;
12251225 #endif
1226+ /* Don't set the change_bits when the device
1227+ * was powered off.
1228+ */
1229+ if (test_bit(port1, hub->power_bits))
1230+ set_bit(port1, hub->change_bits);
12261231
12271232 } else {
12281233 /* The power session is gone; tell hub_wq */
@@ -2723,13 +2728,11 @@ static bool use_new_scheme(struct usb_device *udev, int retry, · 1494 unmodified lines
27232728 {
27242729 int old_scheme_first_port =
27252730 port_dev->quirks & USB_PORT_QUIRK_OLD_SCHEME;
2726− int quick_enumeration = (udev->speed == USB_SPEED_HIGH);
27272731
27282732 if (udev->speed >= USB_SPEED_SUPER)
27292733 return false;
27302734
2731− return USE_NEW_SCHEME(retry, old_scheme_first_port || old_scheme_first
2732− || quick_enumeration);
2735+ return USE_NEW_SCHEME(retry, old_scheme_first_port || old_scheme_first);
27332736 }
27342737
27352738 /* Is a USB 3.0 port in the Inactive or Compliance Mode state?
@@ -3088,6 +3091,15 @@ static int check_port_resume_type(struct usb_device *udev, · 352 unmodified lines
30883091 if (portchange & USB_PORT_STAT_C_ENABLE)
30893092 usb_clear_port_feature(hub->hdev, port1,
30903093 USB_PORT_FEAT_C_ENABLE);
3094+
3095+ /*
3096+ * Whatever made this reset-resume necessary may have
3097+ * turned on the port1 bit in hub->change_bits. But after
3098+ * a successful reset-resume we want the bit to be clear;
3099+ * if it was on it would indicate that something happened
3100+ * following the reset-resume.
3101+ */
3102+ clear_bit(port1, hub->change_bits);
30913103 }
30923104
30933105 return status;
drivers/usb/core/message.c+8−1
@@ -589,12 +589,13 @@ void usb_sg_cancel(struct usb_sg_request *io) · 588 unmodified lines
589589 int i, retval;
590590
591591 spin_lock_irqsave(&io->lock, flags);
592− if (io->status) {
592+ if (io->status || io->count == 0) {
593593 spin_unlock_irqrestore(&io->lock, flags);
594594 return;
595595 }
596596 /* shut everything down */
597597 io->status = -ECONNRESET;
598+ io->count++; /* Keep the request alive until we're done */
598599 spin_unlock_irqrestore(&io->lock, flags);
599600
600601 for (i = io->entries - 1; i >= 0; --i) {
@@ -608,6 +609,12 @@ void usb_sg_cancel(struct usb_sg_request *io) · 7 unmodified lines
608609 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
609610 __func__, retval);
610611 }
612+
613+ spin_lock_irqsave(&io->lock, flags);
614+ io->count--;
615+ if (!io->count)
616+ complete(&io->complete);
617+ spin_unlock_irqrestore(&io->lock, flags);
611618 }
612619 EXPORT_SYMBOL_GPL(usb_sg_cancel);
613620
drivers/usb/core/quirks.c+4−0
@@ -430,6 +430,10 @@ static const struct usb_device_id usb_quirk_list[] = { · 429 unmodified lines
430430 /* Corsair K70 LUX */
431431 { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
432432
433+ /* Corsair K70 RGB RAPDIFIRE */
434+ { USB_DEVICE(0x1b1c, 0x1b38), .driver_info = USB_QUIRK_DELAY_INIT |
435+ USB_QUIRK_DELAY_CTRL_MSG },
436+
433437 /* MIDI keyboard WORLDE MINI */
434438 { USB_DEVICE(0x1c75, 0x0204), .driver_info =
435439 USB_QUIRK_CONFIG_INTF_STRINGS },
drivers/usb/dwc3/core.h+6−2
@@ -307,10 +307,14 @@ · 306 unmodified lines
307307
308308 /* Global TX Fifo Size Register */
309309 #define DWC31_GTXFIFOSIZ_TXFRAMNUM BIT(15) /* DWC_usb31 only */
310−#define DWC31_GTXFIFOSIZ_TXFDEF(n) ((n) & 0x7fff) /* DWC_usb31 only */
311−#define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff)
310+#define DWC31_GTXFIFOSIZ_TXFDEP(n) ((n) & 0x7fff) /* DWC_usb31 only */
311+#define DWC3_GTXFIFOSIZ_TXFDEP(n) ((n) & 0xffff)
312312 #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000)
313313
314+/* Global RX Fifo Size Register */
315+#define DWC31_GRXFIFOSIZ_RXFDEP(n) ((n) & 0x7fff) /* DWC_usb31 only */
316+#define DWC3_GRXFIFOSIZ_RXFDEP(n) ((n) & 0xffff)
317+
314318 /* Global Event Size Registers */
315319 #define DWC3_GEVNTSIZ_INTMASK BIT(31)
316320 #define DWC3_GEVNTSIZ_SIZE(n) ((n) & 0xffff)
drivers/usb/dwc3/gadget.c+47−29
@@ -1728,7 +1728,6 @@ static int __dwc3_gadget_wakeup(struct dwc3 *dwc) · 1727 unmodified lines
17281728 u32 reg;
17291729
17301730 u8 link_state;
1731− u8 speed;
17321731
17331732 /*
17341733 * According to the Databook Remote wakeup request should
@@ -1738,16 +1737,13 @@ static int __dwc3_gadget_wakeup(struct dwc3 *dwc) · 3 unmodified lines
17381737 */
17391738 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
17401739
1741− speed = reg & DWC3_DSTS_CONNECTSPD;
1742− if ((speed == DWC3_DSTS_SUPERSPEED) ||
1743− (speed == DWC3_DSTS_SUPERSPEED_PLUS))
1744− return 0;
1745−
17461740 link_state = DWC3_DSTS_USBLNKST(reg);
17471741
17481742 switch (link_state) {
1743+ case DWC3_LINK_STATE_RESET:
17491744 case DWC3_LINK_STATE_RX_DET: /* in HS, means Early Suspend */
17501745 case DWC3_LINK_STATE_U3: /* in HS, means SUSPEND */
1746+ case DWC3_LINK_STATE_RESUME:
17511747 break;
17521748 default:
17531749 return -EINVAL;
@@ -2227,7 +2223,6 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) · 473 unmodified lines
22272223 {
22282224 struct dwc3 *dwc = dep->dwc;
22292225 int mdwidth;
2230− int kbytes;
22312226 int size;
22322227
22332228 mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
@@ -2236,24 +2231,24 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) · 2 unmodified lines
22362231
22372232 size = dwc3_readl(dwc->regs, DWC3_GTXFIFOSIZ(dep->number >> 1));
22382233 if (dwc3_is_usb31(dwc))
2239− size = DWC31_GTXFIFOSIZ_TXFDEF(size);
2234+ size = DWC31_GTXFIFOSIZ_TXFDEP(size);
22402235 else
2241− size = DWC3_GTXFIFOSIZ_TXFDEF(size);
2236+ size = DWC3_GTXFIFOSIZ_TXFDEP(size);
22422237
22432238 /* FIFO Depth is in MDWDITH bytes. Multiply */
22442239 size *= mdwidth;
22452240
2246− kbytes = size / 1024;
2247− if (kbytes == 0)
2248− kbytes = 1;
2249−
22502241 /*
2251− * FIFO sizes account an extra MDWIDTH * (kbytes + 1) bytes for
2252− * internal overhead. We don't really know how these are used,
2253− * but documentation say it exists.
2242+ * To meet performance requirement, a minimum TxFIFO size of 3x
2243+ * MaxPacketSize is recommended for endpoints that support burst and a
2244+ * minimum TxFIFO size of 2x MaxPacketSize for endpoints that don't
2245+ * support burst. Use those numbers and we can calculate the max packet
2246+ * limit as below.
22542247 */
2255− size -= mdwidth * (kbytes + 1);
2256− size /= kbytes;
2248+ if (dwc->maximum_speed >= USB_SPEED_SUPER)
2249+ size /= 3;
2250+ else
2251+ size /= 2;
22572252
22582253 usb_ep_set_maxpacket_limit(&dep->endpoint, size);
22592254
@@ -2271,8 +2266,39 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) · 11 unmodified lines
22712266 static int dwc3_gadget_init_out_endpoint(struct dwc3_ep *dep)
22722267 {
22732268 struct dwc3 *dwc = dep->dwc;
2269+ int mdwidth;
2270+ int size;
2271+
2272+ mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
22742273
2275− usb_ep_set_maxpacket_limit(&dep->endpoint, 1024);
2274+ /* MDWIDTH is represented in bits, convert to bytes */
2275+ mdwidth /= 8;
2276+
2277+ /* All OUT endpoints share a single RxFIFO space */
2278+ size = dwc3_readl(dwc->regs, DWC3_GRXFIFOSIZ(0));
2279+ if (dwc3_is_usb31(dwc))
2280+ size = DWC31_GRXFIFOSIZ_RXFDEP(size);
2281+ else
2282+ size = DWC3_GRXFIFOSIZ_RXFDEP(size);
2283+
2284+ /* FIFO depth is in MDWDITH bytes */
2285+ size *= mdwidth;
2286+
2287+ /*
2288+ * To meet performance requirement, a minimum recommended RxFIFO size
2289+ * is defined as follow:
2290+ * RxFIFO size >= (3 x MaxPacketSize) +
2291+ * (3 x 8 bytes setup packets size) + (16 bytes clock crossing margin)
2292+ *
2293+ * Then calculate the max packet limit as below.
2294+ */
2295+ size -= (3 * 8) + 16;
2296+ if (size < 0)
2297+ size = 0;
2298+ else
2299+ size /= 3;
2300+
2301+ usb_ep_set_maxpacket_limit(&dep->endpoint, size);
22762302 dep->endpoint.max_streams = 15;
22772303 dep->endpoint.ops = &dwc3_gadget_ep_ops;
22782304 list_add_tail(&dep->endpoint.ep_list,
@@ -2484,14 +2510,7 @@ static int dwc3_gadget_ep_reclaim_trb_linear(struct dwc3_ep *dep, · 205 unmodified lines
24842510
24852511 static bool dwc3_gadget_ep_request_completed(struct dwc3_request *req)
24862512 {
2487− /*
2488− * For OUT direction, host may send less than the setup
2489− * length. Return true for all OUT requests.
2490− */
2491− if (!req->direction)
2492− return true;
2493−
2494− return req->request.actual == req->request.length;
2513+ return req->num_pending_sgs == 0;
24952514 }
24962515
24972516 static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
@@ -2515,8 +2534,7 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep, · 17 unmodified lines
25152534
25162535 req->request.actual = req->request.length - req->remaining;
25172536
2518− if (!dwc3_gadget_ep_request_completed(req) ||
2519− req->num_pending_sgs) {
2537+ if (!dwc3_gadget_ep_request_completed(req)) {
25202538 __dwc3_gadget_kick_transfer(dep);
25212539 goto out;
25222540 }
drivers/usb/early/xhci-dbc.c+4−4
@@ -728,19 +728,19 @@ static void xdbc_handle_tx_event(struct xdbc_trb *evt_trb) · 727 unmodified lines
728728 case COMP_USB_TRANSACTION_ERROR:
729729 case COMP_STALL_ERROR:
730730 default:
731− if (ep_id == XDBC_EPID_OUT)
731+ if (ep_id == XDBC_EPID_OUT || ep_id == XDBC_EPID_OUT_INTEL)
732732 xdbc.flags |= XDBC_FLAGS_OUT_STALL;
733− if (ep_id == XDBC_EPID_IN)
733+ if (ep_id == XDBC_EPID_IN || ep_id == XDBC_EPID_IN_INTEL)
734734 xdbc.flags |= XDBC_FLAGS_IN_STALL;
735735
736736 xdbc_trace("endpoint %d stalled\n", ep_id);
737737 break;
738738 }
739739
740− if (ep_id == XDBC_EPID_IN) {
740+ if (ep_id == XDBC_EPID_IN || ep_id == XDBC_EPID_IN_INTEL) {
741741 xdbc.flags &= ~XDBC_FLAGS_IN_PROCESS;
742742 xdbc_bulk_transfer(NULL, XDBC_MAX_PACKET, true);
743− } else if (ep_id == XDBC_EPID_OUT) {
743+ } else if (ep_id == XDBC_EPID_OUT || ep_id == XDBC_EPID_OUT_INTEL) {
744744 xdbc.flags &= ~XDBC_FLAGS_OUT_PROCESS;
745745 } else {
746746 xdbc_trace("invalid endpoint id %d\n", ep_id);
drivers/usb/early/xhci-dbc.h+16−2
@@ -120,8 +120,22 @@ struct xdbc_ring { · 119 unmodified lines
120120 u32 cycle_state;
121121 };
122122
123−#define XDBC_EPID_OUT 2
124−#define XDBC_EPID_IN 3
123+/*
124+ * These are the "Endpoint ID" (also known as "Context Index") values for the
125+ * OUT Transfer Ring and the IN Transfer Ring of a Debug Capability Context data
126+ * structure.
127+ * According to the "eXtensible Host Controller Interface for Universal Serial
128+ * Bus (xHCI)" specification, section "7.6.3.2 Endpoint Contexts and Transfer
129+ * Rings", these should be 0 and 1, and those are the values AMD machines give
130+ * you; but Intel machines seem to use the formula from section "4.5.1 Device
131+ * Context Index", which is supposed to be used for the Device Context only.
132+ * Luckily the values from Intel don't overlap with those from AMD, so we can
133+ * just test for both.
134+ */
135+#define XDBC_EPID_OUT 0
136+#define XDBC_EPID_IN 1
137+#define XDBC_EPID_OUT_INTEL 2
138+#define XDBC_EPID_IN_INTEL 3
125139
126140 struct xdbc_state {
127141 u16 vendor;
drivers/usb/gadget/function/f_fs.c+4−0
@@ -1813,6 +1813,10 @@ static void ffs_data_reset(struct ffs_data *ffs) · 1812 unmodified lines
18131813 ffs->state = FFS_READ_DESCRIPTORS;
18141814 ffs->setup_state = FFS_NO_SETUP;
18151815 ffs->flags = 0;
1816+
1817+ ffs->ms_os_descs_ext_prop_count = 0;
1818+ ffs->ms_os_descs_ext_prop_name_len = 0;
1819+ ffs->ms_os_descs_ext_prop_data_len = 0;
18161820 }
18171821
18181822
drivers/usb/gadget/legacy/raw_gadget.c+42−29
@@ -81,6 +81,7 @@ static int raw_event_queue_add(struct raw_event_queue *queue, · 80 unmodified lines
8181 static struct usb_raw_event *raw_event_queue_fetch(
8282 struct raw_event_queue *queue)
8383 {
84+ int ret;
8485 unsigned long flags;
8586 struct usb_raw_event *event;
8687
@@ -89,11 +90,18 @@ static struct usb_raw_event *raw_event_queue_fetch( · 2 unmodified lines
8990 * there's at least one event queued by decrementing the semaphore,
9091 * and then take the lock to protect queue struct fields.
9192 */
92− if (down_interruptible(&queue->sema))
93− return NULL;
93+ ret = down_interruptible(&queue->sema);
94+ if (ret)
95+ return ERR_PTR(ret);
9496 spin_lock_irqsave(&queue->lock, flags);
95− if (WARN_ON(!queue->size))
96− return NULL;
97+ /*
98+ * queue->size must have the same value as queue->sema counter (before
99+ * the down_interruptible() call above), so this check is a fail-safe.
100+ */
101+ if (WARN_ON(!queue->size)) {
102+ spin_unlock_irqrestore(&queue->lock, flags);
103+ return ERR_PTR(-ENODEV);
104+ }
97105 event = queue->events[0];
98106 queue->size--;
99107 memmove(&queue->events[0], &queue->events[1],
@@ -392,9 +400,8 @@ static int raw_ioctl_init(struct raw_dev *dev, unsigned long value) · 292 unmodified lines
392400 char *udc_device_name;
393401 unsigned long flags;
394402
395− ret = copy_from_user(&arg, (void __user *)value, sizeof(arg));
396− if (ret)
397− return ret;
403+ if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
404+ return -EFAULT;
398405
399406 switch (arg.speed) {
400407 case USB_SPEED_UNKNOWN:
@@ -501,15 +508,13 @@ out_unlock: · 100 unmodified lines
501508
502509 static int raw_ioctl_event_fetch(struct raw_dev *dev, unsigned long value)
503510 {
504− int ret = 0;
505511 struct usb_raw_event arg;
506512 unsigned long flags;
507513 struct usb_raw_event *event;
508514 uint32_t length;
509515
510− ret = copy_from_user(&arg, (void __user *)value, sizeof(arg));
511− if (ret)
512− return ret;
516+ if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
517+ return -EFAULT;
513518
514519 spin_lock_irqsave(&dev->lock, flags);
515520 if (dev->state != STATE_DEV_RUNNING) {
@@ -525,25 +530,31 @@ static int raw_ioctl_event_fetch(struct raw_dev *dev, unsigned long value) · 9 unmodified lines
525530 spin_unlock_irqrestore(&dev->lock, flags);
526531
527532 event = raw_event_queue_fetch(&dev->queue);
528− if (!event) {
533+ if (PTR_ERR(event) == -EINTR) {
529534 dev_dbg(&dev->gadget->dev, "event fetching interrupted\n");
530535 return -EINTR;
531536 }
537+ if (IS_ERR(event)) {
538+ dev_err(&dev->gadget->dev, "failed to fetch event\n");
539+ spin_lock_irqsave(&dev->lock, flags);
540+ dev->state = STATE_DEV_FAILED;
541+ spin_unlock_irqrestore(&dev->lock, flags);
542+ return -ENODEV;
543+ }
532544 length = min(arg.length, event->length);
533− ret = copy_to_user((void __user *)value, event,
534− sizeof(*event) + length);
535− return ret;
545+ if (copy_to_user((void __user *)value, event, sizeof(*event) + length))
546+ return -EFAULT;
547+
548+ return 0;
536549 }
537550
538551 static void *raw_alloc_io_data(struct usb_raw_ep_io *io, void __user *ptr,
539552 bool get_from_user)
540553 {
541− int ret;
542554 void *data;
543555
544− ret = copy_from_user(io, ptr, sizeof(*io));
545− if (ret)
546− return ERR_PTR(ret);
556+ if (copy_from_user(io, ptr, sizeof(*io)))
557+ return ERR_PTR(-EFAULT);
547558 if (io->ep >= USB_RAW_MAX_ENDPOINTS)
548559 return ERR_PTR(-EINVAL);
549560 if (!usb_raw_io_flags_valid(io->flags))
@@ -658,12 +669,13 @@ static int raw_ioctl_ep0_read(struct raw_dev *dev, unsigned long value) · 108 unmodified lines
658669 if (IS_ERR(data))
659670 return PTR_ERR(data);
660671 ret = raw_process_ep0_io(dev, &io, data, false);
661− if (ret < 0) {
662− kfree(data);
663− return ret;
664− }
672+ if (ret)
673+ goto free;
674+
665675 length = min(io.length, (unsigned int)ret);
666− ret = copy_to_user((void __user *)(value + sizeof(io)), data, length);
676+ if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
677+ ret = -EFAULT;
678+free:
667679 kfree(data);
668680 return ret;
669681 }
@@ -952,12 +964,13 @@ static int raw_ioctl_ep_read(struct raw_dev *dev, unsigned long value) · 282 unmodified lines
952964 if (IS_ERR(data))
953965 return PTR_ERR(data);
954966 ret = raw_process_ep_io(dev, &io, data, false);
955− if (ret < 0) {
956− kfree(data);
957− return ret;
958− }
967+ if (ret)
968+ goto free;
969+
959970 length = min(io.length, (unsigned int)ret);
960− ret = copy_to_user((void __user *)(value + sizeof(io)), data, length);
971+ if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
972+ ret = -EFAULT;
973+free:
961974 kfree(data);
962975 return ret;
963976 }
drivers/usb/gadget/udc/atmel_usba_udc.c+2−2
@@ -1951,10 +1951,10 @@ static irqreturn_t usba_vbus_irq_thread(int irq, void *devid) · 1950 unmodified lines
19511951 usba_start(udc);
19521952 } else {
19531953 udc->suspended = false;
1954− usba_stop(udc);
1955−
19561954 if (udc->driver->disconnect)
19571955 udc->driver->disconnect(&udc->gadget);
1956+
1957+ usba_stop(udc);
19581958 }
19591959 udc->vbus_prev = vbus;
19601960 }
drivers/usb/gadget/udc/bdc/bdc_ep.c+1−1
@@ -540,7 +540,7 @@ static void bdc_req_complete(struct bdc_ep *ep, struct bdc_req *req, · 539 unmodified lines
540540 {
541541 struct bdc *bdc = ep->bdc;
542542
543− if (req == NULL || &req->queue == NULL || &req->usb_req == NULL)
543+ if (req == NULL)
544544 return;
545545
546546 dev_dbg(bdc->dev, "%s ep:%s status:%d\n", __func__, ep->name, status);
drivers/usb/host/xhci-hub.c+9−0
@@ -1571,6 +1571,8 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf) · 1570 unmodified lines
15711571 }
15721572 if ((temp & PORT_RC))
15731573 reset_change = true;
1574+ if (temp & PORT_OC)
1575+ status = 1;
15741576 }
15751577 if (!status && !reset_change) {
15761578 xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
@@ -1636,6 +1638,13 @@ retry: · 59 unmodified lines
16361638 port_index);
16371639 goto retry;
16381640 }
1641+ /* bail out if port detected a over-current condition */
1642+ if (t1 & PORT_OC) {
1643+ bus_state->bus_suspended = 0;
1644+ spin_unlock_irqrestore(&xhci->lock, flags);
1645+ xhci_dbg(xhci, "Bus suspend bailout, port over-current detected\n");
1646+ return -EBUSY;
1647+ }
16391648 /* suspend ports in U0, or bail out for new connect changes */
16401649 if ((t1 & PORT_PE) && (t1 & PORT_PLS_MASK) == XDEV_U0) {
16411650 if ((t1 & PORT_CSC) && wake_enabled) {
drivers/usb/host/xhci-ring.c+40−6
@@ -547,6 +547,23 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, · 546 unmodified lines
547547 stream_id);
548548 return;
549549 }
550+ /*
551+ * A cancelled TD can complete with a stall if HW cached the trb.
552+ * In this case driver can't find cur_td, but if the ring is empty we
553+ * can move the dequeue pointer to the current enqueue position.
554+ */
555+ if (!cur_td) {
556+ if (list_empty(&ep_ring->td_list)) {
557+ state->new_deq_seg = ep_ring->enq_seg;
558+ state->new_deq_ptr = ep_ring->enqueue;
559+ state->new_cycle_state = ep_ring->cycle_state;
560+ goto done;
561+ } else {
562+ xhci_warn(xhci, "Can't find new dequeue state, missing cur_td\n");
563+ return;
564+ }
565+ }
566+
550567 /* Dig out the cycle state saved by the xHC during the stop ep cmd */
551568 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
552569 "Finding endpoint context");
@@ -592,6 +609,7 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, · 39 unmodified lines
592609 state->new_deq_seg = new_seg;
593610 state->new_deq_ptr = new_deq;
594611
612+done:
595613 /* Don't update the ring cycle state for the producer (us). */
596614 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
597615 "Cycle state = 0x%x", state->new_cycle_state);
@@ -1856,8 +1874,8 @@ static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, · 1258 unmodified lines
18561874
18571875 if (reset_type == EP_HARD_RESET) {
18581876 ep->ep_state |= EP_HARD_CLEAR_TOGGLE;
1859− xhci_cleanup_stalled_ring(xhci, ep_index, stream_id, td);
1860− xhci_clear_hub_tt_buffer(xhci, td, ep);
1877+ xhci_cleanup_stalled_ring(xhci, slot_id, ep_index, stream_id,
1878+ td);
18611879 }
18621880 xhci_ring_cmd_db(xhci);
18631881 }
@@ -1978,11 +1996,18 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td, · 114 unmodified lines
19781996 if (trb_comp_code == COMP_STALL_ERROR ||
19791997 xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
19801998 trb_comp_code)) {
1981− /* Issue a reset endpoint command to clear the host side
1982− * halt, followed by a set dequeue command to move the
1983− * dequeue pointer past the TD.
1984− * The class driver clears the device side halt later.
1999+ /*
2000+ * xhci internal endpoint state will go to a "halt" state for
2001+ * any stall, including default control pipe protocol stall.
2002+ * To clear the host side halt we need to issue a reset endpoint
2003+ * command, followed by a set dequeue command to move past the
2004+ * TD.
2005+ * Class drivers clear the device side halt from a functional
2006+ * stall later. Hub TT buffer should only be cleared for FS/LS
2007+ * devices behind HS hubs for functional stalls.
19852008 */
2009+ if ((ep_index != 0) || (trb_comp_code != COMP_STALL_ERROR))
2010+ xhci_clear_hub_tt_buffer(xhci, td, ep);
19862011 xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index,
19872012 ep_ring->stream_id, td, EP_HARD_RESET);
19882013 } else {
@@ -2539,6 +2564,15 @@ static int handle_tx_event(struct xhci_hcd *xhci, · 550 unmodified lines
25392564 xhci_dbg(xhci, "td_list is empty while skip flag set. Clear skip flag for slot %u ep %u.\n",
25402565 slot_id, ep_index);
25412566 }
2567+ if (trb_comp_code == COMP_STALL_ERROR ||
2568+ xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
2569+ trb_comp_code)) {
2570+ xhci_cleanup_halted_endpoint(xhci, slot_id,
2571+ ep_index,
2572+ ep_ring->stream_id,
2573+ NULL,
2574+ EP_HARD_RESET);
2575+ }
25422576 goto cleanup;
25432577 }
25442578
drivers/usb/host/xhci.c+7−7
@@ -3031,19 +3031,19 @@ static void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, · 3030 unmodified lines
30313031 added_ctxs, added_ctxs);
30323032 }
30333033
3034−void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int ep_index,
3035− unsigned int stream_id, struct xhci_td *td)
3034+void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int slot_id,
3035+ unsigned int ep_index, unsigned int stream_id,
3036+ struct xhci_td *td)
30363037 {
30373038 struct xhci_dequeue_state deq_state;
3038− struct usb_device *udev = td->urb->dev;
30393039
30403040 xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
30413041 "Cleaning up stalled endpoint ring");
30423042 /* We need to move the HW's dequeue pointer past this TD,
30433043 * or it will attempt to resend it on the next doorbell ring.
30443044 */
3045− xhci_find_new_dequeue_state(xhci, udev->slot_id,
3046− ep_index, stream_id, td, &deq_state);
3045+ xhci_find_new_dequeue_state(xhci, slot_id, ep_index, stream_id, td,
3046+ &deq_state);
30473047
30483048 if (!deq_state.new_deq_ptr || !deq_state.new_deq_seg)
30493049 return;
@@ -3054,7 +3054,7 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int ep_index, · 4 unmodified lines
30543054 if (!(xhci->quirks & XHCI_RESET_EP_QUIRK)) {
30553055 xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
30563056 "Queueing new dequeue state");
3057− xhci_queue_new_dequeue_state(xhci, udev->slot_id,
3057+ xhci_queue_new_dequeue_state(xhci, slot_id,
30583058 ep_index, &deq_state);
30593059 } else {
30603060 /* Better hope no one uses the input context between now and the
@@ -3065,7 +3065,7 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int ep_index, · 4 unmodified lines
30653065 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
30663066 "Setting up input context for "
30673067 "configure endpoint command");
3068− xhci_setup_input_ctx_for_quirk(xhci, udev->slot_id,
3068+ xhci_setup_input_ctx_for_quirk(xhci, slot_id,
30693069 ep_index, &deq_state);
30703070 }
30713071 }
drivers/usb/host/xhci.h+3−2
@@ -2116,8 +2116,9 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, · 2115 unmodified lines
21162116 void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
21172117 unsigned int slot_id, unsigned int ep_index,
21182118 struct xhci_dequeue_state *deq_state);
2119−void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int ep_index,
2120− unsigned int stream_id, struct xhci_td *td);
2119+void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int slot_id,
2120+ unsigned int ep_index, unsigned int stream_id,
2121+ struct xhci_td *td);
21212122 void xhci_stop_endpoint_command_watchdog(struct timer_list *t);
21222123 void xhci_handle_command_timeout(struct work_struct *work);
21232124
drivers/usb/misc/sisusbvga/sisusb.c+10−10
@@ -1199,18 +1199,18 @@ static int sisusb_read_mem_bulk(struct sisusb_usb_data *sisusb, u32 addr, · 1198 unmodified lines
11991199 /* High level: Gfx (indexed) register access */
12001200
12011201 #ifdef CONFIG_USB_SISUSBVGA_CON
1202−int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data)
1202+int sisusb_setreg(struct sisusb_usb_data *sisusb, u32 port, u8 data)
12031203 {
12041204 return sisusb_write_memio_byte(sisusb, SISUSB_TYPE_IO, port, data);
12051205 }
12061206
1207−int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 *data)
1207+int sisusb_getreg(struct sisusb_usb_data *sisusb, u32 port, u8 *data)
12081208 {
12091209 return sisusb_read_memio_byte(sisusb, SISUSB_TYPE_IO, port, data);
12101210 }
12111211 #endif
12121212
1213−int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port,
1213+int sisusb_setidxreg(struct sisusb_usb_data *sisusb, u32 port,
12141214 u8 index, u8 data)
12151215 {
12161216 int ret;
@@ -1220,7 +1220,7 @@ int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, · 3 unmodified lines
12201220 return ret;
12211221 }
12221222
1223−int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port,
1223+int sisusb_getidxreg(struct sisusb_usb_data *sisusb, u32 port,
12241224 u8 index, u8 *data)
12251225 {
12261226 int ret;
@@ -1230,7 +1230,7 @@ int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, · 3 unmodified lines
12301230 return ret;
12311231 }
12321232
1233−int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx,
1233+int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, u32 port, u8 idx,
12341234 u8 myand, u8 myor)
12351235 {
12361236 int ret;
@@ -1245,7 +1245,7 @@ int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx, · 8 unmodified lines
12451245 }
12461246
12471247 static int sisusb_setidxregmask(struct sisusb_usb_data *sisusb,
1248− int port, u8 idx, u8 data, u8 mask)
1248+ u32 port, u8 idx, u8 data, u8 mask)
12491249 {
12501250 int ret;
12511251 u8 tmp;
@@ -1258,13 +1258,13 @@ static int sisusb_setidxregmask(struct sisusb_usb_data *sisusb, · 6 unmodified lines
12581258 return ret;
12591259 }
12601260
1261−int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
1261+int sisusb_setidxregor(struct sisusb_usb_data *sisusb, u32 port,
12621262 u8 index, u8 myor)
12631263 {
12641264 return sisusb_setidxregandor(sisusb, port, index, 0xff, myor);
12651265 }
12661266
1267−int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
1267+int sisusb_setidxregand(struct sisusb_usb_data *sisusb, u32 port,
12681268 u8 idx, u8 myand)
12691269 {
12701270 return sisusb_setidxregandor(sisusb, port, idx, myand, 0x00);
@@ -2785,8 +2785,8 @@ static loff_t sisusb_lseek(struct file *file, loff_t offset, int orig) · 1514 unmodified lines
27852785 static int sisusb_handle_command(struct sisusb_usb_data *sisusb,
27862786 struct sisusb_command *y, unsigned long arg)
27872787 {
2788− int retval, port, length;
2789− u32 address;
2788+ int retval, length;
2789+ u32 port, address;
27902790
27912791 /* All our commands require the device
27922792 * to be initialized.
drivers/usb/misc/sisusbvga/sisusb_init.h+7−7
@@ -812,17 +812,17 @@ static const struct SiS_VCLKData SiSUSB_VCLKData[] = { · 811 unmodified lines
812812 int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
813813 int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
814814
815−extern int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data);
816−extern int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 * data);
817−extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port,
815+extern int sisusb_setreg(struct sisusb_usb_data *sisusb, u32 port, u8 data);
816+extern int sisusb_getreg(struct sisusb_usb_data *sisusb, u32 port, u8 * data);
817+extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, u32 port,
818818 u8 index, u8 data);
819−extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port,
819+extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, u32 port,
820820 u8 index, u8 * data);
821−extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port,
821+extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, u32 port,
822822 u8 idx, u8 myand, u8 myor);
823−extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
823+extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, u32 port,
824824 u8 index, u8 myor);
825−extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
825+extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, u32 port,
826826 u8 idx, u8 myand);
827827
828828 void sisusb_delete(struct kref *kref);
drivers/usb/storage/uas.c+43−3
@@ -81,6 +81,19 @@ static void uas_free_streams(struct uas_dev_info *devinfo); · 80 unmodified lines
8181 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
8282 int status);
8383
84+/*
85+ * This driver needs its own workqueue, as we need to control memory allocation.
86+ *
87+ * In the course of error handling and power management uas_wait_for_pending_cmnds()
88+ * needs to flush pending work items. In these contexts we cannot allocate memory
89+ * by doing block IO as we would deadlock. For the same reason we cannot wait
90+ * for anything allocating memory not heeding these constraints.
91+ *
92+ * So we have to control all work items that can be on the workqueue we flush.
93+ * Hence we cannot share a queue and need our own.
94+ */
95+static struct workqueue_struct *workqueue;
96+
8497 static void uas_do_work(struct work_struct *work)
8598 {
8699 struct uas_dev_info *devinfo =
@@ -109,7 +122,7 @@ static void uas_do_work(struct work_struct *work) · 22 unmodified lines
109122 if (!err)
110123 cmdinfo->state &= ~IS_IN_WORK_LIST;
111124 else
112− schedule_work(&devinfo->work);
125+ queue_work(workqueue, &devinfo->work);
113126 }
114127 out:
115128 spin_unlock_irqrestore(&devinfo->lock, flags);
@@ -134,7 +147,7 @@ static void uas_add_work(struct uas_cmd_info *cmdinfo) · 18 unmodified lines
134147
135148 lockdep_assert_held(&devinfo->lock);
136149 cmdinfo->state |= IS_IN_WORK_LIST;
137− schedule_work(&devinfo->work);
150+ queue_work(workqueue, &devinfo->work);
138151 }
139152
140153 static void uas_zap_pending(struct uas_dev_info *devinfo, int result)
@@ -190,6 +203,9 @@ static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix, · 49 unmodified lines
190203 struct uas_cmd_info *ci = (void *)&cmnd->SCp;
191204 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
192205
206+ if (status == -ENODEV) /* too late */
207+ return;
208+
193209 scmd_printk(KERN_INFO, cmnd,
194210 "%s %d uas-tag %d inflight:%s%s%s%s%s%s%s%s%s%s%s%s ",
195211 prefix, status, cmdinfo->uas_tag,
@@ -1226,7 +1242,31 @@ static struct usb_driver uas_driver = { · 1030 unmodified lines
12261242 .id_table = uas_usb_ids,
12271243 };
12281244
1229−module_usb_driver(uas_driver);
1245+static int __init uas_init(void)
1246+{
1247+ int rv;
1248+
1249+ workqueue = alloc_workqueue("uas", WQ_MEM_RECLAIM, 0);
1250+ if (!workqueue)
1251+ return -ENOMEM;
1252+
1253+ rv = usb_register(&uas_driver);
1254+ if (rv) {
1255+ destroy_workqueue(workqueue);
1256+ return -ENOMEM;
1257+ }
1258+
1259+ return 0;
1260+}
1261+
1262+static void __exit uas_exit(void)
1263+{
1264+ usb_deregister(&uas_driver);
1265+ destroy_workqueue(workqueue);
1266+}
1267+
1268+module_init(uas_init);
1269+module_exit(uas_exit);
12301270
12311271 MODULE_LICENSE("GPL");
12321272 MODULE_IMPORT_NS(USB_STORAGE);
drivers/usb/storage/unusual_devs.h+7−0
@@ -2323,6 +2323,13 @@ UNUSUAL_DEV( 0x3340, 0xffff, 0x0000, 0x0000, · 2322 unmodified lines
23232323 USB_SC_DEVICE,USB_PR_DEVICE,NULL,
23242324 US_FL_MAX_SECTORS_64 ),
23252325
2326+/* Reported by Cyril Roelandt <tipecaml@gmail.com> */
2327+UNUSUAL_DEV( 0x357d, 0x7788, 0x0114, 0x0114,
2328+ "JMicron",
2329+ "USB to ATA/ATAPI Bridge",
2330+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2331+ US_FL_BROKEN_FUA ),
2332+
23262333 /* Reported by Andrey Rahmatullin <wrar@altlinux.org> */
23272334 UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100,
23282335 "iRiver",
drivers/usb/typec/bus.c+4−1
@@ -198,7 +198,10 @@ EXPORT_SYMBOL_GPL(typec_altmode_vdm); · 197 unmodified lines
198198 const struct typec_altmode *
199199 typec_altmode_get_partner(struct typec_altmode *adev)
200200 {
201− return adev ? &to_altmode(adev)->partner->adev : NULL;
201+ if (!adev || !to_altmode(adev)->partner)
202+ return NULL;
203+
204+ return &to_altmode(adev)->partner->adev;
202205 }
203206 EXPORT_SYMBOL_GPL(typec_altmode_get_partner);
204207
drivers/usb/typec/mux/pi3usb30532.c+2−2
@@ -114,8 +114,8 @@ pi3usb30532_mux_set(struct typec_mux *mux, struct typec_mux_state *state) · 113 unmodified lines
114114 static int pi3usb30532_probe(struct i2c_client *client)
115115 {
116116 struct device *dev = &client->dev;
117− struct typec_switch_desc sw_desc;
118− struct typec_mux_desc mux_desc;
117+ struct typec_switch_desc sw_desc = { };
118+ struct typec_mux_desc mux_desc = { };
119119 struct pi3usb30532 *pi;
120120 int ret;
121121
drivers/usb/typec/tcpm/tcpm.c+26−0
@@ -3794,6 +3794,14 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1, · 3793 unmodified lines
37943794 */
37953795 break;
37963796
3797+ case PORT_RESET:
3798+ case PORT_RESET_WAIT_OFF:
3799+ /*
3800+ * State set back to default mode once the timer completes.
3801+ * Ignore CC changes here.
3802+ */
3803+ break;
3804+
37973805 default:
37983806 if (tcpm_port_is_disconnected(port))
37993807 tcpm_set_state(port, unattached_state(port), 0);
@@ -3855,6 +3863,15 @@ static void _tcpm_pd_vbus_on(struct tcpm_port *port) · 55 unmodified lines
38553863 case SRC_TRY_DEBOUNCE:
38563864 /* Do nothing, waiting for sink detection */
38573865 break;
3866+
3867+ case PORT_RESET:
3868+ case PORT_RESET_WAIT_OFF:
3869+ /*
3870+ * State set back to default mode once the timer completes.
3871+ * Ignore vbus changes here.
3872+ */
3873+ break;
3874+
38583875 default:
38593876 break;
38603877 }
@@ -3908,10 +3925,19 @@ static void _tcpm_pd_vbus_off(struct tcpm_port *port) · 47 unmodified lines
39083925 case PORT_RESET_WAIT_OFF:
39093926 tcpm_set_state(port, tcpm_default_state(port), 0);
39103927 break;
3928+
39113929 case SRC_TRY_WAIT:
39123930 case SRC_TRY_DEBOUNCE:
39133931 /* Do nothing, waiting for sink detection */
39143932 break;
3933+
3934+ case PORT_RESET:
3935+ /*
3936+ * State set back to default mode once the timer completes.
3937+ * Ignore vbus changes here.
3938+ */
3939+ break;
3940+
39153941 default:
39163942 if (port->pwr_role == TYPEC_SINK &&
39173943 port->attached)
drivers/vdpa/Kconfig+6−12
@@ -1,21 +1,16 @@
11 # SPDX-License-Identifier: GPL-2.0-only
2−config VDPA
3− tristate
2+menuconfig VDPA
3+ tristate "vDPA drivers"
44 help
55 Enable this module to support vDPA device that uses a
66 datapath which complies with virtio specifications with
77 vendor specific control path.
88
9−menuconfig VDPA_MENU
10− bool "VDPA drivers"
11− default n
12−
13−if VDPA_MENU
9+if VDPA
1410
1511 config VDPA_SIM
1612 tristate "vDPA device simulator"
17− depends on RUNTIME_TESTING_MENU
18− select VDPA
13+ depends on RUNTIME_TESTING_MENU && HAS_DMA && VHOST_DPN
1914 select VHOST_RING
2015 default n
2116 help
@@ -24,9 +19,8 @@ config VDPA_SIM · 2 unmodified lines
2419 development of vDPA.
2520
2621 config IFCVF
27− tristate "Intel IFC VF VDPA driver"
22+ tristate "Intel IFC VF vDPA driver"
2823 depends on PCI_MSI
29− select VDPA
3024 default n
3125 help
3226 This kernel module can drive Intel IFC VF NIC to offload
@@ -34,4 +28,4 @@ config IFCVF · 1 unmodified line
3428 To compile this driver as a module, choose M here: the module will
3529 be called ifcvf.
3630
37−endif # VDPA_MENU
31+endif # VDPA
drivers/vdpa/ifcvf/ifcvf_base.c+0−2
@@ -301,12 +301,10 @@ int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u64 num) · 300 unmodified lines
301301
302302 static int ifcvf_hw_enable(struct ifcvf_hw *hw)
303303 {
304− struct ifcvf_lm_cfg __iomem *ifcvf_lm;
305304 struct virtio_pci_common_cfg __iomem *cfg;
306305 struct ifcvf_adapter *ifcvf;
307306 u32 i;
308307
309− ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg;
310308 ifcvf = vf_to_adapter(hw);
311309 cfg = hw->common_cfg;
312310 ifc_iowrite16(IFCVF_MSI_CONFIG_OFF, &cfg->msix_config);
drivers/vdpa/ifcvf/ifcvf_main.c+1−3
@@ -31,11 +31,9 @@ static irqreturn_t ifcvf_intr_handler(int irq, void *arg) · 30 unmodified lines
3131 static int ifcvf_start_datapath(void *private)
3232 {
3333 struct ifcvf_hw *vf = ifcvf_private_to_vf(private);
34− struct ifcvf_adapter *ifcvf;
3534 u8 status;
3635 int ret;
3736
38− ifcvf = vf_to_adapter(vf);
3937 vf->nr_vring = IFCVF_MAX_QUEUE_PAIRS * 2;
4038 ret = ifcvf_start_hw(vf);
4139 if (ret < 0) {
@@ -228,7 +226,7 @@ static u32 ifcvf_vdpa_get_vendor_id(struct vdpa_device *vdpa_dev) · 186 unmodified lines
228226 return IFCVF_SUBSYS_VENDOR_ID;
229227 }
230228
231−static u16 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev)
229+static u32 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev)
232230 {
233231 return IFCVF_QUEUE_ALIGNMENT;
234232 }
drivers/vdpa/vdpa.c+1−1
@@ -116,7 +116,7 @@ EXPORT_SYMBOL_GPL(__vdpa_alloc_device); · 115 unmodified lines
116116
117117 /**
118118 * vdpa_register_device - register a vDPA device
119− * Callers must have a succeed call of vdpa_init_device() before.
119+ * Callers must have a succeed call of vdpa_alloc_device() before.
120120 * @vdev: the vdpa device to be registered to vDPA bus
121121 *
122122 * Returns an error when fail to add to vDPA bus
drivers/vdpa/vdpa_sim/vdpa_sim.c+2−2
@@ -435,7 +435,7 @@ static u64 vdpasim_get_vq_state(struct vdpa_device *vdpa, u16 idx) · 434 unmodified lines
435435 return vrh->last_avail_idx;
436436 }
437437
438−static u16 vdpasim_get_vq_align(struct vdpa_device *vdpa)
438+static u32 vdpasim_get_vq_align(struct vdpa_device *vdpa)
439439 {
440440 return VDPASIM_QUEUE_ALIGN;
441441 }
@@ -488,7 +488,7 @@ static u8 vdpasim_get_status(struct vdpa_device *vdpa) · 46 unmodified lines
488488 status = vdpasim->status;
489489 spin_unlock(&vdpasim->lock);
490490
491− return vdpasim->status;
491+ return status;
492492 }
493493
494494 static void vdpasim_set_status(struct vdpa_device *vdpa, u8 status)
drivers/vhost/Kconfig+16−5
@@ -3,6 +3,8 @@ config VHOST_IOTLB · 2 unmodified lines
33 tristate
44 help
55 Generic IOTLB implementation for vhost and vringh.
6+ This option is selected by any driver which needs to support
7+ an IOMMU in software.
68
79 config VHOST_RING
810 tristate
@@ -11,6 +13,15 @@ config VHOST_RING · 2 unmodified lines
1113 This option is selected by any driver which needs to access
1214 the host side of a virtio ring.
1315
16+config VHOST_DPN
17+ bool
18+ depends on !ARM || AEABI
19+ default y
20+ help
21+ Anything selecting VHOST or VHOST_RING must depend on VHOST_DPN.
22+ This excludes the deprecated ARM ABI since that forces a 4 byte
23+ alignment on all structs - incompatible with virtio spec requirements.
24+
1425 config VHOST
1526 tristate
1627 select VHOST_IOTLB
@@ -26,7 +37,7 @@ if VHOST_MENU · 9 unmodified lines
2637
2738 config VHOST_NET
2839 tristate "Host kernel accelerator for virtio net"
29− depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
40+ depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP) && VHOST_DPN
3041 select VHOST
3142 ---help---
3243 This kernel module can be loaded in host kernel to accelerate
@@ -38,7 +49,7 @@ config VHOST_NET · 5 unmodified lines
3849
3950 config VHOST_SCSI
4051 tristate "VHOST_SCSI TCM fabric driver"
41− depends on TARGET_CORE && EVENTFD
52+ depends on TARGET_CORE && EVENTFD && VHOST_DPN
4253 select VHOST
4354 default n
4455 ---help---
@@ -47,7 +58,7 @@ config VHOST_SCSI · 2 unmodified lines
4758
4859 config VHOST_VSOCK
4960 tristate "vhost virtio-vsock driver"
50− depends on VSOCKETS && EVENTFD
61+ depends on VSOCKETS && EVENTFD && VHOST_DPN
5162 select VHOST
5263 select VIRTIO_VSOCKETS_COMMON
5364 default n
@@ -61,9 +72,9 @@ config VHOST_VSOCK · 7 unmodified lines
6172
6273 config VHOST_VDPA
6374 tristate "Vhost driver for vDPA-based backend"
64− depends on EVENTFD
75+ depends on EVENTFD && VHOST_DPN
6576 select VHOST
66− select VDPA
77+ depends on VDPA
6778 help
6879 This kernel module can be loaded in host kernel to accelerate
6980 guest virtio devices with the vDPA-based backends.
drivers/vhost/net.c+15−13
@@ -424,7 +424,7 @@ static void vhost_net_disable_vq(struct vhost_net *n, · 423 unmodified lines
424424 struct vhost_net_virtqueue *nvq =
425425 container_of(vq, struct vhost_net_virtqueue, vq);
426426 struct vhost_poll *poll = n->poll + (nvq - n->vqs);
427− if (!vq->private_data)
427+ if (!vhost_vq_get_backend(vq))
428428 return;
429429 vhost_poll_stop(poll);
430430 }
@@ -437,7 +437,7 @@ static int vhost_net_enable_vq(struct vhost_net *n, · 6 unmodified lines
437437 struct vhost_poll *poll = n->poll + (nvq - n->vqs);
438438 struct socket *sock;
439439
440− sock = vq->private_data;
440+ sock = vhost_vq_get_backend(vq);
441441 if (!sock)
442442 return 0;
443443
@@ -524,7 +524,7 @@ static void vhost_net_busy_poll(struct vhost_net *net, · 80 unmodified lines
524524 return;
525525
526526 vhost_disable_notify(&net->dev, vq);
527− sock = rvq->private_data;
527+ sock = vhost_vq_get_backend(rvq);
528528
529529 busyloop_timeout = poll_rx ? rvq->busyloop_timeout:
530530 tvq->busyloop_timeout;
@@ -570,8 +570,10 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net *net, · 39 unmodified lines
570570
571571 if (r == tvq->num && tvq->busyloop_timeout) {
572572 /* Flush batched packets first */
573− if (!vhost_sock_zcopy(tvq->private_data))
574− vhost_tx_batch(net, tnvq, tvq->private_data, msghdr);
573+ if (!vhost_sock_zcopy(vhost_vq_get_backend(tvq)))
574+ vhost_tx_batch(net, tnvq,
575+ vhost_vq_get_backend(tvq),
576+ msghdr);
575577
576578 vhost_net_busy_poll(net, rvq, tvq, busyloop_intr, false);
577579
@@ -685,7 +687,7 @@ static int vhost_net_build_xdp(struct vhost_net_virtqueue *nvq, · 107 unmodified lines
685687 struct vhost_virtqueue *vq = &nvq->vq;
686688 struct vhost_net *net = container_of(vq->dev, struct vhost_net,
687689 dev);
688− struct socket *sock = vq->private_data;
690+ struct socket *sock = vhost_vq_get_backend(vq);
689691 struct page_frag *alloc_frag = &net->page_frag;
690692 struct virtio_net_hdr *gso;
691693 struct xdp_buff *xdp = &nvq->xdp[nvq->batched_xdp];
@@ -952,7 +954,7 @@ static void handle_tx(struct vhost_net *net) · 260 unmodified lines
952954 struct socket *sock;
953955
954956 mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_TX);
955− sock = vq->private_data;
957+ sock = vhost_vq_get_backend(vq);
956958 if (!sock)
957959 goto out;
958960
@@ -1121,7 +1123,7 @@ static void handle_rx(struct vhost_net *net) · 162 unmodified lines
11211123 int recv_pkts = 0;
11221124
11231125 mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_RX);
1124− sock = vq->private_data;
1126+ sock = vhost_vq_get_backend(vq);
11251127 if (!sock)
11261128 goto out;
11271129
@@ -1345,9 +1347,9 @@ static struct socket *vhost_net_stop_vq(struct vhost_net *n, · 217 unmodified lines
13451347 container_of(vq, struct vhost_net_virtqueue, vq);
13461348
13471349 mutex_lock(&vq->mutex);
1348− sock = vq->private_data;
1350+ sock = vhost_vq_get_backend(vq);
13491351 vhost_net_disable_vq(n, vq);
1350− vq->private_data = NULL;
1352+ vhost_vq_set_backend(vq, NULL);
13511353 vhost_net_buf_unproduce(nvq);
13521354 nvq->rx_ring = NULL;
13531355 mutex_unlock(&vq->mutex);
@@ -1521,7 +1523,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) · 167 unmodified lines
15211523 }
15221524
15231525 /* start polling new socket */
1524− oldsock = vq->private_data;
1526+ oldsock = vhost_vq_get_backend(vq);
15251527 if (sock != oldsock) {
15261528 ubufs = vhost_net_ubuf_alloc(vq,
15271529 sock && vhost_sock_zcopy(sock));
@@ -1531,7 +1533,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) · 3 unmodified lines
15311533 }
15321534
15331535 vhost_net_disable_vq(n, vq);
1534− vq->private_data = sock;
1536+ vhost_vq_set_backend(vq, sock);
15351537 vhost_net_buf_unproduce(nvq);
15361538 r = vhost_vq_init_access(vq);
15371539 if (r)
@@ -1568,7 +1570,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) · 30 unmodified lines
15681570 return 0;
15691571
15701572 err_used:
1571− vq->private_data = oldsock;
1573+ vhost_vq_set_backend(vq, oldsock);
15721574 vhost_net_enable_vq(n, vq);
15731575 if (ubufs)
15741576 vhost_net_ubuf_put_wait_and_free(ubufs);
drivers/vhost/scsi.c+7−7
@@ -452,7 +452,7 @@ vhost_scsi_do_evt_work(struct vhost_scsi *vs, struct vhost_scsi_evt *evt) · 451 unmodified lines
452452 unsigned out, in;
453453 int head, ret;
454454
455− if (!vq->private_data) {
455+ if (!vhost_vq_get_backend(vq)) {
456456 vs->vs_events_missed = true;
457457 return;
458458 }
@@ -892,7 +892,7 @@ vhost_scsi_get_req(struct vhost_virtqueue *vq, struct vhost_scsi_ctx *vc, · 433 unmodified lines
892892 } else {
893893 struct vhost_scsi_tpg **vs_tpg, *tpg;
894894
895− vs_tpg = vq->private_data; /* validated at handler entry */
895+ vs_tpg = vhost_vq_get_backend(vq); /* validated at handler entry */
896896
897897 tpg = READ_ONCE(vs_tpg[*vc->target]);
898898 if (unlikely(!tpg)) {
@@ -929,7 +929,7 @@ vhost_scsi_handle_vq(struct vhost_scsi *vs, struct vhost_virtqueue *vq) · 30 unmodified lines
929929 * We can handle the vq only after the endpoint is setup by calling the
930930 * VHOST_SCSI_SET_ENDPOINT ioctl.
931931 */
932− vs_tpg = vq->private_data;
932+ vs_tpg = vhost_vq_get_backend(vq);
933933 if (!vs_tpg)
934934 goto out;
935935
@@ -1184,7 +1184,7 @@ vhost_scsi_ctl_handle_vq(struct vhost_scsi *vs, struct vhost_virtqueue *vq) · 248 unmodified lines
11841184 * We can handle the vq only after the endpoint is setup by calling the
11851185 * VHOST_SCSI_SET_ENDPOINT ioctl.
11861186 */
1187− if (!vq->private_data)
1187+ if (!vhost_vq_get_backend(vq))
11881188 goto out;
11891189
11901190 memset(&vc, 0, sizeof(vc));
@@ -1322,7 +1322,7 @@ static void vhost_scsi_evt_handle_kick(struct vhost_work *work) · 131 unmodified lines
13221322 struct vhost_scsi *vs = container_of(vq->dev, struct vhost_scsi, dev);
13231323
13241324 mutex_lock(&vq->mutex);
1325− if (!vq->private_data)
1325+ if (!vhost_vq_get_backend(vq))
13261326 goto out;
13271327
13281328 if (vs->vs_events_missed)
@@ -1460,7 +1460,7 @@ vhost_scsi_set_endpoint(struct vhost_scsi *vs, · 131 unmodified lines
14601460 for (i = 0; i < VHOST_SCSI_MAX_VQ; i++) {
14611461 vq = &vs->vqs[i].vq;
14621462 mutex_lock(&vq->mutex);
1463− vq->private_data = vs_tpg;
1463+ vhost_vq_set_backend(vq, vs_tpg);
14641464 vhost_vq_init_access(vq);
14651465 mutex_unlock(&vq->mutex);
14661466 }
@@ -1547,7 +1547,7 @@ vhost_scsi_clear_endpoint(struct vhost_scsi *vs, · 80 unmodified lines
15471547 for (i = 0; i < VHOST_SCSI_MAX_VQ; i++) {
15481548 vq = &vs->vqs[i].vq;
15491549 mutex_lock(&vq->mutex);
1550− vq->private_data = NULL;
1550+ vhost_vq_set_backend(vq, NULL);
15511551 mutex_unlock(&vq->mutex);
15521552 }
15531553 }
drivers/vhost/test.c+7−7
@@ -49,7 +49,7 @@ static void handle_vq(struct vhost_test *n) · 48 unmodified lines
4949 void *private;
5050
5151 mutex_lock(&vq->mutex);
52− private = vq->private_data;
52+ private = vhost_vq_get_backend(vq);
5353 if (!private) {
5454 mutex_unlock(&vq->mutex);
5555 return;
@@ -120,7 +120,7 @@ static int vhost_test_open(struct inode *inode, struct file *f) · 64 unmodified lines
120120 vqs[VHOST_TEST_VQ] = &n->vqs[VHOST_TEST_VQ];
121121 n->vqs[VHOST_TEST_VQ].handle_kick = handle_vq_kick;
122122 vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX, UIO_MAXIOV,
123− VHOST_TEST_PKT_WEIGHT, VHOST_TEST_WEIGHT);
123+ VHOST_TEST_PKT_WEIGHT, VHOST_TEST_WEIGHT, NULL);
124124
125125 f->private_data = n;
126126
@@ -133,8 +133,8 @@ static void *vhost_test_stop_vq(struct vhost_test *n, · 6 unmodified lines
133133 void *private;
134134
135135 mutex_lock(&vq->mutex);
136− private = vq->private_data;
137− vq->private_data = NULL;
136+ private = vhost_vq_get_backend(vq);
137+ vhost_vq_set_backend(vq, NULL);
138138 mutex_unlock(&vq->mutex);
139139 return private;
140140 }
@@ -198,8 +198,8 @@ static long vhost_test_run(struct vhost_test *n, int test) · 57 unmodified lines
198198 priv = test ? n : NULL;
199199
200200 /* start polling new socket */
201− oldpriv = vq->private_data;
202− vq->private_data = priv;
201+ oldpriv = vhost_vq_get_backend(vq);
202+ vhost_vq_set_backend(vq, priv);
203203
204204 r = vhost_vq_init_access(&n->vqs[index]);
205205
@@ -225,7 +225,7 @@ static long vhost_test_reset_owner(struct vhost_test *n) · 19 unmodified lines
225225 {
226226 void *priv = NULL;
227227 long err;
228− struct vhost_umem *umem;
228+ struct vhost_iotlb *umem;
229229
230230 mutex_lock(&n->dev.mutex);
231231 err = vhost_dev_check_owner(&n->dev);
drivers/vhost/vdpa.c+0−5
@@ -296,7 +296,6 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, · 295 unmodified lines
296296 struct vdpa_callback cb;
297297 struct vhost_virtqueue *vq;
298298 struct vhost_vring_state s;
299− u8 status;
300299 u32 idx;
301300 long r;
302301
@@ -310,8 +309,6 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, · 7 unmodified lines
310309 idx = array_index_nospec(idx, v->nvqs);
311310 vq = &v->vqs[idx];
312311
313− status = ops->get_status(vdpa);
314−
315312 if (cmd == VHOST_VDPA_SET_VRING_ENABLE) {
316313 if (copy_from_user(&s, argp, sizeof(s)))
317314 return -EFAULT;
@@ -678,8 +675,6 @@ static int vhost_vdpa_open(struct inode *inode, struct file *filep) · 360 unmodified lines
678675 int nvqs, i, r, opened;
679676
680677 v = container_of(inode->i_cdev, struct vhost_vdpa, cdev);
681− if (!v)
682− return -ENODEV;
683678
684679 opened = atomic_cmpxchg(&v->opened, 0, 1);
685680 if (opened)
drivers/vhost/vhost.h+27−0
@@ -231,6 +231,33 @@ enum { · 230 unmodified lines
231231 (1ULL << VIRTIO_F_VERSION_1)
232232 };
233233
234+/**
235+ * vhost_vq_set_backend - Set backend.
236+ *
237+ * @vq Virtqueue.
238+ * @private_data The private data.
239+ *
240+ * Context: Need to call with vq->mutex acquired.
241+ */
242+static inline void vhost_vq_set_backend(struct vhost_virtqueue *vq,
243+ void *private_data)
244+{
245+ vq->private_data = private_data;
246+}
247+
248+/**
249+ * vhost_vq_get_backend - Get backend.
250+ *
251+ * @vq Virtqueue.
252+ *
253+ * Context: Need to call with vq->mutex acquired.
254+ * Return: Private data previously set with vhost_vq_set_backend.
255+ */
256+static inline void *vhost_vq_get_backend(struct vhost_virtqueue *vq)
257+{
258+ return vq->private_data;
259+}
260+
234261 static inline bool vhost_has_feature(struct vhost_virtqueue *vq, int bit)
235262 {
236263 return vq->acked_features & (1ULL << bit);
drivers/vhost/vringh.c+5−0
@@ -13,9 +13,11 @@ · 12 unmodified lines
1313 #include <linux/uaccess.h>
1414 #include <linux/slab.h>
1515 #include <linux/export.h>
16+#if IS_REACHABLE(CONFIG_VHOST_IOTLB)
1617 #include <linux/bvec.h>
1718 #include <linux/highmem.h>
1819 #include <linux/vhost_iotlb.h>
20+#endif
1921 #include <uapi/linux/virtio_config.h>
2022
2123 static __printf(1,2) __cold void vringh_bad(const char *fmt, ...)
@@ -1059,6 +1061,8 @@ int vringh_need_notify_kern(struct vringh *vrh) · 1037 unmodified lines
10591061 }
10601062 EXPORT_SYMBOL(vringh_need_notify_kern);
10611063
1064+#if IS_REACHABLE(CONFIG_VHOST_IOTLB)
1065+
10621066 static int iotlb_translate(const struct vringh *vrh,
10631067 u64 addr, u64 len, struct bio_vec iov[],
10641068 int iov_size, u32 perm)
@@ -1416,5 +1420,6 @@ int vringh_need_notify_iotlb(struct vringh *vrh) · 351 unmodified lines
14161420 }
14171421 EXPORT_SYMBOL(vringh_need_notify_iotlb);
14181422
1423+#endif
14191424
14201425 MODULE_LICENSE("GPL");
drivers/vhost/vsock.c+7−7
@@ -91,7 +91,7 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock, · 90 unmodified lines
9191
9292 mutex_lock(&vq->mutex);
9393
94− if (!vq->private_data)
94+ if (!vhost_vq_get_backend(vq))
9595 goto out;
9696
9797 /* Avoid further vmexits, we're already processing the virtqueue */
@@ -440,7 +440,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) · 342 unmodified lines
440440
441441 mutex_lock(&vq->mutex);
442442
443− if (!vq->private_data)
443+ if (!vhost_vq_get_backend(vq))
444444 goto out;
445445
446446 vhost_disable_notify(&vsock->dev, vq);
@@ -533,8 +533,8 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) · 86 unmodified lines
533533 goto err_vq;
534534 }
535535
536− if (!vq->private_data) {
537− vq->private_data = vsock;
536+ if (!vhost_vq_get_backend(vq)) {
537+ vhost_vq_set_backend(vq, vsock);
538538 ret = vhost_vq_init_access(vq);
539539 if (ret)
540540 goto err_vq;
@@ -547,14 +547,14 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) · 6 unmodified lines
547547 return 0;
548548
549549 err_vq:
550− vq->private_data = NULL;
550+ vhost_vq_set_backend(vq, NULL);
551551 mutex_unlock(&vq->mutex);
552552
553553 for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
554554 vq = &vsock->vqs[i];
555555
556556 mutex_lock(&vq->mutex);
557− vq->private_data = NULL;
557+ vhost_vq_set_backend(vq, NULL);
558558 mutex_unlock(&vq->mutex);
559559 }
560560 err:
@@ -577,7 +577,7 @@ static int vhost_vsock_stop(struct vhost_vsock *vsock) · 16 unmodified lines
577577 struct vhost_virtqueue *vq = &vsock->vqs[i];
578578
579579 mutex_lock(&vq->mutex);
580− vq->private_data = NULL;
580+ vhost_vq_set_backend(vq, NULL);
581581 mutex_unlock(&vq->mutex);
582582 }
583583
drivers/virtio/Kconfig+1−1
@@ -45,7 +45,7 @@ config VIRTIO_PCI_LEGACY · 44 unmodified lines
4545
4646 config VIRTIO_VDPA
4747 tristate "vDPA driver for virtio devices"
48− select VDPA
48+ depends on VDPA
4949 select VIRTIO
5050 help
5151 This driver provides support for virtio based paravirtual
drivers/virtio/virtio_balloon.c+2−2
@@ -165,7 +165,7 @@ static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq) · 164 unmodified lines
165165
166166 }
167167
168−int virtballoon_free_page_report(struct page_reporting_dev_info *pr_dev_info,
168+static int virtballoon_free_page_report(struct page_reporting_dev_info *pr_dev_info,
169169 struct scatterlist *sg, unsigned int nents)
170170 {
171171 struct virtio_balloon *vb =
@@ -580,7 +580,7 @@ static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb) · 408 unmodified lines
580580 if (test_and_clear_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
581581 &vb->config_read_bitmap))
582582 virtio_cread(vb->vdev, struct virtio_balloon_config,
583− free_page_report_cmd_id,
583+ free_page_hint_cmd_id,
584584 &vb->cmd_id_received_cache);
585585
586586 return vb->cmd_id_received_cache;
drivers/virtio/virtio_input.c+1−0
@@ -3,6 +3,7 @@ · 2 unmodified lines
33 #include <linux/virtio.h>
44 #include <linux/virtio_config.h>
55 #include <linux/input.h>
6+#include <linux/slab.h>
67
78 #include <uapi/linux/virtio_ids.h>
89 #include <uapi/linux/virtio_input.h>
drivers/watchdog/sp805_wdt.c+4−0
@@ -137,10 +137,14 @@ wdt_restart(struct watchdog_device *wdd, unsigned long mode, void *cmd) · 136 unmodified lines
137137 {
138138 struct sp805_wdt *wdt = watchdog_get_drvdata(wdd);
139139
140+ writel_relaxed(UNLOCK, wdt->base + WDTLOCK);
140141 writel_relaxed(0, wdt->base + WDTCONTROL);
141142 writel_relaxed(0, wdt->base + WDTLOAD);
142143 writel_relaxed(INT_ENABLE | RESET_ENABLE, wdt->base + WDTCONTROL);
143144
145+ /* Flush posted writes. */
146+ readl_relaxed(wdt->base + WDTLOCK);
147+
144148 return 0;
145149 }
146150
drivers/xen/xenbus/xenbus_client.c+8−1
@@ -448,7 +448,14 @@ EXPORT_SYMBOL_GPL(xenbus_free_evtchn); · 447 unmodified lines
448448 int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
449449 unsigned int nr_grefs, void **vaddr)
450450 {
451− return ring_ops->map(dev, gnt_refs, nr_grefs, vaddr);
451+ int err;
452+
453+ err = ring_ops->map(dev, gnt_refs, nr_grefs, vaddr);
454+ /* Some hypervisors are buggy and can return 1. */
455+ if (err > 0)
456+ err = GNTST_general_error;
457+
458+ return err;
452459 }
453460 EXPORT_SYMBOL_GPL(xenbus_map_ring_valloc);
454461
fs/afs/cmservice.c+1−1
@@ -169,7 +169,7 @@ static int afs_record_cm_probe(struct afs_call *call, struct afs_server *server) · 168 unmodified lines
169169
170170 spin_lock(&server->probe_lock);
171171
172− if (!test_bit(AFS_SERVER_FL_HAVE_EPOCH, &server->flags)) {
172+ if (!test_and_set_bit(AFS_SERVER_FL_HAVE_EPOCH, &server->flags)) {
173173 server->cm_epoch = call->epoch;
174174 server->probe.cm_epoch = call->epoch;
175175 goto out;
fs/afs/dir.c+67−41
@@ -1032,7 +1032,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags) · 1031 unmodified lines
10321032 struct dentry *parent;
10331033 struct inode *inode;
10341034 struct key *key;
1035− afs_dataversion_t dir_version;
1035+ afs_dataversion_t dir_version, invalid_before;
10361036 long de_version;
10371037 int ret;
10381038
@@ -1084,8 +1084,8 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags) · 45 unmodified lines
10841084 if (de_version == (long)dir_version)
10851085 goto out_valid_noupdate;
10861086
1087− dir_version = dir->invalid_before;
1088− if (de_version - (long)dir_version >= 0)
1087+ invalid_before = dir->invalid_before;
1088+ if (de_version - (long)invalid_before >= 0)
10891089 goto out_valid;
10901090
10911091 _debug("dir modified");
@@ -1275,6 +1275,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) · 183 unmodified lines
12751275 struct afs_fs_cursor fc;
12761276 struct afs_vnode *dvnode = AFS_FS_I(dir);
12771277 struct key *key;
1278+ afs_dataversion_t data_version;
12781279 int ret;
12791280
12801281 mode |= S_IFDIR;
@@ -1295,7 +1296,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) · 14 unmodified lines
12951296
12961297 ret = -ERESTARTSYS;
12971298 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
1298− afs_dataversion_t data_version = dvnode->status.data_version + 1;
1299+ data_version = dvnode->status.data_version + 1;
12991300
13001301 while (afs_select_fileserver(&fc)) {
13011302 fc.cb_break = afs_calc_vnode_cb_break(dvnode);
@@ -1316,10 +1317,14 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) · 14 unmodified lines
13161317 goto error_key;
13171318 }
13181319
1319− if (ret == 0 &&
1320− test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1321− afs_edit_dir_add(dvnode, &dentry->d_name, &iget_data.fid,
1322− afs_edit_dir_for_create);
1320+ if (ret == 0) {
1321+ down_write(&dvnode->validate_lock);
1322+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1323+ dvnode->status.data_version == data_version)
1324+ afs_edit_dir_add(dvnode, &dentry->d_name, &iget_data.fid,
1325+ afs_edit_dir_for_create);
1326+ up_write(&dvnode->validate_lock);
1327+ }
13231328
13241329 key_put(key);
13251330 kfree(scb);
@@ -1360,6 +1365,7 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry) · 34 unmodified lines
13601365 struct afs_fs_cursor fc;
13611366 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode = NULL;
13621367 struct key *key;
1368+ afs_dataversion_t data_version;
13631369 int ret;
13641370
13651371 _enter("{%llx:%llu},{%pd}",
@@ -1391,7 +1397,7 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry) · 25 unmodified lines
13911397
13921398 ret = -ERESTARTSYS;
13931399 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
1394− afs_dataversion_t data_version = dvnode->status.data_version + 1;
1400+ data_version = dvnode->status.data_version + 1;
13951401
13961402 while (afs_select_fileserver(&fc)) {
13971403 fc.cb_break = afs_calc_vnode_cb_break(dvnode);
@@ -1404,9 +1410,12 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry) · 6 unmodified lines
14041410 ret = afs_end_vnode_operation(&fc);
14051411 if (ret == 0) {
14061412 afs_dir_remove_subdir(dentry);
1407− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1413+ down_write(&dvnode->validate_lock);
1414+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1415+ dvnode->status.data_version == data_version)
14081416 afs_edit_dir_remove(dvnode, &dentry->d_name,
14091417 afs_edit_dir_for_rmdir);
1418+ up_write(&dvnode->validate_lock);
14101419 }
14111420 }
14121421
@@ -1544,10 +1553,15 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry) · 131 unmodified lines
15441553 ret = afs_end_vnode_operation(&fc);
15451554 if (ret == 0 && !(scb[1].have_status || scb[1].have_error))
15461555 ret = afs_dir_remove_link(dvnode, dentry, key);
1547− if (ret == 0 &&
1548− test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1549− afs_edit_dir_remove(dvnode, &dentry->d_name,
1550− afs_edit_dir_for_unlink);
1556+
1557+ if (ret == 0) {
1558+ down_write(&dvnode->validate_lock);
1559+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1560+ dvnode->status.data_version == data_version)
1561+ afs_edit_dir_remove(dvnode, &dentry->d_name,
1562+ afs_edit_dir_for_unlink);
1563+ up_write(&dvnode->validate_lock);
1564+ }
15511565 }
15521566
15531567 if (need_rehash && ret < 0 && ret != -ENOENT)
@@ -1573,6 +1587,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode, · 19 unmodified lines
15731587 struct afs_status_cb *scb;
15741588 struct afs_vnode *dvnode = AFS_FS_I(dir);
15751589 struct key *key;
1590+ afs_dataversion_t data_version;
15761591 int ret;
15771592
15781593 mode |= S_IFREG;
@@ -1597,7 +1612,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode, · 18 unmodified lines
15971612
15981613 ret = -ERESTARTSYS;
15991614 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
1600− afs_dataversion_t data_version = dvnode->status.data_version + 1;
1615+ data_version = dvnode->status.data_version + 1;
16011616
16021617 while (afs_select_fileserver(&fc)) {
16031618 fc.cb_break = afs_calc_vnode_cb_break(dvnode);
@@ -1618,9 +1633,12 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode, · 14 unmodified lines
16181633 goto error_key;
16191634 }
16201635
1621− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1636+ down_write(&dvnode->validate_lock);
1637+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1638+ dvnode->status.data_version == data_version)
16221639 afs_edit_dir_add(dvnode, &dentry->d_name, &iget_data.fid,
16231640 afs_edit_dir_for_create);
1641+ up_write(&dvnode->validate_lock);
16241642
16251643 kfree(scb);
16261644 key_put(key);
@@ -1648,6 +1666,7 @@ static int afs_link(struct dentry *from, struct inode *dir, · 21 unmodified lines
16481666 struct afs_vnode *dvnode = AFS_FS_I(dir);
16491667 struct afs_vnode *vnode = AFS_FS_I(d_inode(from));
16501668 struct key *key;
1669+ afs_dataversion_t data_version;
16511670 int ret;
16521671
16531672 _enter("{%llx:%llu},{%llx:%llu},{%pd}",
@@ -1672,7 +1691,7 @@ static int afs_link(struct dentry *from, struct inode *dir, · 18 unmodified lines
16721691
16731692 ret = -ERESTARTSYS;
16741693 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
1675− afs_dataversion_t data_version = dvnode->status.data_version + 1;
1694+ data_version = dvnode->status.data_version + 1;
16761695
16771696 if (mutex_lock_interruptible_nested(&vnode->io_lock, 1) < 0) {
16781697 afs_end_vnode_operation(&fc);
@@ -1702,9 +1721,12 @@ static int afs_link(struct dentry *from, struct inode *dir, · 23 unmodified lines
17021721 goto error_key;
17031722 }
17041723
1705− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1724+ down_write(&dvnode->validate_lock);
1725+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1726+ dvnode->status.data_version == data_version)
17061727 afs_edit_dir_add(dvnode, &dentry->d_name, &vnode->fid,
17071728 afs_edit_dir_for_link);
1729+ up_write(&dvnode->validate_lock);
17081730
17091731 key_put(key);
17101732 kfree(scb);
@@ -1732,6 +1754,7 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry, · 21 unmodified lines
17321754 struct afs_status_cb *scb;
17331755 struct afs_vnode *dvnode = AFS_FS_I(dir);
17341756 struct key *key;
1757+ afs_dataversion_t data_version;
17351758 int ret;
17361759
17371760 _enter("{%llx:%llu},{%pd},%s",
@@ -1759,7 +1782,7 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry, · 21 unmodified lines
17591782
17601783 ret = -ERESTARTSYS;
17611784 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
1762− afs_dataversion_t data_version = dvnode->status.data_version + 1;
1785+ data_version = dvnode->status.data_version + 1;
17631786
17641787 while (afs_select_fileserver(&fc)) {
17651788 fc.cb_break = afs_calc_vnode_cb_break(dvnode);
@@ -1780,9 +1803,12 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry, · 14 unmodified lines
17801803 goto error_key;
17811804 }
17821805
1783− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
1806+ down_write(&dvnode->validate_lock);
1807+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
1808+ dvnode->status.data_version == data_version)
17841809 afs_edit_dir_add(dvnode, &dentry->d_name, &iget_data.fid,
17851810 afs_edit_dir_for_symlink);
1811+ up_write(&dvnode->validate_lock);
17861812
17871813 key_put(key);
17881814 kfree(scb);
@@ -1812,6 +1838,8 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 23 unmodified lines
18121838 struct dentry *tmp = NULL, *rehash = NULL;
18131839 struct inode *new_inode;
18141840 struct key *key;
1841+ afs_dataversion_t orig_data_version;
1842+ afs_dataversion_t new_data_version;
18151843 bool new_negative = d_is_negative(new_dentry);
18161844 int ret;
18171845
@@ -1890,10 +1918,6 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 72 unmodified lines
18901918
18911919 ret = -ERESTARTSYS;
18921920 if (afs_begin_vnode_operation(&fc, orig_dvnode, key, true)) {
1893− afs_dataversion_t orig_data_version;
1894− afs_dataversion_t new_data_version;
1895− struct afs_status_cb *new_scb = &scb[1];
1896−
18971921 orig_data_version = orig_dvnode->status.data_version + 1;
18981922
18991923 if (orig_dvnode != new_dvnode) {
@@ -1904,7 +1928,6 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 4 unmodified lines
19041928 new_data_version = new_dvnode->status.data_version + 1;
19051929 } else {
19061930 new_data_version = orig_data_version;
1907− new_scb = &scb[0];
19081931 }
19091932
19101933 while (afs_select_fileserver(&fc)) {
@@ -1912,7 +1935,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 1 unmodified line
19121935 fc.cb_break_2 = afs_calc_vnode_cb_break(new_dvnode);
19131936 afs_fs_rename(&fc, old_dentry->d_name.name,
19141937 new_dvnode, new_dentry->d_name.name,
1915− &scb[0], new_scb);
1938+ &scb[0], &scb[1]);
19161939 }
19171940
19181941 afs_vnode_commit_status(&fc, orig_dvnode, fc.cb_break,
@@ -1930,18 +1953,25 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 11 unmodified lines
19301953 if (ret == 0) {
19311954 if (rehash)
19321955 d_rehash(rehash);
1933− if (test_bit(AFS_VNODE_DIR_VALID, &orig_dvnode->flags))
1934− afs_edit_dir_remove(orig_dvnode, &old_dentry->d_name,
1935− afs_edit_dir_for_rename_0);
1956+ down_write(&orig_dvnode->validate_lock);
1957+ if (test_bit(AFS_VNODE_DIR_VALID, &orig_dvnode->flags) &&
1958+ orig_dvnode->status.data_version == orig_data_version)
1959+ afs_edit_dir_remove(orig_dvnode, &old_dentry->d_name,
1960+ afs_edit_dir_for_rename_0);
1961+ if (orig_dvnode != new_dvnode) {
1962+ up_write(&orig_dvnode->validate_lock);
19361963
1937− if (!new_negative &&
1938− test_bit(AFS_VNODE_DIR_VALID, &new_dvnode->flags))
1939− afs_edit_dir_remove(new_dvnode, &new_dentry->d_name,
1940− afs_edit_dir_for_rename_1);
1964+ down_write(&new_dvnode->validate_lock);
1965+ }
1966+ if (test_bit(AFS_VNODE_DIR_VALID, &new_dvnode->flags) &&
1967+ orig_dvnode->status.data_version == new_data_version) {
1968+ if (!new_negative)
1969+ afs_edit_dir_remove(new_dvnode, &new_dentry->d_name,
1970+ afs_edit_dir_for_rename_1);
19411971
1942− if (test_bit(AFS_VNODE_DIR_VALID, &new_dvnode->flags))
19431972 afs_edit_dir_add(new_dvnode, &new_dentry->d_name,
19441973 &vnode->fid, afs_edit_dir_for_rename_2);
1974+ }
19451975
19461976 new_inode = d_inode(new_dentry);
19471977 if (new_inode) {
@@ -1957,14 +1987,10 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, · 9 unmodified lines
19571987 * Note that if we ever implement RENAME_EXCHANGE, we'll have
19581988 * to update both dentries with opposing dir versions.
19591989 */
1960− if (new_dvnode != orig_dvnode) {
1961− afs_update_dentry_version(&fc, old_dentry, &scb[1]);
1962− afs_update_dentry_version(&fc, new_dentry, &scb[1]);
1963− } else {
1964− afs_update_dentry_version(&fc, old_dentry, &scb[0]);
1965− afs_update_dentry_version(&fc, new_dentry, &scb[0]);
1966− }
1990+ afs_update_dentry_version(&fc, old_dentry, &scb[1]);
1991+ afs_update_dentry_version(&fc, new_dentry, &scb[1]);
19671992 d_move(old_dentry, new_dentry);
1993+ up_write(&new_dvnode->validate_lock);
19681994 goto error_tmp;
19691995 }
19701996
fs/afs/dir_silly.c+15−7
@@ -21,6 +21,7 @@ static int afs_do_silly_rename(struct afs_vnode *dvnode, struct afs_vnode *vnode · 20 unmodified lines
2121 {
2222 struct afs_fs_cursor fc;
2323 struct afs_status_cb *scb;
24+ afs_dataversion_t dir_data_version;
2425 int ret = -ERESTARTSYS;
2526
2627 _enter("%pd,%pd", old, new);
@@ -31,7 +32,7 @@ static int afs_do_silly_rename(struct afs_vnode *dvnode, struct afs_vnode *vnode · 4 unmodified lines
3132
3233 trace_afs_silly_rename(vnode, false);
3334 if (afs_begin_vnode_operation(&fc, dvnode, key, true)) {
34− afs_dataversion_t dir_data_version = dvnode->status.data_version + 1;
35+ dir_data_version = dvnode->status.data_version + 1;
3536
3637 while (afs_select_fileserver(&fc)) {
3738 fc.cb_break = afs_calc_vnode_cb_break(dvnode);
@@ -54,12 +55,15 @@ static int afs_do_silly_rename(struct afs_vnode *dvnode, struct afs_vnode *vnode · 16 unmodified lines
5455 dvnode->silly_key = key_get(key);
5556 }
5657
57− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
58+ down_write(&dvnode->validate_lock);
59+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
60+ dvnode->status.data_version == dir_data_version) {
5861 afs_edit_dir_remove(dvnode, &old->d_name,
5962 afs_edit_dir_for_silly_0);
60− if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
6163 afs_edit_dir_add(dvnode, &new->d_name,
6264 &vnode->fid, afs_edit_dir_for_silly_1);
65+ }
66+ up_write(&dvnode->validate_lock);
6367 }
6468
6569 kfree(scb);
@@ -181,10 +185,14 @@ static int afs_do_silly_unlink(struct afs_vnode *dvnode, struct afs_vnode *vnode · 115 unmodified lines
181185 clear_bit(AFS_VNODE_CB_PROMISED, &vnode->flags);
182186 }
183187 }
184− if (ret == 0 &&
185− test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags))
186− afs_edit_dir_remove(dvnode, &dentry->d_name,
187− afs_edit_dir_for_unlink);
188+ if (ret == 0) {
189+ down_write(&dvnode->validate_lock);
190+ if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) &&
191+ dvnode->status.data_version == dir_data_version)
192+ afs_edit_dir_remove(dvnode, &dentry->d_name,
193+ afs_edit_dir_for_unlink);
194+ up_write(&dvnode->validate_lock);
195+ }
188196 }
189197
190198 kfree(scb);
fs/afs/fs_probe.c+1−4
@@ -117,11 +117,8 @@ out: · 116 unmodified lines
117117 (unsigned int)rtt, ret);
118118
119119 have_result |= afs_fs_probe_done(server);
120− if (have_result) {
121− server->probe.have_result = true;
122− wake_up_var(&server->probe.have_result);
120+ if (have_result)
123121 wake_up_all(&server->probe_wq);
124− }
125122 }
126123
127124 /*
fs/afs/fsclient.c+16−11
@@ -65,6 +65,7 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp, · 64 unmodified lines
6565 bool inline_error = (call->operation_ID == afs_FS_InlineBulkStatus);
6666 u64 data_version, size;
6767 u32 type, abort_code;
68+ int ret;
6869
6970 abort_code = ntohl(xdr->abort_code);
7071
@@ -78,7 +79,7 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp, · 7 unmodified lines
7879 */
7980 status->abort_code = abort_code;
8081 scb->have_error = true;
81− return 0;
82+ goto good;
8283 }
8384
8485 pr_warn("Unknown AFSFetchStatus version %u\n", ntohl(xdr->if_version));
@@ -87,7 +88,8 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp, · 2 unmodified lines
8788
8889 if (abort_code != 0 && inline_error) {
8990 status->abort_code = abort_code;
90− return 0;
91+ scb->have_error = true;
92+ goto good;
9193 }
9294
9395 type = ntohl(xdr->type);
@@ -123,13 +125,16 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp, · 29 unmodified lines
123125 data_version |= (u64)ntohl(xdr->data_version_hi) << 32;
124126 status->data_version = data_version;
125127 scb->have_status = true;
126−
128+good:
129+ ret = 0;
130+advance:
127131 *_bp = (const void *)*_bp + sizeof(*xdr);
128− return 0;
132+ return ret;
129133
130134 bad:
131135 xdr_dump_bad(*_bp);
132− return afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
136+ ret = afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
137+ goto advance;
133138 }
134139
135140 static time64_t xdr_decode_expiry(struct afs_call *call, u32 expiry)
@@ -981,16 +986,16 @@ static int afs_deliver_fs_rename(struct afs_call *call) · 845 unmodified lines
981986 if (ret < 0)
982987 return ret;
983988
984− /* unmarshall the reply once we've received all of it */
989+ /* If the two dirs are the same, we have two copies of the same status
990+ * report, so we just decode it twice.
991+ */
985992 bp = call->buffer;
986993 ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
987994 if (ret < 0)
988995 return ret;
989− if (call->out_dir_scb != call->out_scb) {
990− ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
991− if (ret < 0)
992− return ret;
993− }
996+ ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
997+ if (ret < 0)
998+ return ret;
994999 xdr_decode_AFSVolSync(&bp, call->out_volsync);
9951000
9961001 _leave(" = 0 [done]");
fs/afs/internal.h+1−3
@@ -533,12 +533,10 @@ struct afs_server { · 532 unmodified lines
533533 u32 abort_code;
534534 u32 cm_epoch;
535535 short error;
536− bool have_result;
537536 bool responded:1;
538537 bool is_yfs:1;
539538 bool not_yfs:1;
540539 bool local_failure:1;
541− bool no_epoch:1;
542540 bool cm_probed:1;
543541 bool said_rebooted:1;
544542 bool said_inconsistent:1;
@@ -1335,7 +1333,7 @@ extern struct afs_volume *afs_create_volume(struct afs_fs_context *); · 790 unmodified lines
13351333 extern void afs_activate_volume(struct afs_volume *);
13361334 extern void afs_deactivate_volume(struct afs_volume *);
13371335 extern void afs_put_volume(struct afs_cell *, struct afs_volume *);
1338−extern int afs_check_volume_status(struct afs_volume *, struct key *);
1336+extern int afs_check_volume_status(struct afs_volume *, struct afs_fs_cursor *);
13391337
13401338 /*
13411339 * write.c
fs/afs/rotate.c+3−3
@@ -192,7 +192,7 @@ bool afs_select_fileserver(struct afs_fs_cursor *fc) · 191 unmodified lines
192192 write_unlock(&vnode->volume->servers_lock);
193193
194194 set_bit(AFS_VOLUME_NEEDS_UPDATE, &vnode->volume->flags);
195− error = afs_check_volume_status(vnode->volume, fc->key);
195+ error = afs_check_volume_status(vnode->volume, fc);
196196 if (error < 0)
197197 goto failed_set_error;
198198
@@ -281,7 +281,7 @@ bool afs_select_fileserver(struct afs_fs_cursor *fc) · 82 unmodified lines
281281
282282 set_bit(AFS_VOLUME_WAIT, &vnode->volume->flags);
283283 set_bit(AFS_VOLUME_NEEDS_UPDATE, &vnode->volume->flags);
284− error = afs_check_volume_status(vnode->volume, fc->key);
284+ error = afs_check_volume_status(vnode->volume, fc);
285285 if (error < 0)
286286 goto failed_set_error;
287287
@@ -341,7 +341,7 @@ start: · 53 unmodified lines
341341 /* See if we need to do an update of the volume record. Note that the
342342 * volume may have moved or even have been deleted.
343343 */
344− error = afs_check_volume_status(vnode->volume, fc->key);
344+ error = afs_check_volume_status(vnode->volume, fc);
345345 if (error < 0)
346346 goto failed_set_error;
347347
fs/afs/server.c+2−5
@@ -594,12 +594,9 @@ retry: · 593 unmodified lines
594594 }
595595
596596 ret = wait_on_bit(&server->flags, AFS_SERVER_FL_UPDATING,
597− TASK_INTERRUPTIBLE);
597+ (fc->flags & AFS_FS_CURSOR_INTR) ?
598+ TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
598599 if (ret == -ERESTARTSYS) {
599− if (!(fc->flags & AFS_FS_CURSOR_INTR) && server->addresses) {
600− _leave(" = t [intr]");
601− return true;
602− }
603600 fc->error = ret;
604601 _leave(" = f [intr]");
605602 return false;
fs/afs/vl_rotate.c+2−2
@@ -302,8 +302,8 @@ static void afs_vl_dump_edestaddrreq(const struct afs_vl_cursor *vc) · 301 unmodified lines
302302 pr_notice("VC: - nr=%u/%u/%u pf=%u\n",
303303 a->nr_ipv4, a->nr_addrs, a->max_addrs,
304304 a->preferred);
305− pr_notice("VC: - pr=%lx R=%lx F=%lx\n",
306− a->probed, a->responded, a->failed);
305+ pr_notice("VC: - R=%lx F=%lx\n",
306+ a->responded, a->failed);
307307 if (a == vc->ac.alist)
308308 pr_notice("VC: - current\n");
309309 }
fs/afs/volume.c+5−3
@@ -281,7 +281,7 @@ error: · 280 unmodified lines
281281 /*
282282 * Make sure the volume record is up to date.
283283 */
284−int afs_check_volume_status(struct afs_volume *volume, struct key *key)
284+int afs_check_volume_status(struct afs_volume *volume, struct afs_fs_cursor *fc)
285285 {
286286 time64_t now = ktime_get_real_seconds();
287287 int ret, retries = 0;
@@ -299,7 +299,7 @@ retry: · 11 unmodified lines
299299 }
300300
301301 if (!test_and_set_bit_lock(AFS_VOLUME_UPDATING, &volume->flags)) {
302− ret = afs_update_volume_status(volume, key);
302+ ret = afs_update_volume_status(volume, fc->key);
303303 clear_bit_unlock(AFS_VOLUME_WAIT, &volume->flags);
304304 clear_bit_unlock(AFS_VOLUME_UPDATING, &volume->flags);
305305 wake_up_bit(&volume->flags, AFS_VOLUME_WAIT);
@@ -312,7 +312,9 @@ retry: · 6 unmodified lines
312312 return 0;
313313 }
314314
315− ret = wait_on_bit(&volume->flags, AFS_VOLUME_WAIT, TASK_INTERRUPTIBLE);
315+ ret = wait_on_bit(&volume->flags, AFS_VOLUME_WAIT,
316+ (fc->flags & AFS_FS_CURSOR_INTR) ?
317+ TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
316318 if (ret == -ERESTARTSYS) {
317319 _leave(" = %d", ret);
318320 return ret;
fs/afs/yfsclient.c+14−12
@@ -165,15 +165,15 @@ static void xdr_dump_bad(const __be32 *bp) · 164 unmodified lines
165165 int i;
166166
167167 pr_notice("YFS XDR: Bad status record\n");
168− for (i = 0; i < 5 * 4 * 4; i += 16) {
168+ for (i = 0; i < 6 * 4 * 4; i += 16) {
169169 memcpy(x, bp, 16);
170170 bp += 4;
171171 pr_notice("%03x: %08x %08x %08x %08x\n",
172172 i, ntohl(x[0]), ntohl(x[1]), ntohl(x[2]), ntohl(x[3]));
173173 }
174174
175− memcpy(x, bp, 4);
176− pr_notice("0x50: %08x\n", ntohl(x[0]));
175+ memcpy(x, bp, 8);
176+ pr_notice("0x60: %08x %08x\n", ntohl(x[0]), ntohl(x[1]));
177177 }
178178
179179 /*
@@ -186,13 +186,14 @@ static int xdr_decode_YFSFetchStatus(const __be32 **_bp, · 6 unmodified lines
186186 const struct yfs_xdr_YFSFetchStatus *xdr = (const void *)*_bp;
187187 struct afs_file_status *status = &scb->status;
188188 u32 type;
189+ int ret;
189190
190191 status->abort_code = ntohl(xdr->abort_code);
191192 if (status->abort_code != 0) {
192193 if (status->abort_code == VNOVNODE)
193194 status->nlink = 0;
194195 scb->have_error = true;
195− return 0;
196+ goto good;
196197 }
197198
198199 type = ntohl(xdr->type);
@@ -220,13 +221,16 @@ static int xdr_decode_YFSFetchStatus(const __be32 **_bp, · 21 unmodified lines
220221 status->size = xdr_to_u64(xdr->size);
221222 status->data_version = xdr_to_u64(xdr->data_version);
222223 scb->have_status = true;
223−
224+good:
225+ ret = 0;
226+advance:
224227 *_bp += xdr_size(xdr);
225− return 0;
228+ return ret;
226229
227230 bad:
228231 xdr_dump_bad(*_bp);
229− return afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
232+ ret = afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
233+ goto advance;
230234 }
231235
232236 /*
@@ -1153,11 +1157,9 @@ static int yfs_deliver_fs_rename(struct afs_call *call) · 920 unmodified lines
11531157 ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
11541158 if (ret < 0)
11551159 return ret;
1156− if (call->out_dir_scb != call->out_scb) {
1157− ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
1158− if (ret < 0)
1159− return ret;
1160− }
1160+ ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
1161+ if (ret < 0)
1162+ return ret;
11611163
11621164 xdr_decode_YFSVolSync(&bp, call->out_volsync);
11631165 _leave(" = 0 [done]");
fs/block_dev.c+10−1
@@ -19,7 +19,6 @@ · 18 unmodified lines
1919 #include <linux/module.h>
2020 #include <linux/blkpg.h>
2121 #include <linux/magic.h>
22−#include <linux/dax.h>
2322 #include <linux/buffer_head.h>
2423 #include <linux/swap.h>
2524 #include <linux/pagevec.h>
@@ -1893,6 +1892,16 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) · 1867 unmodified lines
18931892 struct gendisk *disk = bdev->bd_disk;
18941893 struct block_device *victim = NULL;
18951894
1895+ /*
1896+ * Sync early if it looks like we're the last one. If someone else
1897+ * opens the block device between now and the decrement of bd_openers
1898+ * then we did a sync that we didn't need to, but that's not the end
1899+ * of the world and we want to avoid long (could be several minute)
1900+ * syncs while holding the mutex.
1901+ */
1902+ if (bdev->bd_openers == 1)
1903+ sync_blockdev(bdev);
1904+
18961905 mutex_lock_nested(&bdev->bd_mutex, for_part);
18971906 if (for_part)
18981907 bdev->bd_part_count--;
fs/btrfs/block-group.c+1−0
@@ -3370,6 +3370,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) · 3369 unmodified lines
33703370 space_info->bytes_reserved > 0 ||
33713371 space_info->bytes_may_use > 0))
33723372 btrfs_dump_space_info(info, space_info, 0, 0);
3373+ WARN_ON(space_info->reclaim_size > 0);
33733374 list_del(&space_info->list);
33743375 btrfs_sysfs_remove_space_info(space_info);
33753376 }
fs/btrfs/file.c+15−0
@@ -2097,6 +2097,21 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) · 2096 unmodified lines
20972097
20982098 atomic_inc(&root->log_batch);
20992099
2100+ /*
2101+ * If the inode needs a full sync, make sure we use a full range to
2102+ * avoid log tree corruption, due to hole detection racing with ordered
2103+ * extent completion for adjacent ranges and races between logging and
2104+ * completion of ordered extents for adjancent ranges - both races
2105+ * could lead to file extent items in the log with overlapping ranges.
2106+ * Do this while holding the inode lock, to avoid races with other
2107+ * tasks.
2108+ */
2109+ if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
2110+ &BTRFS_I(inode)->runtime_flags)) {
2111+ start = 0;
2112+ end = LLONG_MAX;
2113+ }
2114+
21002115 /*
21012116 * Before we acquired the inode's lock, someone may have dirtied more
21022117 * pages in the target range. We need to make sure that writeback for
fs/btrfs/reflink.c+1−0
@@ -264,6 +264,7 @@ copy_inline_extent: · 263 unmodified lines
264264 size);
265265 inode_add_bytes(dst, datal);
266266 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(dst)->runtime_flags);
267+ ret = btrfs_inode_set_file_extent_range(BTRFS_I(dst), 0, aligned_end);
267268 out:
268269 if (!ret && !trans) {
269270 /*
fs/btrfs/relocation.c+19−4
@@ -611,8 +611,8 @@ static int should_ignore_root(struct btrfs_root *root) · 610 unmodified lines
611611 if (!reloc_root)
612612 return 0;
613613
614− if (btrfs_root_last_snapshot(&reloc_root->root_item) ==
615− root->fs_info->running_transaction->transid - 1)
614+ if (btrfs_header_generation(reloc_root->commit_root) ==
615+ root->fs_info->running_transaction->transid)
616616 return 0;
617617 /*
618618 * if there is reloc tree and it was created in previous
@@ -1527,8 +1527,7 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, · 908 unmodified lines
15271527 int clear_rsv = 0;
15281528 int ret;
15291529
1530− if (!rc || !rc->create_reloc_tree ||
1531− root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1530+ if (!rc)
15321531 return 0;
15331532
15341533 /*
@@ -1538,12 +1537,28 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, · 3 unmodified lines
15381537 if (reloc_root_is_dead(root))
15391538 return 0;
15401539
1540+ /*
1541+ * This is subtle but important. We do not do
1542+ * record_root_in_transaction for reloc roots, instead we record their
1543+ * corresponding fs root, and then here we update the last trans for the
1544+ * reloc root. This means that we have to do this for the entire life
1545+ * of the reloc root, regardless of which stage of the relocation we are
1546+ * in.
1547+ */
15411548 if (root->reloc_root) {
15421549 reloc_root = root->reloc_root;
15431550 reloc_root->last_trans = trans->transid;
15441551 return 0;
15451552 }
15461553
1554+ /*
1555+ * We are merging reloc roots, we do not need new reloc trees. Also
1556+ * reloc trees never need their own reloc tree.
1557+ */
1558+ if (!rc->create_reloc_tree ||
1559+ root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1560+ return 0;
1561+
15471562 if (!trans->reloc_reserved) {
15481563 rsv = trans->block_rsv;
15491564 trans->block_rsv = rc->block_rsv;
fs/btrfs/space-info.c+14−6
@@ -361,6 +361,16 @@ int btrfs_can_overcommit(struct btrfs_fs_info *fs_info, · 360 unmodified lines
361361 return 0;
362362 }
363363
364+static void remove_ticket(struct btrfs_space_info *space_info,
365+ struct reserve_ticket *ticket)
366+{
367+ if (!list_empty(&ticket->list)) {
368+ list_del_init(&ticket->list);
369+ ASSERT(space_info->reclaim_size >= ticket->bytes);
370+ space_info->reclaim_size -= ticket->bytes;
371+ }
372+}
373+
364374 /*
365375 * This is for space we already have accounted in space_info->bytes_may_use, so
366376 * basically when we're returning space from block_rsv's.
@@ -388,9 +398,7 @@ again: · 21 unmodified lines
388398 btrfs_space_info_update_bytes_may_use(fs_info,
389399 space_info,
390400 ticket->bytes);
391− list_del_init(&ticket->list);
392− ASSERT(space_info->reclaim_size >= ticket->bytes);
393− space_info->reclaim_size -= ticket->bytes;
401+ remove_ticket(space_info, ticket);
394402 ticket->bytes = 0;
395403 space_info->tickets_id++;
396404 wake_up(&ticket->wait);
@@ -899,7 +907,7 @@ static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info, · 502 unmodified lines
899907 btrfs_info(fs_info, "failing ticket with %llu bytes",
900908 ticket->bytes);
901909
902− list_del_init(&ticket->list);
910+ remove_ticket(space_info, ticket);
903911 ticket->error = -ENOSPC;
904912 wake_up(&ticket->wait);
905913
@@ -1063,7 +1071,7 @@ static void wait_reserve_ticket(struct btrfs_fs_info *fs_info, · 157 unmodified lines
10631071 * despite getting an error, resulting in a space leak
10641072 * (bytes_may_use counter of our space_info).
10651073 */
1066− list_del_init(&ticket->list);
1074+ remove_ticket(space_info, ticket);
10671075 ticket->error = -EINTR;
10681076 break;
10691077 }
@@ -1121,7 +1129,7 @@ static int handle_reserve_ticket(struct btrfs_fs_info *fs_info, · 51 unmodified lines
11211129 * either the async reclaim job deletes the ticket from the list
11221130 * or we delete it ourselves at wait_reserve_ticket().
11231131 */
1124− list_del_init(&ticket->list);
1132+ remove_ticket(space_info, ticket);
11251133 if (!ret)
11261134 ret = -ENOSPC;
11271135 }
fs/btrfs/tree-log.c+14−79
@@ -96,8 +96,8 @@ enum { · 95 unmodified lines
9696 static int btrfs_log_inode(struct btrfs_trans_handle *trans,
9797 struct btrfs_root *root, struct btrfs_inode *inode,
9898 int inode_only,
99− u64 start,
100− u64 end,
99+ const loff_t start,
100+ const loff_t end,
101101 struct btrfs_log_ctx *ctx);
102102 static int link_to_fixup_dir(struct btrfs_trans_handle *trans,
103103 struct btrfs_root *root,
@@ -4533,15 +4533,13 @@ static int btrfs_log_all_xattrs(struct btrfs_trans_handle *trans, · 4429 unmodified lines
45334533 static int btrfs_log_holes(struct btrfs_trans_handle *trans,
45344534 struct btrfs_root *root,
45354535 struct btrfs_inode *inode,
4536− struct btrfs_path *path,
4537− const u64 start,
4538− const u64 end)
4536+ struct btrfs_path *path)
45394537 {
45404538 struct btrfs_fs_info *fs_info = root->fs_info;
45414539 struct btrfs_key key;
45424540 const u64 ino = btrfs_ino(inode);
45434541 const u64 i_size = i_size_read(&inode->vfs_inode);
4544− u64 prev_extent_end = start;
4542+ u64 prev_extent_end = 0;
45454543 int ret;
45464544
45474545 if (!btrfs_fs_incompat(fs_info, NO_HOLES) || i_size == 0)
@@ -4549,21 +4547,14 @@ static int btrfs_log_holes(struct btrfs_trans_handle *trans, · 1 unmodified line
45494547
45504548 key.objectid = ino;
45514549 key.type = BTRFS_EXTENT_DATA_KEY;
4552− key.offset = start;
4550+ key.offset = 0;
45534551
45544552 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
45554553 if (ret < 0)
45564554 return ret;
45574555
4558− if (ret > 0 && path->slots[0] > 0) {
4559− btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1);
4560− if (key.objectid == ino && key.type == BTRFS_EXTENT_DATA_KEY)
4561− path->slots[0]--;
4562− }
4563−
45644556 while (true) {
45654557 struct extent_buffer *leaf = path->nodes[0];
4566− u64 extent_end;
45674558
45684559 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
45694560 ret = btrfs_next_leaf(root, path);
@@ -4580,18 +4571,9 @@ static int btrfs_log_holes(struct btrfs_trans_handle *trans, · 10 unmodified lines
45804571 if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)
45814572 break;
45824573
4583− extent_end = btrfs_file_extent_end(path);
4584− if (extent_end <= start)
4585− goto next_slot;
4586−
45874574 /* We have a hole, log it. */
45884575 if (prev_extent_end < key.offset) {
4589− u64 hole_len;
4590−
4591− if (key.offset >= end)
4592− hole_len = end - prev_extent_end;
4593− else
4594− hole_len = key.offset - prev_extent_end;
4576+ const u64 hole_len = key.offset - prev_extent_end;
45954577
45964578 /*
45974579 * Release the path to avoid deadlocks with other code
@@ -4621,20 +4603,16 @@ static int btrfs_log_holes(struct btrfs_trans_handle *trans, · 23 unmodified lines
46214603 leaf = path->nodes[0];
46224604 }
46234605
4624− prev_extent_end = min(extent_end, end);
4625− if (extent_end >= end)
4626− break;
4627−next_slot:
4606+ prev_extent_end = btrfs_file_extent_end(path);
46284607 path->slots[0]++;
46294608 cond_resched();
46304609 }
46314610
4632− if (prev_extent_end < end && prev_extent_end < i_size) {
4611+ if (prev_extent_end < i_size) {
46334612 u64 hole_len;
46344613
46354614 btrfs_release_path(path);
4636− hole_len = min(ALIGN(i_size, fs_info->sectorsize), end);
4637− hole_len -= prev_extent_end;
4615+ hole_len = ALIGN(i_size - prev_extent_end, fs_info->sectorsize);
46384616 ret = btrfs_insert_file_extent(trans, root->log_root,
46394617 ino, prev_extent_end, 0, 0,
46404618 hole_len, 0, hole_len,
@@ -4971,8 +4949,6 @@ static int copy_inode_items_to_log(struct btrfs_trans_handle *trans, · 330 unmodified lines
49714949 const u64 logged_isize,
49724950 const bool recursive_logging,
49734951 const int inode_only,
4974− const u64 start,
4975− const u64 end,
49764952 struct btrfs_log_ctx *ctx,
49774953 bool *need_log_inode_item)
49784954 {
@@ -4981,21 +4957,6 @@ static int copy_inode_items_to_log(struct btrfs_trans_handle *trans, · 2 unmodified lines
49814957 int ins_nr = 0;
49824958 int ret;
49834959
4984− /*
4985− * We must make sure we don't copy extent items that are entirely out of
4986− * the range [start, end - 1]. This is not just an optimization to avoid
4987− * copying but also needed to avoid a corruption where we end up with
4988− * file extent items in the log tree that have overlapping ranges - this
4989− * can happen if we race with ordered extent completion for ranges that
4990− * are outside our target range. For example we copy an extent item and
4991− * when we move to the next leaf, that extent was trimmed and a new one
4992− * covering a subrange of it, but with a higher key, was inserted - we
4993− * would then copy this other extent too, resulting in a log tree with
4994− * 2 extent items that represent overlapping ranges.
4995− *
4996− * We can copy the entire extents at the range bondaries however, even
4997− * if they cover an area outside the target range. That's ok.
4998− */
49994960 while (1) {
50004961 ret = btrfs_search_forward(root, min_key, path, trans->transid);
50014962 if (ret < 0)
@@ -5063,29 +5024,6 @@ again: · 61 unmodified lines
50635024 goto next_slot;
50645025 }
50655026
5066− if (min_key->type == BTRFS_EXTENT_DATA_KEY) {
5067− const u64 extent_end = btrfs_file_extent_end(path);
5068−
5069− if (extent_end <= start) {
5070− if (ins_nr > 0) {
5071− ret = copy_items(trans, inode, dst_path,
5072− path, ins_start_slot,
5073− ins_nr, inode_only,
5074− logged_isize);
5075− if (ret < 0)
5076− return ret;
5077− ins_nr = 0;
5078− }
5079− goto next_slot;
5080− }
5081− if (extent_end >= end) {
5082− ins_nr++;
5083− if (ins_nr == 1)
5084− ins_start_slot = path->slots[0];
5085− break;
5086− }
5087− }
5088−
50895027 if (ins_nr && ins_start_slot + ins_nr == path->slots[0]) {
50905028 ins_nr++;
50915029 goto next_slot;
@@ -5151,8 +5089,8 @@ next_key: · 59 unmodified lines
51515089 static int btrfs_log_inode(struct btrfs_trans_handle *trans,
51525090 struct btrfs_root *root, struct btrfs_inode *inode,
51535091 int inode_only,
5154− u64 start,
5155− u64 end,
5092+ const loff_t start,
5093+ const loff_t end,
51565094 struct btrfs_log_ctx *ctx)
51575095 {
51585096 struct btrfs_fs_info *fs_info = root->fs_info;
@@ -5180,9 +5118,6 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, · 21 unmodified lines
51805118 return -ENOMEM;
51815119 }
51825120
5183− start = ALIGN_DOWN(start, fs_info->sectorsize);
5184− end = ALIGN(end, fs_info->sectorsize);
5185−
51865121 min_key.objectid = ino;
51875122 min_key.type = BTRFS_INODE_ITEM_KEY;
51885123 min_key.offset = 0;
@@ -5298,8 +5233,8 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, · 109 unmodified lines
52985233
52995234 err = copy_inode_items_to_log(trans, inode, &min_key, &max_key,
53005235 path, dst_path, logged_isize,
5301− recursive_logging, inode_only,
5302− start, end, ctx, &need_log_inode_item);
5236+ recursive_logging, inode_only, ctx,
5237+ &need_log_inode_item);
53035238 if (err)
53045239 goto out_unlock;
53055240
@@ -5312,7 +5247,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, · 6 unmodified lines
53125247 if (max_key.type >= BTRFS_EXTENT_DATA_KEY && !fast_search) {
53135248 btrfs_release_path(path);
53145249 btrfs_release_path(dst_path);
5315− err = btrfs_log_holes(trans, root, inode, path, start, end);
5250+ err = btrfs_log_holes(trans, root, inode, path);
53165251 if (err)
53175252 goto out_unlock;
53185253 }
fs/buffer.c+12−1
@@ -967,7 +967,7 @@ grow_dev_page(struct block_device *bdev, sector_t block, · 966 unmodified lines
967967 struct page *page;
968968 struct buffer_head *bh;
969969 sector_t end_block;
970− int ret = 0; /* Will call free_more_memory() */
970+ int ret = 0;
971971 gfp_t gfp_mask;
972972
973973 gfp_mask = mapping_gfp_constraint(inode->i_mapping, ~__GFP_FS) | gfp;
@@ -1371,6 +1371,17 @@ void __breadahead(struct block_device *bdev, sector_t block, unsigned size) · 397 unmodified lines
13711371 }
13721372 EXPORT_SYMBOL(__breadahead);
13731373
1374+void __breadahead_gfp(struct block_device *bdev, sector_t block, unsigned size,
1375+ gfp_t gfp)
1376+{
1377+ struct buffer_head *bh = __getblk_gfp(bdev, block, size, gfp);
1378+ if (likely(bh)) {
1379+ ll_rw_block(REQ_OP_READ, REQ_RAHEAD, 1, &bh);
1380+ brelse(bh);
1381+ }
1382+}
1383+EXPORT_SYMBOL(__breadahead_gfp);
1384+
13741385 /**
13751386 * __bread_gfp() - reads a specified block and returns the bh
13761387 * @bdev: the block_device to read from
fs/ceph/dir.c+2−2
@@ -1051,8 +1051,8 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc, · 1050 unmodified lines
10511051
10521052 /* If op failed, mark everyone involved for errors */
10531053 if (result) {
1054− int pathlen;
1055− u64 base;
1054+ int pathlen = 0;
1055+ u64 base = 0;
10561056 char *path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
10571057 &base, 0);
10581058
fs/ceph/file.c+2−2
@@ -527,8 +527,8 @@ static void ceph_async_create_cb(struct ceph_mds_client *mdsc, · 526 unmodified lines
527527
528528 if (result) {
529529 struct dentry *dentry = req->r_dentry;
530− int pathlen;
531− u64 base;
530+ int pathlen = 0;
531+ u64 base = 0;
532532 char *path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
533533 &base, 0);
534534
fs/ceph/mds_client.h+1−1
@@ -521,7 +521,7 @@ extern void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc); · 520 unmodified lines
521521
522522 static inline void ceph_mdsc_free_path(char *path, int len)
523523 {
524− if (path)
524+ if (!IS_ERR_OR_NULL(path))
525525 __putname(path - (PATH_MAX - 1 - len));
526526 }
527527
fs/cifs/cifsglob.h+2−1
@@ -1891,7 +1891,8 @@ GLOBAL_EXTERN struct list_head cifs_tcp_ses_list; · 1890 unmodified lines
18911891 /*
18921892 * This lock protects the cifs_tcp_ses_list, the list of smb sessions per
18931893 * tcp session, and the list of tcon's per smb session. It also protects
1894− * the reference counters for the server, smb session, and tcon. Finally,
1894+ * the reference counters for the server, smb session, and tcon. It also
1895+ * protects some fields in the TCP_Server_Info struct such as dstaddr. Finally,
18951896 * changes to the tcon->tidStatus should be done while holding this lock.
18961897 * generally the locks should be taken in order tcp_ses_lock before
18971898 * tcon->open_file_lock and that before file->file_info_lock since the
fs/cifs/cifssmb.c+4−0
@@ -594,6 +594,8 @@ decode_lanman_negprot_rsp(struct TCP_Server_Info *server, NEGOTIATE_RSP *pSMBr) · 593 unmodified lines
594594 cifs_max_pending);
595595 set_credits(server, server->maxReq);
596596 server->maxBuf = le16_to_cpu(rsp->MaxBufSize);
597+ /* set up max_read for readpages check */
598+ server->max_read = server->maxBuf;
597599 /* even though we do not use raw we might as well set this
598600 accurately, in case we ever find a need for it */
599601 if ((le16_to_cpu(rsp->RawMode) & RAW_ENABLE) == RAW_ENABLE) {
@@ -755,6 +757,8 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses) · 155 unmodified lines
755757 set_credits(server, server->maxReq);
756758 /* probably no need to store and check maxvcs */
757759 server->maxBuf = le32_to_cpu(pSMBr->MaxBufferSize);
760+ /* set up max_read for readpages check */
761+ server->max_read = server->maxBuf;
758762 server->max_rw = le32_to_cpu(pSMBr->MaxRawSize);
759763 cifs_dbg(NOISY, "Max buf = %d\n", ses->server->maxBuf);
760764 server->capabilities = le32_to_cpu(pSMBr->Capabilities);
fs/cifs/connect.c+6−0
@@ -375,8 +375,10 @@ static int reconn_set_ipaddr(struct TCP_Server_Info *server) · 374 unmodified lines
375375 return rc;
376376 }
377377
378+ spin_lock(&cifs_tcp_ses_lock);
378379 rc = cifs_convert_address((struct sockaddr *)&server->dstaddr, ipaddr,
379380 strlen(ipaddr));
381+ spin_unlock(&cifs_tcp_ses_lock);
380382 kfree(ipaddr);
381383
382384 return !rc ? -1 : 0;
@@ -3373,6 +3375,10 @@ cifs_find_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) · 2990 unmodified lines
33733375 spin_lock(&cifs_tcp_ses_lock);
33743376 list_for_each(tmp, &ses->tcon_list) {
33753377 tcon = list_entry(tmp, struct cifs_tcon, tcon_list);
3378+#ifdef CONFIG_CIFS_DFS_UPCALL
3379+ if (tcon->dfs_path)
3380+ continue;
3381+#endif
33763382 if (!match_tcon(tcon, volume_info))
33773383 continue;
33783384 ++tcon->tc_count;
fs/cifs/inode.c+1−1
@@ -61,7 +61,7 @@ static void cifs_set_ops(struct inode *inode) · 60 unmodified lines
6161 }
6262
6363 /* check if server can support readpages */
64− if (cifs_sb_master_tcon(cifs_sb)->ses->server->maxBuf <
64+ if (cifs_sb_master_tcon(cifs_sb)->ses->server->max_read <
6565 PAGE_SIZE + MAX_CIFS_HDR_SIZE)
6666 inode->i_data.a_ops = &cifs_addr_ops_smallbuf;
6767 else
fs/cifs/misc.c+65−17
@@ -1025,51 +1025,99 @@ int copy_path_name(char *dst, const char *src) · 1024 unmodified lines
10251025 }
10261026
10271027 struct super_cb_data {
1028− struct TCP_Server_Info *server;
1028+ void *data;
10291029 struct super_block *sb;
10301030 };
10311031
1032−static void super_cb(struct super_block *sb, void *arg)
1032+static void tcp_super_cb(struct super_block *sb, void *arg)
10331033 {
1034− struct super_cb_data *d = arg;
1034+ struct super_cb_data *sd = arg;
1035+ struct TCP_Server_Info *server = sd->data;
10351036 struct cifs_sb_info *cifs_sb;
10361037 struct cifs_tcon *tcon;
10371038
1038− if (d->sb)
1039+ if (sd->sb)
10391040 return;
10401041
10411042 cifs_sb = CIFS_SB(sb);
10421043 tcon = cifs_sb_master_tcon(cifs_sb);
1043− if (tcon->ses->server == d->server)
1044− d->sb = sb;
1044+ if (tcon->ses->server == server)
1045+ sd->sb = sb;
10451046 }
10461047
1047−struct super_block *cifs_get_tcp_super(struct TCP_Server_Info *server)
1048+static struct super_block *__cifs_get_super(void (*f)(struct super_block *, void *),
1049+ void *data)
10481050 {
1049− struct super_cb_data d = {
1050− .server = server,
1051+ struct super_cb_data sd = {
1052+ .data = data,
10511053 .sb = NULL,
10521054 };
10531055
1054− iterate_supers_type(&cifs_fs_type, super_cb, &d);
1056+ iterate_supers_type(&cifs_fs_type, f, &sd);
10551057
1056− if (unlikely(!d.sb))
1057− return ERR_PTR(-ENOENT);
1058+ if (!sd.sb)
1059+ return ERR_PTR(-EINVAL);
10581060 /*
10591061 * Grab an active reference in order to prevent automounts (DFS links)
10601062 * of expiring and then freeing up our cifs superblock pointer while
10611063 * we're doing failover.
10621064 */
1063− cifs_sb_active(d.sb);
1064− return d.sb;
1065+ cifs_sb_active(sd.sb);
1066+ return sd.sb;
10651067 }
10661068
1067−void cifs_put_tcp_super(struct super_block *sb)
1069+static void __cifs_put_super(struct super_block *sb)
10681070 {
10691071 if (!IS_ERR_OR_NULL(sb))
10701072 cifs_sb_deactive(sb);
10711073 }
10721074
1075+struct super_block *cifs_get_tcp_super(struct TCP_Server_Info *server)
1076+{
1077+ return __cifs_get_super(tcp_super_cb, server);
1078+}
1079+
1080+void cifs_put_tcp_super(struct super_block *sb)
1081+{
1082+ __cifs_put_super(sb);
1083+}
1084+
1085+#ifdef CONFIG_CIFS_DFS_UPCALL
1086+static void tcon_super_cb(struct super_block *sb, void *arg)
1087+{
1088+ struct super_cb_data *sd = arg;
1089+ struct cifs_tcon *tcon = sd->data;
1090+ struct cifs_sb_info *cifs_sb;
1091+
1092+ if (sd->sb)
1093+ return;
1094+
1095+ cifs_sb = CIFS_SB(sb);
1096+ if (tcon->dfs_path && cifs_sb->origin_fullpath &&
1097+ !strcasecmp(tcon->dfs_path, cifs_sb->origin_fullpath))
1098+ sd->sb = sb;
1099+}
1100+
1101+static inline struct super_block *cifs_get_tcon_super(struct cifs_tcon *tcon)
1102+{
1103+ return __cifs_get_super(tcon_super_cb, tcon);
1104+}
1105+
1106+static inline void cifs_put_tcon_super(struct super_block *sb)
1107+{
1108+ __cifs_put_super(sb);
1109+}
1110+#else
1111+static inline struct super_block *cifs_get_tcon_super(struct cifs_tcon *tcon)
1112+{
1113+ return ERR_PTR(-EOPNOTSUPP);
1114+}
1115+
1116+static inline void cifs_put_tcon_super(struct super_block *sb)
1117+{
1118+}
1119+#endif
1120+
10731121 int update_super_prepath(struct cifs_tcon *tcon, const char *prefix,
10741122 size_t prefix_len)
10751123 {
@@ -1077,7 +1125,7 @@ int update_super_prepath(struct cifs_tcon *tcon, const char *prefix, · 1 unmodified line
10771125 struct cifs_sb_info *cifs_sb;
10781126 int rc = 0;
10791127
1080− sb = cifs_get_tcp_super(tcon->ses->server);
1128+ sb = cifs_get_tcon_super(tcon);
10811129 if (IS_ERR(sb))
10821130 return PTR_ERR(sb);
10831131
@@ -1099,6 +1147,6 @@ int update_super_prepath(struct cifs_tcon *tcon, const char *prefix, · 15 unmodified lines
10991147 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
11001148
11011149 out:
1102− cifs_put_tcp_super(sb);
1150+ cifs_put_tcon_super(sb);
11031151 return rc;
11041152 }
fs/cifs/smb2ops.c+5−0
@@ -687,6 +687,11 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, · 686 unmodified lines
687687 if (smb3_encryption_required(tcon))
688688 flags |= CIFS_TRANSFORM_REQ;
689689
690+ if (!server->ops->new_lease_key)
691+ return -EIO;
692+
693+ server->ops->new_lease_key(pfid);
694+
690695 memset(rqst, 0, sizeof(rqst));
691696 resp_buftype[0] = resp_buftype[1] = CIFS_NO_BUFFER;
692697 memset(rsp_iov, 0, sizeof(rsp_iov));
fs/cifs/smb2pdu.c+15−0
@@ -1552,6 +1552,21 @@ SMB2_sess_auth_rawntlmssp_authenticate(struct SMB2_sess_data *sess_data) · 1551 unmodified lines
15521552 }
15531553
15541554 rc = SMB2_sess_establish_session(sess_data);
1555+#ifdef CONFIG_CIFS_DEBUG_DUMP_KEYS
1556+ if (ses->server->dialect < SMB30_PROT_ID) {
1557+ cifs_dbg(VFS, "%s: dumping generated SMB2 session keys\n", __func__);
1558+ /*
1559+ * The session id is opaque in terms of endianness, so we can't
1560+ * print it as a long long. we dump it as we got it on the wire
1561+ */
1562+ cifs_dbg(VFS, "Session Id %*ph\n", (int)sizeof(ses->Suid),
1563+ &ses->Suid);
1564+ cifs_dbg(VFS, "Session Key %*ph\n",
1565+ SMB2_NTLMV2_SESSKEY_SIZE, ses->auth_key.response);
1566+ cifs_dbg(VFS, "Signing Key %*ph\n",
1567+ SMB3_SIGN_KEY_SIZE, ses->auth_key.response);
1568+ }
1569+#endif
15551570 out:
15561571 kfree(ntlmssp_blob);
15571572 SMB2_sess_free_buffer(sess_data);
fs/cifs/smb2transport.c+2−2
@@ -660,8 +660,8 @@ smb2_verify_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server) · 659 unmodified lines
660660 return rc;
661661
662662 if (memcmp(server_response_sig, shdr->Signature, SMB2_SIGNATURE_SIZE)) {
663− dump_stack();
664− cifs_dbg(VFS, "sign fail cmd 0x%x message id 0x%llx\n", shdr->Command, shdr->MessageId);
663+ cifs_dbg(VFS, "sign fail cmd 0x%x message id 0x%llx\n",
664+ shdr->Command, shdr->MessageId);
665665 return -EACCES;
666666 } else
667667 return 0;
fs/coredump.c+2−0
@@ -211,6 +211,8 @@ static int format_corename(struct core_name *cn, struct coredump_params *cprm, · 210 unmodified lines
211211 return -ENOMEM;
212212 (*argv)[(*argc)++] = 0;
213213 ++pat_ptr;
214+ if (!(*pat_ptr))
215+ return -ENOMEM;
214216 }
215217
216218 /* Repeat as long as we have more pattern to process and more output
fs/debugfs/file.c+3−12
@@ -506,20 +506,11 @@ DEFINE_DEBUGFS_ATTRIBUTE(fops_u32_wo, NULL, debugfs_u32_set, "%llu\n"); · 505 unmodified lines
506506 * This function creates a file in debugfs with the given name that
507507 * contains the value of the variable @value. If the @mode variable is so
508508 * set, it can be read from, and written to.
509− *
510− * This function will return a pointer to a dentry if it succeeds. This
511− * pointer must be passed to the debugfs_remove() function when the file is
512− * to be removed (no automatic cleanup happens if your module is unloaded,
513− * you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be
514− * returned.
515− *
516− * If debugfs is not enabled in the kernel, the value ERR_PTR(-ENODEV) will
517− * be returned.
518509 */
519−struct dentry *debugfs_create_u32(const char *name, umode_t mode,
520− struct dentry *parent, u32 *value)
510+void debugfs_create_u32(const char *name, umode_t mode, struct dentry *parent,
511+ u32 *value)
521512 {
522− return debugfs_create_mode_unsafe(name, mode, parent, value, &fops_u32,
513+ debugfs_create_mode_unsafe(name, mode, parent, value, &fops_u32,
523514 &fops_u32_ro, &fops_u32_wo);
524515 }
525516 EXPORT_SYMBOL_GPL(debugfs_create_u32);
fs/exfat/balloc.c+0−3
@@ -91,7 +91,6 @@ static int exfat_allocate_bitmap(struct super_block *sb, · 90 unmodified lines
9191 }
9292 }
9393
94− sbi->pbr_bh = NULL;
9594 return 0;
9695 }
9796
@@ -137,8 +136,6 @@ void exfat_free_bitmap(struct exfat_sb_info *sbi) · 39 unmodified lines
137136 {
138137 int i;
139138
140− brelse(sbi->pbr_bh);
141−
142139 for (i = 0; i < sbi->map_sectors; i++)
143140 __brelse(sbi->vol_amap[i]);
144141
fs/exfat/exfat_fs.h+1−0
@@ -507,6 +507,7 @@ void exfat_msg(struct super_block *sb, const char *lv, const char *fmt, ...) · 506 unmodified lines
507507 __printf(3, 4) __cold;
508508 void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
509509 u8 tz, __le16 time, __le16 date, u8 time_ms);
510+void exfat_truncate_atime(struct timespec64 *ts);
510511 void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
511512 u8 *tz, __le16 *time, __le16 *date, u8 *time_ms);
512513 unsigned short exfat_calc_chksum_2byte(void *data, int len,
fs/exfat/file.c+2−0
@@ -273,6 +273,7 @@ int exfat_getattr(const struct path *path, struct kstat *stat, · 272 unmodified lines
273273 struct exfat_inode_info *ei = EXFAT_I(inode);
274274
275275 generic_fillattr(inode, stat);
276+ exfat_truncate_atime(&stat->atime);
276277 stat->result_mask |= STATX_BTIME;
277278 stat->btime.tv_sec = ei->i_crtime.tv_sec;
278279 stat->btime.tv_nsec = ei->i_crtime.tv_nsec;
@@ -339,6 +340,7 @@ int exfat_setattr(struct dentry *dentry, struct iattr *attr) · 60 unmodified lines
339340 }
340341
341342 setattr_copy(inode, attr);
343+ exfat_truncate_atime(&inode->i_atime);
342344 mark_inode_dirty(inode);
343345
344346 out:
fs/exfat/misc.c+13−1
@@ -88,7 +88,8 @@ void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, · 87 unmodified lines
8888 if (time_ms) {
8989 ts->tv_sec += time_ms / 100;
9090 ts->tv_nsec = (time_ms % 100) * 10 * NSEC_PER_MSEC;
91− }
91+ } else
92+ ts->tv_nsec = 0;
9293
9394 if (tz & EXFAT_TZ_VALID)
9495 /* Adjust timezone to UTC0. */
@@ -124,6 +125,17 @@ void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, · 29 unmodified lines
124125 *tz = EXFAT_TZ_VALID;
125126 }
126127
128+/*
129+ * The timestamp for access_time has double seconds granularity.
130+ * (There is no 10msIncrement field for access_time unlike create/modify_time)
131+ * atime also has only a 2-second resolution.
132+ */
133+void exfat_truncate_atime(struct timespec64 *ts)
134+{
135+ ts->tv_sec = round_down(ts->tv_sec, 2);
136+ ts->tv_nsec = 0;
137+}
138+
127139 unsigned short exfat_calc_chksum_2byte(void *data, int len,
128140 unsigned short chksum, int type)
129141 {
fs/exfat/namei.c+7−0
@@ -595,6 +595,7 @@ static int exfat_create(struct inode *dir, struct dentry *dentry, umode_t mode, · 594 unmodified lines
595595 inode_inc_iversion(inode);
596596 inode->i_mtime = inode->i_atime = inode->i_ctime =
597597 EXFAT_I(inode)->i_crtime = current_time(inode);
598+ exfat_truncate_atime(&inode->i_atime);
598599 /* timestamp is already written, so mark_inode_dirty() is unneeded. */
599600
600601 d_instantiate(dentry, inode);
@@ -854,6 +855,7 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry) · 253 unmodified lines
854855
855856 inode_inc_iversion(dir);
856857 dir->i_mtime = dir->i_atime = current_time(dir);
858+ exfat_truncate_atime(&dir->i_atime);
857859 if (IS_DIRSYNC(dir))
858860 exfat_sync_inode(dir);
859861 else
@@ -861,6 +863,7 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry) · 1 unmodified line
861863
862864 clear_nlink(inode);
863865 inode->i_mtime = inode->i_atime = current_time(inode);
866+ exfat_truncate_atime(&inode->i_atime);
864867 exfat_unhash_inode(inode);
865868 exfat_d_version_set(dentry, inode_query_iversion(dir));
866869 unlock:
@@ -903,6 +906,7 @@ static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) · 36 unmodified lines
903906 inode_inc_iversion(inode);
904907 inode->i_mtime = inode->i_atime = inode->i_ctime =
905908 EXFAT_I(inode)->i_crtime = current_time(inode);
909+ exfat_truncate_atime(&inode->i_atime);
906910 /* timestamp is already written, so mark_inode_dirty() is unneeded. */
907911
908912 d_instantiate(dentry, inode);
@@ -1019,6 +1023,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry *dentry) · 110 unmodified lines
10191023
10201024 inode_inc_iversion(dir);
10211025 dir->i_mtime = dir->i_atime = current_time(dir);
1026+ exfat_truncate_atime(&dir->i_atime);
10221027 if (IS_DIRSYNC(dir))
10231028 exfat_sync_inode(dir);
10241029 else
@@ -1027,6 +1032,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry *dentry) · 2 unmodified lines
10271032
10281033 clear_nlink(inode);
10291034 inode->i_mtime = inode->i_atime = current_time(inode);
1035+ exfat_truncate_atime(&inode->i_atime);
10301036 exfat_unhash_inode(inode);
10311037 exfat_d_version_set(dentry, inode_query_iversion(dir));
10321038 unlock:
@@ -1387,6 +1393,7 @@ static int exfat_rename(struct inode *old_dir, struct dentry *old_dentry, · 354 unmodified lines
13871393 inode_inc_iversion(new_dir);
13881394 new_dir->i_ctime = new_dir->i_mtime = new_dir->i_atime =
13891395 EXFAT_I(new_dir)->i_crtime = current_time(new_dir);
1396+ exfat_truncate_atime(&new_dir->i_atime);
13901397 if (IS_DIRSYNC(new_dir))
13911398 exfat_sync_inode(new_dir);
13921399 else
fs/exfat/super.c+22−31
@@ -49,6 +49,7 @@ static void exfat_put_super(struct super_block *sb) · 48 unmodified lines
4949 sync_blockdev(sb->s_bdev);
5050 exfat_set_vol_flags(sb, VOL_CLEAN);
5151 exfat_free_bitmap(sbi);
52+ brelse(sbi->pbr_bh);
5253 mutex_unlock(&sbi->s_lock);
5354
5455 call_rcu(&sbi->rcu, exfat_delayed_free);
@@ -100,7 +101,7 @@ static int exfat_statfs(struct dentry *dentry, struct kstatfs *buf) · 45 unmodified lines
100101 int exfat_set_vol_flags(struct super_block *sb, unsigned short new_flag)
101102 {
102103 struct exfat_sb_info *sbi = EXFAT_SB(sb);
103− struct pbr64 *bpb;
104+ struct pbr64 *bpb = (struct pbr64 *)sbi->pbr_bh->b_data;
104105 bool sync = 0;
105106
106107 /* flags are not changed */
@@ -115,15 +116,6 @@ int exfat_set_vol_flags(struct super_block *sb, unsigned short new_flag) · 8 unmodified lines
115116 if (sb_rdonly(sb))
116117 return 0;
117118
118− if (!sbi->pbr_bh) {
119− sbi->pbr_bh = sb_bread(sb, 0);
120− if (!sbi->pbr_bh) {
121− exfat_msg(sb, KERN_ERR, "failed to read boot sector");
122− return -ENOMEM;
123− }
124− }
125−
126− bpb = (struct pbr64 *)sbi->pbr_bh->b_data;
127119 bpb->bsx.vol_flags = cpu_to_le16(new_flag);
128120
129121 if (new_flag == VOL_DIRTY && !buffer_dirty(sbi->pbr_bh))
@@ -159,7 +151,6 @@ static int exfat_show_options(struct seq_file *m, struct dentry *root) · 29 unmodified lines
159151 seq_puts(m, ",iocharset=utf8");
160152 else if (sbi->nls_io)
161153 seq_printf(m, ",iocharset=%s", sbi->nls_io->charset);
162− seq_printf(m, ",bps=%ld", sb->s_blocksize);
163154 if (opts->errors == EXFAT_ERRORS_CONT)
164155 seq_puts(m, ",errors=continue");
165156 else if (opts->errors == EXFAT_ERRORS_PANIC)
@@ -351,14 +342,15 @@ static int exfat_read_root(struct inode *inode) · 185 unmodified lines
351342 exfat_save_attr(inode, ATTR_SUBDIR);
352343 inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime =
353344 current_time(inode);
345+ exfat_truncate_atime(&inode->i_atime);
354346 exfat_cache_init_inode(inode);
355347 return 0;
356348 }
357349
358−static struct pbr *exfat_read_pbr_with_logical_sector(struct super_block *sb,
359− struct buffer_head **prev_bh)
350+static struct pbr *exfat_read_pbr_with_logical_sector(struct super_block *sb)
360351 {
361− struct pbr *p_pbr = (struct pbr *) (*prev_bh)->b_data;
352+ struct exfat_sb_info *sbi = EXFAT_SB(sb);
353+ struct pbr *p_pbr = (struct pbr *) (sbi->pbr_bh)->b_data;
362354 unsigned short logical_sect = 0;
363355
364356 logical_sect = 1 << p_pbr->bsx.f64.sect_size_bits;
@@ -378,26 +370,23 @@ static struct pbr *exfat_read_pbr_with_logical_sector(struct super_block *sb, · 13 unmodified lines
378370 }
379371
380372 if (logical_sect > sb->s_blocksize) {
381− struct buffer_head *bh = NULL;
382−
383− __brelse(*prev_bh);
384− *prev_bh = NULL;
373+ brelse(sbi->pbr_bh);
374+ sbi->pbr_bh = NULL;
385375
386376 if (!sb_set_blocksize(sb, logical_sect)) {
387377 exfat_msg(sb, KERN_ERR,
388378 "unable to set blocksize %u", logical_sect);
389379 return NULL;
390380 }
391− bh = sb_bread(sb, 0);
392− if (!bh) {
381+ sbi->pbr_bh = sb_bread(sb, 0);
382+ if (!sbi->pbr_bh) {
393383 exfat_msg(sb, KERN_ERR,
394384 "unable to read boot sector (logical sector size = %lu)",
395385 sb->s_blocksize);
396386 return NULL;
397387 }
398388
399− *prev_bh = bh;
400− p_pbr = (struct pbr *) bh->b_data;
389+ p_pbr = (struct pbr *)sbi->pbr_bh->b_data;
401390 }
402391 return p_pbr;
403392 }
@@ -408,21 +397,20 @@ static int __exfat_fill_super(struct super_block *sb) · 4 unmodified lines
408397 int ret;
409398 struct pbr *p_pbr;
410399 struct pbr64 *p_bpb;
411− struct buffer_head *bh;
412400 struct exfat_sb_info *sbi = EXFAT_SB(sb);
413401
414402 /* set block size to read super block */
415403 sb_min_blocksize(sb, 512);
416404
417405 /* read boot sector */
418− bh = sb_bread(sb, 0);
419− if (!bh) {
406+ sbi->pbr_bh = sb_bread(sb, 0);
407+ if (!sbi->pbr_bh) {
420408 exfat_msg(sb, KERN_ERR, "unable to read boot sector");
421409 return -EIO;
422410 }
423411
424412 /* PRB is read */
425− p_pbr = (struct pbr *)bh->b_data;
413+ p_pbr = (struct pbr *)sbi->pbr_bh->b_data;
426414
427415 /* check the validity of PBR */
428416 if (le16_to_cpu((p_pbr->signature)) != PBR_SIGNATURE) {
@@ -433,7 +421,7 @@ static int __exfat_fill_super(struct super_block *sb) · 4 unmodified lines
433421
434422
435423 /* check logical sector size */
436− p_pbr = exfat_read_pbr_with_logical_sector(sb, &bh);
424+ p_pbr = exfat_read_pbr_with_logical_sector(sb);
437425 if (!p_pbr) {
438426 ret = -EIO;
439427 goto free_bh;
@@ -514,7 +502,7 @@ free_alloc_bitmap: · 74 unmodified lines
514502 free_upcase_table:
515503 exfat_free_upcase_table(sbi);
516504 free_bh:
517− brelse(bh);
505+ brelse(sbi->pbr_bh);
518506 return ret;
519507 }
520508
@@ -531,17 +519,18 @@ static int exfat_fill_super(struct super_block *sb, struct fs_context *fc) · 10 unmodified lines
531519 if (opts->discard) {
532520 struct request_queue *q = bdev_get_queue(sb->s_bdev);
533521
534− if (!blk_queue_discard(q))
522+ if (!blk_queue_discard(q)) {
535523 exfat_msg(sb, KERN_WARNING,
536524 "mounting with \"discard\" option, but the device does not support discard");
537− opts->discard = 0;
525+ opts->discard = 0;
526+ }
538527 }
539528
540529 sb->s_flags |= SB_NODIRATIME;
541530 sb->s_magic = EXFAT_SUPER_MAGIC;
542531 sb->s_op = &exfat_sops;
543532
544− sb->s_time_gran = 1;
533+ sb->s_time_gran = 10 * NSEC_PER_MSEC;
545534 sb->s_time_min = EXFAT_MIN_TIMESTAMP_SECS;
546535 sb->s_time_max = EXFAT_MAX_TIMESTAMP_SECS;
547536
@@ -605,6 +594,7 @@ put_inode: · 57 unmodified lines
605594 free_table:
606595 exfat_free_upcase_table(sbi);
607596 exfat_free_bitmap(sbi);
597+ brelse(sbi->pbr_bh);
608598
609599 check_nls_io:
610600 unload_nls(sbi->nls_io);
@@ -717,6 +707,7 @@ static void __exit exit_exfat_fs(void) · 106 unmodified lines
717707 module_init(init_exfat_fs);
718708 module_exit(exit_exfat_fs);
719709
710+MODULE_ALIAS_FS("exfat");
720711 MODULE_LICENSE("GPL");
721712 MODULE_DESCRIPTION("exFAT filesystem support");
722713 MODULE_AUTHOR("Samsung Electronics Co., Ltd.");
fs/ext4/balloc.c+2−2
@@ -410,7 +410,7 @@ verified: · 409 unmodified lines
410410 * Read the bitmap for a given block_group,and validate the
411411 * bits for block/inode/inode tables are set in the bitmaps
412412 *
413− * Return buffer_head on success or NULL in case of failure.
413+ * Return buffer_head on success or an ERR_PTR in case of failure.
414414 */
415415 struct buffer_head *
416416 ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group)
@@ -502,7 +502,7 @@ out: · 85 unmodified lines
502502 return ERR_PTR(err);
503503 }
504504
505−/* Returns 0 on success, 1 on error */
505+/* Returns 0 on success, -errno on error */
506506 int ext4_wait_block_bitmap(struct super_block *sb, ext4_group_t block_group,
507507 struct buffer_head *bh)
508508 {
fs/ext4/ext4_jbd2.c+0−3
@@ -338,9 +338,6 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line, · 337 unmodified lines
338338 if (inode && inode_needs_sync(inode)) {
339339 sync_dirty_buffer(bh);
340340 if (buffer_req(bh) && !buffer_uptodate(bh)) {
341− struct ext4_super_block *es;
342−
343− es = EXT4_SB(inode->i_sb)->s_es;
344341 ext4_error_inode_err(inode, where, line,
345342 bh->b_blocknr, EIO,
346343 "IO error syncing itable block");
fs/ext4/extents.c+4−4
@@ -3374,8 +3374,8 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, · 3373 unmodified lines
33743374 (unsigned long long)map->m_lblk, map_len);
33753375
33763376 sbi = EXT4_SB(inode->i_sb);
3377− eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >>
3378− inode->i_sb->s_blocksize_bits;
3377+ eof_block = (EXT4_I(inode)->i_disksize + inode->i_sb->s_blocksize - 1)
3378+ >> inode->i_sb->s_blocksize_bits;
33793379 if (eof_block < map->m_lblk + map_len)
33803380 eof_block = map->m_lblk + map_len;
33813381
@@ -3627,8 +3627,8 @@ static int ext4_split_convert_extents(handle_t *handle, · 245 unmodified lines
36273627 __func__, inode->i_ino,
36283628 (unsigned long long)map->m_lblk, map->m_len);
36293629
3630− eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >>
3631− inode->i_sb->s_blocksize_bits;
3630+ eof_block = (EXT4_I(inode)->i_disksize + inode->i_sb->s_blocksize - 1)
3631+ >> inode->i_sb->s_blocksize_bits;
36323632 if (eof_block < map->m_lblk + map->m_len)
36333633 eof_block = map->m_lblk + map->m_len;
36343634 /*
fs/ext4/ialloc.c+2−2
@@ -113,7 +113,7 @@ verified: · 112 unmodified lines
113113 * Read the inode allocation bitmap for a given block_group, reading
114114 * into the specified slot in the superblock's bitmap cache.
115115 *
116− * Return buffer_head of bitmap on success or NULL.
116+ * Return buffer_head of bitmap on success, or an ERR_PTR on error.
117117 */
118118 static struct buffer_head *
119119 ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
@@ -662,7 +662,7 @@ static int find_group_other(struct super_block *sb, struct inode *parent, · 542 unmodified lines
662662 * block has been written back to disk. (Yes, these values are
663663 * somewhat arbitrary...)
664664 */
665−#define RECENTCY_MIN 5
665+#define RECENTCY_MIN 60
666666 #define RECENTCY_DIRTY 300
667667
668668 static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino)
fs/ext4/inode.c+2−2
@@ -1973,7 +1973,7 @@ static int ext4_writepage(struct page *page, · 1972 unmodified lines
19731973 bool keep_towrite = false;
19741974
19751975 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
1976− ext4_invalidatepage(page, 0, PAGE_SIZE);
1976+ inode->i_mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
19771977 unlock_page(page);
19781978 return -EIO;
19791979 }
@@ -4364,7 +4364,7 @@ make_io: · 2384 unmodified lines
43644364 if (end > table)
43654365 end = table;
43664366 while (b <= end)
4367− sb_breadahead(sb, b++);
4367+ sb_breadahead_unmovable(sb, b++);
43684368 }
43694369
43704370 /*
fs/ext4/mballoc.c+4−2
@@ -1943,7 +1943,8 @@ void ext4_mb_complex_scan_group(struct ext4_allocation_context *ac, · 1942 unmodified lines
19431943 int free;
19441944
19451945 free = e4b->bd_info->bb_free;
1946− BUG_ON(free <= 0);
1946+ if (WARN_ON(free <= 0))
1947+ return;
19471948
19481949 i = e4b->bd_info->bb_first_free;
19491950
@@ -1966,7 +1967,8 @@ void ext4_mb_complex_scan_group(struct ext4_allocation_context *ac, · 16 unmodified lines
19661967 }
19671968
19681969 mb_find_extent(e4b, i, ac->ac_g_ex.fe_len, &ex);
1969− BUG_ON(ex.fe_len <= 0);
1970+ if (WARN_ON(ex.fe_len <= 0))
1971+ break;
19701972 if (free < ex.fe_len) {
19711973 ext4_grp_locked_error(sb, e4b->bd_group, 0, 0,
19721974 "%d free clusters as per "
fs/ext4/super.c+1−3
@@ -596,7 +596,6 @@ void __ext4_error_file(struct file *file, const char *function, · 595 unmodified lines
596596 {
597597 va_list args;
598598 struct va_format vaf;
599− struct ext4_super_block *es;
600599 struct inode *inode = file_inode(file);
601600 char pathname[80], *path;
602601
@@ -604,7 +603,6 @@ void __ext4_error_file(struct file *file, const char *function, · 1 unmodified line
604603 return;
605604
606605 trace_ext4_error(inode->i_sb, function, line);
607− es = EXT4_SB(inode->i_sb)->s_es;
608606 if (ext4_error_ratelimit(inode->i_sb)) {
609607 path = file_path(file, pathname, sizeof(pathname));
610608 if (IS_ERR(path))
@@ -4340,7 +4338,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) · 3729 unmodified lines
43404338 /* Pre-read the descriptors into the buffer cache */
43414339 for (i = 0; i < db_count; i++) {
43424340 block = descriptor_loc(sb, logical_sb_block, i);
4343− sb_breadahead(sb, block);
4341+ sb_breadahead_unmovable(sb, block);
43444342 }
43454343
43464344 for (i = 0; i < db_count; i++) {
fs/io_uring.c+162−139
@@ -357,7 +357,6 @@ struct io_timeout_data { · 356 unmodified lines
357357 struct hrtimer timer;
358358 struct timespec64 ts;
359359 enum hrtimer_mode mode;
360− u32 seq_offset;
361360 };
362361
363362 struct io_accept {
@@ -385,7 +384,7 @@ struct io_timeout { · 21 unmodified lines
385384 struct file *file;
386385 u64 addr;
387386 int flags;
388− unsigned count;
387+ u32 count;
389388 };
390389
391390 struct io_rw {
@@ -508,6 +507,7 @@ enum { · 116 unmodified lines
508507 REQ_F_FORCE_ASYNC_BIT = IOSQE_ASYNC_BIT,
509508 REQ_F_BUFFER_SELECT_BIT = IOSQE_BUFFER_SELECT_BIT,
510509
510+ REQ_F_LINK_HEAD_BIT,
511511 REQ_F_LINK_NEXT_BIT,
512512 REQ_F_FAIL_LINK_BIT,
513513 REQ_F_INFLIGHT_BIT,
@@ -543,6 +543,8 @@ enum { · 29 unmodified lines
543543 /* IOSQE_BUFFER_SELECT */
544544 REQ_F_BUFFER_SELECT = BIT(REQ_F_BUFFER_SELECT_BIT),
545545
546+ /* head of a link */
547+ REQ_F_LINK_HEAD = BIT(REQ_F_LINK_HEAD_BIT),
546548 /* already grabbed next link */
547549 REQ_F_LINK_NEXT = BIT(REQ_F_LINK_NEXT_BIT),
548550 /* fail rest of links */
@@ -955,8 +957,8 @@ static inline bool __req_need_defer(struct io_kiocb *req) · 406 unmodified lines
955957 {
956958 struct io_ring_ctx *ctx = req->ctx;
957959
958− return req->sequence != ctx->cached_cq_tail + ctx->cached_sq_dropped
959− + atomic_read(&ctx->cached_cq_overflow);
960+ return req->sequence != ctx->cached_cq_tail
961+ + atomic_read(&ctx->cached_cq_overflow);
960962 }
961963
962964 static inline bool req_need_defer(struct io_kiocb *req)
@@ -1437,7 +1439,7 @@ static bool io_link_cancel_timeout(struct io_kiocb *req) · 474 unmodified lines
14371439 if (ret != -1) {
14381440 io_cqring_fill_event(req, -ECANCELED);
14391441 io_commit_cqring(ctx);
1440− req->flags &= ~REQ_F_LINK;
1442+ req->flags &= ~REQ_F_LINK_HEAD;
14411443 io_put_req(req);
14421444 return true;
14431445 }
@@ -1473,7 +1475,7 @@ static void io_req_link_next(struct io_kiocb *req, struct io_kiocb **nxtptr) · 29 unmodified lines
14731475
14741476 list_del_init(&req->link_list);
14751477 if (!list_empty(&nxt->link_list))
1476− nxt->flags |= REQ_F_LINK;
1478+ nxt->flags |= REQ_F_LINK_HEAD;
14771479 *nxtptr = nxt;
14781480 break;
14791481 }
@@ -1484,7 +1486,7 @@ static void io_req_link_next(struct io_kiocb *req, struct io_kiocb **nxtptr) · 4 unmodified lines
14841486 }
14851487
14861488 /*
1487− * Called if REQ_F_LINK is set, and we fail the head request
1489+ * Called if REQ_F_LINK_HEAD is set, and we fail the head request
14881490 */
14891491 static void io_fail_links(struct io_kiocb *req)
14901492 {
@@ -1517,7 +1519,7 @@ static void io_fail_links(struct io_kiocb *req) · 26 unmodified lines
15171519
15181520 static void io_req_find_next(struct io_kiocb *req, struct io_kiocb **nxt)
15191521 {
1520− if (likely(!(req->flags & REQ_F_LINK)))
1522+ if (likely(!(req->flags & REQ_F_LINK_HEAD)))
15211523 return;
15221524
15231525 /*
@@ -1669,7 +1671,7 @@ static inline unsigned int io_sqring_entries(struct io_ring_ctx *ctx) · 145 unmodified lines
16691671
16701672 static inline bool io_req_multi_free(struct req_batch *rb, struct io_kiocb *req)
16711673 {
1672− if ((req->flags & REQ_F_LINK) || io_is_fallback_req(req))
1674+ if ((req->flags & REQ_F_LINK_HEAD) || io_is_fallback_req(req))
16731675 return false;
16741676
16751677 if (!(req->flags & REQ_F_FIXED_FILE) || req->io)
@@ -2562,7 +2564,7 @@ static int io_read(struct io_kiocb *req, bool force_nonblock) · 886 unmodified lines
25622564
25632565 req->result = 0;
25642566 io_size = ret;
2565− if (req->flags & REQ_F_LINK)
2567+ if (req->flags & REQ_F_LINK_HEAD)
25662568 req->result = io_size;
25672569
25682570 /*
@@ -2653,7 +2655,7 @@ static int io_write(struct io_kiocb *req, bool force_nonblock) · 84 unmodified lines
26532655
26542656 req->result = 0;
26552657 io_size = ret;
2656− if (req->flags & REQ_F_LINK)
2658+ if (req->flags & REQ_F_LINK_HEAD)
26572659 req->result = io_size;
26582660
26592661 /*
@@ -2760,7 +2762,7 @@ static bool io_splice_punt(struct file *file) · 100 unmodified lines
27602762 return false;
27612763 if (!io_file_supports_async(file))
27622764 return true;
2763− return !(file->f_mode & O_NONBLOCK);
2765+ return !(file->f_flags & O_NONBLOCK);
27642766 }
27652767
27662768 static int io_splice(struct io_kiocb *req, bool force_nonblock)
@@ -4153,25 +4155,62 @@ static int __io_async_wake(struct io_kiocb *req, struct io_poll_iocb *poll, · 1386 unmodified lines
41534155 return 1;
41544156 }
41554157
4158+static bool io_poll_rewait(struct io_kiocb *req, struct io_poll_iocb *poll)
4159+ __acquires(&req->ctx->completion_lock)
4160+{
4161+ struct io_ring_ctx *ctx = req->ctx;
4162+
4163+ if (!req->result && !READ_ONCE(poll->canceled)) {
4164+ struct poll_table_struct pt = { ._key = poll->events };
4165+
4166+ req->result = vfs_poll(req->file, &pt) & poll->events;
4167+ }
4168+
4169+ spin_lock_irq(&ctx->completion_lock);
4170+ if (!req->result && !READ_ONCE(poll->canceled)) {
4171+ add_wait_queue(poll->head, &poll->wait);
4172+ return true;
4173+ }
4174+
4175+ return false;
4176+}
4177+
41564178 static void io_async_task_func(struct callback_head *cb)
41574179 {
41584180 struct io_kiocb *req = container_of(cb, struct io_kiocb, task_work);
41594181 struct async_poll *apoll = req->apoll;
41604182 struct io_ring_ctx *ctx = req->ctx;
4183+ bool canceled;
41614184
41624185 trace_io_uring_task_run(req->ctx, req->opcode, req->user_data);
41634186
4164− WARN_ON_ONCE(!list_empty(&req->apoll->poll.wait.entry));
4187+ if (io_poll_rewait(req, &apoll->poll)) {
4188+ spin_unlock_irq(&ctx->completion_lock);
4189+ return;
4190+ }
41654191
4166− if (hash_hashed(&req->hash_node)) {
4167− spin_lock_irq(&ctx->completion_lock);
4192+ if (hash_hashed(&req->hash_node))
41684193 hash_del(&req->hash_node);
4169− spin_unlock_irq(&ctx->completion_lock);
4194+
4195+ canceled = READ_ONCE(apoll->poll.canceled);
4196+ if (canceled) {
4197+ io_cqring_fill_event(req, -ECANCELED);
4198+ io_commit_cqring(ctx);
41704199 }
41714200
4201+ spin_unlock_irq(&ctx->completion_lock);
4202+
41724203 /* restore ->work in case we need to retry again */
41734204 memcpy(&req->work, &apoll->work, sizeof(req->work));
41744205
4206+ if (canceled) {
4207+ kfree(apoll);
4208+ io_cqring_ev_posted(ctx);
4209+ req_set_fail_links(req);
4210+ io_double_put_req(req);
4211+ return;
4212+ }
4213+
41754214 __set_current_state(TASK_RUNNING);
41764215 mutex_lock(&ctx->uring_lock);
41774216 __io_queue_sqe(req, NULL);
@@ -4315,11 +4354,13 @@ static bool __io_poll_remove_one(struct io_kiocb *req, · 137 unmodified lines
43154354
43164355 static bool io_poll_remove_one(struct io_kiocb *req)
43174356 {
4357+ struct async_poll *apoll = NULL;
43184358 bool do_complete;
43194359
43204360 if (req->opcode == IORING_OP_POLL_ADD) {
43214361 do_complete = __io_poll_remove_one(req, &req->poll);
43224362 } else {
4363+ apoll = req->apoll;
43234364 /* non-poll requests have submit ref still */
43244365 do_complete = __io_poll_remove_one(req, &req->apoll->poll);
43254366 if (do_complete)
@@ -4328,6 +4369,14 @@ static bool io_poll_remove_one(struct io_kiocb *req) · 2 unmodified lines
43284369
43294370 hash_del(&req->hash_node);
43304371
4372+ if (do_complete && apoll) {
4373+ /*
4374+ * restore ->work because we need to call io_req_work_drop_env.
4375+ */
4376+ memcpy(&req->work, &apoll->work, sizeof(req->work));
4377+ kfree(apoll);
4378+ }
4379+
43314380 if (do_complete) {
43324381 io_cqring_fill_event(req, -ECANCELED);
43334382 io_commit_cqring(req->ctx);
@@ -4342,7 +4391,7 @@ static void io_poll_remove_all(struct io_ring_ctx *ctx) · 8 unmodified lines
43424391 {
43434392 struct hlist_node *tmp;
43444393 struct io_kiocb *req;
4345− int i;
4394+ int posted = 0, i;
43464395
43474396 spin_lock_irq(&ctx->completion_lock);
43484397 for (i = 0; i < (1U << ctx->cancel_hash_bits); i++) {
@@ -4350,11 +4399,12 @@ static void io_poll_remove_all(struct io_ring_ctx *ctx) · 1 unmodified line
43504399
43514400 list = &ctx->cancel_hash[i];
43524401 hlist_for_each_entry_safe(req, tmp, list, hash_node)
4353− io_poll_remove_one(req);
4402+ posted += io_poll_remove_one(req);
43544403 }
43554404 spin_unlock_irq(&ctx->completion_lock);
43564405
4357− io_cqring_ev_posted(ctx);
4406+ if (posted)
4407+ io_cqring_ev_posted(ctx);
43584408 }
43594409
43604410 static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr)
@@ -4423,18 +4473,11 @@ static void io_poll_task_handler(struct io_kiocb *req, struct io_kiocb **nxt) · 62 unmodified lines
44234473 struct io_ring_ctx *ctx = req->ctx;
44244474 struct io_poll_iocb *poll = &req->poll;
44254475
4426− if (!req->result && !READ_ONCE(poll->canceled)) {
4427− struct poll_table_struct pt = { ._key = poll->events };
4428−
4429− req->result = vfs_poll(req->file, &pt) & poll->events;
4430− }
4431−
4432− spin_lock_irq(&ctx->completion_lock);
4433− if (!req->result && !READ_ONCE(poll->canceled)) {
4434− add_wait_queue(poll->head, &poll->wait);
4476+ if (io_poll_rewait(req, poll)) {
44354477 spin_unlock_irq(&ctx->completion_lock);
44364478 return;
44374479 }
4480+
44384481 hash_del(&req->hash_node);
44394482 io_poll_complete(req, req->result, 0);
44404483 req->flags |= REQ_F_COMP_LOCKED;
@@ -4665,11 +4708,12 @@ static int io_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe, · 224 unmodified lines
46654708
46664709 static int io_timeout(struct io_kiocb *req)
46674710 {
4668− unsigned count;
46694711 struct io_ring_ctx *ctx = req->ctx;
46704712 struct io_timeout_data *data;
46714713 struct list_head *entry;
46724714 unsigned span = 0;
4715+ u32 count = req->timeout.count;
4716+ u32 seq = req->sequence;
46734717
46744718 data = &req->io->timeout;
46754719
@@ -4678,7 +4722,6 @@ static int io_timeout(struct io_kiocb *req) · 2 unmodified lines
46784722 * timeout event to be satisfied. If it isn't set, then this is
46794723 * a pure timeout request, sequence isn't used.
46804724 */
4681− count = req->timeout.count;
46824725 if (!count) {
46834726 req->flags |= REQ_F_TIMEOUT_NOSEQ;
46844727 spin_lock_irq(&ctx->completion_lock);
@@ -4686,8 +4729,7 @@ static int io_timeout(struct io_kiocb *req) · 1 unmodified line
46864729 goto add;
46874730 }
46884731
4689− req->sequence = ctx->cached_sq_head + count - 1;
4690− data->seq_offset = count;
4732+ req->sequence = seq + count;
46914733
46924734 /*
46934735 * Insertion sort, ensuring the first entry in the list is always
@@ -4696,26 +4738,26 @@ static int io_timeout(struct io_kiocb *req) · 2 unmodified lines
46964738 spin_lock_irq(&ctx->completion_lock);
46974739 list_for_each_prev(entry, &ctx->timeout_list) {
46984740 struct io_kiocb *nxt = list_entry(entry, struct io_kiocb, list);
4699− unsigned nxt_sq_head;
4741+ unsigned nxt_seq;
47004742 long long tmp, tmp_nxt;
4701− u32 nxt_offset = nxt->io->timeout.seq_offset;
4743+ u32 nxt_offset = nxt->timeout.count;
47024744
47034745 if (nxt->flags & REQ_F_TIMEOUT_NOSEQ)
47044746 continue;
47054747
47064748 /*
4707− * Since cached_sq_head + count - 1 can overflow, use type long
4749+ * Since seq + count can overflow, use type long
47084750 * long to store it.
47094751 */
4710− tmp = (long long)ctx->cached_sq_head + count - 1;
4711− nxt_sq_head = nxt->sequence - nxt_offset + 1;
4712− tmp_nxt = (long long)nxt_sq_head + nxt_offset - 1;
4752+ tmp = (long long)seq + count;
4753+ nxt_seq = nxt->sequence - nxt_offset;
4754+ tmp_nxt = (long long)nxt_seq + nxt_offset;
47134755
47144756 /*
47154757 * cached_sq_head may overflow, and it will never overflow twice
47164758 * once there is some timeout req still be valid.
47174759 */
4718− if (ctx->cached_sq_head < nxt_sq_head)
4760+ if (seq < nxt_seq)
47194761 tmp += UINT_MAX;
47204762
47214763 if (tmp > tmp_nxt)
@@ -5476,7 +5518,7 @@ static struct io_kiocb *io_prep_linked_timeout(struct io_kiocb *req) · 754 unmodified lines
54765518 {
54775519 struct io_kiocb *nxt;
54785520
5479− if (!(req->flags & REQ_F_LINK))
5521+ if (!(req->flags & REQ_F_LINK_HEAD))
54805522 return NULL;
54815523 /* for polled retry, if flag is set, we already went through here */
54825524 if (req->flags & REQ_F_POLLED)
@@ -5604,54 +5646,11 @@ static inline void io_queue_link_head(struct io_kiocb *req) · 121 unmodified lines
56045646 io_queue_sqe(req, NULL);
56055647 }
56065648
5607−#define SQE_VALID_FLAGS (IOSQE_FIXED_FILE|IOSQE_IO_DRAIN|IOSQE_IO_LINK| \
5608− IOSQE_IO_HARDLINK | IOSQE_ASYNC | \
5609− IOSQE_BUFFER_SELECT)
5610−
5611−static bool io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe,
5649+static int io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe,
56125650 struct io_submit_state *state, struct io_kiocb **link)
56135651 {
56145652 struct io_ring_ctx *ctx = req->ctx;
5615− unsigned int sqe_flags;
5616− int ret, id, fd;
5617−
5618− sqe_flags = READ_ONCE(sqe->flags);
5619−
5620− /* enforce forwards compatibility on users */
5621− if (unlikely(sqe_flags & ~SQE_VALID_FLAGS)) {
5622− ret = -EINVAL;
5623− goto err_req;
5624− }
5625−
5626− if ((sqe_flags & IOSQE_BUFFER_SELECT) &&
5627− !io_op_defs[req->opcode].buffer_select) {
5628− ret = -EOPNOTSUPP;
5629− goto err_req;
5630− }
5631−
5632− id = READ_ONCE(sqe->personality);
5633− if (id) {
5634− req->work.creds = idr_find(&ctx->personality_idr, id);
5635− if (unlikely(!req->work.creds)) {
5636− ret = -EINVAL;
5637− goto err_req;
5638− }
5639− get_cred(req->work.creds);
5640− }
5641−
5642− /* same numerical values with corresponding REQ_F_*, safe to copy */
5643− req->flags |= sqe_flags & (IOSQE_IO_DRAIN | IOSQE_IO_HARDLINK |
5644− IOSQE_ASYNC | IOSQE_FIXED_FILE |
5645− IOSQE_BUFFER_SELECT);
5646−
5647− fd = READ_ONCE(sqe->fd);
5648− ret = io_req_set_file(state, req, fd, sqe_flags);
5649− if (unlikely(ret)) {
5650−err_req:
5651− io_cqring_add_event(req, ret);
5652− io_double_put_req(req);
5653− return false;
5654− }
5653+ int ret;
56555654
56565655 /*
56575656 * If we already have a head request, queue this one for async
@@ -5670,42 +5669,39 @@ err_req: · 12 unmodified lines
56705669 * next after the link request. The last one is done via
56715670 * drain_next flag to persist the effect across calls.
56725671 */
5673− if (sqe_flags & IOSQE_IO_DRAIN) {
5672+ if (req->flags & REQ_F_IO_DRAIN) {
56745673 head->flags |= REQ_F_IO_DRAIN;
56755674 ctx->drain_next = 1;
56765675 }
5677− if (io_alloc_async_ctx(req)) {
5678− ret = -EAGAIN;
5679− goto err_req;
5680− }
5676+ if (io_alloc_async_ctx(req))
5677+ return -EAGAIN;
56815678
56825679 ret = io_req_defer_prep(req, sqe);
56835680 if (ret) {
56845681 /* fail even hard links since we don't submit */
56855682 head->flags |= REQ_F_FAIL_LINK;
5686− goto err_req;
5683+ return ret;
56875684 }
56885685 trace_io_uring_link(ctx, req, head);
56895686 list_add_tail(&req->link_list, &head->link_list);
56905687
56915688 /* last request of a link, enqueue the link */
5692− if (!(sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK))) {
5689+ if (!(req->flags & (REQ_F_LINK | REQ_F_HARDLINK))) {
56935690 io_queue_link_head(head);
56945691 *link = NULL;
56955692 }
56965693 } else {
56975694 if (unlikely(ctx->drain_next)) {
56985695 req->flags |= REQ_F_IO_DRAIN;
5699− req->ctx->drain_next = 0;
5696+ ctx->drain_next = 0;
57005697 }
5701− if (sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK)) {
5702− req->flags |= REQ_F_LINK;
5698+ if (req->flags & (REQ_F_LINK | REQ_F_HARDLINK)) {
5699+ req->flags |= REQ_F_LINK_HEAD;
57035700 INIT_LIST_HEAD(&req->link_list);
57045701
5705− if (io_alloc_async_ctx(req)) {
5706− ret = -EAGAIN;
5707− goto err_req;
5708− }
5702+ if (io_alloc_async_ctx(req))
5703+ return -EAGAIN;
5704+
57095705 ret = io_req_defer_prep(req, sqe);
57105706 if (ret)
57115707 req->flags |= REQ_F_FAIL_LINK;
@@ -5715,7 +5711,7 @@ err_req: · 3 unmodified lines
57155711 }
57165712 }
57175713
5718− return true;
5714+ return 0;
57195715 }
57205716
57215717 /*
@@ -5789,15 +5785,23 @@ static inline void io_consume_sqe(struct io_ring_ctx *ctx) · 67 unmodified lines
57895785 ctx->cached_sq_head++;
57905786 }
57915787
5792−static void io_init_req(struct io_ring_ctx *ctx, struct io_kiocb *req,
5793− const struct io_uring_sqe *sqe)
5788+#define SQE_VALID_FLAGS (IOSQE_FIXED_FILE|IOSQE_IO_DRAIN|IOSQE_IO_LINK| \
5789+ IOSQE_IO_HARDLINK | IOSQE_ASYNC | \
5790+ IOSQE_BUFFER_SELECT)
5791+
5792+static int io_init_req(struct io_ring_ctx *ctx, struct io_kiocb *req,
5793+ const struct io_uring_sqe *sqe,
5794+ struct io_submit_state *state, bool async)
57945795 {
5796+ unsigned int sqe_flags;
5797+ int id, fd;
5798+
57955799 /*
57965800 * All io need record the previous position, if LINK vs DARIN,
57975801 * it can be used to mark the position of the first IO in the
57985802 * link list.
57995803 */
5800− req->sequence = ctx->cached_sq_head;
5804+ req->sequence = ctx->cached_sq_head - ctx->cached_sq_dropped;
58015805 req->opcode = READ_ONCE(sqe->opcode);
58025806 req->user_data = READ_ONCE(sqe->user_data);
58035807 req->io = NULL;
@@ -5808,17 +5812,50 @@ static void io_init_req(struct io_ring_ctx *ctx, struct io_kiocb *req, · 4 unmodified lines
58085812 refcount_set(&req->refs, 2);
58095813 req->task = NULL;
58105814 req->result = 0;
5815+ req->needs_fixed_file = async;
58115816 INIT_IO_WORK(&req->work, io_wq_submit_work);
5817+
5818+ if (unlikely(req->opcode >= IORING_OP_LAST))
5819+ return -EINVAL;
5820+
5821+ if (io_op_defs[req->opcode].needs_mm && !current->mm) {
5822+ if (unlikely(!mmget_not_zero(ctx->sqo_mm)))
5823+ return -EFAULT;
5824+ use_mm(ctx->sqo_mm);
5825+ }
5826+
5827+ sqe_flags = READ_ONCE(sqe->flags);
5828+ /* enforce forwards compatibility on users */
5829+ if (unlikely(sqe_flags & ~SQE_VALID_FLAGS))
5830+ return -EINVAL;
5831+
5832+ if ((sqe_flags & IOSQE_BUFFER_SELECT) &&
5833+ !io_op_defs[req->opcode].buffer_select)
5834+ return -EOPNOTSUPP;
5835+
5836+ id = READ_ONCE(sqe->personality);
5837+ if (id) {
5838+ req->work.creds = idr_find(&ctx->personality_idr, id);
5839+ if (unlikely(!req->work.creds))
5840+ return -EINVAL;
5841+ get_cred(req->work.creds);
5842+ }
5843+
5844+ /* same numerical values with corresponding REQ_F_*, safe to copy */
5845+ req->flags |= sqe_flags & (IOSQE_IO_DRAIN | IOSQE_IO_HARDLINK |
5846+ IOSQE_ASYNC | IOSQE_FIXED_FILE |
5847+ IOSQE_BUFFER_SELECT | IOSQE_IO_LINK);
5848+
5849+ fd = READ_ONCE(sqe->fd);
5850+ return io_req_set_file(state, req, fd, sqe_flags);
58125851 }
58135852
58145853 static int io_submit_sqes(struct io_ring_ctx *ctx, unsigned int nr,
5815− struct file *ring_file, int ring_fd,
5816− struct mm_struct **mm, bool async)
5854+ struct file *ring_file, int ring_fd, bool async)
58175855 {
58185856 struct io_submit_state state, *statep = NULL;
58195857 struct io_kiocb *link = NULL;
58205858 int i, submitted = 0;
5821− bool mm_fault = false;
58225859
58235860 /* if we have a backlog and couldn't flush it all, return BUSY */
58245861 if (test_bit(0, &ctx->sq_check_overflow)) {
@@ -5858,34 +5895,23 @@ static int io_submit_sqes(struct io_ring_ctx *ctx, unsigned int nr, · 33 unmodified lines
58585895 break;
58595896 }
58605897
5861− io_init_req(ctx, req, sqe);
5898+ err = io_init_req(ctx, req, sqe, statep, async);
58625899 io_consume_sqe(ctx);
58635900 /* will complete beyond this point, count as submitted */
58645901 submitted++;
58655902
5866− if (unlikely(req->opcode >= IORING_OP_LAST)) {
5867− err = -EINVAL;
5903+ if (unlikely(err)) {
58685904 fail_req:
58695905 io_cqring_add_event(req, err);
58705906 io_double_put_req(req);
58715907 break;
58725908 }
58735909
5874− if (io_op_defs[req->opcode].needs_mm && !*mm) {
5875− mm_fault = mm_fault || !mmget_not_zero(ctx->sqo_mm);
5876− if (unlikely(mm_fault)) {
5877− err = -EFAULT;
5878− goto fail_req;
5879− }
5880− use_mm(ctx->sqo_mm);
5881− *mm = ctx->sqo_mm;
5882− }
5883−
5884− req->needs_fixed_file = async;
58855910 trace_io_uring_submit_sqe(ctx, req->opcode, req->user_data,
58865911 true, async);
5887− if (!io_submit_sqe(req, sqe, statep, &link))
5888− break;
5912+ err = io_submit_sqe(req, sqe, statep, &link);
5913+ if (err)
5914+ goto fail_req;
58895915 }
58905916
58915917 if (unlikely(submitted != nr)) {
@@ -5904,10 +5930,19 @@ fail_req: · 12 unmodified lines
59045930 return submitted;
59055931 }
59065932
5933+static inline void io_sq_thread_drop_mm(struct io_ring_ctx *ctx)
5934+{
5935+ struct mm_struct *mm = current->mm;
5936+
5937+ if (mm) {
5938+ unuse_mm(mm);
5939+ mmput(mm);
5940+ }
5941+}
5942+
59075943 static int io_sq_thread(void *data)
59085944 {
59095945 struct io_ring_ctx *ctx = data;
5910− struct mm_struct *cur_mm = NULL;
59115946 const struct cred *old_cred;
59125947 mm_segment_t old_fs;
59135948 DEFINE_WAIT(wait);
@@ -5948,11 +5983,7 @@ static int io_sq_thread(void *data) · 34 unmodified lines
59485983 * adding ourselves to the waitqueue, as the unuse/drop
59495984 * may sleep.
59505985 */
5951− if (cur_mm) {
5952− unuse_mm(cur_mm);
5953− mmput(cur_mm);
5954− cur_mm = NULL;
5955− }
5986+ io_sq_thread_drop_mm(ctx);
59565987
59575988 /*
59585989 * We're polling. If we're within the defined idle
@@ -6016,7 +6047,7 @@ static int io_sq_thread(void *data) · 57 unmodified lines
60166047 }
60176048
60186049 mutex_lock(&ctx->uring_lock);
6019− ret = io_submit_sqes(ctx, to_submit, NULL, -1, &cur_mm, true);
6050+ ret = io_submit_sqes(ctx, to_submit, NULL, -1, true);
60206051 mutex_unlock(&ctx->uring_lock);
60216052 timeout = jiffies + ctx->sq_thread_idle;
60226053 }
@@ -6025,10 +6056,7 @@ static int io_sq_thread(void *data) · 2 unmodified lines
60256056 task_work_run();
60266057
60276058 set_fs(old_fs);
6028− if (cur_mm) {
6029− unuse_mm(cur_mm);
6030− mmput(cur_mm);
6031− }
6059+ io_sq_thread_drop_mm(ctx);
60326060 revert_creds(old_cred);
60336061
60346062 kthread_parkme();
@@ -7509,13 +7537,8 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit, · 1474 unmodified lines
75097537 wake_up(&ctx->sqo_wait);
75107538 submitted = to_submit;
75117539 } else if (to_submit) {
7512− struct mm_struct *cur_mm;
7513−
75147540 mutex_lock(&ctx->uring_lock);
7515− /* already have mm, so io_submit_sqes() won't try to grab it */
7516− cur_mm = ctx->sqo_mm;
7517− submitted = io_submit_sqes(ctx, to_submit, f.file, fd,
7518− &cur_mm, false);
7541+ submitted = io_submit_sqes(ctx, to_submit, f.file, fd, false);
75197542 mutex_unlock(&ctx->uring_lock);
75207543
75217544 if (submitted != to_submit)
fs/nfs/pnfs.c+2−1
@@ -2023,6 +2023,7 @@ lookup_again: · 2022 unmodified lines
20232023 goto lookup_again;
20242024 }
20252025
2026+ spin_unlock(&ino->i_lock);
20262027 first = true;
20272028 status = nfs4_select_rw_stateid(ctx->state,
20282029 iomode == IOMODE_RW ? FMODE_WRITE : FMODE_READ,
@@ -2032,12 +2033,12 @@ lookup_again: · 3 unmodified lines
20322033 trace_pnfs_update_layout(ino, pos, count,
20332034 iomode, lo, lseg,
20342035 PNFS_UPDATE_LAYOUT_INVALID_OPEN);
2035− spin_unlock(&ino->i_lock);
20362036 nfs4_schedule_stateid_recovery(server, ctx->state);
20372037 pnfs_clear_first_layoutget(lo);
20382038 pnfs_put_layout_hdr(lo);
20392039 goto lookup_again;
20402040 }
2041+ spin_lock(&ino->i_lock);
20412042 } else {
20422043 nfs4_stateid_copy(&stateid, &lo->plh_stateid);
20432044 }
fs/nfsd/nfs4callback.c+3−1
@@ -1312,6 +1312,7 @@ nfsd4_run_cb_work(struct work_struct *work) · 1311 unmodified lines
13121312 container_of(work, struct nfsd4_callback, cb_work);
13131313 struct nfs4_client *clp = cb->cb_clp;
13141314 struct rpc_clnt *clnt;
1315+ int flags;
13151316
13161317 if (cb->cb_need_restart) {
13171318 cb->cb_need_restart = false;
@@ -1340,7 +1341,8 @@ nfsd4_run_cb_work(struct work_struct *work) · 22 unmodified lines
13401341 }
13411342
13421343 cb->cb_msg.rpc_cred = clp->cl_cb_cred;
1343− rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | RPC_TASK_SOFTCONN,
1344+ flags = clp->cl_minorversion ? RPC_TASK_NOCONNECT : RPC_TASK_SOFTCONN;
1345+ rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags,
13441346 cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb);
13451347 }
13461348
fs/nfsd/nfs4state.c+2−0
@@ -267,6 +267,8 @@ find_or_allocate_block(struct nfs4_lockowner *lo, struct knfsd_fh *fh, · 266 unmodified lines
267267 if (!nbl) {
268268 nbl= kmalloc(sizeof(*nbl), GFP_KERNEL);
269269 if (nbl) {
270+ INIT_LIST_HEAD(&nbl->nbl_list);
271+ INIT_LIST_HEAD(&nbl->nbl_lru);
270272 fh_copy_shallow(&nbl->nbl_fh, fh);
271273 locks_init_lock(&nbl->nbl_lock);
272274 nfsd4_init_cb(&nbl->nbl_cb, lo->lo_owner.so_client,
fs/proc/base.c+13−2
@@ -1573,6 +1573,7 @@ static ssize_t timens_offsets_write(struct file *file, const char __user *buf, · 1572 unmodified lines
15731573 noffsets = 0;
15741574 for (pos = kbuf; pos; pos = next_line) {
15751575 struct proc_timens_offset *off = &offsets[noffsets];
1576+ char clock[10];
15761577 int err;
15771578
15781579 /* Find the end of line and ensure we don't look past it */
@@ -1584,10 +1585,21 @@ static ssize_t timens_offsets_write(struct file *file, const char __user *buf, · 5 unmodified lines
15841585 next_line = NULL;
15851586 }
15861587
1587− err = sscanf(pos, "%u %lld %lu", &off->clockid,
1588+ err = sscanf(pos, "%9s %lld %lu", clock,
15881589 &off->val.tv_sec, &off->val.tv_nsec);
15891590 if (err != 3 || off->val.tv_nsec >= NSEC_PER_SEC)
15901591 goto out;
1592+
1593+ clock[sizeof(clock) - 1] = 0;
1594+ if (strcmp(clock, "monotonic") == 0 ||
1595+ strcmp(clock, __stringify(CLOCK_MONOTONIC)) == 0)
1596+ off->clockid = CLOCK_MONOTONIC;
1597+ else if (strcmp(clock, "boottime") == 0 ||
1598+ strcmp(clock, __stringify(CLOCK_BOOTTIME)) == 0)
1599+ off->clockid = CLOCK_BOOTTIME;
1600+ else
1601+ goto out;
1602+
15911603 noffsets++;
15921604 if (noffsets == ARRAY_SIZE(offsets)) {
15931605 if (next_line)
@@ -3274,7 +3286,6 @@ static const struct inode_operations proc_tgid_base_inode_operations = { · 1680 unmodified lines
32743286 void proc_flush_pid(struct pid *pid)
32753287 {
32763288 proc_invalidate_siblings_dcache(&pid->inodes, &pid->lock);
3277− put_pid(pid);
32783289 }
32793290
32803291 static struct dentry *proc_pid_instantiate(struct dentry * dentry,
fs/proc/root.c+7−0
@@ -196,6 +196,13 @@ static void proc_kill_sb(struct super_block *sb) · 195 unmodified lines
196196 if (ns->proc_thread_self)
197197 dput(ns->proc_thread_self);
198198 kill_anon_super(sb);
199+
200+ /* Make the pid namespace safe for the next mount of proc */
201+ ns->proc_self = NULL;
202+ ns->proc_thread_self = NULL;
203+ ns->pid_gid = GLOBAL_ROOT_GID;
204+ ns->hide_pid = 0;
205+
199206 put_pid_ns(ns);
200207 }
201208
fs/proc/vmcore.c+3−2
@@ -266,7 +266,8 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct *vma, unsigned long dst, · 265 unmodified lines
266266 if (start < offset + dump->size) {
267267 tsz = min(offset + (u64)dump->size - start, (u64)size);
268268 buf = dump->buf + start - offset;
269− if (remap_vmalloc_range_partial(vma, dst, buf, tsz)) {
269+ if (remap_vmalloc_range_partial(vma, dst, buf, 0,
270+ tsz)) {
270271 ret = -EFAULT;
271272 goto out_unlock;
272273 }
@@ -624,7 +625,7 @@ static int mmap_vmcore(struct file *file, struct vm_area_struct *vma) · 351 unmodified lines
624625 tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)start, size);
625626 kaddr = elfnotes_buf + start - elfcorebuf_sz - vmcoredd_orig_sz;
626627 if (remap_vmalloc_range_partial(vma, vma->vm_start + len,
627− kaddr, tsz))
628+ kaddr, 0, tsz))
628629 goto fail;
629630
630631 size -= tsz;
fs/xfs/xfs_icache.c+10−0
@@ -911,7 +911,12 @@ xfs_eofblocks_worker( · 910 unmodified lines
911911 {
912912 struct xfs_mount *mp = container_of(to_delayed_work(work),
913913 struct xfs_mount, m_eofblocks_work);
914+
915+ if (!sb_start_write_trylock(mp->m_super))
916+ return;
914917 xfs_icache_free_eofblocks(mp, NULL);
918+ sb_end_write(mp->m_super);
919+
915920 xfs_queue_eofblocks(mp);
916921 }
917922
@@ -938,7 +943,12 @@ xfs_cowblocks_worker( · 20 unmodified lines
938943 {
939944 struct xfs_mount *mp = container_of(to_delayed_work(work),
940945 struct xfs_mount, m_cowblocks_work);
946+
947+ if (!sb_start_write_trylock(mp->m_super))
948+ return;
941949 xfs_icache_free_cowblocks(mp, NULL);
950+ sb_end_write(mp->m_super);
951+
942952 xfs_queue_cowblocks(mp);
943953 }
944954
fs/xfs/xfs_ioctl.c+4−1
@@ -2363,7 +2363,10 @@ xfs_file_ioctl( · 2362 unmodified lines
23632363 if (error)
23642364 return error;
23652365
2366− return xfs_icache_free_eofblocks(mp, &keofb);
2366+ sb_start_write(mp->m_super);
2367+ error = xfs_icache_free_eofblocks(mp, &keofb);
2368+ sb_end_write(mp->m_super);
2369+ return error;
23672370 }
23682371
23692372 default:
fs/xfs/xfs_mount.h+5−1
@@ -167,8 +167,12 @@ typedef struct xfs_mount { · 166 unmodified lines
167167 struct xfs_kobj m_error_meta_kobj;
168168 struct xfs_error_cfg m_error_cfg[XFS_ERR_CLASS_MAX][XFS_ERR_ERRNO_MAX];
169169 struct xstats m_stats; /* per-fs stats */
170− struct ratelimit_state m_flush_inodes_ratelimit;
171170
171+ /*
172+ * Workqueue item so that we can coalesce multiple inode flush attempts
173+ * into a single flush.
174+ */
175+ struct work_struct m_flush_inodes_work;
172176 struct workqueue_struct *m_buf_workqueue;
173177 struct workqueue_struct *m_unwritten_workqueue;
174178 struct workqueue_struct *m_cil_workqueue;
fs/xfs/xfs_reflink.c+1−0
@@ -1051,6 +1051,7 @@ xfs_reflink_remap_extent( · 1050 unmodified lines
10511051 uirec.br_startblock = irec->br_startblock + rlen;
10521052 uirec.br_startoff = irec->br_startoff + rlen;
10531053 uirec.br_blockcount = unmap_len - rlen;
1054+ uirec.br_state = irec->br_state;
10541055 unmap_len = rlen;
10551056
10561057 /* If this isn't a real mapping, we're done. */
fs/xfs/xfs_super.c+22−18
@@ -516,6 +516,20 @@ xfs_destroy_mount_workqueues( · 515 unmodified lines
516516 destroy_workqueue(mp->m_buf_workqueue);
517517 }
518518
519+static void
520+xfs_flush_inodes_worker(
521+ struct work_struct *work)
522+{
523+ struct xfs_mount *mp = container_of(work, struct xfs_mount,
524+ m_flush_inodes_work);
525+ struct super_block *sb = mp->m_super;
526+
527+ if (down_read_trylock(&sb->s_umount)) {
528+ sync_inodes_sb(sb);
529+ up_read(&sb->s_umount);
530+ }
531+}
532+
519533 /*
520534 * Flush all dirty data to disk. Must not be called while holding an XFS_ILOCK
521535 * or a page lock. We use sync_inodes_sb() here to ensure we block while waiting
@@ -526,15 +540,15 @@ void · 4 unmodified lines
526540 xfs_flush_inodes(
527541 struct xfs_mount *mp)
528542 {
529− struct super_block *sb = mp->m_super;
530−
531− if (!__ratelimit(&mp->m_flush_inodes_ratelimit))
543+ /*
544+ * If flush_work() returns true then that means we waited for a flush
545+ * which was already in progress. Don't bother running another scan.
546+ */
547+ if (flush_work(&mp->m_flush_inodes_work))
532548 return;
533549
534− if (down_read_trylock(&sb->s_umount)) {
535− sync_inodes_sb(sb);
536− up_read(&sb->s_umount);
537− }
550+ queue_work(mp->m_sync_workqueue, &mp->m_flush_inodes_work);
551+ flush_work(&mp->m_flush_inodes_work);
538552 }
539553
540554 /* Catch misguided souls that try to use this interface on XFS */
@@ -1369,17 +1383,6 @@ xfs_fc_fill_super( · 828 unmodified lines
13691383 if (error)
13701384 goto out_free_names;
13711385
1372− /*
1373− * Cap the number of invocations of xfs_flush_inodes to 16 for every
1374− * quarter of a second. The magic numbers here were determined by
1375− * observation neither to cause stalls in writeback when there are a
1376− * lot of IO threads and the fs is near ENOSPC, nor cause any fstest
1377− * regressions. YMMV.
1378− */
1379− ratelimit_state_init(&mp->m_flush_inodes_ratelimit, HZ / 4, 16);
1380− ratelimit_set_flags(&mp->m_flush_inodes_ratelimit,
1381− RATELIMIT_MSG_ON_RELEASE);
1382−
13831386 error = xfs_init_mount_workqueues(mp);
13841387 if (error)
13851388 goto out_close_devices;
@@ -1752,6 +1755,7 @@ static int xfs_init_fs_context( · 366 unmodified lines
17521755 spin_lock_init(&mp->m_perag_lock);
17531756 mutex_init(&mp->m_growlock);
17541757 atomic_set(&mp->m_active_trans, 0);
1758+ INIT_WORK(&mp->m_flush_inodes_work, xfs_flush_inodes_worker);
17551759 INIT_DELAYED_WORK(&mp->m_reclaim_work, xfs_reclaim_worker);
17561760 INIT_DELAYED_WORK(&mp->m_eofblocks_work, xfs_eofblocks_worker);
17571761 INIT_DELAYED_WORK(&mp->m_cowblocks_work, xfs_cowblocks_worker);
include/asm-generic/Kbuild+1−0
@@ -56,6 +56,7 @@ mandatory-y += topology.h · 55 unmodified lines
5656 mandatory-y += trace_clock.h
5757 mandatory-y += uaccess.h
5858 mandatory-y += unaligned.h
59+mandatory-y += vermagic.h
5960 mandatory-y += vga.h
6061 mandatory-y += word-at-a-time.h
6162 mandatory-y += xor.h
include/asm-generic/mshyperv.h+1−1
@@ -163,7 +163,7 @@ static inline int cpumask_to_vpset(struct hv_vpset *vpset, · 162 unmodified lines
163163 return nr_bank;
164164 }
165165
166−void hyperv_report_panic(struct pt_regs *regs, long err);
166+void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die);
167167 void hyperv_report_panic_msg(phys_addr_t pa, size_t size);
168168 bool hv_is_hyperv_initialized(void);
169169 bool hv_is_hibernation_supported(void);
include/asm-generic/vermagic.h+7−0
@@ -0,0 +1,7 @@
1+/* SPDX-License-Identifier: GPL-2.0-only */
2+#ifndef _ASM_GENERIC_VERMAGIC_H
3+#define _ASM_GENERIC_VERMAGIC_H
4+
5+#define MODULE_ARCH_VERMAGIC ""
6+
7+#endif /* _ASM_GENERIC_VERMAGIC_H */
include/linux/backing-dev-defs.h+0−1
@@ -54,7 +54,6 @@ enum wb_reason { · 53 unmodified lines
5454 WB_REASON_SYNC,
5555 WB_REASON_PERIODIC,
5656 WB_REASON_LAPTOP_TIMER,
57− WB_REASON_FREE_MORE_MEM,
5857 WB_REASON_FS_FREE_SPACE,
5958 /*
6059 * There is no bdi forker thread any more and works are done
include/linux/bio.h+1−1
@@ -319,7 +319,7 @@ struct bio_integrity_payload { · 318 unmodified lines
319319 struct work_struct bip_work; /* I/O completion */
320320
321321 struct bio_vec *bip_vec;
322− struct bio_vec bip_inline_vecs[0];/* embedded bvec array */
322+ struct bio_vec bip_inline_vecs[];/* embedded bvec array */
323323 };
324324
325325 #if defined(CONFIG_BLK_DEV_INTEGRITY)
include/linux/blk-mq.h+1−1
@@ -173,7 +173,7 @@ struct blk_mq_hw_ctx { · 172 unmodified lines
173173 * blocking (BLK_MQ_F_BLOCKING). Must be the last member - see also
174174 * blk_mq_hw_ctx_size().
175175 */
176− struct srcu_struct srcu[0];
176+ struct srcu_struct srcu[];
177177 };
178178
179179 /**
include/linux/blk_types.h+1−1
@@ -198,7 +198,7 @@ struct bio { · 197 unmodified lines
198198 * double allocations for a small number of bio_vecs. This member
199199 * MUST obviously be kept at the very end of the bio.
200200 */
201− struct bio_vec bi_inline_vecs[0];
201+ struct bio_vec bi_inline_vecs[];
202202 };
203203
204204 #define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
include/linux/buffer_head.h+8−0
@@ -189,6 +189,8 @@ struct buffer_head *__getblk_gfp(struct block_device *bdev, sector_t block, · 188 unmodified lines
189189 void __brelse(struct buffer_head *);
190190 void __bforget(struct buffer_head *);
191191 void __breadahead(struct block_device *, sector_t block, unsigned int size);
192+void __breadahead_gfp(struct block_device *, sector_t block, unsigned int size,
193+ gfp_t gfp);
192194 struct buffer_head *__bread_gfp(struct block_device *,
193195 sector_t block, unsigned size, gfp_t gfp);
194196 void invalidate_bh_lrus(void);
@@ -319,6 +321,12 @@ sb_breadahead(struct super_block *sb, sector_t block) · 124 unmodified lines
319321 __breadahead(sb->s_bdev, block, sb->s_blocksize);
320322 }
321323
324+static inline void
325+sb_breadahead_unmovable(struct super_block *sb, sector_t block)
326+{
327+ __breadahead_gfp(sb->s_bdev, block, sb->s_blocksize, 0);
328+}
329+
322330 static inline struct buffer_head *
323331 sb_getblk(struct super_block *sb, sector_t block)
324332 {
include/linux/can/dev/peak_canfd.h+2−2
@@ -189,7 +189,7 @@ struct __packed pucan_rx_msg { · 188 unmodified lines
189189 u8 client;
190190 __le16 flags;
191191 __le32 can_id;
192− u8 d[0];
192+ u8 d[];
193193 };
194194
195195 /* uCAN error types */
@@ -266,7 +266,7 @@ struct __packed pucan_tx_msg { · 70 unmodified lines
266266 u8 client;
267267 __le16 flags;
268268 __le32 can_id;
269− u8 d[0];
269+ u8 d[];
270270 };
271271
272272 /* build the cmd opcode_channel field with respect to the correct endianness */
include/linux/cpu_rmap.h+1−1
@@ -28,7 +28,7 @@ struct cpu_rmap { · 27 unmodified lines
2828 struct {
2929 u16 index;
3030 u16 dist;
31− } near[0];
31+ } near[];
3232 };
3333 #define CPU_RMAP_DIST_INF 0xffff
3434
include/linux/debugfs.h+4−8
@@ -103,8 +103,8 @@ void debugfs_create_u8(const char *name, umode_t mode, struct dentry *parent, · 102 unmodified lines
103103 u8 *value);
104104 void debugfs_create_u16(const char *name, umode_t mode, struct dentry *parent,
105105 u16 *value);
106−struct dentry *debugfs_create_u32(const char *name, umode_t mode,
107− struct dentry *parent, u32 *value);
106+void debugfs_create_u32(const char *name, umode_t mode, struct dentry *parent,
107+ u32 *value);
108108 void debugfs_create_u64(const char *name, umode_t mode, struct dentry *parent,
109109 u64 *value);
110110 struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
@@ -250,12 +250,8 @@ static inline void debugfs_create_u8(const char *name, umode_t mode, · 139 unmodified lines
250250 static inline void debugfs_create_u16(const char *name, umode_t mode,
251251 struct dentry *parent, u16 *value) { }
252252
253−static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
254− struct dentry *parent,
255− u32 *value)
256−{
257− return ERR_PTR(-ENODEV);
258−}
253+static inline void debugfs_create_u32(const char *name, umode_t mode,
254+ struct dentry *parent, u32 *value) { }
259255
260256 static inline void debugfs_create_u64(const char *name, umode_t mode,
261257 struct dentry *parent, u64 *value) { }
include/linux/digsig.h+2−2
@@ -29,7 +29,7 @@ struct pubkey_hdr { · 28 unmodified lines
2929 uint32_t timestamp; /* key made, always 0 for now */
3030 uint8_t algo;
3131 uint8_t nmpi;
32− char mpi[0];
32+ char mpi[];
3333 } __packed;
3434
3535 struct signature_hdr {
@@ -39,7 +39,7 @@ struct signature_hdr { · 3 unmodified lines
3939 uint8_t hash;
4040 uint8_t keyid[8];
4141 uint8_t nmpi;
42− char mpi[0];
42+ char mpi[];
4343 } __packed;
4444
4545 #if defined(CONFIG_SIGNATURE) || defined(CONFIG_SIGNATURE_MODULE)
include/linux/dirent.h+1−1
@@ -7,7 +7,7 @@ struct linux_dirent64 { · 6 unmodified lines
77 s64 d_off;
88 unsigned short d_reclen;
99 unsigned char d_type;
10− char d_name[0];
10+ char d_name[];
1111 };
1212
1313 #endif
include/linux/enclosure.h+1−1
@@ -101,7 +101,7 @@ struct enclosure_device { · 100 unmodified lines
101101 struct device edev;
102102 struct enclosure_component_callbacks *cb;
103103 int components;
104− struct enclosure_component component[0];
104+ struct enclosure_component component[];
105105 };
106106
107107 static inline struct enclosure_device *
include/linux/energy_model.h+1−1
@@ -36,7 +36,7 @@ struct em_cap_state { · 35 unmodified lines
3636 struct em_perf_domain {
3737 struct em_cap_state *table;
3838 int nr_cap_states;
39− unsigned long cpus[0];
39+ unsigned long cpus[];
4040 };
4141
4242 #ifdef CONFIG_ENERGY_MODEL
include/linux/ethtool.h+2−2
@@ -35,7 +35,7 @@ struct compat_ethtool_rxnfc { · 34 unmodified lines
3535 compat_u64 data;
3636 struct compat_ethtool_rx_flow_spec fs;
3737 u32 rule_cnt;
38− u32 rule_locs[0];
38+ u32 rule_locs[];
3939 };
4040
4141 #endif /* CONFIG_COMPAT */
@@ -462,7 +462,7 @@ int ethtool_check_ops(const struct ethtool_ops *ops); · 420 unmodified lines
462462
463463 struct ethtool_rx_flow_rule {
464464 struct flow_rule *rule;
465− unsigned long priv[0];
465+ unsigned long priv[];
466466 };
467467
468468 struct ethtool_rx_flow_spec_input {
include/linux/genalloc.h+1−1
@@ -76,7 +76,7 @@ struct gen_pool_chunk { · 75 unmodified lines
7676 void *owner; /* private data to retrieve at alloc time */
7777 unsigned long start_addr; /* start address of memory chunk */
7878 unsigned long end_addr; /* end address of memory chunk (inclusive) */
79− unsigned long bits[0]; /* bitmap for allocating memory chunk */
79+ unsigned long bits[]; /* bitmap for allocating memory chunk */
8080 };
8181
8282 /*
include/linux/i2c.h+0−6
@@ -461,12 +461,6 @@ i2c_new_scanned_device(struct i2c_adapter *adap, · 460 unmodified lines
461461 unsigned short const *addr_list,
462462 int (*probe)(struct i2c_adapter *adap, unsigned short addr));
463463
464−struct i2c_client *
465−i2c_new_probed_device(struct i2c_adapter *adap,
466− struct i2c_board_info *info,
467− unsigned short const *addr_list,
468− int (*probe)(struct i2c_adapter *adap, unsigned short addr));
469−
470464 /* Common custom probe functions */
471465 int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr);
472466
include/linux/igmp.h+1−1
@@ -38,7 +38,7 @@ struct ip_sf_socklist { · 37 unmodified lines
3838 unsigned int sl_max;
3939 unsigned int sl_count;
4040 struct rcu_head rcu;
41− __be32 sl_addr[0];
41+ __be32 sl_addr[];
4242 };
4343
4444 #define IP_SFLSIZE(count) (sizeof(struct ip_sf_socklist) + \
include/linux/ihex.h+1−1
@@ -18,7 +18,7 @@ · 17 unmodified lines
1818 struct ihex_binrec {
1919 __be32 addr;
2020 __be16 len;
21− uint8_t data[0];
21+ uint8_t data[];
2222 } __attribute__((packed));
2323
2424 static inline uint16_t ihex_binrec_size(const struct ihex_binrec *p)
include/linux/iio/iio.h+1−1
@@ -600,7 +600,7 @@ void iio_device_unregister(struct iio_dev *indio_dev); · 599 unmodified lines
600600 * 0 on success, negative error number on failure.
601601 */
602602 #define devm_iio_device_register(dev, indio_dev) \
603− __devm_iio_device_register((dev), (indio_dev), THIS_MODULE);
603+ __devm_iio_device_register((dev), (indio_dev), THIS_MODULE)
604604 int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
605605 struct module *this_mod);
606606 void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev);
include/linux/irq.h+2−4
@@ -573,8 +573,6 @@ enum { · 572 unmodified lines
573573 #define IRQ_DEFAULT_INIT_FLAGS ARCH_IRQ_INIT_FLAGS
574574
575575 struct irqaction;
576−extern int setup_irq(unsigned int irq, struct irqaction *new);
577−extern void remove_irq(unsigned int irq, struct irqaction *act);
578576 extern int setup_percpu_irq(unsigned int irq, struct irqaction *new);
579577 extern void remove_percpu_irq(unsigned int irq, struct irqaction *act);
580578
@@ -1043,7 +1041,7 @@ struct irq_chip_generic { · 462 unmodified lines
10431041 unsigned long unused;
10441042 struct irq_domain *domain;
10451043 struct list_head list;
1046− struct irq_chip_type chip_types[0];
1044+ struct irq_chip_type chip_types[];
10471045 };
10481046
10491047 /**
@@ -1079,7 +1077,7 @@ struct irq_domain_chip_generic { · 29 unmodified lines
10791077 unsigned int irq_flags_to_clear;
10801078 unsigned int irq_flags_to_set;
10811079 enum irq_gc_flags gc_flags;
1082− struct irq_chip_generic *gc[0];
1080+ struct irq_chip_generic *gc[];
10831081 };
10841082
10851083 /* Generic chip callback functions */
include/linux/irqchip/arm-gic-v3.h+2−0
@@ -243,6 +243,7 @@ · 242 unmodified lines
243243
244244 #define GICR_TYPER_PLPIS (1U << 0)
245245 #define GICR_TYPER_VLPIS (1U << 1)
246+#define GICR_TYPER_DIRTY (1U << 2)
246247 #define GICR_TYPER_DirectLPIS (1U << 3)
247248 #define GICR_TYPER_LAST (1U << 4)
248249 #define GICR_TYPER_RVPEID (1U << 7)
@@ -686,6 +687,7 @@ struct rdists { · 437 unmodified lines
686687 bool has_vlpis;
687688 bool has_rvpeid;
688689 bool has_direct_lpi;
690+ bool has_vpend_valid_dirty;
689691 };
690692
691693 struct irq_domain;
include/linux/kvm_host.h+1−1
@@ -1048,7 +1048,7 @@ search_memslots(struct kvm_memslots *slots, gfn_t gfn) · 1047 unmodified lines
10481048 start = slot + 1;
10491049 }
10501050
1051− if (gfn >= memslots[start].base_gfn &&
1051+ if (start < slots->used_slots && gfn >= memslots[start].base_gfn &&
10521052 gfn < memslots[start].base_gfn + memslots[start].npages) {
10531053 atomic_set(&slots->lru_slot, start);
10541054 return &memslots[start];
include/linux/list_lru.h+1−1
@@ -34,7 +34,7 @@ struct list_lru_one { · 33 unmodified lines
3434 struct list_lru_memcg {
3535 struct rcu_head rcu;
3636 /* array of per cgroup lists, indexed by memcg_cache_id */
37− struct list_lru_one *lru[0];
37+ struct list_lru_one *lru[];
3838 };
3939
4040 struct list_lru_node {
include/linux/memcontrol.h+2−2
@@ -106,7 +106,7 @@ struct lruvec_stat { · 105 unmodified lines
106106 */
107107 struct memcg_shrinker_map {
108108 struct rcu_head rcu;
109− unsigned long map[0];
109+ unsigned long map[];
110110 };
111111
112112 /*
@@ -148,7 +148,7 @@ struct mem_cgroup_threshold_ary { · 35 unmodified lines
148148 /* Size of entries[] */
149149 unsigned int size;
150150 /* Array of thresholds */
151− struct mem_cgroup_threshold entries[0];
151+ struct mem_cgroup_threshold entries[];
152152 };
153153
154154 struct mem_cgroup_thresholds {
include/linux/platform_data/wilco-ec.h+1−1
@@ -83,7 +83,7 @@ struct wilco_ec_response { · 82 unmodified lines
8383 u16 result;
8484 u16 data_size;
8585 u8 reserved[2];
86− u8 data[0];
86+ u8 data[];
8787 } __packed;
8888
8989 /**
include/linux/pnp.h+9−20
@@ -220,10 +220,8 @@ struct pnp_card { · 219 unmodified lines
220220 #define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list)
221221 #define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list)
222222 #define to_pnp_card(n) container_of(n, struct pnp_card, dev)
223−#define pnp_for_each_card(card) \
224− for((card) = global_to_pnp_card(pnp_cards.next); \
225− (card) != global_to_pnp_card(&pnp_cards); \
226− (card) = global_to_pnp_card((card)->global_list.next))
223+#define pnp_for_each_card(card) \
224+ list_for_each_entry(card, &pnp_cards, global_list)
227225
228226 struct pnp_card_link {
229227 struct pnp_card *card;
@@ -276,14 +274,9 @@ struct pnp_dev { · 46 unmodified lines
276274 #define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list)
277275 #define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list)
278276 #define to_pnp_dev(n) container_of(n, struct pnp_dev, dev)
279−#define pnp_for_each_dev(dev) \
280− for((dev) = global_to_pnp_dev(pnp_global.next); \
281− (dev) != global_to_pnp_dev(&pnp_global); \
282− (dev) = global_to_pnp_dev((dev)->global_list.next))
283−#define card_for_each_dev(card,dev) \
284− for((dev) = card_to_pnp_dev((card)->devices.next); \
285− (dev) != card_to_pnp_dev(&(card)->devices); \
286− (dev) = card_to_pnp_dev((dev)->card_list.next))
277+#define pnp_for_each_dev(dev) list_for_each_entry(dev, &pnp_global, global_list)
278+#define card_for_each_dev(card, dev) \
279+ list_for_each_entry(dev, &(card)->devices, card_list)
287280 #define pnp_dev_name(dev) (dev)->name
288281
289282 static inline void *pnp_get_drvdata(struct pnp_dev *pdev)
@@ -437,14 +430,10 @@ struct pnp_protocol { · 147 unmodified lines
437430 };
438431
439432 #define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)
440−#define protocol_for_each_card(protocol,card) \
441− for((card) = protocol_to_pnp_card((protocol)->cards.next); \
442− (card) != protocol_to_pnp_card(&(protocol)->cards); \
443− (card) = protocol_to_pnp_card((card)->protocol_list.next))
444−#define protocol_for_each_dev(protocol,dev) \
445− for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \
446− (dev) != protocol_to_pnp_dev(&(protocol)->devices); \
447− (dev) = protocol_to_pnp_dev((dev)->protocol_list.next))
433+#define protocol_for_each_card(protocol, card) \
434+ list_for_each_entry(card, &(protocol)->cards, protocol_list)
435+#define protocol_for_each_dev(protocol, dev) \
436+ list_for_each_entry(dev, &(protocol)->devices, protocol_list)
448437
449438 extern struct bus_type pnp_bus_type;
450439
include/linux/posix_acl.h+1−1
@@ -28,7 +28,7 @@ struct posix_acl { · 27 unmodified lines
2828 refcount_t a_refcount;
2929 struct rcu_head a_rcu;
3030 unsigned int a_count;
31− struct posix_acl_entry a_entries[0];
31+ struct posix_acl_entry a_entries[];
3232 };
3333
3434 #define FOREACH_ACL_ENTRY(pa, acl, pe) \
include/linux/rio.h+2−2
@@ -100,7 +100,7 @@ struct rio_switch { · 99 unmodified lines
100100 u32 port_ok;
101101 struct rio_switch_ops *ops;
102102 spinlock_t lock;
103− struct rio_dev *nextdev[0];
103+ struct rio_dev *nextdev[];
104104 };
105105
106106 /**
@@ -201,7 +201,7 @@ struct rio_dev { · 94 unmodified lines
201201 u8 hopcount;
202202 struct rio_dev *prev;
203203 atomic_t state;
204− struct rio_switch rswitch[0]; /* RIO switch info */
204+ struct rio_switch rswitch[]; /* RIO switch info */
205205 };
206206
207207 #define rio_dev_g(n) list_entry(n, struct rio_dev, global_list)
include/linux/rslib.h+1−1
@@ -54,7 +54,7 @@ struct rs_codec { · 53 unmodified lines
5454 */
5555 struct rs_control {
5656 struct rs_codec *codec;
57− uint16_t buffers[0];
57+ uint16_t buffers[];
5858 };
5959
6060 /* General purpose RS codec, 8-bit data width, symbol width 1-15 bit */
include/linux/sched/topology.h+1−1
@@ -142,7 +142,7 @@ struct sched_domain { · 141 unmodified lines
142142 * by attaching extra space to the end of the structure,
143143 * depending on how many CPUs the kernel has booted up with)
144144 */
145− unsigned long span[0];
145+ unsigned long span[];
146146 };
147147
148148 static inline struct cpumask *sched_domain_span(struct sched_domain *sd)
include/linux/skbuff.h+1−1
@@ -4162,7 +4162,7 @@ struct skb_ext { · 4161 unmodified lines
41624162 refcount_t refcnt;
41634163 u8 offset[SKB_EXT_NUM]; /* in chunks of 8 bytes */
41644164 u8 chunks; /* same */
4165− char data[0] __aligned(8);
4165+ char data[] __aligned(8);
41664166 };
41674167
41684168 struct skb_ext *__skb_ext_alloc(void);
include/linux/stmmac.h+2−0
@@ -177,6 +177,8 @@ struct plat_stmmacenet_data { · 176 unmodified lines
177177 struct stmmac_rxq_cfg rx_queues_cfg[MTL_MAX_RX_QUEUES];
178178 struct stmmac_txq_cfg tx_queues_cfg[MTL_MAX_TX_QUEUES];
179179 void (*fix_mac_speed)(void *priv, unsigned int speed);
180+ int (*serdes_powerup)(struct net_device *ndev, void *priv);
181+ void (*serdes_powerdown)(struct net_device *ndev, void *priv);
180182 int (*init)(struct platform_device *pdev, void *priv);
181183 void (*exit)(struct platform_device *pdev, void *priv);
182184 struct mac_device_info *(*setup)(void *priv);
include/linux/sunrpc/svc_rdma.h+1−0
@@ -170,6 +170,7 @@ extern bool svc_rdma_post_recvs(struct svcxprt_rdma *rdma); · 169 unmodified lines
170170 extern void svc_rdma_recv_ctxt_put(struct svcxprt_rdma *rdma,
171171 struct svc_rdma_recv_ctxt *ctxt);
172172 extern void svc_rdma_flush_recv_queues(struct svcxprt_rdma *rdma);
173+extern void svc_rdma_release_rqst(struct svc_rqst *rqstp);
173174 extern int svc_rdma_recvfrom(struct svc_rqst *);
174175
175176 /* svc_rdma_rw.c */
include/linux/swap.h+1−1
@@ -275,7 +275,7 @@ struct swap_info_struct { · 274 unmodified lines
275275 */
276276 struct work_struct discard_work; /* discard worker */
277277 struct swap_cluster_list discard_clusters; /* discard clusters list */
278− struct plist_node avail_lists[0]; /*
278+ struct plist_node avail_lists[]; /*
279279 * entries in swap_avail_heads, one
280280 * entry per node.
281281 * Must be last as the number of the
include/linux/ti_wilink_st.h+3−3
@@ -295,7 +295,7 @@ struct bts_header { · 294 unmodified lines
295295 u32 magic;
296296 u32 version;
297297 u8 future[24];
298− u8 actions[0];
298+ u8 actions[];
299299 } __attribute__ ((packed));
300300
301301 /**
@@ -305,7 +305,7 @@ struct bts_header { · 3 unmodified lines
305305 struct bts_action {
306306 u16 type;
307307 u16 size;
308− u8 data[0];
308+ u8 data[];
309309 } __attribute__ ((packed));
310310
311311 struct bts_action_send {
@@ -315,7 +315,7 @@ struct bts_action_send { · 3 unmodified lines
315315 struct bts_action_wait {
316316 u32 msec;
317317 u32 size;
318− u8 data[0];
318+ u8 data[];
319319 } __attribute__ ((packed));
320320
321321 struct bts_action_delay {
include/linux/tpm_eventlog.h+3−3
@@ -28,7 +28,7 @@ struct tcpa_event { · 27 unmodified lines
2828 u32 event_type;
2929 u8 pcr_value[20]; /* SHA1 */
3030 u32 event_size;
31− u8 event_data[0];
31+ u8 event_data[];
3232 };
3333
3434 enum tcpa_event_types {
@@ -55,7 +55,7 @@ enum tcpa_event_types { · 20 unmodified lines
5555 struct tcpa_pc_event {
5656 u32 event_id;
5757 u32 event_size;
58− u8 event_data[0];
58+ u8 event_data[];
5959 };
6060
6161 enum tcpa_pc_event_ids {
@@ -102,7 +102,7 @@ struct tcg_pcr_event { · 40 unmodified lines
102102
103103 struct tcg_event_field {
104104 u32 event_size;
105− u8 event[0];
105+ u8 event[];
106106 } __packed;
107107
108108 struct tcg_pcr_event2_head {
include/linux/tracepoint.h+1−21
@@ -156,8 +156,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) · 155 unmodified lines
156156 * Note, the proto and args passed in includes "__data" as the first parameter.
157157 * The reason for this is to handle the "void" prototype. If a tracepoint
158158 * has a "void" prototype, then it is invalid to declare a function
159− * as "(void *, void)". The DECLARE_TRACE_NOARGS() will pass in just
160− * "void *data", where as the DECLARE_TRACE() will pass in "void *data, proto".
159+ * as "(void *, void)".
161160 */
162161 #define __DO_TRACE(tp, proto, args, cond, rcuidle) \
163162 do { \
@@ -373,25 +372,6 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) · 209 unmodified lines
373372 # define __tracepoint_string
374373 #endif
375374
376−/*
377− * The need for the DECLARE_TRACE_NOARGS() is to handle the prototype
378− * (void). "void" is a special value in a function prototype and can
379− * not be combined with other arguments. Since the DECLARE_TRACE()
380− * macro adds a data element at the beginning of the prototype,
381− * we need a way to differentiate "(void *data, proto)" from
382− * "(void *data, void)". The second prototype is invalid.
383− *
384− * DECLARE_TRACE_NOARGS() passes "void" as the tracepoint prototype
385− * and "void *__data" as the callback prototype.
386− *
387− * DECLARE_TRACE() passes "proto" as the tracepoint protoype and
388− * "void *__data, proto" as the callback prototype.
389− */
390−#define DECLARE_TRACE_NOARGS(name) \
391− __DECLARE_TRACE(name, void, , \
392− cpu_online(raw_smp_processor_id()), \
393− void *__data, __data)
394−
395375 #define DECLARE_TRACE(name, proto, args) \
396376 __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \
397377 cpu_online(raw_smp_processor_id()), \
include/linux/vdpa.h+1−1
@@ -164,7 +164,7 @@ struct vdpa_config_ops { · 163 unmodified lines
164164 u64 (*get_vq_state)(struct vdpa_device *vdev, u16 idx);
165165
166166 /* Device ops */
167− u16 (*get_vq_align)(struct vdpa_device *vdev);
167+ u32 (*get_vq_align)(struct vdpa_device *vdev);
168168 u64 (*get_features)(struct vdpa_device *vdev);
169169 int (*set_features)(struct vdpa_device *vdev, u64 features);
170170 void (*set_config_cb)(struct vdpa_device *vdev,
include/linux/vermagic.h+5−3
@@ -1,5 +1,9 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _LINUX_VERMAGIC_H
3+#define _LINUX_VERMAGIC_H
4+
25 #include <generated/utsrelease.h>
6+#include <asm/vermagic.h>
37
48 /* Simply sanity version stamp for modules. */
59 #ifdef CONFIG_SMP
@@ -24,9 +28,6 @@ · 18 unmodified lines
2428 #else
2529 #define MODULE_VERMAGIC_MODVERSIONS ""
2630 #endif
27−#ifndef MODULE_ARCH_VERMAGIC
28−#define MODULE_ARCH_VERMAGIC ""
29−#endif
3031 #ifdef RANDSTRUCT_PLUGIN
3132 #include <generated/randomize_layout_hash.h>
3233 #define MODULE_RANDSTRUCT_PLUGIN "RANDSTRUCT_PLUGIN_" RANDSTRUCT_HASHED_SEED
@@ -41,3 +42,4 @@ · 8 unmodified lines
4142 MODULE_ARCH_VERMAGIC \
4243 MODULE_RANDSTRUCT_PLUGIN
4344
45+#endif /* _LINUX_VERMAGIC_H */
include/linux/virtio.h+0−1
@@ -9,7 +9,6 @@ · 8 unmodified lines
99 #include <linux/device.h>
1010 #include <linux/mod_devicetable.h>
1111 #include <linux/gfp.h>
12−#include <linux/vringh.h>
1312
1413 /**
1514 * virtqueue - a queue to register buffers for sending or receiving.
include/linux/vmalloc.h+1−1
@@ -137,7 +137,7 @@ extern void vunmap(const void *addr); · 136 unmodified lines
137137
138138 extern int remap_vmalloc_range_partial(struct vm_area_struct *vma,
139139 unsigned long uaddr, void *kaddr,
140− unsigned long size);
140+ unsigned long pgoff, unsigned long size);
141141
142142 extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
143143 unsigned long pgoff);
include/linux/vringh.h+6−0
@@ -14,8 +14,10 @@ · 13 unmodified lines
1414 #include <linux/virtio_byteorder.h>
1515 #include <linux/uio.h>
1616 #include <linux/slab.h>
17+#if IS_REACHABLE(CONFIG_VHOST_IOTLB)
1718 #include <linux/dma-direction.h>
1819 #include <linux/vhost_iotlb.h>
20+#endif
1921 #include <asm/barrier.h>
2022
2123 /* virtio_ring with information needed for host access. */
@@ -254,6 +256,8 @@ static inline __virtio64 cpu_to_vringh64(const struct vringh *vrh, u64 val) · 232 unmodified lines
254256 return __cpu_to_virtio64(vringh_is_little_endian(vrh), val);
255257 }
256258
259+#if IS_REACHABLE(CONFIG_VHOST_IOTLB)
260+
257261 void vringh_set_iotlb(struct vringh *vrh, struct vhost_iotlb *iotlb);
258262
259263 int vringh_init_iotlb(struct vringh *vrh, u64 features,
@@ -284,4 +288,6 @@ void vringh_notify_disable_iotlb(struct vringh *vrh); · 24 unmodified lines
284288
285289 int vringh_need_notify_iotlb(struct vringh *vrh);
286290
291+#endif /* CONFIG_VHOST_IOTLB */
292+
287293 #endif /* _LINUX_VRINGH_H */
include/linux/xattr.h+1−1
@@ -73,7 +73,7 @@ struct simple_xattr { · 72 unmodified lines
7373 struct list_head list;
7474 char *name;
7575 size_t size;
76− char value[0];
76+ char value[];
7777 };
7878
7979 /*
include/net/cfg80211.h+10−0
@@ -905,6 +905,8 @@ struct survey_info { · 904 unmodified lines
905905 * protocol frames.
906906 * @control_port_over_nl80211: TRUE if userspace expects to exchange control
907907 * port frames over NL80211 instead of the network interface.
908+ * @control_port_no_preauth: disables pre-auth rx over the nl80211 control
909+ * port for mac80211
908910 * @wep_keys: static WEP keys, if not NULL points to an array of
909911 * CFG80211_MAX_WEP_KEYS WEP keys
910912 * @wep_tx_key: key index (0..3) of the default TX static WEP key
@@ -1222,6 +1224,7 @@ struct sta_txpwr { · 311 unmodified lines
12221224 * @he_capa: HE capabilities of station
12231225 * @he_capa_len: the length of the HE capabilities
12241226 * @airtime_weight: airtime scheduler weight for this station
1227+ * @txpwr: transmit power for an associated station
12251228 */
12261229 struct station_parameters {
12271230 const u8 *supported_rates;
@@ -4666,6 +4669,9 @@ struct wiphy_iftype_akm_suites { · 3438 unmodified lines
46664669 * @txq_memory_limit: configuration internal TX queue memory limit
46674670 * @txq_quantum: configuration of internal TX queue scheduler quantum
46684671 *
4672+ * @tx_queue_len: allow setting transmit queue len for drivers not using
4673+ * wake_tx_queue
4674+ *
46694675 * @support_mbssid: can HW support association with nontransmitted AP
46704676 * @support_only_he_mbssid: don't parse MBSSID elements if it is not
46714677 * HE AP, in order to avoid compatibility issues.
@@ -4681,6 +4687,10 @@ struct wiphy_iftype_akm_suites { · 9 unmodified lines
46814687 * supported by the driver for each peer
46824688 * @tid_config_support.max_retry: maximum supported retry count for
46834689 * long/short retry configuration
4690+ *
4691+ * @max_data_retry_count: maximum supported per TID retry count for
4692+ * configuration through the %NL80211_TID_CONFIG_ATTR_RETRY_SHORT and
4693+ * %NL80211_TID_CONFIG_ATTR_RETRY_LONG attributes
46844694 */
46854695 struct wiphy {
46864696 /* assign these fields before you register the wiphy */
include/net/ip6_route.h+1−0
@@ -254,6 +254,7 @@ static inline bool ipv6_anycast_destination(const struct dst_entry *dst, · 253 unmodified lines
254254
255255 return rt->rt6i_flags & RTF_ANYCAST ||
256256 (rt->rt6i_dst.plen < 127 &&
257+ !(rt->rt6i_flags & (RTF_GATEWAY | RTF_NONEXTHOP)) &&
257258 ipv6_addr_equal(&rt->rt6i_dst.addr, daddr));
258259 }
259260
include/net/mac80211.h+3−1
@@ -6007,7 +6007,9 @@ enum rate_control_capabilities { · 6006 unmodified lines
60076007 struct rate_control_ops {
60086008 unsigned long capa;
60096009 const char *name;
6010− void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir);
6010+ void *(*alloc)(struct ieee80211_hw *hw);
6011+ void (*add_debugfs)(struct ieee80211_hw *hw, void *priv,
6012+ struct dentry *debugfsdir);
60116013 void (*free)(void *priv);
60126014
60136015 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp);
include/net/ndisc.h+1−1
@@ -41,7 +41,7 @@ enum { · 40 unmodified lines
4141 ND_OPT_DNSSL = 31, /* RFC6106 */
4242 ND_OPT_6CO = 34, /* RFC6775 */
4343 ND_OPT_CAPTIVE_PORTAL = 37, /* RFC7710 */
44− ND_OPT_PREF64 = 38, /* RFC-ietf-6man-ra-pref64-09 */
44+ ND_OPT_PREF64 = 38, /* RFC8781 */
4545 __ND_OPT_MAX
4646 };
4747
include/net/netfilter/nf_tables.h+1−1
@@ -901,7 +901,7 @@ static inline void nft_set_elem_update_expr(const struct nft_set_ext *ext, · 900 unmodified lines
901901 {
902902 struct nft_expr *expr;
903903
904− if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR)) {
904+ if (__nft_set_ext_exists(ext, NFT_SET_EXT_EXPR)) {
905905 expr = nft_set_ext_expr(ext);
906906 expr->ops->eval(expr, regs, pkt);
907907 }
include/net/sock.h+3−3
@@ -2553,9 +2553,9 @@ sk_is_refcounted(struct sock *sk) · 2552 unmodified lines
25532553 }
25542554
25552555 /**
2556− * skb_steal_sock
2557− * @skb to steal the socket from
2558− * @refcounted is set to true if the socket is reference-counted
2556+ * skb_steal_sock - steal a socket from an sk_buff
2557+ * @skb: sk_buff to steal the socket from
2558+ * @refcounted: is set to true if the socket is reference-counted
25592559 */
25602560 static inline struct sock *
25612561 skb_steal_sock(struct sk_buff *skb, bool *refcounted)
include/net/tcp.h+1−1
@@ -51,7 +51,7 @@ extern struct inet_hashinfo tcp_hashinfo; · 50 unmodified lines
5151 extern struct percpu_counter tcp_orphan_count;
5252 void tcp_time_wait(struct sock *sk, int state, int timeo);
5353
54−#define MAX_TCP_HEADER (128 + MAX_HEADER)
54+#define MAX_TCP_HEADER L1_CACHE_ALIGN(128 + MAX_HEADER)
5555 #define MAX_TCP_OPTION_SPACE 40
5656 #define TCP_MIN_SND_MSS 48
5757 #define TCP_MIN_GSO_SIZE (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
include/soc/mscc/ocelot.h+3−1
@@ -476,6 +476,8 @@ struct ocelot_port { · 475 unmodified lines
476476
477477 void __iomem *regs;
478478
479+ bool vlan_aware;
480+
479481 /* Ingress default VLAN (pvid) */
480482 u16 pvid;
481483
@@ -610,7 +612,7 @@ int ocelot_port_bridge_leave(struct ocelot *ocelot, int port, · 128 unmodified lines
610612 int ocelot_fdb_dump(struct ocelot *ocelot, int port,
611613 dsa_fdb_dump_cb_t *cb, void *data);
612614 int ocelot_fdb_add(struct ocelot *ocelot, int port,
613− const unsigned char *addr, u16 vid, bool vlan_aware);
615+ const unsigned char *addr, u16 vid);
614616 int ocelot_fdb_del(struct ocelot *ocelot, int port,
615617 const unsigned char *addr, u16 vid);
616618 int ocelot_vlan_add(struct ocelot *ocelot, int port, u16 vid, bool pvid,
include/soc/tegra/pmc.h+9−6
@@ -168,7 +168,6 @@ int tegra_io_pad_power_disable(enum tegra_io_pad id); · 167 unmodified lines
168168 int tegra_io_rail_power_on(unsigned int id);
169169 int tegra_io_rail_power_off(unsigned int id);
170170
171−enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void);
172171 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode);
173172 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode);
174173
@@ -220,11 +219,6 @@ static inline int tegra_io_rail_power_off(unsigned int id) · 45 unmodified lines
220219 return -ENOSYS;
221220 }
222221
223−static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
224−{
225− return TEGRA_SUSPEND_NONE;
226−}
227−
228222 static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)
229223 {
230224 }
@@ -235,4 +229,13 @@ static inline void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) · 4 unmodified lines
235229
236230 #endif /* CONFIG_SOC_TEGRA_PMC */
237231
232+#if defined(CONFIG_SOC_TEGRA_PMC) && defined(CONFIG_PM_SLEEP)
233+enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void);
234+#else
235+static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
236+{
237+ return TEGRA_SUSPEND_NONE;
238+}
239+#endif
240+
238241 #endif /* __SOC_TEGRA_PMC_H__ */
include/sound/hda_codec.h+5−0
@@ -494,6 +494,11 @@ void snd_hda_update_power_acct(struct hda_codec *codec); · 493 unmodified lines
494494 static inline void snd_hda_set_power_save(struct hda_bus *bus, int delay) {}
495495 #endif
496496
497+static inline bool hda_codec_need_resume(struct hda_codec *codec)
498+{
499+ return !codec->relaxed_resume && codec->jacktbl.used;
500+}
501+
497502 #ifdef CONFIG_SND_HDA_PATCH_LOADER
498503 /*
499504 * patch firmware
include/sound/soc-dai.h+0−1
@@ -351,7 +351,6 @@ struct snd_soc_dai { · 350 unmodified lines
351351
352352 /* bit field */
353353 unsigned int probed:1;
354− unsigned int started[SNDRV_PCM_STREAM_LAST + 1];
355354 };
356355
357356 static inline struct snd_soc_pcm_stream *
include/sound/soc.h+3−0
@@ -790,6 +790,9 @@ struct snd_soc_dai_link { · 789 unmodified lines
790790 const struct snd_soc_pcm_stream *params;
791791 unsigned int num_params;
792792
793+ struct snd_soc_dapm_widget *playback_widget;
794+ struct snd_soc_dapm_widget *capture_widget;
795+
793796 unsigned int dai_fmt; /* format to set on init */
794797
795798 enum snd_soc_dpcm_trigger trigger[2]; /* trigger type for DPCM */
include/trace/events/iocost.h+3−3
@@ -130,7 +130,7 @@ DEFINE_EVENT(iocg_inuse_update, iocost_inuse_reset, · 129 unmodified lines
130130
131131 TRACE_EVENT(iocost_ioc_vrate_adj,
132132
133− TP_PROTO(struct ioc *ioc, u64 new_vrate, u32 (*missed_ppm)[2],
133+ TP_PROTO(struct ioc *ioc, u64 new_vrate, u32 *missed_ppm,
134134 u32 rq_wait_pct, int nr_lagging, int nr_shortages,
135135 int nr_surpluses),
136136
@@ -155,8 +155,8 @@ TRACE_EVENT(iocost_ioc_vrate_adj, · 18 unmodified lines
155155 __entry->old_vrate = atomic64_read(&ioc->vtime_rate);;
156156 __entry->new_vrate = new_vrate;
157157 __entry->busy_level = ioc->busy_level;
158− __entry->read_missed_ppm = (*missed_ppm)[READ];
159− __entry->write_missed_ppm = (*missed_ppm)[WRITE];
158+ __entry->read_missed_ppm = missed_ppm[READ];
159+ __entry->write_missed_ppm = missed_ppm[WRITE];
160160 __entry->rq_wait_pct = rq_wait_pct;
161161 __entry->nr_lagging = nr_lagging;
162162 __entry->nr_shortages = nr_shortages;
include/trace/events/rpcrdma.h+36−14
@@ -1695,17 +1695,15 @@ DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, · 1694 unmodified lines
16951695
16961696 TRACE_EVENT(svcrdma_post_send,
16971697 TP_PROTO(
1698− const struct ib_send_wr *wr,
1699− int status
1698+ const struct ib_send_wr *wr
17001699 ),
17011700
1702− TP_ARGS(wr, status),
1701+ TP_ARGS(wr),
17031702
17041703 TP_STRUCT__entry(
17051704 __field(const void *, cqe)
17061705 __field(unsigned int, num_sge)
17071706 __field(u32, inv_rkey)
1708− __field(int, status)
17091707 ),
17101708
17111709 TP_fast_assign(
@@ -1713,12 +1711,11 @@ TRACE_EVENT(svcrdma_post_send, · 1 unmodified line
17131711 __entry->num_sge = wr->num_sge;
17141712 __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
17151713 wr->ex.invalidate_rkey : 0;
1716− __entry->status = status;
17171714 ),
17181715
1719− TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d",
1716+ TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x",
17201717 __entry->cqe, __entry->num_sge,
1721− __entry->inv_rkey, __entry->status
1718+ __entry->inv_rkey
17221719 )
17231720 );
17241721
@@ -1783,26 +1780,23 @@ TRACE_EVENT(svcrdma_wc_receive, · 58 unmodified lines
17831780 TRACE_EVENT(svcrdma_post_rw,
17841781 TP_PROTO(
17851782 const void *cqe,
1786− int sqecount,
1787− int status
1783+ int sqecount
17881784 ),
17891785
1790− TP_ARGS(cqe, sqecount, status),
1786+ TP_ARGS(cqe, sqecount),
17911787
17921788 TP_STRUCT__entry(
17931789 __field(const void *, cqe)
17941790 __field(int, sqecount)
1795− __field(int, status)
17961791 ),
17971792
17981793 TP_fast_assign(
17991794 __entry->cqe = cqe;
18001795 __entry->sqecount = sqecount;
1801− __entry->status = status;
18021796 ),
18031797
1804− TP_printk("cqe=%p sqecount=%d status=%d",
1805− __entry->cqe, __entry->sqecount, __entry->status
1798+ TP_printk("cqe=%p sqecount=%d",
1799+ __entry->cqe, __entry->sqecount
18061800 )
18071801 );
18081802
@@ -1870,6 +1864,34 @@ DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, · 61 unmodified lines
18701864 DEFINE_SQ_EVENT(full);
18711865 DEFINE_SQ_EVENT(retry);
18721866
1867+TRACE_EVENT(svcrdma_sq_post_err,
1868+ TP_PROTO(
1869+ const struct svcxprt_rdma *rdma,
1870+ int status
1871+ ),
1872+
1873+ TP_ARGS(rdma, status),
1874+
1875+ TP_STRUCT__entry(
1876+ __field(int, avail)
1877+ __field(int, depth)
1878+ __field(int, status)
1879+ __string(addr, rdma->sc_xprt.xpt_remotebuf)
1880+ ),
1881+
1882+ TP_fast_assign(
1883+ __entry->avail = atomic_read(&rdma->sc_sq_avail);
1884+ __entry->depth = rdma->sc_sq_depth;
1885+ __entry->status = status;
1886+ __assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1887+ ),
1888+
1889+ TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1890+ __get_str(addr), __entry->avail, __entry->depth,
1891+ __entry->status
1892+ )
1893+);
1894+
18731895 #endif /* _TRACE_RPCRDMA_H */
18741896
18751897 #include <trace/define_trace.h>
include/trace/events/wbt.h+4−4
@@ -46,7 +46,7 @@ TRACE_EVENT(wbt_stat, · 45 unmodified lines
4646 ),
4747
4848 TP_printk("%s: rmean=%llu, rmin=%llu, rmax=%llu, rsamples=%llu, "
49− "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu\n",
49+ "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu",
5050 __entry->name, __entry->rmean, __entry->rmin, __entry->rmax,
5151 __entry->rnr_samples, __entry->wmean, __entry->wmin,
5252 __entry->wmax, __entry->wnr_samples)
@@ -73,7 +73,7 @@ TRACE_EVENT(wbt_lat, · 20 unmodified lines
7373 __entry->lat = div_u64(lat, 1000);
7474 ),
7575
76− TP_printk("%s: latency %lluus\n", __entry->name,
76+ TP_printk("%s: latency %lluus", __entry->name,
7777 (unsigned long long) __entry->lat)
7878 );
7979
@@ -115,7 +115,7 @@ TRACE_EVENT(wbt_step, · 35 unmodified lines
115115 __entry->max = max;
116116 ),
117117
118− TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u\n",
118+ TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u",
119119 __entry->name, __entry->msg, __entry->step, __entry->window,
120120 __entry->bg, __entry->normal, __entry->max)
121121 );
@@ -148,7 +148,7 @@ TRACE_EVENT(wbt_timer, · 26 unmodified lines
148148 __entry->inflight = inflight;
149149 ),
150150
151− TP_printk("%s: status=%u, step=%d, inflight=%u\n", __entry->name,
151+ TP_printk("%s: status=%u, step=%d, inflight=%u", __entry->name,
152152 __entry->status, __entry->step, __entry->inflight)
153153 );
154154
include/trace/events/writeback.h+0−1
@@ -36,7 +36,6 @@ · 35 unmodified lines
3636 EM( WB_REASON_SYNC, "sync") \
3737 EM( WB_REASON_PERIODIC, "periodic") \
3838 EM( WB_REASON_LAPTOP_TIMER, "laptop_timer") \
39− EM( WB_REASON_FREE_MORE_MEM, "free_more_memory") \
4039 EM( WB_REASON_FS_FREE_SPACE, "fs_free_space") \
4140 EMe(WB_REASON_FORKER_THREAD, "forker_thread")
4241
include/uapi/linux/bpf.h+1−1
@@ -1642,7 +1642,7 @@ union bpf_attr { · 1641 unmodified lines
16421642 * ifindex, but doesn't require a map to do so.
16431643 * Return
16441644 * **XDP_REDIRECT** on success, or the value of the two lower bits
1645− * of the **flags* argument on error.
1645+ * of the *flags* argument on error.
16461646 *
16471647 * int bpf_sk_redirect_map(struct sk_buff *skb, struct bpf_map *map, u32 key, u64 flags)
16481648 * Description
include/uapi/linux/btrfs.h+4−6
@@ -36,12 +36,10 @@ struct btrfs_ioctl_vol_args { · 35 unmodified lines
3636 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
3737 #define BTRFS_SUBVOL_NAME_MAX 4039
3838
39−/*
40− * Deprecated since 5.7:
41− *
42− * BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
43− */
44−
39+#ifndef __KERNEL__
40+/* Deprecated since 5.7 */
41+# define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
42+#endif
4543 #define BTRFS_SUBVOL_RDONLY (1ULL << 1)
4644 #define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
4745
include/uapi/linux/dlm_device.h+2−2
@@ -45,13 +45,13 @@ struct dlm_lock_params { · 44 unmodified lines
4545 void __user *bastaddr;
4646 struct dlm_lksb __user *lksb;
4747 char lvb[DLM_USER_LVB_LEN];
48− char name[0];
48+ char name[];
4949 };
5050
5151 struct dlm_lspace_params {
5252 __u32 flags;
5353 __u32 minor;
54− char name[0];
54+ char name[];
5555 };
5656
5757 struct dlm_purge_params {
include/uapi/linux/fiemap.h+1−1
@@ -34,7 +34,7 @@ struct fiemap { · 33 unmodified lines
3434 __u32 fm_mapped_extents;/* number of extents that were mapped (out) */
3535 __u32 fm_extent_count; /* size of fm_extents array (in) */
3636 __u32 fm_reserved;
37− struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
37+ struct fiemap_extent fm_extents[]; /* array of mapped extents (out) */
3838 };
3939
4040 #define FIEMAP_MAX_OFFSET (~0ULL)
include/uapi/linux/netfilter/nf_tables.h+2−0
@@ -276,6 +276,7 @@ enum nft_rule_compat_attributes { · 275 unmodified lines
276276 * @NFT_SET_TIMEOUT: set uses timeouts
277277 * @NFT_SET_EVAL: set can be updated from the evaluation path
278278 * @NFT_SET_OBJECT: set contains stateful objects
279+ * @NFT_SET_CONCAT: set contains a concatenation
279280 */
280281 enum nft_set_flags {
281282 NFT_SET_ANONYMOUS = 0x1,
@@ -285,6 +286,7 @@ enum nft_set_flags { · 3 unmodified lines
285286 NFT_SET_TIMEOUT = 0x10,
286287 NFT_SET_EVAL = 0x20,
287288 NFT_SET_OBJECT = 0x40,
289+ NFT_SET_CONCAT = 0x80,
288290 };
289291
290292 /**
include/uapi/linux/netfilter/xt_IDLETIMER.h+1−0
@@ -48,6 +48,7 @@ struct idletimer_tg_info_v1 { · 47 unmodified lines
4848
4949 char label[MAX_IDLETIMER_LABEL_SIZE];
5050
51+ __u8 send_nl_msg; /* unused: for compatibility with Android */
5152 __u8 timer_type;
5253
5354 /* for kernel module internal use only */
include/uapi/linux/virtio_balloon.h+9−2
@@ -48,8 +48,15 @@ struct virtio_balloon_config { · 47 unmodified lines
4848 __u32 num_pages;
4949 /* Number of pages we've actually got in balloon. */
5050 __u32 actual;
51− /* Free page report command id, readonly by guest */
52− __u32 free_page_report_cmd_id;
51+ /*
52+ * Free page hint command id, readonly by guest.
53+ * Was previously named free_page_report_cmd_id so we
54+ * need to carry that name for legacy support.
55+ */
56+ union {
57+ __u32 free_page_hint_cmd_id;
58+ __u32 free_page_report_cmd_id; /* deprecated */
59+ };
5360 /* Stores PAGE_POISON if page poisoning is in use */
5461 __u32 poison_val;
5562 };
include/vdso/datapage.h+2−2
@@ -73,8 +73,8 @@ struct vdso_timestamp { · 72 unmodified lines
7373 *
7474 * @offset is used by the special time namespace VVAR pages which are
7575 * installed instead of the real VVAR page. These namespace pages must set
76− * @seq to 1 and @clock_mode to VLOCK_TIMENS to force the code into the
77− * time namespace slow path. The namespace aware functions retrieve the
76+ * @seq to 1 and @clock_mode to VDSO_CLOCKMODE_TIMENS to force the code into
77+ * the time namespace slow path. The namespace aware functions retrieve the
7878 * real system wide VVAR page, read host time and add the per clock offset.
7979 * For clocks which are not affected by time namespace adjustment the
8080 * offset must be zero.
kernel/audit.c+3−0
@@ -1326,6 +1326,9 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) · 1325 unmodified lines
13261326 case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
13271327 if (!audit_enabled && msg_type != AUDIT_USER_AVC)
13281328 return 0;
1329+ /* exit early if there isn't at least one character to print */
1330+ if (data_len < 2)
1331+ return -EINVAL;
13291332
13301333 err = audit_filter(msg_type, AUDIT_FILTER_USER);
13311334 if (err == 1) { /* match or error */
kernel/bpf/bpf_lru_list.h+1−1
@@ -30,7 +30,7 @@ struct bpf_lru_node { · 29 unmodified lines
3030 struct bpf_lru_list {
3131 struct list_head lists[NR_BPF_LRU_LIST_T];
3232 unsigned int counts[NR_BPF_LRU_LIST_COUNT];
33− /* The next inacitve list rotation starts from here */
33+ /* The next inactive list rotation starts from here */
3434 struct list_head *next_inactive_rotation;
3535
3636 raw_spinlock_t lock ____cacheline_aligned_in_smp;
kernel/bpf/cpumap.c+1−1
@@ -469,7 +469,7 @@ static int cpu_map_update_elem(struct bpf_map *map, void *key, void *value, · 468 unmodified lines
469469 return -EOVERFLOW;
470470
471471 /* Make sure CPU is a valid possible cpu */
472− if (!cpu_possible(key_cpu))
472+ if (key_cpu >= nr_cpumask_bits || !cpu_possible(key_cpu))
473473 return -ENODEV;
474474
475475 if (qsize == 0) {
kernel/bpf/syscall.c+17−12
@@ -586,9 +586,7 @@ static void bpf_map_mmap_open(struct vm_area_struct *vma) · 585 unmodified lines
586586 {
587587 struct bpf_map *map = vma->vm_file->private_data;
588588
589− bpf_map_inc_with_uref(map);
590−
591− if (vma->vm_flags & VM_WRITE) {
589+ if (vma->vm_flags & VM_MAYWRITE) {
592590 mutex_lock(&map->freeze_mutex);
593591 map->writecnt++;
594592 mutex_unlock(&map->freeze_mutex);
@@ -600,13 +598,11 @@ static void bpf_map_mmap_close(struct vm_area_struct *vma) · 5 unmodified lines
600598 {
601599 struct bpf_map *map = vma->vm_file->private_data;
602600
603− if (vma->vm_flags & VM_WRITE) {
601+ if (vma->vm_flags & VM_MAYWRITE) {
604602 mutex_lock(&map->freeze_mutex);
605603 map->writecnt--;
606604 mutex_unlock(&map->freeze_mutex);
607605 }
608−
609− bpf_map_put_with_uref(map);
610606 }
611607
612608 static const struct vm_operations_struct bpf_map_default_vmops = {
@@ -635,14 +631,16 @@ static int bpf_map_mmap(struct file *filp, struct vm_area_struct *vma) · 22 unmodified lines
635631 /* set default open/close callbacks */
636632 vma->vm_ops = &bpf_map_default_vmops;
637633 vma->vm_private_data = map;
634+ vma->vm_flags &= ~VM_MAYEXEC;
635+ if (!(vma->vm_flags & VM_WRITE))
636+ /* disallow re-mapping with PROT_WRITE */
637+ vma->vm_flags &= ~VM_MAYWRITE;
638638
639639 err = map->ops->map_mmap(map, vma);
640640 if (err)
641641 goto out;
642642
643− bpf_map_inc_with_uref(map);
644−
645− if (vma->vm_flags & VM_WRITE)
643+ if (vma->vm_flags & VM_MAYWRITE)
646644 map->writecnt++;
647645 out:
648646 mutex_unlock(&map->freeze_mutex);
@@ -2285,7 +2283,7 @@ static void bpf_link_show_fdinfo(struct seq_file *m, struct file *filp) · 1636 unmodified lines
22852283 }
22862284 #endif
22872285
2288−const struct file_operations bpf_link_fops = {
2286+static const struct file_operations bpf_link_fops = {
22892287 #ifdef CONFIG_PROC_FS
22902288 .show_fdinfo = bpf_link_show_fdinfo,
22912289 #endif
@@ -3630,8 +3628,10 @@ static int link_update(union bpf_attr *attr) · 1338 unmodified lines
36303628 return PTR_ERR(link);
36313629
36323630 new_prog = bpf_prog_get(attr->link_update.new_prog_fd);
3633− if (IS_ERR(new_prog))
3634− return PTR_ERR(new_prog);
3631+ if (IS_ERR(new_prog)) {
3632+ ret = PTR_ERR(new_prog);
3633+ goto out_put_link;
3634+ }
36353635
36363636 if (flags & BPF_F_REPLACE) {
36373637 old_prog = bpf_prog_get(attr->link_update.old_prog_fd);
@@ -3640,6 +3640,9 @@ static int link_update(union bpf_attr *attr) · 2 unmodified lines
36403640 old_prog = NULL;
36413641 goto out_put_progs;
36423642 }
3643+ } else if (attr->link_update.old_prog_fd) {
3644+ ret = -EINVAL;
3645+ goto out_put_progs;
36433646 }
36443647
36453648 #ifdef CONFIG_CGROUP_BPF
@@ -3655,6 +3658,8 @@ out_put_progs: · 9 unmodified lines
36553658 bpf_prog_put(old_prog);
36563659 if (ret)
36573660 bpf_prog_put(new_prog);
3661+out_put_link:
3662+ bpf_link_put(link);
36583663 return ret;
36593664 }
36603665
kernel/bpf/verifier.c+29−12
@@ -1255,8 +1255,7 @@ static void __mark_reg_unknown(const struct bpf_verifier_env *env, · 1254 unmodified lines
12551255 reg->type = SCALAR_VALUE;
12561256 reg->var_off = tnum_unknown;
12571257 reg->frameno = 0;
1258− reg->precise = env->subprog_cnt > 1 || !env->allow_ptr_leaks ?
1259− true : false;
1258+ reg->precise = env->subprog_cnt > 1 || !env->allow_ptr_leaks;
12601259 __mark_reg_unbounded(reg);
12611260 }
12621261
@@ -2119,6 +2118,15 @@ static bool register_is_const(struct bpf_reg_state *reg) · 856 unmodified lines
21192118 return reg->type == SCALAR_VALUE && tnum_is_const(reg->var_off);
21202119 }
21212120
2121+static bool __is_pointer_value(bool allow_ptr_leaks,
2122+ const struct bpf_reg_state *reg)
2123+{
2124+ if (allow_ptr_leaks)
2125+ return false;
2126+
2127+ return reg->type != SCALAR_VALUE;
2128+}
2129+
21222130 static void save_register_state(struct bpf_func_state *state,
21232131 int spi, struct bpf_reg_state *reg)
21242132 {
@@ -2309,6 +2317,16 @@ static int check_stack_read(struct bpf_verifier_env *env, · 184 unmodified lines
23092317 * which resets stack/reg liveness for state transitions
23102318 */
23112319 state->regs[value_regno].live |= REG_LIVE_WRITTEN;
2320+ } else if (__is_pointer_value(env->allow_ptr_leaks, reg)) {
2321+ /* If value_regno==-1, the caller is asking us whether
2322+ * it is acceptable to use this value as a SCALAR_VALUE
2323+ * (e.g. for XADD).
2324+ * We must not allow unprivileged callers to do that
2325+ * with spilled pointers.
2326+ */
2327+ verbose(env, "leaking pointer from stack off %d\n",
2328+ off);
2329+ return -EACCES;
23122330 }
23132331 mark_reg_read(env, reg, reg->parent, REG_LIVE_READ64);
23142332 } else {
@@ -2674,15 +2692,6 @@ static int check_sock_access(struct bpf_verifier_env *env, int insn_idx, · 359 unmodified lines
26742692 return -EACCES;
26752693 }
26762694
2677−static bool __is_pointer_value(bool allow_ptr_leaks,
2678− const struct bpf_reg_state *reg)
2679−{
2680− if (allow_ptr_leaks)
2681− return false;
2682−
2683− return reg->type != SCALAR_VALUE;
2684−}
2685−
26862695 static struct bpf_reg_state *reg_state(struct bpf_verifier_env *env, int regno)
26872696 {
26882697 return cur_regs(env) + regno;
@@ -3090,7 +3099,7 @@ static int check_ptr_to_btf_access(struct bpf_verifier_env *env, · 401 unmodified lines
30903099 if (ret < 0)
30913100 return ret;
30923101
3093− if (atype == BPF_READ) {
3102+ if (atype == BPF_READ && value_regno >= 0) {
30943103 if (ret == SCALAR_VALUE) {
30953104 mark_reg_unknown(env, regs, value_regno);
30963105 return 0;
@@ -10488,6 +10497,7 @@ static int check_attach_btf_id(struct bpf_verifier_env *env) · 7391 unmodified lines
1048810497 return -EINVAL;
1048910498 }
1049010499 env->ops = bpf_verifier_ops[tgt_prog->type];
10500+ prog->expected_attach_type = tgt_prog->expected_attach_type;
1049110501 }
1049210502 if (!tgt_prog->jited) {
1049310503 verbose(env, "Can attach to only JITed progs\n");
@@ -10832,6 +10842,13 @@ err_release_maps: · 338 unmodified lines
1083210842 * them now. Otherwise free_used_maps() will release them.
1083310843 */
1083410844 release_maps(env);
10845+
10846+ /* extension progs temporarily inherit the attach_type of their targets
10847+ for verification purposes, so set it back to zero before returning
10848+ */
10849+ if (env->prog->type == BPF_PROG_TYPE_EXT)
10850+ env->prog->expected_attach_type = 0;
10851+
1083510852 *prog = env->prog;
1083610853 err_unlock:
1083710854 if (!is_priv)
kernel/events/core.c+10−3
@@ -7491,10 +7491,17 @@ static void perf_event_task_output(struct perf_event *event, · 7490 unmodified lines
74917491 goto out;
74927492
74937493 task_event->event_id.pid = perf_event_pid(event, task);
7494− task_event->event_id.ppid = perf_event_pid(event, current);
7495−
74967494 task_event->event_id.tid = perf_event_tid(event, task);
7497− task_event->event_id.ptid = perf_event_tid(event, current);
7495+
7496+ if (task_event->event_id.header.type == PERF_RECORD_EXIT) {
7497+ task_event->event_id.ppid = perf_event_pid(event,
7498+ task->real_parent);
7499+ task_event->event_id.ptid = perf_event_pid(event,
7500+ task->real_parent);
7501+ } else { /* PERF_RECORD_FORK */
7502+ task_event->event_id.ppid = perf_event_pid(event, current);
7503+ task_event->event_id.ptid = perf_event_tid(event, current);
7504+ }
74987505
74997506 task_event->event_id.time = perf_event_clock(event);
75007507
kernel/exit.c+1−0
@@ -219,6 +219,7 @@ repeat: · 218 unmodified lines
219219
220220 write_unlock_irq(&tasklist_lock);
221221 proc_flush_pid(thread_pid);
222+ put_pid(thread_pid);
222223 release_thread(p);
223224 put_task_struct_rcu_user(p);
224225
kernel/fork.c+10−1
@@ -2605,6 +2605,14 @@ noinline static int copy_clone_args_from_user(struct kernel_clone_args *kargs, · 2604 unmodified lines
26052605 struct clone_args args;
26062606 pid_t *kset_tid = kargs->set_tid;
26072607
2608+ BUILD_BUG_ON(offsetofend(struct clone_args, tls) !=
2609+ CLONE_ARGS_SIZE_VER0);
2610+ BUILD_BUG_ON(offsetofend(struct clone_args, set_tid_size) !=
2611+ CLONE_ARGS_SIZE_VER1);
2612+ BUILD_BUG_ON(offsetofend(struct clone_args, cgroup) !=
2613+ CLONE_ARGS_SIZE_VER2);
2614+ BUILD_BUG_ON(sizeof(struct clone_args) != CLONE_ARGS_SIZE_VER2);
2615+
26082616 if (unlikely(usize > PAGE_SIZE))
26092617 return -E2BIG;
26102618 if (unlikely(usize < CLONE_ARGS_SIZE_VER0))
@@ -2631,7 +2639,8 @@ noinline static int copy_clone_args_from_user(struct kernel_clone_args *kargs, · 20 unmodified lines
26312639 !valid_signal(args.exit_signal)))
26322640 return -EINVAL;
26332641
2634− if ((args.flags & CLONE_INTO_CGROUP) && args.cgroup < 0)
2642+ if ((args.flags & CLONE_INTO_CGROUP) &&
2643+ (args.cgroup > INT_MAX || usize < CLONE_ARGS_SIZE_VER2))
26352644 return -EINVAL;
26362645
26372646 *kargs = (struct kernel_clone_args){
kernel/irq/manage.c+0−44
@@ -1690,34 +1690,6 @@ out_mput: · 1689 unmodified lines
16901690 return ret;
16911691 }
16921692
1693−/**
1694− * setup_irq - setup an interrupt
1695− * @irq: Interrupt line to setup
1696− * @act: irqaction for the interrupt
1697− *
1698− * Used to statically setup interrupts in the early boot process.
1699− */
1700−int setup_irq(unsigned int irq, struct irqaction *act)
1701−{
1702− int retval;
1703− struct irq_desc *desc = irq_to_desc(irq);
1704−
1705− if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1706− return -EINVAL;
1707−
1708− retval = irq_chip_pm_get(&desc->irq_data);
1709− if (retval < 0)
1710− return retval;
1711−
1712− retval = __setup_irq(irq, desc, act);
1713−
1714− if (retval)
1715− irq_chip_pm_put(&desc->irq_data);
1716−
1717− return retval;
1718−}
1719−EXPORT_SYMBOL_GPL(setup_irq);
1720−
17211693 /*
17221694 * Internal function to unregister an irqaction - used to free
17231695 * regular and special interrupts that are part of the architecture.
@@ -1858,22 +1830,6 @@ static struct irqaction *__free_irq(struct irq_desc *desc, void *dev_id) · 134 unmodified lines
18581830 return action;
18591831 }
18601832
1861−/**
1862− * remove_irq - free an interrupt
1863− * @irq: Interrupt line to free
1864− * @act: irqaction for the interrupt
1865− *
1866− * Used to remove interrupts statically setup by the early boot process.
1867− */
1868−void remove_irq(unsigned int irq, struct irqaction *act)
1869−{
1870− struct irq_desc *desc = irq_to_desc(irq);
1871−
1872− if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1873− __free_irq(desc, act->dev_id);
1874−}
1875−EXPORT_SYMBOL_GPL(remove_irq);
1876−
18771833 /**
18781834 * free_irq - free an interrupt allocated with request_irq
18791835 * @irq: Interrupt line to free
kernel/rcu/tree.c+1−1
@@ -825,7 +825,7 @@ static __always_inline void rcu_nmi_enter_common(bool irq) · 824 unmodified lines
825825 rcu_cleanup_after_idle();
826826
827827 incby = 1;
828− } else if (tick_nohz_full_cpu(rdp->cpu) &&
828+ } else if (irq && tick_nohz_full_cpu(rdp->cpu) &&
829829 rdp->dynticks_nmi_nesting == DYNTICK_IRQ_NONIDLE &&
830830 READ_ONCE(rdp->rcu_urgent_qs) &&
831831 !READ_ONCE(rdp->rcu_forced_tick)) {
kernel/sched/core.c+2−7
@@ -1232,13 +1232,8 @@ static void uclamp_fork(struct task_struct *p) · 1231 unmodified lines
12321232 return;
12331233
12341234 for_each_clamp_id(clamp_id) {
1235− unsigned int clamp_value = uclamp_none(clamp_id);
1236−
1237− /* By default, RT tasks always get 100% boost */
1238− if (unlikely(rt_task(p) && clamp_id == UCLAMP_MIN))
1239− clamp_value = uclamp_none(UCLAMP_MAX);
1240−
1241− uclamp_se_set(&p->uclamp_req[clamp_id], clamp_value, false);
1235+ uclamp_se_set(&p->uclamp_req[clamp_id],
1236+ uclamp_none(clamp_id), false);
12421237 }
12431238 }
12441239
kernel/sched/cputime.c+2−2
@@ -1003,12 +1003,12 @@ u64 kcpustat_field(struct kernel_cpustat *kcpustat, · 1002 unmodified lines
10031003 enum cpu_usage_stat usage, int cpu)
10041004 {
10051005 u64 *cpustat = kcpustat->cpustat;
1006+ u64 val = cpustat[usage];
10061007 struct rq *rq;
1007− u64 val;
10081008 int err;
10091009
10101010 if (!vtime_accounting_enabled_cpu(cpu))
1011− return cpustat[usage];
1011+ return val;
10121012
10131013 rq = cpu_rq(cpu);
10141014
kernel/sched/isolation.c+19−2
@@ -149,6 +149,9 @@ __setup("nohz_full=", housekeeping_nohz_full_setup); · 148 unmodified lines
149149 static int __init housekeeping_isolcpus_setup(char *str)
150150 {
151151 unsigned int flags = 0;
152+ bool illegal = false;
153+ char *par;
154+ int len;
152155
153156 while (isalpha(*str)) {
154157 if (!strncmp(str, "nohz,", 5)) {
@@ -169,8 +172,22 @@ static int __init housekeeping_isolcpus_setup(char *str) · 14 unmodified lines
169172 continue;
170173 }
171174
172− pr_warn("isolcpus: Error, unknown flag\n");
173− return 0;
175+ /*
176+ * Skip unknown sub-parameter and validate that it is not
177+ * containing an invalid character.
178+ */
179+ for (par = str, len = 0; *str && *str != ','; str++, len++) {
180+ if (!isalpha(*str) && *str != '_')
181+ illegal = true;
182+ }
183+
184+ if (illegal) {
185+ pr_warn("isolcpus: Invalid flag %.*s\n", len, par);
186+ return 0;
187+ }
188+
189+ pr_info("isolcpus: Skipped unknown flag %.*s\n", len, par);
190+ str++;
174191 }
175192
176193 /* Default behaviour for isolcpus without flags */
kernel/signal.c+10−10
@@ -1510,15 +1510,15 @@ int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr, · 1509 unmodified lines
15101510 unsigned long flags;
15111511 int ret = -EINVAL;
15121512
1513+ if (!valid_signal(sig))
1514+ return ret;
1515+
15131516 clear_siginfo(&info);
15141517 info.si_signo = sig;
15151518 info.si_errno = errno;
15161519 info.si_code = SI_ASYNCIO;
15171520 *((sigval_t *)&info.si_pid) = addr;
15181521
1519− if (!valid_signal(sig))
1520− return ret;
1521−
15221522 rcu_read_lock();
15231523 p = pid_task(pid, PIDTYPE_PID);
15241524 if (!p) {
@@ -1557,12 +1557,8 @@ static int kill_something_info(int sig, struct kernel_siginfo *info, pid_t pid) · 32 unmodified lines
15571557 {
15581558 int ret;
15591559
1560− if (pid > 0) {
1561− rcu_read_lock();
1562− ret = kill_pid_info(sig, info, find_vpid(pid));
1563− rcu_read_unlock();
1564− return ret;
1565− }
1560+ if (pid > 0)
1561+ return kill_proc_info(sig, info, pid);
15661562
15671563 /* -INT_MIN is undefined. Exclude this case to avoid a UBSAN warning */
15681564 if (pid == INT_MIN)
@@ -1993,8 +1989,12 @@ bool do_notify_parent(struct task_struct *tsk, int sig) · 424 unmodified lines
19931989 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
19941990 sig = 0;
19951991 }
1992+ /*
1993+ * Send with __send_signal as si_pid and si_uid are in the
1994+ * parent's namespaces.
1995+ */
19961996 if (valid_signal(sig) && sig)
1997− __group_send_sig_info(sig, &info, tsk->parent);
1997+ __send_signal(sig, &info, tsk->parent, PIDTYPE_TGID, false);
19981998 __wake_up_parent(tsk, tsk->parent);
19991999 spin_unlock_irqrestore(&psig->siglock, flags);
20002000
kernel/time/namespace.c+14−1
@@ -338,7 +338,20 @@ static struct user_namespace *timens_owner(struct ns_common *ns) · 337 unmodified lines
338338
339339 static void show_offset(struct seq_file *m, int clockid, struct timespec64 *ts)
340340 {
341− seq_printf(m, "%d %lld %ld\n", clockid, ts->tv_sec, ts->tv_nsec);
341+ char *clock;
342+
343+ switch (clockid) {
344+ case CLOCK_BOOTTIME:
345+ clock = "boottime";
346+ break;
347+ case CLOCK_MONOTONIC:
348+ clock = "monotonic";
349+ break;
350+ default:
351+ clock = "unknown";
352+ break;
353+ }
354+ seq_printf(m, "%-10s %10lld %9ld\n", clock, ts->tv_sec, ts->tv_nsec);
342355 }
343356
344357 void proc_timens_show_offsets(struct task_struct *p, struct seq_file *m)
kernel/trace/ftrace.c+1−0
@@ -5165,6 +5165,7 @@ int unregister_ftrace_direct(unsigned long ip, unsigned long addr) · 5164 unmodified lines
51655165 list_del_rcu(&direct->next);
51665166 synchronize_rcu_tasks();
51675167 kfree(direct);
5168+ kfree(entry);
51685169 ftrace_direct_func_count--;
51695170 }
51705171 }
kernel/trace/trace_events_hist.c+7−0
@@ -3320,6 +3320,9 @@ static void __destroy_hist_field(struct hist_field *hist_field) · 3319 unmodified lines
33203320 kfree(hist_field->name);
33213321 kfree(hist_field->type);
33223322
3323+ kfree(hist_field->system);
3324+ kfree(hist_field->event_name);
3325+
33233326 kfree(hist_field);
33243327 }
33253328
@@ -4382,6 +4385,7 @@ static struct hist_field *create_var(struct hist_trigger_data *hist_data, · 1056 unmodified lines
43824385 goto out;
43834386 }
43844387
4388+ var->ref = 1;
43854389 var->flags = HIST_FIELD_FL_VAR;
43864390 var->var.idx = idx;
43874391 var->var.hist_data = var->hist_data = hist_data;
@@ -5011,6 +5015,9 @@ static void destroy_field_vars(struct hist_trigger_data *hist_data) · 623 unmodified lines
50115015
50125016 for (i = 0; i < hist_data->n_field_vars; i++)
50135017 destroy_field_var(hist_data->field_vars[i]);
5018+
5019+ for (i = 0; i < hist_data->n_save_vars; i++)
5020+ destroy_field_var(hist_data->save_vars[i]);
50145021 }
50155022
50165023 static void save_field_var(struct hist_trigger_data *hist_data,
kernel/trace/trace_events_trigger.c+3−7
@@ -1088,14 +1088,10 @@ register_snapshot_trigger(char *glob, struct event_trigger_ops *ops, · 1087 unmodified lines
10881088 struct event_trigger_data *data,
10891089 struct trace_event_file *file)
10901090 {
1091− int ret = register_trigger(glob, ops, data, file);
1092−
1093− if (ret > 0 && tracing_alloc_snapshot_instance(file->tr) != 0) {
1094− unregister_trigger(glob, ops, data, file);
1095− ret = 0;
1096− }
1091+ if (tracing_alloc_snapshot_instance(file->tr) != 0)
1092+ return 0;
10971093
1098− return ret;
1094+ return register_trigger(glob, ops, data, file);
10991095 }
11001096
11011097 static int
kernel/trace/tracing_map.c+3−3
@@ -283,7 +283,7 @@ int tracing_map_add_key_field(struct tracing_map *map, · 282 unmodified lines
283283 return idx;
284284 }
285285
286−void tracing_map_array_clear(struct tracing_map_array *a)
286+static void tracing_map_array_clear(struct tracing_map_array *a)
287287 {
288288 unsigned int i;
289289
@@ -294,7 +294,7 @@ void tracing_map_array_clear(struct tracing_map_array *a) · 4 unmodified lines
294294 memset(a->pages[i], 0, PAGE_SIZE);
295295 }
296296
297−void tracing_map_array_free(struct tracing_map_array *a)
297+static void tracing_map_array_free(struct tracing_map_array *a)
298298 {
299299 unsigned int i;
300300
@@ -316,7 +316,7 @@ void tracing_map_array_free(struct tracing_map_array *a) · 15 unmodified lines
316316 kfree(a);
317317 }
318318
319−struct tracing_map_array *tracing_map_array_alloc(unsigned int n_elts,
319+static struct tracing_map_array *tracing_map_array_alloc(unsigned int n_elts,
320320 unsigned int entry_size)
321321 {
322322 struct tracing_map_array *a;
lib/Kconfig.debug+2−0
@@ -242,6 +242,8 @@ config DEBUG_INFO_DWARF4 · 241 unmodified lines
242242 config DEBUG_INFO_BTF
243243 bool "Generate BTF typeinfo"
244244 depends on DEBUG_INFO
245+ depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
246+ depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
245247 help
246248 Generate deduplicated BTF type information from DWARF debug info.
247249 Turning this on expects presence of pahole tool, which will convert
lib/mpi/longlong.h+17−17
@@ -722,22 +722,22 @@ do { \ · 721 unmodified lines
722722 do { \
723723 if (__builtin_constant_p(bh) && (bh) == 0) \
724724 __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
725− : "=r" ((USItype)(sh)), \
726− "=&r" ((USItype)(sl)) \
725+ : "=r" (sh), \
726+ "=&r" (sl) \
727727 : "%r" ((USItype)(ah)), \
728728 "%r" ((USItype)(al)), \
729729 "rI" ((USItype)(bl))); \
730730 else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
731731 __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
732− : "=r" ((USItype)(sh)), \
733− "=&r" ((USItype)(sl)) \
732+ : "=r" (sh), \
733+ "=&r" (sl) \
734734 : "%r" ((USItype)(ah)), \
735735 "%r" ((USItype)(al)), \
736736 "rI" ((USItype)(bl))); \
737737 else \
738738 __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
739− : "=r" ((USItype)(sh)), \
740− "=&r" ((USItype)(sl)) \
739+ : "=r" (sh), \
740+ "=&r" (sl) \
741741 : "%r" ((USItype)(ah)), \
742742 "r" ((USItype)(bh)), \
743743 "%r" ((USItype)(al)), \
@@ -747,36 +747,36 @@ do { \ · 3 unmodified lines
747747 do { \
748748 if (__builtin_constant_p(ah) && (ah) == 0) \
749749 __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
750− : "=r" ((USItype)(sh)), \
751− "=&r" ((USItype)(sl)) \
750+ : "=r" (sh), \
751+ "=&r" (sl) \
752752 : "r" ((USItype)(bh)), \
753753 "rI" ((USItype)(al)), \
754754 "r" ((USItype)(bl))); \
755755 else if (__builtin_constant_p(ah) && (ah) == ~(USItype) 0) \
756756 __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
757− : "=r" ((USItype)(sh)), \
758− "=&r" ((USItype)(sl)) \
757+ : "=r" (sh), \
758+ "=&r" (sl) \
759759 : "r" ((USItype)(bh)), \
760760 "rI" ((USItype)(al)), \
761761 "r" ((USItype)(bl))); \
762762 else if (__builtin_constant_p(bh) && (bh) == 0) \
763763 __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
764− : "=r" ((USItype)(sh)), \
765− "=&r" ((USItype)(sl)) \
764+ : "=r" (sh), \
765+ "=&r" (sl) \
766766 : "r" ((USItype)(ah)), \
767767 "rI" ((USItype)(al)), \
768768 "r" ((USItype)(bl))); \
769769 else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
770770 __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
771− : "=r" ((USItype)(sh)), \
772− "=&r" ((USItype)(sl)) \
771+ : "=r" (sh), \
772+ "=&r" (sl) \
773773 : "r" ((USItype)(ah)), \
774774 "rI" ((USItype)(al)), \
775775 "r" ((USItype)(bl))); \
776776 else \
777777 __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
778− : "=r" ((USItype)(sh)), \
779− "=&r" ((USItype)(sl)) \
778+ : "=r" (sh), \
779+ "=&r" (sl) \
780780 : "r" ((USItype)(ah)), \
781781 "r" ((USItype)(bh)), \
782782 "rI" ((USItype)(al)), \
@@ -787,7 +787,7 @@ do { \ · 4 unmodified lines
787787 do { \
788788 USItype __m0 = (m0), __m1 = (m1); \
789789 __asm__ ("mulhwu %0,%1,%2" \
790− : "=r" ((USItype) ph) \
790+ : "=r" (ph) \
791791 : "%r" (__m0), \
792792 "r" (__m1)); \
793793 (pl) = __m0 * __m1; \
mm/gup.c+1−1
@@ -1088,7 +1088,7 @@ retry: · 1087 unmodified lines
10881088 * potentially allocating memory.
10891089 */
10901090 if (fatal_signal_pending(current)) {
1091− ret = -ERESTARTSYS;
1091+ ret = -EINTR;
10921092 goto out;
10931093 }
10941094 cond_resched();
mm/hugetlb.c+8−6
@@ -5365,8 +5365,8 @@ pte_t *huge_pte_offset(struct mm_struct *mm, · 5364 unmodified lines
53655365 {
53665366 pgd_t *pgd;
53675367 p4d_t *p4d;
5368− pud_t *pud;
5369− pmd_t *pmd;
5368+ pud_t *pud, pud_entry;
5369+ pmd_t *pmd, pmd_entry;
53705370
53715371 pgd = pgd_offset(mm, addr);
53725372 if (!pgd_present(*pgd))
@@ -5376,17 +5376,19 @@ pte_t *huge_pte_offset(struct mm_struct *mm, · 3 unmodified lines
53765376 return NULL;
53775377
53785378 pud = pud_offset(p4d, addr);
5379− if (sz != PUD_SIZE && pud_none(*pud))
5379+ pud_entry = READ_ONCE(*pud);
5380+ if (sz != PUD_SIZE && pud_none(pud_entry))
53805381 return NULL;
53815382 /* hugepage or swap? */
5382− if (pud_huge(*pud) || !pud_present(*pud))
5383+ if (pud_huge(pud_entry) || !pud_present(pud_entry))
53835384 return (pte_t *)pud;
53845385
53855386 pmd = pmd_offset(pud, addr);
5386− if (sz != PMD_SIZE && pmd_none(*pmd))
5387+ pmd_entry = READ_ONCE(*pmd);
5388+ if (sz != PMD_SIZE && pmd_none(pmd_entry))
53875389 return NULL;
53885390 /* hugepage or swap? */
5389− if (pmd_huge(*pmd) || !pmd_present(*pmd))
5391+ if (pmd_huge(pmd_entry) || !pmd_present(pmd_entry))
53905392 return (pte_t *)pmd;
53915393
53925394 return NULL;
mm/ksm.c+10−2
@@ -2112,8 +2112,16 @@ static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item) · 2111 unmodified lines
21122112
21132113 down_read(&mm->mmap_sem);
21142114 vma = find_mergeable_vma(mm, rmap_item->address);
2115− err = try_to_merge_one_page(vma, page,
2116− ZERO_PAGE(rmap_item->address));
2115+ if (vma) {
2116+ err = try_to_merge_one_page(vma, page,
2117+ ZERO_PAGE(rmap_item->address));
2118+ } else {
2119+ /*
2120+ * If the vma is out of date, we do not need to
2121+ * continue.
2122+ */
2123+ err = 0;
2124+ }
21172125 up_read(&mm->mmap_sem);
21182126 /*
21192127 * In case of failure, the page was not really empty, so we
mm/madvise.c+18−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
2727 #include <linux/swapops.h>
2828 #include <linux/shmem_fs.h>
2929 #include <linux/mmu_notifier.h>
30+#include <linux/sched/mm.h>
3031
3132 #include <asm/tlb.h>
3233
@@ -1090,6 +1091,23 @@ int do_madvise(unsigned long start, size_t len_in, int behavior) · 1057 unmodified lines
10901091 if (write) {
10911092 if (down_write_killable(&current->mm->mmap_sem))
10921093 return -EINTR;
1094+
1095+ /*
1096+ * We may have stolen the mm from another process
1097+ * that is undergoing core dumping.
1098+ *
1099+ * Right now that's io_ring, in the future it may
1100+ * be remote process management and not "current"
1101+ * at all.
1102+ *
1103+ * We need to fix core dumping to not do this,
1104+ * but for now we have the mmget_still_valid()
1105+ * model.
1106+ */
1107+ if (!mmget_still_valid(current->mm)) {
1108+ up_write(&current->mm->mmap_sem);
1109+ return -EINTR;
1110+ }
10931111 } else {
10941112 down_read(&current->mm->mmap_sem);
10951113 }
mm/mremap.c+12−1
@@ -413,9 +413,20 @@ static unsigned long move_vma(struct vm_area_struct *vma, · 412 unmodified lines
413413 /* Always put back VM_ACCOUNT since we won't unmap */
414414 vma->vm_flags |= VM_ACCOUNT;
415415
416− vm_acct_memory(vma_pages(new_vma));
416+ vm_acct_memory(new_len >> PAGE_SHIFT);
417417 }
418418
419+ /*
420+ * VMAs can actually be merged back together in copy_vma
421+ * calling merge_vma. This can happen with anonymous vmas
422+ * which have not yet been faulted, so if we were to consider
423+ * this VMA split we'll end up adding VM_ACCOUNT on the
424+ * next VMA, which is completely unrelated if this VMA
425+ * was re-merged.
426+ */
427+ if (split && new_vma == vma)
428+ split = 0;
429+
419430 /* We always clear VM_LOCKED[ONFAULT] on the old vma */
420431 vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
421432
mm/shmem.c+8−5
@@ -952,7 +952,7 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend, · 951 unmodified lines
952952 VM_BUG_ON_PAGE(PageWriteback(page), page);
953953 if (shmem_punch_compound(page, start, end))
954954 truncate_inode_page(mapping, page);
955− else {
955+ else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
956956 /* Wipe the page and don't get stuck */
957957 clear_highpage(page);
958958 flush_dcache_page(page);
@@ -2179,7 +2179,11 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) · 1220 unmodified lines
21792179 struct shmem_inode_info *info = SHMEM_I(inode);
21802180 int retval = -ENOMEM;
21812181
2182− spin_lock_irq(&info->lock);
2182+ /*
2183+ * What serializes the accesses to info->flags?
2184+ * ipc_lock_object() when called from shmctl_do_lock(),
2185+ * no serialization needed when called from shm_destroy().
2186+ */
21832187 if (lock && !(info->flags & VM_LOCKED)) {
21842188 if (!user_shm_lock(inode->i_size, user))
21852189 goto out_nomem;
@@ -2194,7 +2198,6 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) · 8 unmodified lines
21942198 retval = 0;
21952199
21962200 out_nomem:
2197− spin_unlock_irq(&info->lock);
21982201 return retval;
21992202 }
22002203
@@ -2399,11 +2402,11 @@ static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, · 198 unmodified lines
23992402
24002403 lru_cache_add_anon(page);
24012404
2402− spin_lock(&info->lock);
2405+ spin_lock_irq(&info->lock);
24032406 info->alloced++;
24042407 inode->i_blocks += BLOCKS_PER_PAGE;
24052408 shmem_recalc_inode(inode);
2406− spin_unlock(&info->lock);
2409+ spin_unlock_irq(&info->lock);
24072410
24082411 inc_mm_counter(dst_mm, mm_counter_file(page));
24092412 page_add_file_rmap(page, false);
mm/slub.c+10−2
@@ -3533,6 +3533,7 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) · 3532 unmodified lines
35333533 {
35343534 slab_flags_t flags = s->flags;
35353535 unsigned int size = s->object_size;
3536+ unsigned int freepointer_area;
35363537 unsigned int order;
35373538
35383539 /*
@@ -3541,6 +3542,13 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) · 2 unmodified lines
35413542 * the possible location of the free pointer.
35423543 */
35433544 size = ALIGN(size, sizeof(void *));
3545+ /*
3546+ * This is the area of the object where a freepointer can be
3547+ * safely written. If redzoning adds more to the inuse size, we
3548+ * can't use that portion for writing the freepointer, so
3549+ * s->offset must be limited within this for the general case.
3550+ */
3551+ freepointer_area = size;
35443552
35453553 #ifdef CONFIG_SLUB_DEBUG
35463554 /*
@@ -3582,13 +3590,13 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) · 35 unmodified lines
35823590 */
35833591 s->offset = size;
35843592 size += sizeof(void *);
3585− } else if (size > sizeof(void *)) {
3593+ } else if (freepointer_area > sizeof(void *)) {
35863594 /*
35873595 * Store freelist pointer near middle of object to keep
35883596 * it away from the edges of the object to avoid small
35893597 * sized over/underflows from neighboring allocations.
35903598 */
3591− s->offset = ALIGN(size / 2, sizeof(void *));
3599+ s->offset = ALIGN(freepointer_area / 2, sizeof(void *));
35923600 }
35933601
35943602 #ifdef CONFIG_SLUB_DEBUG
mm/vmalloc.c+13−3
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #include <linux/llist.h>
3535 #include <linux/bitops.h>
3636 #include <linux/rbtree_augmented.h>
37+#include <linux/overflow.h>
3738
3839 #include <linux/uaccess.h>
3940 #include <asm/tlbflush.h>
@@ -3054,6 +3055,7 @@ finished: · 3014 unmodified lines
30543055 * @vma: vma to cover
30553056 * @uaddr: target user address to start at
30563057 * @kaddr: virtual address of vmalloc kernel memory
3058+ * @pgoff: offset from @kaddr to start at
30573059 * @size: size of map area
30583060 *
30593061 * Returns: 0 for success, -Exxx on failure
@@ -3066,9 +3068,15 @@ finished: · 6 unmodified lines
30663068 * Similar to remap_pfn_range() (see mm/memory.c)
30673069 */
30683070 int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
3069− void *kaddr, unsigned long size)
3071+ void *kaddr, unsigned long pgoff,
3072+ unsigned long size)
30703073 {
30713074 struct vm_struct *area;
3075+ unsigned long off;
3076+ unsigned long end_index;
3077+
3078+ if (check_shl_overflow(pgoff, PAGE_SHIFT, &off))
3079+ return -EINVAL;
30723080
30733081 size = PAGE_ALIGN(size);
30743082
@@ -3082,8 +3090,10 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, · 7 unmodified lines
30823090 if (!(area->flags & (VM_USERMAP | VM_DMA_COHERENT)))
30833091 return -EINVAL;
30843092
3085− if (kaddr + size > area->addr + get_vm_area_size(area))
3093+ if (check_add_overflow(size, off, &end_index) ||
3094+ end_index > get_vm_area_size(area))
30863095 return -EINVAL;
3096+ kaddr += off;
30873097
30883098 do {
30893099 struct page *page = vmalloc_to_page(kaddr);
@@ -3122,7 +3132,7 @@ int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, · 32 unmodified lines
31223132 unsigned long pgoff)
31233133 {
31243134 return remap_vmalloc_range_partial(vma, vma->vm_start,
3125− addr + (pgoff << PAGE_SHIFT),
3135+ addr, pgoff,
31263136 vma->vm_end - vma->vm_start);
31273137 }
31283138 EXPORT_SYMBOL(remap_vmalloc_range);
net/core/dev.c+4−2
@@ -4140,7 +4140,8 @@ EXPORT_SYMBOL(netdev_max_backlog); · 4139 unmodified lines
41404140
41414141 int netdev_tstamp_prequeue __read_mostly = 1;
41424142 int netdev_budget __read_mostly = 300;
4143−unsigned int __read_mostly netdev_budget_usecs = 2000;
4143+/* Must be at least 2 jiffes to guarantee 1 jiffy timeout */
4144+unsigned int __read_mostly netdev_budget_usecs = 2 * USEC_PER_SEC / HZ;
41444145 int weight_p __read_mostly = 64; /* old backlog weight */
41454146 int dev_weight_rx_bias __read_mostly = 1; /* bias for backlog weight */
41464147 int dev_weight_tx_bias __read_mostly = 1; /* bias for output_queue quota */
@@ -8666,8 +8667,8 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, · 4519 unmodified lines
86668667 const struct net_device_ops *ops = dev->netdev_ops;
86678668 enum bpf_netdev_command query;
86688669 u32 prog_id, expected_id = 0;
8669− struct bpf_prog *prog = NULL;
86708670 bpf_op_t bpf_op, bpf_chk;
8671+ struct bpf_prog *prog;
86718672 bool offload;
86728673 int err;
86738674
@@ -8733,6 +8734,7 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, · 59 unmodified lines
87338734 } else {
87348735 if (!prog_id)
87358736 return 0;
8737+ prog = NULL;
87368738 }
87378739
87388740 err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
net/core/filter.c+1−1
@@ -5925,7 +5925,7 @@ BPF_CALL_3(bpf_sk_assign, struct sk_buff *, skb, struct sock *, sk, u64, flags) · 5924 unmodified lines
59255925 return -EOPNOTSUPP;
59265926 if (unlikely(dev_net(skb->dev) != sock_net(sk)))
59275927 return -ENETUNREACH;
5928− if (unlikely(sk->sk_reuseport))
5928+ if (unlikely(sk_fullsock(sk) && sk->sk_reuseport))
59295929 return -ESOCKTNOSUPPORT;
59305930 if (sk_is_refcounted(sk) &&
59315931 unlikely(!refcount_inc_not_zero(&sk->sk_refcnt)))
net/core/net-sysfs.c+1−1
@@ -80,7 +80,7 @@ static ssize_t netdev_store(struct device *dev, struct device_attribute *attr, · 79 unmodified lines
8080 struct net_device *netdev = to_net_dev(dev);
8181 struct net *net = dev_net(netdev);
8282 unsigned long new;
83− int ret = -EINVAL;
83+ int ret;
8484
8585 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
8686 return -EPERM;
net/core/netclassid_cgroup.c+1−3
@@ -127,10 +127,8 @@ static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, · 126 unmodified lines
127127 cs->classid = (u32)value;
128128
129129 css_task_iter_start(css, 0, &it);
130− while ((p = css_task_iter_next(&it))) {
130+ while ((p = css_task_iter_next(&it)))
131131 update_classid_task(p, cs->classid);
132− cond_resched();
133− }
134132 css_task_iter_end(&it);
135133
136134 return 0;
net/core/sock.c+1−1
@@ -1872,7 +1872,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) · 1871 unmodified lines
18721872 * as not suitable for copying when cloning.
18731873 */
18741874 if (sk_user_data_is_nocopy(newsk))
1875− RCU_INIT_POINTER(newsk->sk_user_data, NULL);
1875+ newsk->sk_user_data = NULL;
18761876
18771877 newsk->sk_err = 0;
18781878 newsk->sk_err_soft = 0;
net/dsa/port.c+6−1
@@ -670,11 +670,16 @@ int dsa_port_link_register_of(struct dsa_port *dp) · 669 unmodified lines
670670 {
671671 struct dsa_switch *ds = dp->ds;
672672 struct device_node *phy_np;
673+ int port = dp->index;
673674
674675 if (!ds->ops->adjust_link) {
675676 phy_np = of_parse_phandle(dp->dn, "phy-handle", 0);
676− if (of_phy_is_fixed_link(dp->dn) || phy_np)
677+ if (of_phy_is_fixed_link(dp->dn) || phy_np) {
678+ if (ds->ops->phylink_mac_link_down)
679+ ds->ops->phylink_mac_link_down(ds, port,
680+ MLO_AN_FIXED, PHY_INTERFACE_MODE_NA);
677681 return dsa_port_phylink_register(dp);
682+ }
678683 return 0;
679684 }
680685
net/dsa/slave.c+3−5
@@ -1770,11 +1770,9 @@ int dsa_slave_create(struct dsa_port *port) · 1769 unmodified lines
17701770 rtnl_lock();
17711771 ret = dsa_slave_change_mtu(slave_dev, ETH_DATA_LEN);
17721772 rtnl_unlock();
1773− if (ret && ret != -EOPNOTSUPP) {
1774− dev_err(ds->dev, "error %d setting MTU on port %d\n",
1775− ret, port->index);
1776− goto out_free;
1777− }
1773+ if (ret)
1774+ dev_warn(ds->dev, "nonfatal error %d setting MTU on port %d\n",
1775+ ret, port->index);
17781776
17791777 netif_carrier_off(slave_dev);
17801778
net/hsr/hsr_netlink.c+8−2
@@ -69,10 +69,16 @@ static int hsr_newlink(struct net *src_net, struct net_device *dev, · 68 unmodified lines
6969 else
7070 multicast_spec = nla_get_u8(data[IFLA_HSR_MULTICAST_SPEC]);
7171
72− if (!data[IFLA_HSR_VERSION])
72+ if (!data[IFLA_HSR_VERSION]) {
7373 hsr_version = 0;
74− else
74+ } else {
7575 hsr_version = nla_get_u8(data[IFLA_HSR_VERSION]);
76+ if (hsr_version > 1) {
77+ NL_SET_ERR_MSG_MOD(extack,
78+ "Only versions 0..1 are supported");
79+ return -EINVAL;
80+ }
81+ }
7682
7783 return hsr_dev_finalize(dev, link, multicast_spec, hsr_version, extack);
7884 }
net/ipv4/devinet.c+9−4
@@ -614,12 +614,15 @@ struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix, · 613 unmodified lines
614614 return NULL;
615615 }
616616
617−static int ip_mc_config(struct sock *sk, bool join, const struct in_ifaddr *ifa)
617+static int ip_mc_autojoin_config(struct net *net, bool join,
618+ const struct in_ifaddr *ifa)
618619 {
620+#if defined(CONFIG_IP_MULTICAST)
619621 struct ip_mreqn mreq = {
620622 .imr_multiaddr.s_addr = ifa->ifa_address,
621623 .imr_ifindex = ifa->ifa_dev->dev->ifindex,
622624 };
625+ struct sock *sk = net->ipv4.mc_autojoin_sk;
623626 int ret;
624627
625628 ASSERT_RTNL();
@@ -632,6 +635,9 @@ static int ip_mc_config(struct sock *sk, bool join, const struct in_ifaddr *ifa) · 6 unmodified lines
632635 release_sock(sk);
633636
634637 return ret;
638+#else
639+ return -EOPNOTSUPP;
640+#endif
635641 }
636642
637643 static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
@@ -675,7 +681,7 @@ static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, · 37 unmodified lines
675681 continue;
676682
677683 if (ipv4_is_multicast(ifa->ifa_address))
678− ip_mc_config(net->ipv4.mc_autojoin_sk, false, ifa);
684+ ip_mc_autojoin_config(net, false, ifa);
679685 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid);
680686 return 0;
681687 }
@@ -940,8 +946,7 @@ static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, · 258 unmodified lines
940946 */
941947 set_ifa_lifetime(ifa, valid_lft, prefered_lft);
942948 if (ifa->ifa_flags & IFA_F_MCAUTOJOIN) {
943− int ret = ip_mc_config(net->ipv4.mc_autojoin_sk,
944− true, ifa);
949+ int ret = ip_mc_autojoin_config(net, true, ifa);
945950
946951 if (ret < 0) {
947952 inet_free_ifa(ifa);
net/ipv4/fib_semantics.c+3−3
@@ -2014,7 +2014,7 @@ static void fib_select_default(const struct flowi4 *flp, struct fib_result *res) · 2013 unmodified lines
20142014
20152015 hlist_for_each_entry_rcu(fa, fa_head, fa_list) {
20162016 struct fib_info *next_fi = fa->fa_info;
2017− struct fib_nh *nh;
2017+ struct fib_nh_common *nhc;
20182018
20192019 if (fa->fa_slen != slen)
20202020 continue;
@@ -2037,8 +2037,8 @@ static void fib_select_default(const struct flowi4 *flp, struct fib_result *res) · 16 unmodified lines
20372037 fa->fa_type != RTN_UNICAST)
20382038 continue;
20392039
2040− nh = fib_info_nh(next_fi, 0);
2041− if (!nh->fib_nh_gw4 || nh->fib_nh_scope != RT_SCOPE_LINK)
2040+ nhc = fib_info_nhc(next_fi, 0);
2041+ if (!nhc->nhc_gw_family || nhc->nhc_scope != RT_SCOPE_LINK)
20422042 continue;
20432043
20442044 fib_alias_accessed(fa);
net/ipv4/xfrm4_output.c+0−2
@@ -58,9 +58,7 @@ int xfrm4_output_finish(struct sock *sk, struct sk_buff *skb) · 57 unmodified lines
5858 {
5959 memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
6060
61−#ifdef CONFIG_NETFILTER
6261 IPCB(skb)->flags |= IPSKB_XFRM_TRANSFORMED;
63−#endif
6462
6563 return xfrm_output(sk, skb);
6664 }
net/ipv6/icmp.c+20−1
@@ -229,6 +229,25 @@ static bool icmpv6_xrlim_allow(struct sock *sk, u8 type, · 228 unmodified lines
229229 return res;
230230 }
231231
232+static bool icmpv6_rt_has_prefsrc(struct sock *sk, u8 type,
233+ struct flowi6 *fl6)
234+{
235+ struct net *net = sock_net(sk);
236+ struct dst_entry *dst;
237+ bool res = false;
238+
239+ dst = ip6_route_output(net, sk, fl6);
240+ if (!dst->error) {
241+ struct rt6_info *rt = (struct rt6_info *)dst;
242+ struct in6_addr prefsrc;
243+
244+ rt6_get_prefsrc(rt, &prefsrc);
245+ res = !ipv6_addr_any(&prefsrc);
246+ }
247+ dst_release(dst);
248+ return res;
249+}
250+
232251 /*
233252 * an inline helper for the "simple" if statement below
234253 * checks if parameter problem report is caused by an
@@ -527,7 +546,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, · 292 unmodified lines
527546 saddr = force_saddr;
528547 if (saddr) {
529548 fl6.saddr = *saddr;
530− } else {
549+ } else if (!icmpv6_rt_has_prefsrc(sk, type, &fl6)) {
531550 /* select a more meaningful saddr from input if */
532551 struct net_device *in_netdev;
533552
net/ipv6/ipv6_sockglue.c+6−7
@@ -183,15 +183,14 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, · 182 unmodified lines
183183 retv = -EBUSY;
184184 break;
185185 }
186− } else if (sk->sk_protocol == IPPROTO_TCP) {
187− if (sk->sk_prot != &tcpv6_prot) {
188− retv = -EBUSY;
189− break;
190− }
191− break;
192− } else {
186+ }
187+ if (sk->sk_protocol == IPPROTO_TCP &&
188+ sk->sk_prot != &tcpv6_prot) {
189+ retv = -EBUSY;
193190 break;
194191 }
192+ if (sk->sk_protocol != IPPROTO_TCP)
193+ break;
195194 if (sk->sk_state != TCP_ESTABLISHED) {
196195 retv = -ENOTCONN;
197196 break;
net/ipv6/rpl.c+4−3
@@ -8,6 +8,7 @@ · 7 unmodified lines
88 #include <net/rpl.h>
99
1010 #define IPV6_PFXTAIL_LEN(x) (sizeof(struct in6_addr) - (x))
11+#define IPV6_RPL_BEST_ADDR_COMPRESSION 15
1112
1213 static void ipv6_rpl_addr_decompress(struct in6_addr *dst,
1314 const struct in6_addr *daddr,
@@ -73,7 +74,7 @@ static unsigned char ipv6_rpl_srh_calc_cmpri(const struct ipv6_rpl_sr_hdr *inhdr · 59 unmodified lines
7374 }
7475 }
7576
76− return plen;
77+ return IPV6_RPL_BEST_ADDR_COMPRESSION;
7778 }
7879
7980 static unsigned char ipv6_rpl_srh_calc_cmpre(const struct in6_addr *daddr,
@@ -83,10 +84,10 @@ static unsigned char ipv6_rpl_srh_calc_cmpre(const struct in6_addr *daddr, · 3 unmodified lines
8384
8485 for (plen = 0; plen < sizeof(*daddr); plen++) {
8586 if (daddr->s6_addr[plen] != last_segment->s6_addr[plen])
86− break;
87+ return plen;
8788 }
8889
89− return plen;
90+ return IPV6_RPL_BEST_ADDR_COMPRESSION;
9091 }
9192
9293 void ipv6_rpl_srh_compress(struct ipv6_rpl_sr_hdr *outhdr,
net/ipv6/seg6.c+1−1
@@ -434,7 +434,7 @@ static struct genl_family seg6_genl_family __ro_after_init = { · 433 unmodified lines
434434
435435 int __init seg6_init(void)
436436 {
437− int err = -ENOMEM;
437+ int err;
438438
439439 err = genl_register_family(&seg6_genl_family);
440440 if (err)
net/ipv6/xfrm6_output.c+0−2
@@ -111,9 +111,7 @@ int xfrm6_output_finish(struct sock *sk, struct sk_buff *skb) · 110 unmodified lines
111111 {
112112 memset(IP6CB(skb), 0, sizeof(*IP6CB(skb)));
113113
114−#ifdef CONFIG_NETFILTER
115114 IP6CB(skb)->flags |= IP6SKB_XFRM_TRANSFORMED;
116−#endif
117115
118116 return xfrm_output(sk, skb);
119117 }
net/l2tp/l2tp_netlink.c+8−8
@@ -920,51 +920,51 @@ static const struct genl_ops l2tp_nl_ops[] = { · 919 unmodified lines
920920 .cmd = L2TP_CMD_TUNNEL_CREATE,
921921 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
922922 .doit = l2tp_nl_cmd_tunnel_create,
923− .flags = GENL_ADMIN_PERM,
923+ .flags = GENL_UNS_ADMIN_PERM,
924924 },
925925 {
926926 .cmd = L2TP_CMD_TUNNEL_DELETE,
927927 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
928928 .doit = l2tp_nl_cmd_tunnel_delete,
929− .flags = GENL_ADMIN_PERM,
929+ .flags = GENL_UNS_ADMIN_PERM,
930930 },
931931 {
932932 .cmd = L2TP_CMD_TUNNEL_MODIFY,
933933 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
934934 .doit = l2tp_nl_cmd_tunnel_modify,
935− .flags = GENL_ADMIN_PERM,
935+ .flags = GENL_UNS_ADMIN_PERM,
936936 },
937937 {
938938 .cmd = L2TP_CMD_TUNNEL_GET,
939939 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
940940 .doit = l2tp_nl_cmd_tunnel_get,
941941 .dumpit = l2tp_nl_cmd_tunnel_dump,
942− .flags = GENL_ADMIN_PERM,
942+ .flags = GENL_UNS_ADMIN_PERM,
943943 },
944944 {
945945 .cmd = L2TP_CMD_SESSION_CREATE,
946946 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
947947 .doit = l2tp_nl_cmd_session_create,
948− .flags = GENL_ADMIN_PERM,
948+ .flags = GENL_UNS_ADMIN_PERM,
949949 },
950950 {
951951 .cmd = L2TP_CMD_SESSION_DELETE,
952952 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
953953 .doit = l2tp_nl_cmd_session_delete,
954− .flags = GENL_ADMIN_PERM,
954+ .flags = GENL_UNS_ADMIN_PERM,
955955 },
956956 {
957957 .cmd = L2TP_CMD_SESSION_MODIFY,
958958 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
959959 .doit = l2tp_nl_cmd_session_modify,
960− .flags = GENL_ADMIN_PERM,
960+ .flags = GENL_UNS_ADMIN_PERM,
961961 },
962962 {
963963 .cmd = L2TP_CMD_SESSION_GET,
964964 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
965965 .doit = l2tp_nl_cmd_session_get,
966966 .dumpit = l2tp_nl_cmd_session_dump,
967− .flags = GENL_ADMIN_PERM,
967+ .flags = GENL_UNS_ADMIN_PERM,
968968 },
969969 };
970970
net/mac80211/main.c+16−13
@@ -1069,7 +1069,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 1068 unmodified lines
10691069 local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
10701070 if (hw->max_signal <= 0) {
10711071 result = -EINVAL;
1072− goto fail_wiphy_register;
1072+ goto fail_workqueue;
10731073 }
10741074 }
10751075
@@ -1135,7 +1135,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 59 unmodified lines
11351135
11361136 result = ieee80211_init_cipher_suites(local);
11371137 if (result < 0)
1138− goto fail_wiphy_register;
1138+ goto fail_workqueue;
11391139
11401140 if (!local->ops->remain_on_channel)
11411141 local->hw.wiphy->max_remain_on_channel_duration = 5000;
@@ -1161,10 +1161,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 19 unmodified lines
11611161
11621162 local->hw.wiphy->max_num_csa_counters = IEEE80211_MAX_CSA_COUNTERS_NUM;
11631163
1164− result = wiphy_register(local->hw.wiphy);
1165− if (result < 0)
1166− goto fail_wiphy_register;
1167−
11681164 /*
11691165 * We use the number of queues for feature tests (QoS, HT) internally
11701166 * so restrict them appropriately.
@@ -1187,8 +1183,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 16 unmodified lines
11871183 local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
11881184 IEEE80211_TX_STATUS_HEADROOM);
11891185
1190− debugfs_hw_add(local);
1191−
11921186 /*
11931187 * if the driver doesn't specify a max listen interval we
11941188 * use 5 which should be a safe default
@@ -1217,9 +1211,9 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 22 unmodified lines
12171211 goto fail_flows;
12181212
12191213 rtnl_lock();
1220−
12211214 result = ieee80211_init_rate_ctrl_alg(local,
12221215 hw->rate_control_algorithm);
1216+ rtnl_unlock();
12231217 if (result < 0) {
12241218 wiphy_debug(local->hw.wiphy,
12251219 "Failed to initialize rate control algorithm\n");
@@ -1273,6 +1267,15 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 47 unmodified lines
12731267 local->sband_allocated |= BIT(band);
12741268 }
12751269
1270+ result = wiphy_register(local->hw.wiphy);
1271+ if (result < 0)
1272+ goto fail_wiphy_register;
1273+
1274+ debugfs_hw_add(local);
1275+ rate_control_add_debugfs(local);
1276+
1277+ rtnl_lock();
1278+
12761279 /* add one default STA interface if supported */
12771280 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION) &&
12781281 !ieee80211_hw_check(hw, NO_AUTO_VIF)) {
@@ -1312,17 +1315,17 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 33 unmodified lines
13121315 #if defined(CONFIG_INET) || defined(CONFIG_IPV6)
13131316 fail_ifa:
13141317 #endif
1318+ wiphy_unregister(local->hw.wiphy);
1319+ fail_wiphy_register:
13151320 rtnl_lock();
13161321 rate_control_deinitialize(local);
13171322 ieee80211_remove_interfaces(local);
1318− fail_rate:
13191323 rtnl_unlock();
1324+ fail_rate:
13201325 fail_flows:
13211326 ieee80211_led_exit(local);
13221327 destroy_workqueue(local->workqueue);
13231328 fail_workqueue:
1324− wiphy_unregister(local->hw.wiphy);
1325− fail_wiphy_register:
13261329 if (local->wiphy_ciphers_allocated)
13271330 kfree(local->hw.wiphy->cipher_suites);
13281331 kfree(local->int_scan_req);
@@ -1372,8 +1375,8 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw) · 43 unmodified lines
13721375 skb_queue_purge(&local->skb_queue_unreliable);
13731376 skb_queue_purge(&local->skb_queue_tdls_chsw);
13741377
1375− destroy_workqueue(local->workqueue);
13761378 wiphy_unregister(local->hw.wiphy);
1379+ destroy_workqueue(local->workqueue);
13771380 ieee80211_led_exit(local);
13781381 kfree(local->int_scan_req);
13791382 }
net/mac80211/mesh.c+7−4
@@ -1257,15 +1257,15 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, · 1256 unmodified lines
12571257 sdata->u.mesh.mshcfg.rssi_threshold < rx_status->signal)
12581258 mesh_neighbour_update(sdata, mgmt->sa, &elems,
12591259 rx_status);
1260+
1261+ if (ifmsh->csa_role != IEEE80211_MESH_CSA_ROLE_INIT &&
1262+ !sdata->vif.csa_active)
1263+ ieee80211_mesh_process_chnswitch(sdata, &elems, true);
12601264 }
12611265
12621266 if (ifmsh->sync_ops)
12631267 ifmsh->sync_ops->rx_bcn_presp(sdata,
12641268 stype, mgmt, &elems, rx_status);
1265−
1266− if (ifmsh->csa_role != IEEE80211_MESH_CSA_ROLE_INIT &&
1267− !sdata->vif.csa_active)
1268− ieee80211_mesh_process_chnswitch(sdata, &elems, true);
12691269 }
12701270
12711271 int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata)
@@ -1373,6 +1373,9 @@ static void mesh_rx_csa_frame(struct ieee80211_sub_if_data *sdata, · 101 unmodified lines
13731373 ieee802_11_parse_elems(pos, len - baselen, true, &elems,
13741374 mgmt->bssid, NULL);
13751375
1376+ if (!mesh_matches_local(sdata, &elems))
1377+ return;
1378+
13761379 ifmsh->chsw_ttl = elems.mesh_chansw_params_ie->mesh_ttl;
13771380 if (!--ifmsh->chsw_ttl)
13781381 fwd_csa = false;
net/mac80211/rate.c+4−11
@@ -214,17 +214,16 @@ static ssize_t rcname_read(struct file *file, char __user *userbuf, · 213 unmodified lines
214214 ref->ops->name, len);
215215 }
216216
217−static const struct file_operations rcname_ops = {
217+const struct file_operations rcname_ops = {
218218 .read = rcname_read,
219219 .open = simple_open,
220220 .llseek = default_llseek,
221221 };
222222 #endif
223223
224−static struct rate_control_ref *rate_control_alloc(const char *name,
225− struct ieee80211_local *local)
224+static struct rate_control_ref *
225+rate_control_alloc(const char *name, struct ieee80211_local *local)
226226 {
227− struct dentry *debugfsdir = NULL;
228227 struct rate_control_ref *ref;
229228
230229 ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL);
@@ -234,13 +233,7 @@ static struct rate_control_ref *rate_control_alloc(const char *name, · 3 unmodified lines
234233 if (!ref->ops)
235234 goto free;
236235
237−#ifdef CONFIG_MAC80211_DEBUGFS
238− debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir);
239− local->debugfs.rcdir = debugfsdir;
240− debugfs_create_file("name", 0400, debugfsdir, ref, &rcname_ops);
241−#endif
242−
243− ref->priv = ref->ops->alloc(&local->hw, debugfsdir);
236+ ref->priv = ref->ops->alloc(&local->hw);
244237 if (!ref->priv)
245238 goto free;
246239 return ref;
net/mac80211/rate.h+23−0
@@ -60,6 +60,29 @@ static inline void rate_control_add_sta_debugfs(struct sta_info *sta) · 59 unmodified lines
6060 #endif
6161 }
6262
63+extern const struct file_operations rcname_ops;
64+
65+static inline void rate_control_add_debugfs(struct ieee80211_local *local)
66+{
67+#ifdef CONFIG_MAC80211_DEBUGFS
68+ struct dentry *debugfsdir;
69+
70+ if (!local->rate_ctrl)
71+ return;
72+
73+ if (!local->rate_ctrl->ops->add_debugfs)
74+ return;
75+
76+ debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir);
77+ local->debugfs.rcdir = debugfsdir;
78+ debugfs_create_file("name", 0400, debugfsdir,
79+ local->rate_ctrl, &rcname_ops);
80+
81+ local->rate_ctrl->ops->add_debugfs(&local->hw, local->rate_ctrl->priv,
82+ debugfsdir);
83+#endif
84+}
85+
6386 void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata);
6487
6588 /* Get a reference to the rate control algorithm. If `name' is NULL, get the
net/mac80211/rc80211_minstrel_ht.c+13−6
@@ -1635,7 +1635,7 @@ minstrel_ht_init_cck_rates(struct minstrel_priv *mp) · 1634 unmodified lines
16351635 }
16361636
16371637 static void *
1638−minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
1638+minstrel_ht_alloc(struct ieee80211_hw *hw)
16391639 {
16401640 struct minstrel_priv *mp;
16411641
@@ -1673,7 +1673,17 @@ minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) · 31 unmodified lines
16731673 mp->update_interval = HZ / 10;
16741674 mp->new_avg = true;
16751675
1676+ minstrel_ht_init_cck_rates(mp);
1677+
1678+ return mp;
1679+}
1680+
16761681 #ifdef CONFIG_MAC80211_DEBUGFS
1682+static void minstrel_ht_add_debugfs(struct ieee80211_hw *hw, void *priv,
1683+ struct dentry *debugfsdir)
1684+{
1685+ struct minstrel_priv *mp = priv;
1686+
16771687 mp->fixed_rate_idx = (u32) -1;
16781688 debugfs_create_u32("fixed_rate_idx", S_IRUGO | S_IWUGO, debugfsdir,
16791689 &mp->fixed_rate_idx);
@@ -1681,12 +1691,8 @@ minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) · 1 unmodified line
16811691 &mp->sample_switch);
16821692 debugfs_create_bool("new_avg", S_IRUGO | S_IWUSR, debugfsdir,
16831693 &mp->new_avg);
1684−#endif
1685−
1686− minstrel_ht_init_cck_rates(mp);
1687−
1688− return mp;
16891694 }
1695+#endif
16901696
16911697 static void
16921698 minstrel_ht_free(void *priv)
@@ -1725,6 +1731,7 @@ static const struct rate_control_ops mac80211_minstrel_ht = { · 32 unmodified lines
17251731 .alloc = minstrel_ht_alloc,
17261732 .free = minstrel_ht_free,
17271733 #ifdef CONFIG_MAC80211_DEBUGFS
1734+ .add_debugfs = minstrel_ht_add_debugfs,
17281735 .add_sta_debugfs = minstrel_ht_add_sta_debugfs,
17291736 #endif
17301737 .get_expected_throughput = minstrel_ht_get_expected_throughput,
net/mac80211/sta_info.c+2−1
@@ -231,7 +231,8 @@ struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, · 230 unmodified lines
231231 struct sta_info *sta;
232232 int i = 0;
233233
234− list_for_each_entry_rcu(sta, &local->sta_list, list) {
234+ list_for_each_entry_rcu(sta, &local->sta_list, list,
235+ lockdep_is_held(&local->sta_mtx)) {
235236 if (sdata != sta->sdata)
236237 continue;
237238 if (i < idx) {
net/mptcp/options.c+1−2
@@ -876,12 +876,11 @@ void mptcp_incoming_options(struct sock *sk, struct sk_buff *skb, · 875 unmodified lines
876876 mpext->data_seq = mp_opt->data_seq;
877877 mpext->subflow_seq = mp_opt->subflow_seq;
878878 mpext->dsn64 = mp_opt->dsn64;
879+ mpext->data_fin = mp_opt->data_fin;
879880 }
880881 mpext->data_len = mp_opt->data_len;
881882 mpext->use_map = 1;
882883 }
883−
884− mpext->data_fin = mp_opt->data_fin;
885884 }
886885
887886 void mptcp_write_options(__be32 *ptr, struct mptcp_out_options *opts)
net/mptcp/pm_netlink.c+7−5
@@ -599,12 +599,14 @@ static int mptcp_nl_fill_addr(struct sk_buff *skb, · 598 unmodified lines
599599 nla_put_s32(skb, MPTCP_PM_ADDR_ATTR_IF_IDX, entry->ifindex))
600600 goto nla_put_failure;
601601
602− if (addr->family == AF_INET)
603− nla_put_in_addr(skb, MPTCP_PM_ADDR_ATTR_ADDR4,
604− addr->addr.s_addr);
602+ if (addr->family == AF_INET &&
603+ nla_put_in_addr(skb, MPTCP_PM_ADDR_ATTR_ADDR4,
604+ addr->addr.s_addr))
605+ goto nla_put_failure;
605606 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
606− else if (addr->family == AF_INET6)
607− nla_put_in6_addr(skb, MPTCP_PM_ADDR_ATTR_ADDR6, &addr->addr6);
607+ else if (addr->family == AF_INET6 &&
608+ nla_put_in6_addr(skb, MPTCP_PM_ADDR_ATTR_ADDR6, &addr->addr6))
609+ goto nla_put_failure;
608610 #endif
609611 nla_nest_end(skb, attr);
610612 return 0;
net/mptcp/protocol.c+27−17
@@ -97,12 +97,7 @@ static struct socket *__mptcp_tcp_fallback(struct mptcp_sock *msk) · 96 unmodified lines
9797 if (likely(!__mptcp_needs_tcp_fallback(msk)))
9898 return NULL;
9999
100− if (msk->subflow) {
101− release_sock((struct sock *)msk);
102− return msk->subflow;
103− }
104−
105− return NULL;
100+ return msk->subflow;
106101 }
107102
108103 static bool __mptcp_can_create_subflow(const struct mptcp_sock *msk)
@@ -734,9 +729,10 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) · 625 unmodified lines
734729 goto out;
735730 }
736731
732+fallback:
737733 ssock = __mptcp_tcp_fallback(msk);
738734 if (unlikely(ssock)) {
739−fallback:
735+ release_sock(sk);
740736 pr_debug("fallback passthrough");
741737 ret = sock_sendmsg(ssock, msg);
742738 return ret >= 0 ? ret + copied : (copied ? copied : ret);
@@ -769,8 +765,14 @@ fallback: · 26 unmodified lines
769765 if (ret < 0)
770766 break;
771767 if (ret == 0 && unlikely(__mptcp_needs_tcp_fallback(msk))) {
768+ /* Can happen for passive sockets:
769+ * 3WHS negotiated MPTCP, but first packet after is
770+ * plain TCP (e.g. due to middlebox filtering unknown
771+ * options).
772+ *
773+ * Fall back to TCP.
774+ */
772775 release_sock(ssk);
773− ssock = __mptcp_tcp_fallback(msk);
774776 goto fallback;
775777 }
776778
@@ -883,6 +885,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, · 106 unmodified lines
883885 ssock = __mptcp_tcp_fallback(msk);
884886 if (unlikely(ssock)) {
885887 fallback:
888+ release_sock(sk);
886889 pr_debug("fallback-read subflow=%p",
887890 mptcp_subflow_ctx(ssock->sk));
888891 copied = sock_recvmsg(ssock, msg, flags);
@@ -1329,7 +1332,9 @@ static struct ipv6_pinfo *mptcp_inet6_sk(const struct sock *sk) · 440 unmodified lines
13291332 }
13301333 #endif
13311334
1332−struct sock *mptcp_sk_clone(const struct sock *sk, struct request_sock *req)
1335+struct sock *mptcp_sk_clone(const struct sock *sk,
1336+ const struct tcp_options_received *opt_rx,
1337+ struct request_sock *req)
13331338 {
13341339 struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
13351340 struct sock *nsk = sk_clone_lock(sk, GFP_ATOMIC);
@@ -1352,26 +1357,30 @@ struct sock *mptcp_sk_clone(const struct sock *sk, struct request_sock *req) · 16 unmodified lines
13521357 msk->subflow = NULL;
13531358
13541359 if (unlikely(mptcp_token_new_accept(subflow_req->token, nsk))) {
1360+ nsk->sk_state = TCP_CLOSE;
13551361 bh_unlock_sock(nsk);
13561362
13571363 /* we can't call into mptcp_close() here - possible BH context
1358− * free the sock directly
1364+ * free the sock directly.
1365+ * sk_clone_lock() sets nsk refcnt to two, hence call sk_free()
1366+ * too.
13591367 */
1360− nsk->sk_prot->destroy(nsk);
1368+ sk_common_release(nsk);
13611369 sk_free(nsk);
13621370 return NULL;
13631371 }
13641372
13651373 msk->write_seq = subflow_req->idsn + 1;
13661374 atomic64_set(&msk->snd_una, msk->write_seq);
1367− if (subflow_req->remote_key_valid) {
1375+ if (opt_rx->mptcp.mp_capable) {
13681376 msk->can_ack = true;
1369− msk->remote_key = subflow_req->remote_key;
1377+ msk->remote_key = opt_rx->mptcp.sndr_key;
13701378 mptcp_crypto_key_sha(msk->remote_key, NULL, &ack_seq);
13711379 ack_seq++;
13721380 msk->ack_seq = ack_seq;
13731381 }
13741382
1383+ sock_reset_flag(nsk, SOCK_RCU_FREE);
13751384 /* will be fully established after successful MPC subflow creation */
13761385 inet_sk_state_store(nsk, TCP_SYN_RECV);
13771386 bh_unlock_sock(nsk);
@@ -1428,6 +1437,7 @@ static struct sock *mptcp_accept(struct sock *sk, int flags, int *err, · 50 unmodified lines
14281437 newsk = new_mptcp_sock;
14291438 mptcp_copy_inaddrs(newsk, ssk);
14301439 list_add(&subflow->node, &msk->conn_list);
1440+ inet_sk_state_store(newsk, TCP_ESTABLISHED);
14311441
14321442 bh_unlock_sock(new_mptcp_sock);
14331443
@@ -1467,12 +1477,11 @@ static int mptcp_setsockopt(struct sock *sk, int level, int optname, · 33 unmodified lines
14671477 */
14681478 lock_sock(sk);
14691479 ssock = __mptcp_tcp_fallback(msk);
1480+ release_sock(sk);
14701481 if (ssock)
14711482 return tcp_setsockopt(ssock->sk, level, optname, optval,
14721483 optlen);
14731484
1474− release_sock(sk);
1475−
14761485 return -EOPNOTSUPP;
14771486 }
14781487
@@ -1492,12 +1501,11 @@ static int mptcp_getsockopt(struct sock *sk, int level, int optname, · 13 unmodified lines
14921501 */
14931502 lock_sock(sk);
14941503 ssock = __mptcp_tcp_fallback(msk);
1504+ release_sock(sk);
14951505 if (ssock)
14961506 return tcp_getsockopt(ssock->sk, level, optname, optval,
14971507 option);
14981508
1499− release_sock(sk);
1500−
15011509 return -EOPNOTSUPP;
15021510 }
15031511
@@ -1774,6 +1782,8 @@ static int mptcp_listen(struct socket *sock, int backlog) · 270 unmodified lines
17741782 goto unlock;
17751783 }
17761784
1785+ sock_set_flag(sock->sk, SOCK_RCU_FREE);
1786+
17771787 err = ssock->ops->listen(ssock, backlog);
17781788 inet_sk_state_store(sock->sk, inet_sk_state_load(ssock->sk));
17791789 if (!err)
net/mptcp/protocol.h+4−4
@@ -206,12 +206,10 @@ struct mptcp_subflow_request_sock { · 205 unmodified lines
206206 struct tcp_request_sock sk;
207207 u16 mp_capable : 1,
208208 mp_join : 1,
209− backup : 1,
210− remote_key_valid : 1;
209+ backup : 1;
211210 u8 local_id;
212211 u8 remote_id;
213212 u64 local_key;
214− u64 remote_key;
215213 u64 idsn;
216214 u32 token;
217215 u32 ssn_offset;
@@ -332,7 +330,9 @@ void mptcp_proto_init(void); · 114 unmodified lines
332330 int mptcp_proto_v6_init(void);
333331 #endif
334332
335−struct sock *mptcp_sk_clone(const struct sock *sk, struct request_sock *req);
333+struct sock *mptcp_sk_clone(const struct sock *sk,
334+ const struct tcp_options_received *opt_rx,
335+ struct request_sock *req);
336336 void mptcp_get_options(const struct sk_buff *skb,
337337 struct tcp_options_received *opt_rx);
338338
net/mptcp/subflow.c+71−28
@@ -133,7 +133,6 @@ static void subflow_init_req(struct request_sock *req, · 132 unmodified lines
133133
134134 subflow_req->mp_capable = 0;
135135 subflow_req->mp_join = 0;
136− subflow_req->remote_key_valid = 0;
137136
138137 #ifdef CONFIG_TCP_MD5SIG
139138 /* no MPTCP if MD5SIG is enabled on this socket or we may run out of
@@ -347,6 +346,46 @@ static bool subflow_hmac_valid(const struct request_sock *req, · 207 unmodified lines
347346 return ret;
348347 }
349348
349+static void mptcp_sock_destruct(struct sock *sk)
350+{
351+ /* if new mptcp socket isn't accepted, it is free'd
352+ * from the tcp listener sockets request queue, linked
353+ * from req->sk. The tcp socket is released.
354+ * This calls the ULP release function which will
355+ * also remove the mptcp socket, via
356+ * sock_put(ctx->conn).
357+ *
358+ * Problem is that the mptcp socket will not be in
359+ * SYN_RECV state and doesn't have SOCK_DEAD flag.
360+ * Both result in warnings from inet_sock_destruct.
361+ */
362+
363+ if (sk->sk_state == TCP_SYN_RECV) {
364+ sk->sk_state = TCP_CLOSE;
365+ WARN_ON_ONCE(sk->sk_socket);
366+ sock_orphan(sk);
367+ }
368+
369+ inet_sock_destruct(sk);
370+}
371+
372+static void mptcp_force_close(struct sock *sk)
373+{
374+ inet_sk_state_store(sk, TCP_CLOSE);
375+ sk_common_release(sk);
376+}
377+
378+static void subflow_ulp_fallback(struct sock *sk,
379+ struct mptcp_subflow_context *old_ctx)
380+{
381+ struct inet_connection_sock *icsk = inet_csk(sk);
382+
383+ mptcp_subflow_tcp_fallback(sk, old_ctx);
384+ icsk->icsk_ulp_ops = NULL;
385+ rcu_assign_pointer(icsk->icsk_ulp_data, NULL);
386+ tcp_sk(sk)->is_mptcp = 0;
387+}
388+
350389 static struct sock *subflow_syn_recv_sock(const struct sock *sk,
351390 struct sk_buff *skb,
352391 struct request_sock *req,
@@ -359,10 +398,12 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, · 6 unmodified lines
359398 struct tcp_options_received opt_rx;
360399 bool fallback_is_fatal = false;
361400 struct sock *new_msk = NULL;
401+ bool fallback = false;
362402 struct sock *child;
363403
364404 pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn);
365405
406+ opt_rx.mptcp.mp_capable = 0;
366407 if (tcp_rsk(req)->is_mptcp == 0)
367408 goto create_child;
368409
@@ -377,20 +418,16 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, · 8 unmodified lines
377418 goto create_msk;
378419 }
379420
380− opt_rx.mptcp.mp_capable = 0;
381421 mptcp_get_options(skb, &opt_rx);
382− if (opt_rx.mptcp.mp_capable) {
383− subflow_req->remote_key = opt_rx.mptcp.sndr_key;
384− subflow_req->remote_key_valid = 1;
385− } else {
386− subflow_req->mp_capable = 0;
422+ if (!opt_rx.mptcp.mp_capable) {
423+ fallback = true;
387424 goto create_child;
388425 }
389426
390427 create_msk:
391− new_msk = mptcp_sk_clone(listener->conn, req);
428+ new_msk = mptcp_sk_clone(listener->conn, &opt_rx, req);
392429 if (!new_msk)
393− subflow_req->mp_capable = 0;
430+ fallback = true;
394431 } else if (subflow_req->mp_join) {
395432 fallback_is_fatal = true;
396433 opt_rx.mptcp.mp_join = 0;
@@ -409,12 +446,18 @@ create_child: · 12 unmodified lines
409446 if (child && *own_req) {
410447 struct mptcp_subflow_context *ctx = mptcp_subflow_ctx(child);
411448
412− /* we have null ctx on TCP fallback, which is fatal on
413− * MPJ handshake
449+ /* we need to fallback on ctx allocation failure and on pre-reqs
450+ * checking above. In the latter scenario we additionally need
451+ * to reset the context to non MPTCP status.
414452 */
415− if (!ctx) {
453+ if (!ctx || fallback) {
416454 if (fallback_is_fatal)
417455 goto close_child;
456+
457+ if (ctx) {
458+ subflow_ulp_fallback(child, ctx);
459+ kfree_rcu(ctx, rcu);
460+ }
418461 goto out;
419462 }
420463
@@ -422,10 +465,17 @@ create_child: · 1 unmodified line
422465 /* new mpc subflow takes ownership of the newly
423466 * created mptcp socket
424467 */
425− inet_sk_state_store(new_msk, TCP_ESTABLISHED);
468+ new_msk->sk_destruct = mptcp_sock_destruct;
426469 mptcp_pm_new_connection(mptcp_sk(new_msk), 1);
427470 ctx->conn = new_msk;
428471 new_msk = NULL;
472+
473+ /* with OoO packets we can reach here without ingress
474+ * mpc option
475+ */
476+ ctx->remote_key = opt_rx.mptcp.sndr_key;
477+ ctx->fully_established = opt_rx.mptcp.mp_capable;
478+ ctx->can_ack = opt_rx.mptcp.mp_capable;
429479 } else if (ctx->mp_join) {
430480 struct mptcp_sock *owner;
431481
@@ -444,7 +494,14 @@ create_child: · 12 unmodified lines
444494 out:
445495 /* dispose of the left over mptcp master, if any */
446496 if (unlikely(new_msk))
447− sock_put(new_msk);
497+ mptcp_force_close(new_msk);
498+
499+ /* check for expected invariant - should never trigger, just help
500+ * catching eariler subtle bugs
501+ */
502+ WARN_ON_ONCE(*own_req && child && tcp_sk(child)->is_mptcp &&
503+ (!mptcp_subflow_ctx(child) ||
504+ !mptcp_subflow_ctx(child)->conn));
448505 return child;
449506
450507 close_child:
@@ -1047,17 +1104,6 @@ static void subflow_ulp_release(struct sock *sk) · 596 unmodified lines
10471104 kfree_rcu(ctx, rcu);
10481105 }
10491106
1050−static void subflow_ulp_fallback(struct sock *sk,
1051− struct mptcp_subflow_context *old_ctx)
1052−{
1053− struct inet_connection_sock *icsk = inet_csk(sk);
1054−
1055− mptcp_subflow_tcp_fallback(sk, old_ctx);
1056− icsk->icsk_ulp_ops = NULL;
1057− rcu_assign_pointer(icsk->icsk_ulp_data, NULL);
1058− tcp_sk(sk)->is_mptcp = 0;
1059−}
1060−
10611107 static void subflow_ulp_clone(const struct request_sock *req,
10621108 struct sock *newsk,
10631109 const gfp_t priority)
@@ -1091,9 +1137,6 @@ static void subflow_ulp_clone(const struct request_sock *req, · 27 unmodified lines
10911137 * is fully established only after we receive the remote key
10921138 */
10931139 new_ctx->mp_capable = 1;
1094− new_ctx->fully_established = subflow_req->remote_key_valid;
1095− new_ctx->can_ack = subflow_req->remote_key_valid;
1096− new_ctx->remote_key = subflow_req->remote_key;
10971140 new_ctx->local_key = subflow_req->local_key;
10981141 new_ctx->token = subflow_req->token;
10991142 new_ctx->ssn_offset = subflow_req->ssn_offset;
net/netfilter/ipset/ip_set_core.c+2−1
@@ -86,7 +86,8 @@ find_set_type(const char *name, u8 family, u8 revision) · 85 unmodified lines
8686 {
8787 struct ip_set_type *type;
8888
89− list_for_each_entry_rcu(type, &ip_set_type_list, list)
89+ list_for_each_entry_rcu(type, &ip_set_type_list, list,
90+ lockdep_is_held(&ip_set_type_mutex))
9091 if (STRNCMP(type->name, name) &&
9192 (type->family == family ||
9293 type->family == NFPROTO_UNSPEC) &&
net/netfilter/nf_flow_table_core.c+4−2
@@ -421,10 +421,12 @@ void nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table, · 420 unmodified lines
421421
422422 down_write(&flow_table->flow_block_lock);
423423 block_cb = flow_block_cb_lookup(block, cb, cb_priv);
424− if (block_cb)
424+ if (block_cb) {
425425 list_del(&block_cb->list);
426− else
426+ flow_block_cb_free(block_cb);
427+ } else {
427428 WARN_ON(true);
429+ }
428430 up_write(&flow_table->flow_block_lock);
429431 }
430432 EXPORT_SYMBOL_GPL(nf_flow_table_offload_del_cb);
net/netfilter/nf_nat_proto.c+2−2
@@ -1035,8 +1035,8 @@ int nf_nat_inet_register_fn(struct net *net, const struct nf_hook_ops *ops) · 1034 unmodified lines
10351035 ret = nf_nat_register_fn(net, NFPROTO_IPV4, ops, nf_nat_ipv4_ops,
10361036 ARRAY_SIZE(nf_nat_ipv4_ops));
10371037 if (ret)
1038− nf_nat_ipv6_unregister_fn(net, ops);
1039−
1038+ nf_nat_unregister_fn(net, NFPROTO_IPV6, ops,
1039+ ARRAY_SIZE(nf_nat_ipv6_ops));
10401040 return ret;
10411041 }
10421042 EXPORT_SYMBOL_GPL(nf_nat_inet_register_fn);
net/netfilter/nf_tables_api.c+4−3
@@ -3542,6 +3542,7 @@ cont: · 3541 unmodified lines
35423542 continue;
35433543 if (!strcmp(set->name, i->name)) {
35443544 kfree(set->name);
3545+ set->name = NULL;
35453546 return -ENFILE;
35463547 }
35473548 }
@@ -3961,8 +3962,8 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, · 413 unmodified lines
39613962 if (flags & ~(NFT_SET_ANONYMOUS | NFT_SET_CONSTANT |
39623963 NFT_SET_INTERVAL | NFT_SET_TIMEOUT |
39633964 NFT_SET_MAP | NFT_SET_EVAL |
3964− NFT_SET_OBJECT))
3965− return -EINVAL;
3965+ NFT_SET_OBJECT | NFT_SET_CONCAT))
3966+ return -EOPNOTSUPP;
39663967 /* Only one of these operations is supported */
39673968 if ((flags & (NFT_SET_MAP | NFT_SET_OBJECT)) ==
39683969 (NFT_SET_MAP | NFT_SET_OBJECT))
@@ -4000,7 +4001,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, · 31 unmodified lines
40004001 objtype = ntohl(nla_get_be32(nla[NFTA_SET_OBJ_TYPE]));
40014002 if (objtype == NFT_OBJECT_UNSPEC ||
40024003 objtype > NFT_OBJECT_MAX)
4003− return -EINVAL;
4004+ return -EOPNOTSUPP;
40044005 } else if (flags & NFT_SET_OBJECT)
40054006 return -EINVAL;
40064007 else
net/netfilter/nft_lookup.c+7−5
@@ -29,7 +29,7 @@ void nft_lookup_eval(const struct nft_expr *expr, · 28 unmodified lines
2929 {
3030 const struct nft_lookup *priv = nft_expr_priv(expr);
3131 const struct nft_set *set = priv->set;
32− const struct nft_set_ext *ext;
32+ const struct nft_set_ext *ext = NULL;
3333 bool found;
3434
3535 found = set->ops->lookup(nft_net(pkt), set, &regs->data[priv->sreg],
@@ -39,11 +39,13 @@ void nft_lookup_eval(const struct nft_expr *expr, · 3 unmodified lines
3939 return;
4040 }
4141
42− if (set->flags & NFT_SET_MAP)
43− nft_data_copy(&regs->data[priv->dreg],
44− nft_set_ext_data(ext), set->dlen);
42+ if (ext) {
43+ if (set->flags & NFT_SET_MAP)
44+ nft_data_copy(&regs->data[priv->dreg],
45+ nft_set_ext_data(ext), set->dlen);
4546
46− nft_set_elem_update_expr(ext, regs, pkt);
47+ nft_set_elem_update_expr(ext, regs, pkt);
48+ }
4749 }
4850
4951 static const struct nla_policy nft_lookup_policy[NFTA_LOOKUP_MAX + 1] = {
net/netfilter/nft_set_bitmap.c+0−1
@@ -81,7 +81,6 @@ static bool nft_bitmap_lookup(const struct net *net, const struct nft_set *set, · 80 unmodified lines
8181 u32 idx, off;
8282
8383 nft_bitmap_location(set, key, &idx, &off);
84− *ext = NULL;
8584
8685 return nft_bitmap_active(priv->bitmap, idx, off, genmask);
8786 }
net/netfilter/nft_set_rbtree.c+11−12
@@ -218,27 +218,26 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, · 217 unmodified lines
218218
219219 /* Detect overlaps as we descend the tree. Set the flag in these cases:
220220 *
221− * a1. |__ _ _? >|__ _ _ (insert start after existing start)
222− * a2. _ _ __>| ?_ _ __| (insert end before existing end)
223− * a3. _ _ ___| ?_ _ _>| (insert end after existing end)
224− * a4. >|__ _ _ _ _ __| (insert start before existing end)
221+ * a1. _ _ __>| ?_ _ __| (insert end before existing end)
222+ * a2. _ _ ___| ?_ _ _>| (insert end after existing end)
223+ * a3. _ _ ___? >|_ _ __| (insert start before existing end)
225224 *
226225 * and clear it later on, as we eventually reach the points indicated by
227226 * '?' above, in the cases described below. We'll always meet these
228227 * later, locally, due to tree ordering, and overlaps for the intervals
229228 * that are the closest together are always evaluated last.
230229 *
231− * b1. |__ _ _! >|__ _ _ (insert start after existing end)
232− * b2. _ _ __>| !_ _ __| (insert end before existing start)
233− * b3. !_____>| (insert end after existing start)
230+ * b1. _ _ __>| !_ _ __| (insert end before existing start)
231+ * b2. _ _ ___| !_ _ _>| (insert end after existing start)
232+ * b3. _ _ ___! >|_ _ __| (insert start after existing end)
234233 *
235− * Case a4. resolves to b1.:
234+ * Case a3. resolves to b3.:
236235 * - if the inserted start element is the leftmost, because the '0'
237236 * element in the tree serves as end element
238237 * - otherwise, if an existing end is found. Note that end elements are
239238 * always inserted after corresponding start elements.
240239 *
241− * For a new, rightmost pair of elements, we'll hit cases b1. and b3.,
240+ * For a new, rightmost pair of elements, we'll hit cases b3. and b2.,
242241 * in that order.
243242 *
244243 * The flag is also cleared in two special cases:
@@ -262,9 +261,9 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, · 17 unmodified lines
262261 p = &parent->rb_left;
263262
264263 if (nft_rbtree_interval_start(new)) {
265− overlap = nft_rbtree_interval_start(rbe) &&
266− nft_set_elem_active(&rbe->ext,
267− genmask);
264+ if (nft_rbtree_interval_end(rbe) &&
265+ nft_set_elem_active(&rbe->ext, genmask))
266+ overlap = false;
268267 } else {
269268 overlap = nft_rbtree_interval_end(rbe) &&
270269 nft_set_elem_active(&rbe->ext,
net/netfilter/xt_IDLETIMER.c+3−0
@@ -346,6 +346,9 @@ static int idletimer_tg_checkentry_v1(const struct xt_tgchk_param *par) · 345 unmodified lines
346346
347347 pr_debug("checkentry targinfo%s\n", info->label);
348348
349+ if (info->send_nl_msg)
350+ return -EOPNOTSUPP;
351+
349352 ret = idletimer_tg_helper((struct idletimer_tg_info *)info);
350353 if(ret < 0)
351354 {
net/netlabel/Kconfig+1−1
@@ -14,6 +14,6 @@ config NETLABEL · 13 unmodified lines
1414 Documentation/netlabel as well as the NetLabel SourceForge project
1515 for configuration tools and additional documentation.
1616
17− * http://netlabel.sf.net
17+ * https://github.com/netlabel/netlabel_tools
1818
1919 If you are unsure, say N.
net/netrom/nr_route.c+1−0
@@ -208,6 +208,7 @@ static int __must_check nr_add_node(ax25_address *nr, const char *mnemonic, · 207 unmodified lines
208208 /* refcount initialized at 1 */
209209 spin_unlock_bh(&nr_node_list_lock);
210210
211+ nr_neigh_put(nr_neigh);
211212 return 0;
212213 }
213214 nr_node_lock(nr_node);
net/openvswitch/conntrack.c+2−1
@@ -1895,7 +1895,8 @@ static void ovs_ct_limit_exit(struct net *net, struct ovs_net *ovs_net) · 1894 unmodified lines
18951895 struct hlist_head *head = &info->limits[i];
18961896 struct ovs_ct_limit *ct_limit;
18971897
1898− hlist_for_each_entry_rcu(ct_limit, head, hlist_node)
1898+ hlist_for_each_entry_rcu(ct_limit, head, hlist_node,
1899+ lockdep_ovsl_is_held())
18991900 kfree_rcu(ct_limit, rcu);
19001901 }
19011902 kfree(ovs_net->ct_limit_info->limits);
net/openvswitch/datapath.c+3−1
@@ -2466,8 +2466,10 @@ static void __net_exit ovs_exit_net(struct net *dnet) · 2465 unmodified lines
24662466 struct net *net;
24672467 LIST_HEAD(head);
24682468
2469− ovs_ct_exit(dnet);
24702469 ovs_lock();
2470+
2471+ ovs_ct_exit(dnet);
2472+
24712473 list_for_each_entry_safe(dp, dp_next, &ovs_net->dps, list_node)
24722474 __dp_destroy(dp);
24732475
net/qrtr/qrtr.c+4−3
@@ -906,20 +906,21 @@ static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) · 905 unmodified lines
906906
907907 node = NULL;
908908 if (addr->sq_node == QRTR_NODE_BCAST) {
909− enqueue_fn = qrtr_bcast_enqueue;
910− if (addr->sq_port != QRTR_PORT_CTRL) {
909+ if (addr->sq_port != QRTR_PORT_CTRL &&
910+ qrtr_local_nid != QRTR_NODE_BCAST) {
911911 release_sock(sk);
912912 return -ENOTCONN;
913913 }
914+ enqueue_fn = qrtr_bcast_enqueue;
914915 } else if (addr->sq_node == ipc->us.sq_node) {
915916 enqueue_fn = qrtr_local_enqueue;
916917 } else {
917− enqueue_fn = qrtr_node_enqueue;
918918 node = qrtr_node_lookup(addr->sq_node);
919919 if (!node) {
920920 release_sock(sk);
921921 return -ECONNRESET;
922922 }
923+ enqueue_fn = qrtr_node_enqueue;
923924 }
924925
925926 plen = (len + 3) & ~3;
net/rds/message.c+9−16
@@ -1,5 +1,5 @@
11 /*
2− * Copyright (c) 2006 Oracle. All rights reserved.
2+ * Copyright (c) 2006, 2020 Oracle and/or its affiliates.
33 *
44 * This software is available to you under a choice of one of two
55 * licenses. You may choose to be licensed under the terms of the GNU
@@ -162,12 +162,12 @@ static void rds_message_purge(struct rds_message *rm) · 156 unmodified lines
162162 if (rm->rdma.op_active)
163163 rds_rdma_free_op(&rm->rdma);
164164 if (rm->rdma.op_rdma_mr)
165− rds_mr_put(rm->rdma.op_rdma_mr);
165+ kref_put(&rm->rdma.op_rdma_mr->r_kref, __rds_put_mr_final);
166166
167167 if (rm->atomic.op_active)
168168 rds_atomic_free_op(&rm->atomic);
169169 if (rm->atomic.op_rdma_mr)
170− rds_mr_put(rm->atomic.op_rdma_mr);
170+ kref_put(&rm->atomic.op_rdma_mr->r_kref, __rds_put_mr_final);
171171 }
172172
173173 void rds_message_put(struct rds_message *rm)
@@ -308,26 +308,20 @@ out: · 134 unmodified lines
308308 /*
309309 * RDS ops use this to grab SG entries from the rm's sg pool.
310310 */
311−struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents,
312− int *ret)
311+struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents)
313312 {
314313 struct scatterlist *sg_first = (struct scatterlist *) &rm[1];
315314 struct scatterlist *sg_ret;
316315
317− if (WARN_ON(!ret))
318− return NULL;
319−
320316 if (nents <= 0) {
321317 pr_warn("rds: alloc sgs failed! nents <= 0\n");
322− *ret = -EINVAL;
323− return NULL;
318+ return ERR_PTR(-EINVAL);
324319 }
325320
326321 if (rm->m_used_sgs + nents > rm->m_total_sgs) {
327322 pr_warn("rds: alloc sgs failed! total %d used %d nents %d\n",
328323 rm->m_total_sgs, rm->m_used_sgs, nents);
329− *ret = -ENOMEM;
330− return NULL;
324+ return ERR_PTR(-ENOMEM);
331325 }
332326
333327 sg_ret = &sg_first[rm->m_used_sgs];
@@ -343,7 +337,6 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned in · 9 unmodified lines
343337 unsigned int i;
344338 int num_sgs = DIV_ROUND_UP(total_len, PAGE_SIZE);
345339 int extra_bytes = num_sgs * sizeof(struct scatterlist);
346− int ret;
347340
348341 rm = rds_message_alloc(extra_bytes, GFP_NOWAIT);
349342 if (!rm)
@@ -352,10 +345,10 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned in · 2 unmodified lines
352345 set_bit(RDS_MSG_PAGEVEC, &rm->m_flags);
353346 rm->m_inc.i_hdr.h_len = cpu_to_be32(total_len);
354347 rm->data.op_nents = DIV_ROUND_UP(total_len, PAGE_SIZE);
355− rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs, &ret);
356− if (!rm->data.op_sg) {
348+ rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs);
349+ if (IS_ERR(rm->data.op_sg)) {
357350 rds_message_put(rm);
358− return ERR_PTR(ret);
351+ return ERR_CAST(rm->data.op_sg);
359352 }
360353
361354 for (i = 0; i < rm->data.op_nents; ++i) {
net/rds/rdma.c+35−30
@@ -1,5 +1,5 @@
11 /*
2− * Copyright (c) 2007, 2017 Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2007, 2020 Oracle and/or its affiliates.

176 more lines aren’t shown here.

net/rds/rds.h+3−17

This diff is large: its 53 lines aren’t shown here.

net/rds/send.c+4−2

This diff is large: its 14 lines aren’t shown here.

net/rxrpc/local_object.c+0−9

This diff is large: its 16 lines aren’t shown here.

net/rxrpc/output.c+12−32

This diff is large: its 54 lines aren’t shown here.

net/sched/cls_api.c+1−0

This diff is large: its 8 lines aren’t shown here.

net/sched/sch_etf.c+4−3

This diff is large: its 29 lines aren’t shown here.

net/sctp/sm_make_chunk.c+5−1

This diff is large: its 13 lines aren’t shown here.

net/sctp/sm_statefuns.c+3−3

This diff is large: its 27 lines aren’t shown here.

net/sunrpc/cache.c+3−2

This diff is large: its 19 lines aren’t shown here.

net/sunrpc/svc_xprt.c+2−3

This diff is large: its 19 lines aren’t shown here.

net/sunrpc/svcsock.c+4−0

This diff is large: its 18 lines aren’t shown here.

net/sunrpc/xprtrdma/svc_rdma_backchannel.c+2−0

This diff is large: its 9 lines aren’t shown here.

net/sunrpc/xprtrdma/svc_rdma_recvfrom.c+22−0

This diff is large: its 36 lines aren’t shown here.

net/sunrpc/xprtrdma/svc_rdma_rw.c+1−2

This diff is large: its 17 lines aren’t shown here.

net/sunrpc/xprtrdma/svc_rdma_sendto.c+12−17

This diff is large: its 58 lines aren’t shown here.

net/sunrpc/xprtrdma/svc_rdma_transport.c+0−5

This diff is large: its 19 lines aren’t shown here.

net/sunrpc/xprtsock.c+1−0

This diff is large: its 8 lines aren’t shown here.

net/tipc/crypto.c+1−0

This diff is large: its 8 lines aren’t shown here.

net/tipc/link.c+1−1

This diff is large: its 9 lines aren’t shown here.

net/tipc/node.c+3−1

This diff is large: its 25 lines aren’t shown here.

net/tls/tls_main.c+2−2

This diff is large: its 12 lines aren’t shown here.

net/wireless/nl80211.c+2−4

This diff is large: its 13 lines aren’t shown here.

net/x25/x25_dev.c+3−1

This diff is large: its 12 lines aren’t shown here.

net/xdp/xdp_umem.c+2−3

This diff is large: its 19 lines aren’t shown here.

net/xdp/xsk.c+3−2

This diff is large: its 12 lines aren’t shown here.

samples/vfio-mdev/mdpy.c+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/Makefile.lib+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/checkpatch.pl+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/config+4−1

This diff is large: its 19 lines aren’t shown here.

scripts/documentation-file-ref-check+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/dtc/Makefile+1−1

This diff is large: its 9 lines aren’t shown here.

scripts/kernel-doc+1−1

This diff is large: its 9 lines aren’t shown here.

security/keys/proc.c+2−0

This diff is large: its 9 lines aren’t shown here.

security/selinux/ss/policydb.c+4−4

This diff is large: its 19 lines aren’t shown here.

sound/hda/Kconfig+4−3

This diff is large: its 21 lines aren’t shown here.

sound/pci/ctxfi/cthw20k1.c+7−7

This diff is large: its 63 lines aren’t shown here.

sound/pci/hda/hda_codec.c+17−11

This diff is large: its 45 lines aren’t shown here.

sound/pci/hda/hda_intel.c+51−46

This diff is large: its 255 lines aren’t shown here.

sound/pci/hda/hda_intel.h+1−0

This diff is large: its 8 lines aren’t shown here.

sound/pci/hda/patch_hdmi.c+9−0

This diff is large: its 23 lines aren’t shown here.

sound/pci/hda/patch_realtek.c+9−3

This diff is large: its 47 lines aren’t shown here.

sound/soc/amd/acp3x-rt5682-max9836.c+3−3

This diff is large: its 13 lines aren’t shown here.

sound/soc/codecs/Kconfig+3−0

This diff is large: its 24 lines aren’t shown here.

sound/soc/codecs/hdac_hdmi.c+3−3

This diff is large: its 18 lines aren’t shown here.

sound/soc/codecs/madera.c+0−4

This diff is large: its 32 lines aren’t shown here.

sound/soc/codecs/sgtl5000.c+34−0

This diff is large: its 41 lines aren’t shown here.

sound/soc/codecs/sgtl5000.h+1−0

This diff is large: its 8 lines aren’t shown here.

sound/soc/codecs/tas571x.c+15−5

This diff is large: its 45 lines aren’t shown here.

sound/soc/codecs/wm8960.c+1−2

This diff is large: its 10 lines aren’t shown here.

sound/soc/codecs/wsa881x.c+4−0

This diff is large: its 32 lines aren’t shown here.

sound/soc/intel/common/soc-acpi-intel-cml-match.c+0−8

This diff is large: its 15 lines aren’t shown here.

sound/soc/intel/common/soc-acpi-intel-icl-match.c+0−8

This diff is large: its 15 lines aren’t shown here.

sound/soc/meson/axg-card.c+3−1

This diff is large: its 12 lines aren’t shown here.

sound/soc/meson/gx-card.c+3−1

This diff is large: its 12 lines aren’t shown here.

sound/soc/qcom/apq8096.c+1−3

This diff is large: its 12 lines aren’t shown here.

sound/soc/qcom/qdsp6/q6afe-dai.c+16−0

This diff is large: its 72 lines aren’t shown here.

sound/soc/qcom/sdm845.c+1−3

This diff is large: its 12 lines aren’t shown here.

sound/soc/samsung/s3c-i2s-v2.c+0−57

This diff is large: its 71 lines aren’t shown here.

sound/soc/samsung/s3c2412-i2s.c+56−0

This diff is large: its 70 lines aren’t shown here.

sound/soc/sh/rcar/ssi.c+10−1

This diff is large: its 28 lines aren’t shown here.

sound/soc/sh/rcar/ssiu.c+1−1

This diff is large: its 9 lines aren’t shown here.

sound/soc/soc-dai.c+2−9

This diff is large: its 27 lines aren’t shown here.

sound/soc/soc-dapm.c+75−72

This diff is large: its 218 lines aren’t shown here.

sound/soc/soc-pcm.c+11−2

This diff is large: its 20 lines aren’t shown here.

sound/soc/soc-topology.c+89−26

This diff is large: its 273 lines aren’t shown here.

sound/soc/sof/intel/bdw.c+16−0

This diff is large: its 26 lines aren’t shown here.

sound/soc/sof/intel/byt.c+48−0

This diff is large: its 70 lines aren’t shown here.

sound/soc/stm/stm32_sai_sub.c+6−8

This diff is large: its 37 lines aren’t shown here.

sound/usb/format.c+51−0

This diff is large: its 65 lines aren’t shown here.

sound/usb/mixer.c+52−14

This diff is large: its 151 lines aren’t shown here.

sound/usb/mixer.h+10−0

This diff is large: its 24 lines aren’t shown here.

sound/usb/mixer_maps.c+37−4

This diff is large: its 78 lines aren’t shown here.

sound/usb/mixer_quirks.c+8−4

This diff is large: its 20 lines aren’t shown here.

sound/usb/quirks-table.h+14−84

This diff is large: its 110 lines aren’t shown here.

sound/usb/quirks.c+14−0

This diff is large: its 21 lines aren’t shown here.

sound/usb/usx2y/usbusx2yaudio.c+2−0

This diff is large: its 9 lines aren’t shown here.

tools/arch/x86/include/asm/cpufeatures.h+4−1

This diff is large: its 33 lines aren’t shown here.

tools/arch/x86/include/asm/msr-index.h+9−0

This diff is large: its 23 lines aren’t shown here.

tools/bpf/bpftool/struct_ops.c+10−2

This diff is large: its 32 lines aren’t shown here.

tools/bpf/runqslower/Makefile+1−1

This diff is large: its 9 lines aren’t shown here.

tools/build/feature/test-sync-compare-and-swap.c+1−1

This diff is large: its 9 lines aren’t shown here.

tools/include/linux/bits.h+21−3

This diff is large: its 44 lines aren’t shown here.

tools/include/linux/build_bug.h+82−0

This diff is large: its 83 lines aren’t shown here.

tools/include/linux/compiler.h+26−0

This diff is large: its 33 lines aren’t shown here.

tools/include/linux/const.h+1−4

This diff is large: its 11 lines aren’t shown here.

tools/include/linux/kernel.h+1−3

This diff is large: its 18 lines aren’t shown here.

tools/include/uapi/drm/drm.h+2−0

This diff is large: its 9 lines aren’t shown here.

tools/include/uapi/drm/i915_drm.h+21−0

This diff is large: its 28 lines aren’t shown here.

tools/include/uapi/linux/bpf.h+1−1

This diff is large: its 9 lines aren’t shown here.

tools/include/uapi/linux/fscrypt.h+1−0

This diff is large: its 8 lines aren’t shown here.

tools/include/uapi/linux/kvm.h+45−2

This diff is large: its 77 lines aren’t shown here.

tools/include/uapi/linux/mman.h+3−2

This diff is large: its 12 lines aren’t shown here.

tools/include/uapi/linux/sched.h+5−0

This diff is large: its 31 lines aren’t shown here.

tools/include/uapi/linux/vhost.h+24−0

This diff is large: its 29 lines aren’t shown here.

tools/include/vdso/bits.h+9−0

This diff is large: its 10 lines aren’t shown here.

tools/include/vdso/const.h+10−0

This diff is large: its 11 lines aren’t shown here.

tools/lib/bpf/libbpf.c+82−44

This diff is large: its 239 lines aren’t shown here.

tools/lib/bpf/libbpf.h+1−1

This diff is large: its 9 lines aren’t shown here.

tools/lib/bpf/netlink.c+5−3

This diff is large: its 29 lines aren’t shown here.

tools/objtool/check.c+18−8

This diff is large: its 53 lines aren’t shown here.

tools/objtool/elf.c+1−1

This diff is large: its 9 lines aren’t shown here.

tools/objtool/elf.h+1−1

This diff is large: its 9 lines aren’t shown here.

tools/objtool/orc_dump.c+27−17

This diff is large: its 72 lines aren’t shown here.

tools/objtool/orc_gen.c+26−7

This diff is large: its 47 lines aren’t shown here.

tools/perf/arch/x86/entry/syscalls/syscall_64.tbl+370−370

This diff is large: its 768 lines aren’t shown here.

tools/perf/check-headers.sh+3−0

This diff is large: its 18 lines aren’t shown here.

tools/perf/trace/beauty/clone.c+1−0

This diff is large: its 8 lines aren’t shown here.

tools/perf/trace/beauty/mmap.c+1−0

This diff is large: its 8 lines aren’t shown here.

tools/perf/util/setup.py+2−0

This diff is large: its 9 lines aren’t shown here.

tools/perf/util/stat-shadow.c+5−2

This diff is large: its 14 lines aren’t shown here.

tools/power/pm-graph/Makefile+4−0

This diff is large: its 11 lines aren’t shown here.

tools/power/pm-graph/README+114−10

This diff is large: its 163 lines aren’t shown here.

tools/power/pm-graph/bootgraph.py+1−1

This diff is large: its 6 lines aren’t shown here.

tools/power/pm-graph/sleepgraph.8+49−16

This diff is large: its 112 lines aren’t shown here.

tools/power/pm-graph/sleepgraph.py+451−344

This diff is large: its 1557 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c+24−6

This diff is large: its 84 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/mmap.c+60−2

This diff is large: its 104 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/section_names.c+27−15

This diff is large: its 105 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/test_lsm.c+9−9

This diff is large: its 39 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/xdp_attach.c+29−1

This diff is large: its 70 lines aren’t shown here.

tools/testing/selftests/bpf/prog_tests/xdp_info.c+68−0

This diff is large: its 69 lines aren’t shown here.

tools/testing/selftests/bpf/progs/connect4_prog.c+16−12

This diff is large: its 46 lines aren’t shown here.

tools/testing/selftests/bpf/progs/freplace_connect4.c+18−0

This diff is large: its 19 lines aren’t shown here.

tools/testing/selftests/bpf/progs/lsm.c+4−4

This diff is large: its 17 lines aren’t shown here.

tools/testing/selftests/bpf/progs/test_btf_haskv.c+5−13

This diff is large: its 42 lines aren’t shown here.

tools/testing/selftests/bpf/progs/test_btf_newkv.c+5−13

This diff is large: its 42 lines aren’t shown here.

tools/testing/selftests/bpf/progs/test_btf_nokv.c+5−13

This diff is large: its 42 lines aren’t shown here.

tools/testing/selftests/bpf/test_btf.c+1−1

This diff is large: its 9 lines aren’t shown here.

tools/testing/selftests/bpf/verifier/bounds.c+2−2

This diff is large: its 18 lines aren’t shown here.

tools/testing/selftests/bpf/verifier/stack_ptr.c+40−0

This diff is large: its 44 lines aren’t shown here.

tools/testing/selftests/bpf/verifier/value_illegal_alu.c+1−0

This diff is large: its 8 lines aren’t shown here.

tools/testing/selftests/ftrace/config+1−0

This diff is large: its 7 lines aren’t shown here.

tools/testing/selftests/ipc/msgque.c+1−1

This diff is large: its 9 lines aren’t shown here.

tools/testing/selftests/kselftest/runner.sh+1−1

This diff is large: its 9 lines aren’t shown here.

tools/testing/selftests/kselftest_harness.h+3−3

This diff is large: its 27 lines aren’t shown here.

tools/testing/selftests/memfd/Makefile+2−1

This diff is large: its 11 lines aren’t shown here.

tools/testing/selftests/net/fib_nexthops.sh+23−0

This diff is large: its 30 lines aren’t shown here.

tools/testing/selftests/net/fib_tests.sh+8−2

This diff is large: its 25 lines aren’t shown here.

tools/testing/selftests/seccomp/seccomp_bpf.c+8−6

This diff is large: its 29 lines aren’t shown here.

tools/testing/selftests/tc-testing/tdc.py+2−3

This diff is large: its 12 lines aren’t shown here.

tools/testing/selftests/tpm2/test_smoke.sh+2−11

This diff is large: its 20 lines aren’t shown here.

tools/testing/selftests/tpm2/test_space.sh+1−8

This diff is large: its 13 lines aren’t shown here.

tools/testing/selftests/vm/Makefile+2−2

This diff is large: its 18 lines aren’t shown here.

tools/testing/selftests/vm/run_vmtests+1−1

This diff is large: its 9 lines aren’t shown here.

tools/virtio/Makefile+3−2

This diff is large: its 19 lines aren’t shown here.

tools/virtio/asm/barrier.h+1−0

This diff is large: its 6 lines aren’t shown here.

tools/virtio/generated/autoconf.h+0−0

Empty file added.

tools/virtio/linux/compiler.h+1−0

This diff is large: its 6 lines aren’t shown here.

tools/vm/Makefile+2−0

This diff is large: its 9 lines aren’t shown here.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t