History

Merge v5.6 into drm-next

msm needed rc6, so I just went and merged release (msm has been in drm-next outside of this tree)

Dave Airlie committed 6 years ago

Commit 5fc0df92 parents 700d6ab 7111951666 files · +6433 −2881Browse files

Unified · Split

666 files
  1. .clang-format +21 −4
  2. .mailmap +1 −0
  3. Documentation/arm64/silicon-errata.rst +2 −0
  4. Documentation/devicetree/bindings/crypto/allwinner,sun4i-a10-crypto.yaml +2 −0
  5. Documentation/devicetree/bindings/input/cypress,tm2-touchkey.txt +1 −0
  6. Documentation/devicetree/bindings/net/fsl-fman.txt +7 −0
  7. Documentation/devicetree/bindings/vendor-prefixes.yaml +2 −0
  8. Documentation/driver-api/dmaengine/provider.rst +10 −2
  9. Documentation/filesystems/porting.rst +8 −0
  10. Documentation/filesystems/zonefs.txt +13 −5
  11. Documentation/kbuild/kbuild.rst +1 −1
  12. Documentation/kbuild/kconfig-macro-language.rst +1 −1
  13. Documentation/kbuild/makefiles.rst +3 −3
  14. Documentation/kbuild/modules.rst +2 −2
  15. Documentation/networking/devlink/devlink-region.rst +0 −3
  16. Documentation/networking/net_failover.rst +3 −3
  17. Documentation/networking/rds.txt +1 −1
  18. Documentation/virt/kvm/amd-memory-encryption.rst +25 −0
  19. MAINTAINERS +13 −11
  20. Makefile +2 −2
  21. arch/arc/Kconfig +2 −2
  22. arch/arc/configs/nps_defconfig +0 −2
  23. arch/arc/configs/nsimosci_defconfig +0 −2
  24. arch/arc/configs/nsimosci_hs_defconfig +0 −2
  25. arch/arc/configs/nsimosci_hs_smp_defconfig +0 −2
  26. arch/arc/include/asm/fpu.h +2 −0
  27. arch/arc/include/asm/linkage.h +2 −0
  28. arch/arc/kernel/setup.c +1 −1
  29. arch/arc/kernel/troubleshoot.c +12 −15
  30. arch/arm/Makefile +3 −1
  31. arch/arm/boot/compressed/Makefile +2 −2
  32. arch/arm/boot/dts/bcm2835-rpi-zero-w.dts +1 −0
  33. arch/arm/boot/dts/bcm2835-rpi.dtsi +1 −0
  34. arch/arm/boot/dts/dm8148-evm.dts +2 −2
  35. arch/arm/boot/dts/dm8148-t410.dts +2 −2
  36. arch/arm/boot/dts/dra62x-j5eco-evm.dts +2 −2
  37. arch/arm/boot/dts/dra7.dtsi +1 −0
  38. arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi +2 −2
  39. arch/arm/boot/dts/exynos4412-n710x.dts +1 −1
  40. arch/arm/boot/dts/imx6qdl-phytec-phycore-som.dtsi +2 −2
  41. arch/arm/boot/dts/motorola-mapphone-common.dtsi +1 −1
  42. arch/arm/boot/dts/omap3-n900.dts +28 −16
  43. arch/arm/boot/dts/omap5.dtsi +1 −0
  44. arch/arm/boot/dts/ox810se.dtsi +2 −2
  45. arch/arm/boot/dts/ox820.dtsi +2 −2
  46. arch/arm/boot/dts/sun8i-a33.dtsi +1 −1
  47. arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts +4 −3
  48. arch/arm/boot/dts/sun8i-a83t.dtsi +3 −3
  49. arch/arm/boot/dts/sun8i-r40.dtsi +62 −63
  50. arch/arm/kernel/vdso.c +2 −0
  51. arch/arm/lib/copy_from_user.S +1 −1
  52. arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +1 −1
  53. arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi +2 −0
  54. arch/arm64/boot/dts/freescale/fsl-ls1043a-rdb.dts +2 −2
  55. arch/arm64/boot/dts/freescale/fsl-ls1046a-rdb.dts +2 −2
  56. arch/arm64/boot/dts/sprd/sc9863a.dtsi +1 −1
  57. arch/arm64/crypto/chacha-neon-glue.c +4 −4
  58. arch/arm64/include/asm/alternative.h +1 −1
  59. arch/arm64/include/asm/mmu.h +1 −3
  60. arch/arm64/include/asm/pgtable-prot.h +4 −2
  61. arch/arm64/include/asm/unistd.h +1 −1
  62. arch/arm64/kernel/smp.c +20 −5
  63. arch/mips/boot/dts/ingenic/ci20.dts +28 −16
  64. arch/mips/kernel/setup.c +2 −1
  65. arch/parisc/Kconfig +5 −0
  66. arch/parisc/Makefile +7 −0
  67. arch/powerpc/kvm/book3s_pr.c +1 −0
  68. arch/powerpc/kvm/powerpc.c +0 −2
  69. arch/powerpc/mm/kasan/kasan_init_32.c +2 −7
  70. arch/riscv/Kconfig +0 −1
  71. arch/riscv/Kconfig.socs +0 −14
  72. arch/riscv/configs/defconfig +15 −1
  73. arch/riscv/configs/rv32_defconfig +15 −1
  74. arch/riscv/include/asm/clint.h +4 −4
  75. arch/riscv/include/asm/pgtable.h +41 −37
  76. arch/riscv/include/asm/uaccess.h +18 −18
  77. arch/riscv/kernel/smp.c +1 −1
  78. arch/riscv/lib/Makefile +1 −1
  79. arch/s390/kvm/kvm-s390.c +17 −1
  80. arch/x86/Makefile +3 −2
  81. arch/x86/crypto/Makefile +6 −1
  82. arch/x86/events/amd/uncore.c +7 −10
  83. arch/x86/include/asm/kvm_emulate.h +0 −1
  84. arch/x86/kernel/apic/vector.c +8 −6
  85. arch/x86/kernel/cpu/mce/intel.c +5 −4
  86. arch/x86/kernel/cpu/mce/therm_throt.c +7 −2
  87. arch/x86/kvm/Kconfig +1 −1
  88. arch/x86/kvm/emulate.c +1 −0
  89. arch/x86/kvm/ioapic.c +5 −2
  90. arch/x86/kvm/lapic.c +7 −1
  91. arch/x86/kvm/svm.c +19 −9
  92. arch/x86/kvm/vmx/nested.c +3 −2
  93. arch/x86/kvm/vmx/vmx.c +15 −3
  94. arch/x86/kvm/x86.c +9 −5
  95. arch/x86/mm/fault.c +24 −2
  96. arch/x86/mm/ioremap.c +21 −0
  97. arch/x86/net/bpf_jit_comp32.c +6 −4
  98. block/blk-iocost.c +1 −1
  99. block/blk-mq-sched.c +22 −0
  100. block/genhd.c +36 −0
  101. drivers/acpi/apei/ghes.c +1 −1
  102. drivers/android/binderfs.c +1 −0
  103. drivers/atm/nicstar.c +1 −1
  104. drivers/auxdisplay/Kconfig +8 −8
  105. drivers/auxdisplay/charlcd.c +1 −1
  106. drivers/auxdisplay/img-ascii-lcd.c +1 −3
  107. drivers/base/memory.c +3 −20
  108. drivers/base/platform.c +6 −19
  109. drivers/block/virtio_blk.c +12 −5
  110. drivers/bus/sunxi-rsb.c +1 −1
  111. drivers/bus/ti-sysc.c +2 −1
  112. drivers/char/ipmi/ipmi_si_platform.c +2 −2
  113. drivers/clk/clk.c +2 −2
  114. drivers/clk/imx/clk-imx8mp.c +2 −2
  115. drivers/clk/imx/clk-scu.c +4 −4
  116. drivers/clk/qcom/dispcc-sc7180.c +0 −19
  117. drivers/clk/qcom/videocc-sc7180.c +1 −1
  118. drivers/clk/ti/clk-43xx.c +1 −1
  119. drivers/clocksource/hyperv_timer.c +4 −2
  120. drivers/dma/dmaengine.c +1 −1
  121. drivers/dma/idxd/cdev.c +2 −2
  122. drivers/dma/ti/k3-udma-glue.c +19 −10
  123. drivers/firmware/efi/efivars.c +23 −9
  124. drivers/gpio/gpiolib-acpi.c +114 −26
  125. drivers/gpio/gpiolib.c +8 −1
  126. drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 −1
  127. drivers/gpu/drm/arm/display/komeda/komeda_drv.c +2 −2
  128. drivers/gpu/drm/bochs/bochs_hw.c +2 −4
  129. drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +26 −20
  130. drivers/gpu/drm/drm_dp_mst_topology.c +126 −58
  131. drivers/gpu/drm/drm_lease.c +2 −1
  132. drivers/gpu/drm/drm_prime.c +1 −1
  133. drivers/gpu/drm/exynos/exynos5433_drm_decon.c +3 −2
  134. drivers/gpu/drm/exynos/exynos7_drm_decon.c +3 −2
  135. drivers/gpu/drm/exynos/exynos_drm_dma.c +19 −9
  136. drivers/gpu/drm/exynos/exynos_drm_drv.h +4 −2
  137. drivers/gpu/drm/exynos/exynos_drm_fimc.c +3 −2
  138. drivers/gpu/drm/exynos/exynos_drm_fimd.c +3 −2
  139. drivers/gpu/drm/exynos/exynos_drm_g2d.c +3 −2
  140. drivers/gpu/drm/exynos/exynos_drm_gsc.c +3 −2
  141. drivers/gpu/drm/exynos/exynos_drm_rotator.c +3 −2
  142. drivers/gpu/drm/exynos/exynos_drm_scaler.c +4 −2
  143. drivers/gpu/drm/exynos/exynos_mixer.c +5 −2
  144. drivers/gpu/drm/i915/gvt/opregion.c +2 −3
  145. drivers/gpu/drm/i915/gvt/vgpu.c +9 −3
  146. drivers/gpu/drm/radeon/radeon_ttm.c +1 −1
  147. drivers/hid/hid-google-hammer.c +2 −0
  148. drivers/hid/hid-ids.h +2 −0
  149. drivers/hid/hid-picolcd_fb.c +2 −2
  150. drivers/hid/hid-quirks.c +1 −0
  151. drivers/hid/hid-sensor-custom.c +3 −3
  152. drivers/hwtracing/intel_th/msu.c +7 −6
  153. drivers/hwtracing/intel_th/pci.c +5 −0
  154. drivers/hwtracing/stm/p_sys-t.c +3 −3
  155. drivers/i2c/busses/i2c-designware-pcidrv.c +1 −0
  156. drivers/i2c/busses/i2c-gpio.c +1 −1
  157. drivers/i2c/busses/i2c-hix5hd2.c +1 −0
  158. drivers/i2c/busses/i2c-i801.c +12 −33
  159. drivers/i2c/busses/i2c-nvidia-gpu.c +8 −12
  160. drivers/i2c/busses/i2c-pca-platform.c +1 −1
  161. drivers/i2c/busses/i2c-st.c +1 −0
  162. drivers/i2c/i2c-core-acpi.c +9 −1
  163. drivers/iio/accel/adxl372.c +1 −0
  164. drivers/iio/accel/st_accel_i2c.c +1 −1
  165. drivers/iio/adc/at91-sama5d2_adc.c +15 −0
  166. drivers/iio/adc/stm32-dfsdm-adc.c +10 −33
  167. drivers/iio/chemical/Kconfig +2 −0
  168. drivers/iio/light/vcnl4000.c +8 −7
  169. drivers/iio/magnetometer/ak8974.c +1 −1
  170. drivers/iio/proximity/ping.c +1 −1
  171. drivers/iio/trigger/stm32-timer-trigger.c +9 −2
  172. drivers/infiniband/core/device.c +3 −1
  173. drivers/infiniband/core/nldev.c +5 −1
  174. drivers/infiniband/core/security.c +3 −8
  175. drivers/infiniband/core/umem_odp.c +1 −1
  176. drivers/infiniband/core/user_mad.c +22 −11
  177. drivers/infiniband/hw/hfi1/user_sdma.c +22 −3
  178. drivers/infiniband/hw/mlx5/cq.c +25 −2
  179. drivers/infiniband/hw/mlx5/main.c +3 −2
  180. drivers/infiniband/hw/mlx5/mlx5_ib.h +1 −0
  181. drivers/infiniband/hw/mlx5/qp.c +5 −0
  182. drivers/infiniband/sw/rdmavt/cq.c +1 −1
  183. drivers/input/input.c +1 −0
  184. drivers/input/keyboard/tm2-touchkey.c +11 −0
  185. drivers/input/mouse/synaptics.c +1 −0
  186. drivers/input/rmi4/rmi_f11.c +2 −2
  187. drivers/input/touchscreen/raydium_i2c_ts.c +4 −4
  188. drivers/iommu/amd_iommu.c +2 −2
  189. drivers/iommu/dma-iommu.c +8 −8
  190. drivers/iommu/dmar.c +17 −7
  191. drivers/iommu/intel-iommu-debugfs.c +35 −16
  192. drivers/iommu/intel-iommu.c +19 −9
  193. drivers/iommu/io-pgtable-arm.c +2 −2
  194. drivers/irqchip/irq-gic-v3.c +29 −1
  195. drivers/macintosh/windfarm_ad7417_sensor.c +7 −0
  196. drivers/macintosh/windfarm_fcu_controls.c +7 −0
  197. drivers/macintosh/windfarm_lm75_sensor.c +15 −1
  198. drivers/macintosh/windfarm_lm87_sensor.c +7 −0
  199. drivers/macintosh/windfarm_max6690_sensor.c +7 −0
  200. drivers/macintosh/windfarm_smu_sat.c +7 −0
  201. drivers/misc/cardreader/rts5227.c +1 −1
  202. drivers/misc/cardreader/rts5249.c +2 −0
  203. drivers/misc/cardreader/rts5260.c +1 −1
  204. drivers/misc/cardreader/rts5261.c +1 −1
  205. drivers/misc/eeprom/at24.c +2 −1
  206. drivers/mmc/core/core.c +4 −1
  207. drivers/mmc/core/mmc.c +5 −2
  208. drivers/mmc/core/mmc_ops.c +4 −2
  209. drivers/mmc/host/rtsx_pci_sdmmc.c +8 −5
  210. drivers/mmc/host/sdhci-acpi.c +82 −2
  211. drivers/mmc/host/sdhci-cadence.c +16 −2
  212. drivers/mmc/host/sdhci-msm.c +1 −1
  213. drivers/mmc/host/sdhci-of-at91.c +6 −2
  214. drivers/mmc/host/sdhci-omap.c +3 −0
  215. drivers/mmc/host/sdhci-pci-gli.c +17 −0
  216. drivers/mmc/host/sdhci-tegra.c +3 −0
  217. drivers/net/Kconfig +1 −0
  218. drivers/net/bonding/bond_alb.c +10 −10
  219. drivers/net/caif/caif_spi.c +36 −36
  220. drivers/net/can/dev.c +1 −0
  221. drivers/net/can/slcan.c +3 −0
  222. drivers/net/dsa/mt7530.c +2 −2
  223. drivers/net/dsa/mv88e6xxx/chip.c +2 −0
  224. drivers/net/dsa/mv88e6xxx/global2.c +7 −1
  225. drivers/net/dsa/sja1105/sja1105_main.c +2 −1
  226. drivers/net/ethernet/amazon/ena/ena_netdev.c +60 −18
  227. drivers/net/ethernet/broadcom/bcmsysport.c +1 −1
  228. drivers/net/ethernet/broadcom/bnxt/bnxt.c +22 −10
  229. drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 −1
  230. drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c +10 −5
  231. drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +15 −17
  232. drivers/net/ethernet/broadcom/genet/bcmgenet.c +42 −100
  233. drivers/net/ethernet/broadcom/genet/bcmgenet.h +1 −2
  234. drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +5 −1
  235. drivers/net/ethernet/broadcom/genet/bcmmii.c +6 −34
  236. drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c +2 −2
  237. drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +27 −22
  238. drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c +3 −0
  239. drivers/net/ethernet/chelsio/cxgb4/sge.c +10 −42
  240. drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +108 −6
  241. drivers/net/ethernet/freescale/fec_main.c +3 −3
  242. drivers/net/ethernet/freescale/fman/Kconfig +28 −0
  243. drivers/net/ethernet/freescale/fman/fman.c +18 −0
  244. drivers/net/ethernet/freescale/fman/fman.h +5 −0
  245. drivers/net/ethernet/freescale/fman/fman_memac.c +1 −1
  246. drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +1 −0
  247. drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +1 −1
  248. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +42 −5
  249. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c +1 −0
  250. drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +3 −0
  251. drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c +4 −1
  252. drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c +2 −49
  253. drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c +19 −7
  254. drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c +3 −2
  255. drivers/net/ethernet/huawei/hinic/hinic_rx.c +3 −0
  256. drivers/net/ethernet/huawei/hinic/hinic_tx.c +3 −1
  257. drivers/net/ethernet/ibm/ibmvnic.c +22 −2
  258. drivers/net/ethernet/ibm/ibmvnic.h +5 −1
  259. drivers/net/ethernet/marvell/mvmdio.c +1 −1
  260. drivers/net/ethernet/marvell/mvneta.c +1 −2
  261. drivers/net/ethernet/mellanox/mlx4/mcg.c +31 −31
  262. drivers/net/ethernet/mellanox/mlx5/core/en.h +2 −0
  263. drivers/net/ethernet/mellanox/mlx5/core/en/health.h +1 −2
  264. drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c +1 −1
  265. drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +4 −2
  266. drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h +2 −2
  267. drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c +1 −1
  268. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +24 −7
  269. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +5 −6
  270. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +3 −2
  271. drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c +1 −0
  272. drivers/net/ethernet/mellanox/mlx5/core/lag.c +3 −1
  273. drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c +0 −1
  274. drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c +2 −1
  275. drivers/net/ethernet/mellanox/mlx5/core/vport.c +3 −0
  276. drivers/net/ethernet/mellanox/mlxsw/pci.c +39 −11
  277. drivers/net/ethernet/mellanox/mlxsw/reg.h +1 −1
  278. drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c +4 −4
  279. drivers/net/ethernet/micrel/ks8851_mll.c +52 −4
  280. drivers/net/ethernet/mscc/ocelot.c +17 −11
  281. drivers/net/ethernet/neterion/vxge/vxge-config.h +1 −1
  282. drivers/net/ethernet/neterion/vxge/vxge-main.h +7 −7
  283. drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c +4 −4
  284. drivers/net/ethernet/pensando/ionic/ionic_if.h +1 −1
  285. drivers/net/ethernet/pensando/ionic/ionic_lif.c +11 −11
  286. drivers/net/ethernet/pensando/ionic/ionic_regs.h +1 −1
  287. drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +1 −1
  288. drivers/net/ethernet/realtek/r8169_main.c +8 −10
  289. drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +1 −1
  290. drivers/net/ethernet/sfc/ef10.c +17 −15
  291. drivers/net/ethernet/sfc/efx.h +1 −0
  292. drivers/net/ethernet/sfc/efx_channels.c +1 −0
  293. drivers/net/ethernet/sfc/mcdi.c +18 −14
  294. drivers/net/ethernet/sfc/net_driver.h +0 −3
  295. drivers/net/ethernet/sfc/tx.c +38 −0
  296. drivers/net/ethernet/sfc/tx_common.c +16 −13
  297. drivers/net/ethernet/sfc/tx_common.h +6 −0
  298. drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +1 −1
  299. drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +2 −1
  300. drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +10 −4
  301. drivers/net/geneve.c +6 −2
  302. drivers/net/ifb.c +3 −3
  303. drivers/net/ipvlan/ipvlan_core.c +11 −8
  304. drivers/net/ipvlan/ipvlan_main.c +1 −4
  305. drivers/net/macsec.c +23 −5
  306. drivers/net/macvlan.c +2 −0
  307. drivers/net/netdevsim/ipsec.c +15 −15
  308. drivers/net/phy/bcm63xx.c +1 −0
  309. drivers/net/phy/dp83867.c +20 −1
  310. drivers/net/phy/mdio-bcm-unimac.c +2 −4
  311. drivers/net/phy/mdio-mux-bcm-iproc.c +6 −1
  312. drivers/net/phy/phy.c +2 −1
  313. drivers/net/phy/phy_device.c +5 −1
  314. drivers/net/phy/phylink.c +7 −1
  315. drivers/net/phy/sfp-bus.c +18 −14
  316. drivers/net/slip/slhc.c +10 −4
  317. drivers/net/team/team.c +2 −0
  318. drivers/net/usb/qmi_wwan.c +1 −0
  319. drivers/net/usb/r8152.c +8 −0
  320. drivers/net/veth.c +1 −1
  321. drivers/net/vxlan.c +9 −2
  322. drivers/net/wireguard/device.c +1 −1
  323. drivers/net/wireguard/netlink.c +2 −6
  324. drivers/net/wireguard/noise.c +29 −26
  325. drivers/net/wireguard/noise.h +6 −6
  326. drivers/net/wireguard/peer.c +2 −5
  327. drivers/net/wireguard/queueing.h +8 −2
  328. drivers/net/wireguard/receive.c +3 −4
  329. drivers/net/wireless/intel/iwlwifi/cfg/22000.c +2 −0
  330. drivers/net/wireless/intel/iwlwifi/fw/acpi.c +8 −6
  331. drivers/net/wireless/intel/iwlwifi/fw/acpi.h +8 −6
  332. drivers/net/wireless/intel/iwlwifi/fw/dbg.c +8 −17
  333. drivers/net/wireless/intel/iwlwifi/fw/dbg.h +3 −3
  334. drivers/net/wireless/intel/iwlwifi/iwl-drv.c +1 −1
  335. drivers/net/wireless/intel/iwlwifi/mvm/fw.c +8 −1
  336. drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +2 −1
  337. drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c +26 −9
  338. drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +4 −0
  339. drivers/net/wireless/intel/iwlwifi/pcie/drv.c +3 −0
  340. drivers/net/wireless/mediatek/mt76/dma.c +6 −3
  341. drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h +1 −0
  342. drivers/net/wireless/ti/wlcore/main.c +1 −1
  343. drivers/nfc/fdp/fdp.c +2 −3
  344. drivers/nvme/host/rdma.c +5 −3
  345. drivers/nvme/target/tcp.c +9 −3
  346. drivers/of/of_mdio.c +1 −0
  347. drivers/pinctrl/cirrus/pinctrl-madera-core.c +13 −0
  348. drivers/pinctrl/core.c +0 −1
  349. drivers/pinctrl/freescale/pinctrl-scu.c +2 −2
  350. drivers/pinctrl/meson/pinctrl-meson-gxl.c +2 −2
  351. drivers/pinctrl/pinctrl-falcon.c +1 −1
  352. drivers/pinctrl/qcom/pinctrl-msm.c +1 −2
  353. drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c +1 −1
  354. drivers/rtc/Kconfig +1 −0
  355. drivers/s390/block/dasd.c +24 −3
  356. drivers/s390/block/dasd_eckd.c +156 −7
  357. drivers/s390/block/dasd_int.h +13 −2
  358. drivers/s390/net/qeth_core.h +2 −2
  359. drivers/s390/net/qeth_core_main.c +118 −58
  360. drivers/s390/net/qeth_core_sys.c +4 −5
  361. drivers/s390/net/qeth_l2_main.c +1 −0
  362. drivers/s390/net/qeth_l3_main.c +1 −0
  363. drivers/s390/net/qeth_l3_sys.c +4 −5
  364. drivers/scsi/ipr.c +2 −1
  365. drivers/scsi/ipr.h +1 −0
  366. drivers/scsi/qla2xxx/qla_os.c +2 −2
  367. drivers/scsi/sd.c +3 −1
  368. drivers/scsi/ufs/ufshcd.c +14 −7
  369. drivers/slimbus/qcom-ngd-ctrl.c +3 −0
  370. drivers/soc/fsl/dpio/dpio-driver.c +4 −4
  371. drivers/soc/samsung/exynos-chipid.c +1 −1
  372. drivers/staging/greybus/tools/loopback_test.c +11 −10
  373. drivers/staging/rtl8188eu/os_dep/usb_intf.c +1 −0
  374. drivers/staging/speakup/main.c +1 −1
  375. drivers/staging/wfx/hif_tx.c +8 −7
  376. drivers/staging/wfx/hif_tx.h +1 −1
  377. drivers/staging/wfx/hif_tx_mib.h +10 −5
  378. drivers/staging/wfx/sta.c +15 −10
  379. drivers/tee/amdtee/core.c +3 −0
  380. drivers/thunderbolt/switch.c +1 −1
  381. drivers/tty/tty_io.c +6 −8
  382. drivers/usb/chipidea/udc.c +4 −3
  383. drivers/usb/class/cdc-acm.c +21 −13
  384. drivers/usb/core/quirks.c +6 −0
  385. drivers/usb/host/xhci-pci.c +2 −1
  386. drivers/usb/host/xhci-plat.c +1 −0
  387. drivers/usb/host/xhci-trace.h +6 −17
  388. drivers/usb/serial/option.c +2 −0
  389. drivers/usb/serial/pl2303.c +1 −0
  390. drivers/usb/serial/pl2303.h +1 −0
  391. drivers/usb/typec/ucsi/displayport.c +11 −1
  392. drivers/virtio/virtio_balloon.c +1 −1
  393. drivers/virtio/virtio_ring.c +2 −2
  394. drivers/watchdog/iTCO_vendor.h +2 −0
  395. drivers/watchdog/iTCO_vendor_support.c +9 −7
  396. drivers/watchdog/iTCO_wdt.c +16 −12
  397. fs/afs/addr_list.c +1 −1
  398. fs/afs/cmservice.c +12 −2
  399. fs/afs/fs_probe.c +2 −0
  400. fs/afs/internal.h +11 −3
  401. fs/afs/rxrpc.c +10 −64
  402. fs/btrfs/block-group.c +2 −2
  403. fs/btrfs/inode.c +4 −0
  404. fs/ceph/file.c +11 −3
  405. fs/ceph/snap.c +1 −0
  406. fs/cifs/dir.c +0 −1
  407. fs/cifs/file.c +2 −1
  408. fs/cifs/inode.c +1 −1
  409. fs/cifs/smb2ops.c +3 −1
  410. fs/crypto/keysetup.c +9 −0
  411. fs/eventpoll.c +4 −4
  412. fs/file.c +6 −1
  413. fs/fuse/dev.c +3 −3
  414. fs/fuse/fuse_i.h +2 −0
  415. fs/gfs2/inode.c +1 −1
  416. fs/inode.c +1 −0
  417. fs/io_uring.c +29 −18
  418. fs/locks.c +48 −6
  419. fs/nfs/client.c +1 −0
  420. fs/nfs/fs_context.c +9 −0
  421. fs/nfs/fscache.c +2 −0
  422. fs/nfs/namespace.c +1 −1
  423. fs/nfs/nfs4client.c +0 −1
  424. fs/open.c +0 −3
  425. fs/overlayfs/Kconfig +1 −0
  426. fs/overlayfs/file.c +6 −0
  427. fs/overlayfs/overlayfs.h +6 −1
  428. fs/overlayfs/super.c +8 −1
  429. fs/overlayfs/util.c +2 −2
  430. fs/zonefs/super.c +21 −7
  431. include/crypto/curve25519.h +4 −2
  432. include/drm/drm_dp_mst_helper.h +2 −2
  433. include/dt-bindings/clock/imx8mn-clock.h +2 −2
  434. include/linux/bpf.h +1 −0
  435. include/linux/ceph/messenger.h +4 −3
  436. include/linux/ceph/osdmap.h +4 −0
  437. include/linux/ceph/rados.h +4 −2
  438. include/linux/cgroup.h +1 −0
  439. include/linux/clk-provider.h +5 −5
  440. include/linux/dmar.h +9 −5
  441. include/linux/dsa/8021q.h +0 −7
  442. include/linux/file.h +1 −0
  443. include/linux/fs.h +1 −0
  444. include/linux/futex.h +10 −7
  445. include/linux/genhd.h +1 −12
  446. include/linux/i2c.h +2 −2
  447. include/linux/ieee80211.h +2 −2
  448. include/linux/inet_diag.h +12 −6
  449. include/linux/intel-iommu.h +2 −0
  450. include/linux/memcontrol.h +12 −0
  451. include/linux/mmc/host.h +1 −0
  452. include/linux/netlink.h +13 −0
  453. include/linux/of_clk.h +4 −4
  454. include/linux/page-flags.h +1 −1
  455. include/linux/phy.h +3 −0
  456. include/linux/platform_device.h +1 −1
  457. include/linux/rhashtable.h +1 −1
  458. include/linux/skbuff.h +32 −4
  459. include/linux/socket.h +2 −1
  460. include/linux/vmalloc.h +3 −2
  461. include/linux/workqueue.h +16 −0
  462. include/net/af_rxrpc.h +8 −4
  463. include/net/fib_rules.h +1 −0
  464. include/net/sch_generic.h +0 −16
  465. include/soc/mscc/ocelot_dev.h +1 −1
  466. include/trace/events/afs.h +1 −1
  467. include/uapi/linux/in.h +2 −0
  468. include/uapi/linux/input-event-codes.h +3 −0
  469. include/uapi/linux/serio.h +5 −5
  470. init/Kconfig +1 −2
  471. kernel/bpf/bpf_struct_ops.c +11 −3
  472. kernel/bpf/btf.c +3 −2
  473. kernel/bpf/cgroup.c +5 −2
  474. kernel/bpf/syscall.c +25 −14
  475. kernel/cgroup/cgroup-v1.c +2 −1
  476. kernel/cgroup/cgroup.c +30 −13
  477. kernel/fork.c +2 −2
  478. kernel/futex.c +55 −38
  479. kernel/irq/manage.c +9 −2
  480. kernel/notifier.c +1 −1
  481. kernel/pid.c +10 −0
  482. kernel/sys.c +2 −0
  483. kernel/trace/bpf_trace.c +1 −1
  484. kernel/trace/ftrace.c +2 −0
  485. kernel/workqueue.c +8 −6
  486. lib/crypto/chacha20poly1305-selftest.c +8 −3
  487. mm/hugetlb_cgroup.c +1 −2
  488. mm/madvise.c +9 −3
  489. mm/memcontrol.c +106 −49
  490. mm/mmu_notifier.c +18 −9
  491. mm/nommu.c +7 −3
  492. mm/slub.c +30 −11
  493. mm/sparse.c +12 −2
  494. mm/swapfile.c +20 −21
  495. mm/vmalloc.c +7 −4
  496. net/Kconfig +3 −0
  497. net/batman-adv/bat_iv_ogm.c +4 −0
  498. net/bpfilter/main.c +8 −6
  499. net/caif/caif_dev.c +2 −1
  500. net/ceph/messenger.c +7 −2
  501. net/ceph/osd_client.c +3 −11
  502. net/ceph/osdmap.c +9 −0
  503. net/core/dev.c +3 −3
  504. net/core/devlink.c +21 −12
  505. net/core/netclassid_cgroup.c +37 −10
  506. net/core/pktgen.c +1 −1
  507. net/core/sock.c +4 −1
  508. net/core/sock_map.c +8 −4
  509. net/dsa/dsa_priv.h +2 −0
  510. net/dsa/port.c +35 −9
  511. net/dsa/slave.c +2 −6
  512. net/dsa/tag_8021q.c +0 −43
  513. net/dsa/tag_brcm.c +2 −0
  514. net/dsa/tag_sja1105.c +9 −10
  515. net/ethtool/debug.c +3 −1
  516. net/ethtool/linkinfo.c +3 −1
  517. net/ethtool/linkmodes.c +3 −1
  518. net/ethtool/netlink.c +12 −4
  519. net/ethtool/wol.c +3 −1
  520. net/hsr/hsr_framereg.c +2 −7
  521. net/hsr/hsr_netlink.c +42 −28
  522. net/hsr/hsr_slave.c +4 −4
  523. net/ieee802154/nl_policy.c +6 −0
  524. net/ipv4/Kconfig +1 −0
  525. net/ipv4/bpf_tcp_ca.c +2 −5
  526. net/ipv4/fib_frontend.c +2 −0
  527. net/ipv4/gre_demux.c +10 −2
  528. net/ipv4/inet_connection_sock.c +20 −0
  529. net/ipv4/inet_diag.c +20 −24
  530. net/ipv4/ip_gre.c +87 −18
  531. net/ipv4/ip_vti.c +30 −8
  532. net/ipv4/raw_diag.c +3 −2
  533. net/ipv4/tcp.c +3 −1
  534. net/ipv4/tcp_output.c +10 −2
  535. net/ipv4/udp_diag.c +3 −2
  536. net/ipv6/addrconf.c +40 −11
  537. net/ipv6/ip6_vti.c +26 −8
  538. net/ipv6/seg6_iptunnel.c +1 −1
  539. net/ipv6/seg6_local.c +1 −1
  540. net/ipv6/xfrm6_tunnel.c +1 −1
  541. net/mac80211/debugfs_sta.c +2 −1
  542. net/mac80211/key.c +12 −8
  543. net/mac80211/mesh_hwmp.c +2 −1
  544. net/mac80211/sta_info.c +6 −1
  545. net/mac80211/sta_info.h +1 −0
  546. net/mac80211/tx.c +33 −6
  547. net/mptcp/options.c +17 −2
  548. net/netfilter/nf_conntrack_standalone.c +1 −1
  549. net/netfilter/nf_flow_table_core.c +3 −0
  550. net/netfilter/nf_flow_table_ip.c +10 −4
  551. net/netfilter/nf_flow_table_offload.c +1 −0
  552. net/netfilter/nf_synproxy_core.c +1 −1
  553. net/netfilter/nf_tables_api.c +19 −8
  554. net/netfilter/nfnetlink_cthelper.c +2 −0
  555. net/netfilter/nft_chain_nat.c +1 −0
  556. net/netfilter/nft_fwd_netdev.c +12 −0
  557. net/netfilter/nft_payload.c +1 −0
  558. net/netfilter/nft_set_pipapo.c +27 −7
  559. net/netfilter/nft_set_rbtree.c +78 −9
  560. net/netfilter/nft_tunnel.c +2 −0
  561. net/netfilter/x_tables.c +3 −3
  562. net/netfilter/xt_recent.c +1 −1
  563. net/netlink/af_netlink.c +17 −26
  564. net/nfc/hci/core.c +16 −3
  565. net/nfc/netlink.c +4 −0
  566. net/openvswitch/datapath.c +1 −0
  567. net/packet/af_packet.c +28 −6
  568. net/packet/internal.h +4 −1
  569. net/rxrpc/af_rxrpc.c +5 −32
  570. net/rxrpc/ar-internal.h +2 −3
  571. net/rxrpc/call_object.c +1 −2
  572. net/rxrpc/conn_client.c +10 −3
  573. net/rxrpc/input.c +0 −1
  574. net/rxrpc/sendmsg.c +56 −19
  575. net/sched/act_ct.c +1 −1
  576. net/sched/act_mirred.c +2 −4
  577. net/sched/cls_route.c +2 −2
  578. net/sched/cls_tcindex.c +3 −0
  579. net/sched/sch_cbs.c +11 −1
  580. net/sched/sch_fq.c +1 −0
  581. net/sched/sch_taprio.c +10 −3
  582. net/sctp/diag.c +2 −6
  583. net/smc/smc_ib.c +1 −0
  584. net/socket.c +5 −3
  585. net/tipc/netlink.c +1 −0
  586. net/wireless/nl80211.c +6 −1
  587. net/wireless/scan.c +5 −1
  588. net/xfrm/xfrm_device.c +5 −4
  589. net/xfrm/xfrm_policy.c +2 −0
  590. net/xfrm/xfrm_user.c +5 −1
  591. scripts/Kconfig.include +7 −0
  592. scripts/Makefile.extrawarn +1 −0
  593. scripts/dtc/dtc-lexer.l +0 −1
  594. scripts/export_report.pl +1 −1
  595. scripts/kallsyms.c +4 −4
  596. scripts/mod/modpost.c +14 −13
  597. scripts/parse-maintainers.pl +27 −4
  598. sound/core/oss/pcm_plugin.c +10 −2
  599. sound/core/seq/oss/seq_oss_midi.c +1 −0
  600. sound/core/seq/seq_virmidi.c +1 −0
  601. sound/pci/hda/patch_realtek.c +25 −0
  602. sound/usb/line6/driver.c +1 −1
  603. sound/usb/line6/midibuf.c +1 −1
  604. tools/include/uapi/asm/errno.h +7 −7
  605. tools/include/uapi/linux/in.h +2 −0
  606. tools/perf/Makefile +1 −1
  607. tools/perf/arch/arm64/util/arm-spe.c +10 −10
  608. tools/perf/arch/arm64/util/perf_regs.c +1 −1
  609. tools/perf/arch/powerpc/util/perf_regs.c +2 −2
  610. tools/perf/arch/x86/util/auxtrace.c +7 −7
  611. tools/perf/arch/x86/util/event.c +6 −6
  612. tools/perf/arch/x86/util/header.c +2 −2
  613. tools/perf/arch/x86/util/intel-bts.c +12 −12
  614. tools/perf/arch/x86/util/intel-pt.c +15 −15
  615. tools/perf/arch/x86/util/machine.c +3 −3
  616. tools/perf/arch/x86/util/perf_regs.c +4 −4
  617. tools/perf/arch/x86/util/pmu.c +3 −3
  618. tools/perf/bench/bench.h +4 −0
  619. tools/perf/bench/epoll-ctl.c +4 −4
  620. tools/perf/bench/epoll-wait.c +6 −6
  621. tools/perf/bench/futex-hash.c +7 −6
  622. tools/perf/bench/futex-lock-pi.c +6 −6
  623. tools/perf/bench/futex-requeue.c +1 −0
  624. tools/perf/bench/futex-wake-parallel.c +1 −0
  625. tools/perf/bench/futex-wake.c +3 −2
  626. tools/perf/builtin-diff.c +2 −1
  627. tools/perf/builtin-top.c +3 −1
  628. tools/perf/pmu-events/jevents.c +9 −6
  629. tools/perf/tests/bp_account.c +1 −1
  630. tools/perf/util/block-info.c +2 −1
  631. tools/perf/util/env.c +2 −2
  632. tools/perf/util/map.c +2 −2
  633. tools/perf/util/parse-events.c +25 −31
  634. tools/perf/util/probe-file.c +3 −0
  635. tools/perf/util/probe-finder.c +8 −3
  636. tools/perf/util/setup.py +6 −4
  637. tools/perf/util/symbol.c +6 −7
  638. tools/power/cpupower/utils/idle_monitor/amd_fam14h_idle.c +1 −1
  639. tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c +1 −1
  640. tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c +2 −0
  641. tools/power/cpupower/utils/idle_monitor/cpupower-monitor.h +1 −1
  642. tools/power/x86/turbostat/Makefile +1 −1
  643. tools/power/x86/turbostat/turbostat.c +113 −29
  644. tools/scripts/Makefile.include +2 −2
  645. tools/testing/ktest/ktest.pl +8 −8
  646. tools/testing/ktest/sample.conf +11 −11
  647. tools/testing/selftests/Makefile +1 −0
  648. tools/testing/selftests/bpf/prog_tests/send_signal_sched_switch.c +60 −0
  649. tools/testing/selftests/bpf/progs/test_send_signal_kern.c +6 −0
  650. tools/testing/selftests/bpf/test_btf.c +42 −0
  651. tools/testing/selftests/bpf/verifier/jmp32.c +15 −0
  652. tools/testing/selftests/net/Makefile +3 −1
  653. tools/testing/selftests/net/fib_tests.sh +31 −3
  654. tools/testing/selftests/net/forwarding/Makefile +76 −0
  655. tools/testing/selftests/net/forwarding/ethtool_lib.sh +0 −0
  656. tools/testing/selftests/net/reuseport_addr_any.c +4 −0
  657. tools/testing/selftests/netfilter/Makefile +5 −1
  658. tools/testing/selftests/netfilter/config +6 −0
  659. tools/testing/selftests/netfilter/nf-queue.c +352 −0
  660. tools/testing/selftests/netfilter/nft_queue.sh +332 −0
  661. tools/testing/selftests/tc-testing/config +1 −0
  662. tools/testing/selftests/wireguard/netns.sh +10 −5
  663. tools/testing/selftests/wireguard/qemu/Makefile +1 −1
  664. tools/testing/selftests/wireguard/qemu/init.c +0 −1
  665. tools/testing/selftests/wireguard/qemu/kernel.config +0 −1
  666. usr/Kconfig +11 −11
.clang-format+21−4
@@ -86,6 +86,8 @@ ForEachMacros: · 85 unmodified lines
8686 - 'bio_for_each_segment_all'
8787 - 'bio_list_for_each'
8888 - 'bip_for_each_vec'
89+ - 'bitmap_for_each_clear_region'
90+ - 'bitmap_for_each_set_region'
8991 - 'blkg_for_each_descendant_post'
9092 - 'blkg_for_each_descendant_pre'
9193 - 'blk_queue_for_each_rl'
@@ -115,6 +117,7 @@ ForEachMacros: · 23 unmodified lines
115117 - 'drm_client_for_each_connector_iter'
116118 - 'drm_client_for_each_modeset'
117119 - 'drm_connector_for_each_possible_encoder'
120+ - 'drm_for_each_bridge_in_chain'
118121 - 'drm_for_each_connector_iter'
119122 - 'drm_for_each_crtc'
120123 - 'drm_for_each_encoder'
@@ -136,9 +139,10 @@ ForEachMacros: · 15 unmodified lines
136139 - 'for_each_bio'
137140 - 'for_each_board_func_rsrc'
138141 - 'for_each_bvec'
142+ - 'for_each_card_auxs'
143+ - 'for_each_card_auxs_safe'
139144 - 'for_each_card_components'
140− - 'for_each_card_links'
141− - 'for_each_card_links_safe'
145+ - 'for_each_card_pre_auxs'
142146 - 'for_each_card_prelinks'
143147 - 'for_each_card_rtds'
144148 - 'for_each_card_rtds_safe'
@@ -166,6 +170,7 @@ ForEachMacros: · 21 unmodified lines
166170 - 'for_each_dpcm_fe'
167171 - 'for_each_drhd_unit'
168172 - 'for_each_dss_dev'
173+ - 'for_each_efi_handle'
169174 - 'for_each_efi_memory_desc'
170175 - 'for_each_efi_memory_desc_in_map'
171176 - 'for_each_element'
@@ -190,6 +195,7 @@ ForEachMacros: · 18 unmodified lines
190195 - 'for_each_lru'
191196 - 'for_each_matching_node'
192197 - 'for_each_matching_node_and_match'
198+ - 'for_each_member'
193199 - 'for_each_memblock'
194200 - 'for_each_memblock_type'
195201 - 'for_each_memcg_cache_index'
@@ -200,9 +206,11 @@ ForEachMacros: · 4 unmodified lines
200206 - 'for_each_msi_entry'
201207 - 'for_each_msi_entry_safe'
202208 - 'for_each_net'
209+ - 'for_each_net_continue_reverse'
203210 - 'for_each_netdev'
204211 - 'for_each_netdev_continue'
205212 - 'for_each_netdev_continue_rcu'
213+ - 'for_each_netdev_continue_reverse'
206214 - 'for_each_netdev_feature'
207215 - 'for_each_netdev_in_bond_rcu'
208216 - 'for_each_netdev_rcu'
@@ -254,10 +262,10 @@ ForEachMacros: · 45 unmodified lines
254262 - 'for_each_reserved_mem_region'
255263 - 'for_each_rtd_codec_dai'
256264 - 'for_each_rtd_codec_dai_rollback'
257− - 'for_each_rtdcom'
258− - 'for_each_rtdcom_safe'
265+ - 'for_each_rtd_components'
259266 - 'for_each_set_bit'
260267 - 'for_each_set_bit_from'
268+ - 'for_each_set_clump8'
261269 - 'for_each_sg'
262270 - 'for_each_sg_dma_page'
263271 - 'for_each_sg_page'
@@ -267,6 +275,7 @@ ForEachMacros: · 3 unmodified lines
267275 - 'for_each_subelement_id'
268276 - '__for_each_thread'
269277 - 'for_each_thread'
278+ - 'for_each_wakeup_source'
270279 - 'for_each_zone'
271280 - 'for_each_zone_zonelist'
272281 - 'for_each_zone_zonelist_nodemask'
@@ -330,6 +339,7 @@ ForEachMacros: · 57 unmodified lines
330339 - 'list_for_each'
331340 - 'list_for_each_codec'
332341 - 'list_for_each_codec_safe'
342+ - 'list_for_each_continue'
333343 - 'list_for_each_entry'
334344 - 'list_for_each_entry_continue'
335345 - 'list_for_each_entry_continue_rcu'
@@ -351,6 +361,7 @@ ForEachMacros: · 15 unmodified lines
351361 - 'llist_for_each_entry'
352362 - 'llist_for_each_entry_safe'
353363 - 'llist_for_each_safe'
364+ - 'mci_for_each_dimm'
354365 - 'media_device_for_each_entity'
355366 - 'media_device_for_each_intf'
356367 - 'media_device_for_each_link'
@@ -444,10 +455,16 @@ ForEachMacros: · 87 unmodified lines
444455 - 'virtio_device_for_each_vq'
445456 - 'xa_for_each'
446457 - 'xa_for_each_marked'
458+ - 'xa_for_each_range'
447459 - 'xa_for_each_start'
448460 - 'xas_for_each'
449461 - 'xas_for_each_conflict'
450462 - 'xas_for_each_marked'
463+ - 'xbc_array_for_each_value'
464+ - 'xbc_for_each_key_value'
465+ - 'xbc_node_for_each_array_value'
466+ - 'xbc_node_for_each_child'
467+ - 'xbc_node_for_each_key_value'
451468 - 'zorro_for_each_dev'
452469
453470 #IncludeBlocks: Preserve # Unknown to clang-format-5.0
.mailmap+1−0
@@ -225,6 +225,7 @@ Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com> · 224 unmodified lines
225225 Praveen BP <praveenbp@ti.com>
226226 Punit Agrawal <punitagrawal@gmail.com> <punit.agrawal@arm.com>
227227 Qais Yousef <qsyousef@gmail.com> <qais.yousef@imgtec.com>
228+Quentin Monnet <quentin@isovalent.com> <quentin.monnet@netronome.com>
228229 Quentin Perret <qperret@qperret.net> <quentin.perret@arm.com>
229230 Rafael J. Wysocki <rjw@rjwysocki.net> <rjw@sisk.pl>
230231 Rajesh Shah <rajesh.shah@intel.com>
Documentation/arm64/silicon-errata.rst+2−0
@@ -110,6 +110,8 @@ stable kernels. · 109 unmodified lines
110110 +----------------+-----------------+-----------------+-----------------------------+
111111 | Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 |
112112 +----------------+-----------------+-----------------+-----------------------------+
113+| Cavium | ThunderX GICv3 | #38539 | N/A |
114++----------------+-----------------+-----------------+-----------------------------+
113115 | Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 |
114116 +----------------+-----------------+-----------------+-----------------------------+
115117 | Cavium | ThunderX Core | #30115 | CAVIUM_ERRATUM_30115 |
Documentation/devicetree/bindings/crypto/allwinner,sun4i-a10-crypto.yaml+2−0
@@ -23,6 +23,8 @@ properties: · 22 unmodified lines
2323 - items:
2424 - const: allwinner,sun7i-a20-crypto
2525 - const: allwinner,sun4i-a10-crypto
26+ - items:
27+ - const: allwinner,sun8i-a33-crypto
2628
2729 reg:
2830 maxItems: 1
Documentation/devicetree/bindings/input/cypress,tm2-touchkey.txt+1−0
@@ -5,6 +5,7 @@ Required properties: · 4 unmodified lines
55 * "cypress,tm2-touchkey" - for the touchkey found on the tm2 board
66 * "cypress,midas-touchkey" - for the touchkey found on midas boards
77 * "cypress,aries-touchkey" - for the touchkey found on aries boards
8+ * "coreriver,tc360-touchkey" - for the Coreriver TouchCore 360 touchkey
89 - reg: I2C address of the chip.
910 - interrupts: interrupt to which the chip is connected (see interrupt
1011 binding[0]).
Documentation/devicetree/bindings/net/fsl-fman.txt+7−0
@@ -110,6 +110,13 @@ PROPERTIES · 109 unmodified lines
110110 Usage: required
111111 Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt
112112
113+- fsl,erratum-a050385
114+ Usage: optional
115+ Value type: boolean
116+ Definition: A boolean property. Indicates the presence of the
117+ erratum A050385 which indicates that DMA transactions that are
118+ split can result in a FMan lock.
119+
113120 =============================================================================
114121 FMan MURAM Node
115122
Documentation/devicetree/bindings/vendor-prefixes.yaml+2−0
@@ -205,6 +205,8 @@ patternProperties: · 204 unmodified lines
205205 description: Colorful GRP, Shenzhen Xueyushi Technology Ltd.
206206 "^compulab,.*":
207207 description: CompuLab Ltd.
208+ "^coreriver,.*":
209+ description: CORERIVER Semiconductor Co.,Ltd.
208210 "^corpro,.*":
209211 description: Chengdu Corpro Technology Co., Ltd.
210212 "^cortina,.*":
Documentation/driver-api/dmaengine/provider.rst+10−2
@@ -266,11 +266,15 @@ to use. · 265 unmodified lines
266266 attached (via the dmaengine_desc_attach_metadata() helper to the descriptor.
267267
268268 From the DMA driver the following is expected for this mode:
269+
269270 - DMA_MEM_TO_DEV / DEV_MEM_TO_MEM
271+
270272 The data from the provided metadata buffer should be prepared for the DMA
271273 controller to be sent alongside of the payload data. Either by copying to a
272274 hardware descriptor, or highly coupled packet.
275+
273276 - DMA_DEV_TO_MEM
277+
274278 On transfer completion the DMA driver must copy the metadata to the client
275279 provided metadata buffer before notifying the client about the completion.
276280 After the transfer completion, DMA drivers must not touch the metadata
@@ -284,10 +288,14 @@ to use. · 7 unmodified lines
284288 and dmaengine_desc_set_metadata_len() is provided as helper functions.
285289
286290 From the DMA driver the following is expected for this mode:
287− - get_metadata_ptr
291+
292+ - get_metadata_ptr()
293+
288294 Should return a pointer for the metadata buffer, the maximum size of the
289295 metadata buffer and the currently used / valid (if any) bytes in the buffer.
290− - set_metadata_len
296+
297+ - set_metadata_len()
298+
291299 It is called by the clients after it have placed the metadata to the buffer
292300 to let the DMA driver know the number of valid bytes provided.
293301
Documentation/filesystems/porting.rst+8−0
@@ -850,3 +850,11 @@ business doing so. · 849 unmodified lines
850850 d_alloc_pseudo() is internal-only; uses outside of alloc_file_pseudo() are
851851 very suspect (and won't work in modules). Such uses are very likely to
852852 be misspelled d_alloc_anon().
853+
854+---
855+
856+**mandatory**
857+
858+[should've been added in 2016] stale comment in finish_open() nonwithstanding,
859+failure exits in ->atomic_open() instances should *NOT* fput() the file,
860+no matter what. Everything is handled by the caller.
Documentation/filesystems/zonefs.txt+13−5
@@ -258,11 +258,11 @@ conditions. · 257 unmodified lines
258258 | option | condition | size read write read write |
259259 +--------------+-----------+-----------------------------------------+
260260 | | good | fixed yes no yes yes |
261− | remount-ro | read-only | fixed yes no yes no |
261+ | remount-ro | read-only | as is yes no yes no |
262262 | (default) | offline | 0 no no no no |
263263 +--------------+-----------+-----------------------------------------+
264264 | | good | fixed yes no yes yes |
265− | zone-ro | read-only | fixed yes no yes no |
265+ | zone-ro | read-only | as is yes no yes no |
266266 | | offline | 0 no no no no |
267267 +--------------+-----------+-----------------------------------------+
268268 | | good | 0 no no yes yes |
@@ -270,7 +270,7 @@ conditions. · 1 unmodified line
270270 | | offline | 0 no no no no |
271271 +--------------+-----------+-----------------------------------------+
272272 | | good | fixed yes yes yes yes |
273− | repair | read-only | fixed yes no yes no |
273+ | repair | read-only | as is yes no yes no |
274274 | | offline | 0 no no no no |
275275 +--------------+-----------+-----------------------------------------+
276276
@@ -307,8 +307,16 @@ condition changes. The defined behaviors are as follow: · 30 unmodified lines
307307 * zone-offline
308308 * repair
309309
310−The I/O error actions defined for each behavior are detailed in the previous
311−section.
310+The run-time I/O error actions defined for each behavior are detailed in the
311+previous section. Mount time I/O errors will cause the mount operation to fail.
312+The handling of read-only zones also differs between mount-time and run-time.
313+If a read-only zone is found at mount time, the zone is always treated in the
314+same manner as offline zones, that is, all accesses are disabled and the zone
315+file size set to 0. This is necessary as the write pointer of read-only zones
316+is defined as invalib by the ZBC and ZAC standards, making it impossible to
317+discover the amount of data that has been written to the zone. In the case of a
318+read-only zone discovered at run-time, as indicated in the previous section.
319+the size of the zone file is left unchanged from its last updated value.
312320
313321 Zonefs User Space Tools
314322 =======================
Documentation/kbuild/kbuild.rst+1−1
@@ -237,7 +237,7 @@ This is solely useful to speed up test compiles. · 236 unmodified lines
237237 KBUILD_EXTRA_SYMBOLS
238238 --------------------
239239 For modules that use symbols from other modules.
240−See more details in modules.txt.
240+See more details in modules.rst.
241241
242242 ALLSOURCE_ARCHS
243243 ---------------
Documentation/kbuild/kconfig-macro-language.rst+1−1
@@ -44,7 +44,7 @@ intermediate:: · 43 unmodified lines
4444 def_bool y
4545
4646 Then, Kconfig moves onto the evaluation stage to resolve inter-symbol
47−dependency as explained in kconfig-language.txt.
47+dependency as explained in kconfig-language.rst.
4848
4949
5050 Variables
Documentation/kbuild/makefiles.rst+3−3
@@ -924,7 +924,7 @@ When kbuild executes, the following steps are followed (roughly): · 923 unmodified lines
924924 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
925925 are used for assembler.
926926
927− From commandline AFLAGS_MODULE shall be used (see kbuild.txt).
927+ From commandline AFLAGS_MODULE shall be used (see kbuild.rst).
928928
929929 KBUILD_CFLAGS_KERNEL
930930 $(CC) options specific for built-in
@@ -937,7 +937,7 @@ When kbuild executes, the following steps are followed (roughly): · 6 unmodified lines
937937
938938 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
939939 are used for $(CC).
940− From commandline CFLAGS_MODULE shall be used (see kbuild.txt).
940+ From commandline CFLAGS_MODULE shall be used (see kbuild.rst).
941941
942942 KBUILD_LDFLAGS_MODULE
943943 Options for $(LD) when linking modules
@@ -945,7 +945,7 @@ When kbuild executes, the following steps are followed (roughly): · 1 unmodified line
945945 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
946946 used when linking modules. This is often a linker script.
947947
948− From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
948+ From commandline LDFLAGS_MODULE shall be used (see kbuild.rst).
949949
950950 KBUILD_LDS
951951
Documentation/kbuild/modules.rst+2−2
@@ -470,9 +470,9 @@ build. · 469 unmodified lines
470470
471471 The syntax of the Module.symvers file is::
472472
473− <CRC> <Symbol> <Namespace> <Module> <Export Type>
473+ <CRC> <Symbol> <Module> <Export Type> <Namespace>
474474
475− 0xe1cc2a05 usb_stor_suspend USB_STORAGE drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL
475+ 0xe1cc2a05 usb_stor_suspend drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL USB_STORAGE
476476
477477 The fields are separated by tabs and values may be empty (e.g.
478478 if no namespace is defined for an exported symbol).
Documentation/networking/devlink/devlink-region.rst+0−3
@@ -40,9 +40,6 @@ example usage · 39 unmodified lines
4040 # Delete a snapshot using:
4141 $ devlink region del pci/0000:00:05.0/cr-space snapshot 1
4242
43− # Trigger (request) a snapshot be taken:
44− $ devlink region trigger pci/0000:00:05.0/cr-space
45−
4643 # Dump a snapshot:
4744 $ devlink region dump pci/0000:00:05.0/fw-health snapshot 1
4845 0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
Documentation/networking/net_failover.rst+3−3
@@ -8,9 +8,9 @@ Overview · 7 unmodified lines
88 ========
99
1010 The net_failover driver provides an automated failover mechanism via APIs
11−to create and destroy a failover master netdev and mananges a primary and
11+to create and destroy a failover master netdev and manages a primary and
1212 standby slave netdevs that get registered via the generic failover
13−infrastructrure.
13+infrastructure.
1414
1515 The failover netdev acts a master device and controls 2 slave devices. The
1616 original paravirtual interface is registered as 'standby' slave netdev and
@@ -29,7 +29,7 @@ virtio-net accelerated datapath: STANDBY mode · 12 unmodified lines
2929 =============================================
3030
3131 net_failover enables hypervisor controlled accelerated datapath to virtio-net
32−enabled VMs in a transparent manner with no/minimal guest userspace chanages.
32+enabled VMs in a transparent manner with no/minimal guest userspace changes.
3333
3434 To support this, the hypervisor needs to enable VIRTIO_NET_F_STANDBY
3535 feature on the virtio-net interface and assign the same MAC address to both
Documentation/networking/rds.txt+1−1
@@ -159,7 +159,7 @@ Socket Interface · 158 unmodified lines
159159 set SO_RDS_TRANSPORT on a socket for which the transport has
160160 been previously attached explicitly (by SO_RDS_TRANSPORT) or
161161 implicitly (via bind(2)) will return an error of EOPNOTSUPP.
162− An attempt to set SO_RDS_TRANSPPORT to RDS_TRANS_NONE will
162+ An attempt to set SO_RDS_TRANSPORT to RDS_TRANS_NONE will
163163 always return EINVAL.
164164
165165 RDMA for RDS
Documentation/virt/kvm/amd-memory-encryption.rst+25−0
@@ -53,6 +53,29 @@ key management interface to perform common hypervisor activities such as · 52 unmodified lines
5353 encrypting bootstrap code, snapshot, migrating and debugging the guest. For more
5454 information, see the SEV Key Management spec [api-spec]_
5555
56+The main ioctl to access SEV is KVM_MEM_ENCRYPT_OP. If the argument
57+to KVM_MEM_ENCRYPT_OP is NULL, the ioctl returns 0 if SEV is enabled
58+and ``ENOTTY` if it is disabled (on some older versions of Linux,
59+the ioctl runs normally even with a NULL argument, and therefore will
60+likely return ``EFAULT``). If non-NULL, the argument to KVM_MEM_ENCRYPT_OP
61+must be a struct kvm_sev_cmd::
62+
63+ struct kvm_sev_cmd {
64+ __u32 id;
65+ __u64 data;
66+ __u32 error;
67+ __u32 sev_fd;
68+ };
69+
70+
71+The ``id`` field contains the subcommand, and the ``data`` field points to
72+another struct containing arguments specific to command. The ``sev_fd``
73+should point to a file descriptor that is opened on the ``/dev/sev``
74+device, if needed (see individual commands).
75+
76+On output, ``error`` is zero on success, or an error code. Error codes
77+are defined in ``<linux/psp-dev.h>`.
78+
5679 KVM implements the following commands to support common lifecycle events of SEV
5780 guests, such as launching, running, snapshotting, migrating and decommissioning.
5881
@@ -90,6 +113,8 @@ Returns: 0 on success, -negative on error · 31 unmodified lines
90113
91114 On success, the 'handle' field contains a new handle and on error, a negative value.
92115
116+KVM_SEV_LAUNCH_START requires the ``sev_fd`` field to be valid.
117+
93118 For more details, see SEV spec Section 6.2.
94119
95120 3. KVM_SEV_LAUNCH_UPDATE_DATA
MAINTAINERS+13−11
@@ -4073,7 +4073,6 @@ F: drivers/scsi/snic/ · 4072 unmodified lines
40734073 CISCO VIC ETHERNET NIC DRIVER
40744074 M: Christian Benvenuti <benve@cisco.com>
40754075 M: Govindarajulu Varadarajan <_govind@gmx.com>
4076−M: Parvi Kaustubhi <pkaustub@cisco.com>
40774076 S: Supported
40784077 F: drivers/net/ethernet/cisco/enic/
40794078
@@ -4572,7 +4571,7 @@ F: drivers/infiniband/hw/cxgb4/ · 492 unmodified lines
45724571 F: include/uapi/rdma/cxgb4-abi.h
45734572
45744573 CXGB4VF ETHERNET DRIVER (CXGB4VF)
4575−M: Casey Leedom <leedom@chelsio.com>
4574+M: Vishal Kulkarni <vishal@gmail.com>
45764575 L: netdev@vger.kernel.org
45774576 W: http://www.chelsio.com
45784577 S: Supported
@@ -6230,7 +6229,6 @@ S: Supported · 1651 unmodified lines
62306229 F: drivers/scsi/be2iscsi/
62316230
62326231 Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net)
6233−M: Sathya Perla <sathya.perla@broadcom.com>
62346232 M: Ajit Khaparde <ajit.khaparde@broadcom.com>
62356233 M: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
62366234 M: Somnath Kotur <somnath.kotur@broadcom.com>
@@ -7550,6 +7548,12 @@ F: include/uapi/linux/if_hippi.h · 1313 unmodified lines
75507548 F: net/802/hippi.c
75517549 F: drivers/net/hippi/
75527550
7551+HISILICON DMA DRIVER
7552+M: Zhou Wang <wangzhou1@hisilicon.com>
7553+L: dmaengine@vger.kernel.org
7554+S: Maintained
7555+F: drivers/dma/hisi_dma.c
7556+
75537557 HISILICON SECURITY ENGINE V2 DRIVER (SEC2)
75547558 M: Zaibo Xu <xuzaibo@huawei.com>
75557559 L: linux-crypto@vger.kernel.org
@@ -7607,7 +7611,8 @@ F: Documentation/admin-guide/perf/hisi-pmu.rst · 51 unmodified lines
76077611
76087612 HISILICON ROCE DRIVER
76097613 M: Lijun Ou <oulijun@huawei.com>
7610−M: Wei Hu(Xavier) <xavier.huwei@huawei.com>
7614+M: Wei Hu(Xavier) <huwei87@hisilicon.com>
7615+M: Weihang Li <liweihang@huawei.com>
76117616 L: linux-rdma@vger.kernel.org
76127617 S: Maintained
76137618 F: drivers/infiniband/hw/hns/
@@ -8510,7 +8515,6 @@ L: dmaengine@vger.kernel.org · 896 unmodified lines
85108515 S: Supported
85118516 F: drivers/dma/idxd/*
85128517 F: include/uapi/linux/idxd.h
8513−F: include/linux/idxd.h
85148518
85158519 INTEL IDLE DRIVER
85168520 M: Jacob Pan <jacob.jun.pan@linux.intel.com>
@@ -8717,7 +8721,7 @@ M: Emmanuel Grumbach <emmanuel.grumbach@intel.com> · 200 unmodified lines
87178721 M: Luca Coelho <luciano.coelho@intel.com>
87188722 M: Intel Linux Wireless <linuxwifi@intel.com>
87198723 L: linux-wireless@vger.kernel.org
8720−W: http://intellinuxwireless.org
8724+W: https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi
87218725 T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git
87228726 S: Supported
87238727 F: drivers/net/wireless/intel/iwlwifi/
@@ -11151,7 +11155,7 @@ M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> · 2427 unmodified lines
1115111155 L: linux-mips@vger.kernel.org
1115211156 W: http://www.linux-mips.org/
1115311157 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git
11154−Q: http://patchwork.linux-mips.org/project/linux-mips/list/
11158+Q: https://patchwork.kernel.org/project/linux-mips/list/
1115511159 S: Maintained
1115611160 F: Documentation/devicetree/bindings/mips/
1115711161 F: Documentation/mips/
@@ -15450,11 +15454,9 @@ F: drivers/infiniband/sw/siw/ · 4292 unmodified lines
1545015454 F: include/uapi/rdma/siw-abi.h
1545115455
1545215456 SOFT-ROCE DRIVER (rxe)
15453−M: Moni Shoua <monis@mellanox.com>
15457+M: Zhu Yanjun <yanjunz@mellanox.com>
1545415458 L: linux-rdma@vger.kernel.org
1545515459 S: Supported
15456−W: https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home
15457−Q: http://patchwork.kernel.org/project/linux-rdma/list/
1545815460 F: drivers/infiniband/sw/rxe/
1545915461 F: include/uapi/rdma/rdma_user_rxe.h
1546015462
@@ -16784,7 +16786,7 @@ Q: http://patchwork.linuxtv.org/project/linux-media/list/ · 1323 unmodified lines
1678416786 S: Maintained
1678516787 F: drivers/media/platform/ti-vpe/
1678616788 F: Documentation/devicetree/bindings/media/ti,vpe.yaml
16787− Documentation/devicetree/bindings/media/ti,cal.yaml
16789+F: Documentation/devicetree/bindings/media/ti,cal.yaml
1678816790
1678916791 TI WILINK WIRELESS DRIVERS
1679016792 L: linux-wireless@vger.kernel.org
Makefile+2−2
@@ -2,7 +2,7 @@ · 1 unmodified line
22 VERSION = 5
33 PATCHLEVEL = 6
44 SUBLEVEL = 0
5−EXTRAVERSION = -rc5
5+EXTRAVERSION =
66 NAME = Kleptomaniac Octopus
77
88 # *DOCUMENTATION*
@@ -1804,7 +1804,7 @@ existing-targets := $(wildcard $(sort $(targets))) · 1795 unmodified lines
18041804
18051805 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
18061806
1807−endif # config-targets
1807+endif # config-build
18081808 endif # mixed-build
18091809 endif # need-sub-make
18101810
arch/arc/Kconfig+2−2
@@ -154,7 +154,7 @@ config ARC_CPU_HS · 153 unmodified lines
154154 help
155155 Support for ARC HS38x Cores based on ARCv2 ISA
156156 The notable features are:
157− - SMP configurations of upto 4 core with coherency
157+ - SMP configurations of up to 4 cores with coherency
158158 - Optional L2 Cache and IO-Coherency
159159 - Revised Interrupt Architecture (multiple priorites, reg banks,
160160 auto stack switch, auto regfile save/restore)
@@ -192,7 +192,7 @@ config ARC_SMP_HALT_ON_RESET · 31 unmodified lines
192192 help
193193 In SMP configuration cores can be configured as Halt-on-reset
194194 or they could all start at same time. For Halt-on-reset, non
195− masters are parked until Master kicks them so they can start of
195+ masters are parked until Master kicks them so they can start off
196196 at designated entry point. For other case, all jump to common
197197 entry point and spin wait for Master's signal.
198198
arch/arc/configs/nps_defconfig+0−2
@@ -21,8 +21,6 @@ CONFIG_MODULES=y · 20 unmodified lines
2121 CONFIG_MODULE_FORCE_LOAD=y
2222 CONFIG_MODULE_UNLOAD=y
2323 # CONFIG_BLK_DEV_BSG is not set
24−# CONFIG_IOSCHED_DEADLINE is not set
25−# CONFIG_IOSCHED_CFQ is not set
2624 CONFIG_ARC_PLAT_EZNPS=y
2725 CONFIG_SMP=y
2826 CONFIG_NR_CPUS=4096
arch/arc/configs/nsimosci_defconfig+0−2
@@ -20,8 +20,6 @@ CONFIG_ISA_ARCOMPACT=y · 19 unmodified lines
2020 CONFIG_KPROBES=y
2121 CONFIG_MODULES=y
2222 # CONFIG_BLK_DEV_BSG is not set
23−# CONFIG_IOSCHED_DEADLINE is not set
24−# CONFIG_IOSCHED_CFQ is not set
2523 CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci"
2624 # CONFIG_COMPACTION is not set
2725 CONFIG_NET=y
arch/arc/configs/nsimosci_hs_defconfig+0−2
@@ -19,8 +19,6 @@ CONFIG_PERF_EVENTS=y · 18 unmodified lines
1919 CONFIG_KPROBES=y
2020 CONFIG_MODULES=y
2121 # CONFIG_BLK_DEV_BSG is not set
22−# CONFIG_IOSCHED_DEADLINE is not set
23−# CONFIG_IOSCHED_CFQ is not set
2422 CONFIG_ISA_ARCV2=y
2523 CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci_hs"
2624 # CONFIG_COMPACTION is not set
arch/arc/configs/nsimosci_hs_smp_defconfig+0−2
@@ -14,8 +14,6 @@ CONFIG_PERF_EVENTS=y · 13 unmodified lines
1414 CONFIG_KPROBES=y
1515 CONFIG_MODULES=y
1616 # CONFIG_BLK_DEV_BSG is not set
17−# CONFIG_IOSCHED_DEADLINE is not set
18−# CONFIG_IOSCHED_CFQ is not set
1917 CONFIG_ISA_ARCV2=y
2018 CONFIG_SMP=y
2119 # CONFIG_ARC_TIMERS_64BIT is not set
arch/arc/include/asm/fpu.h+2−0
@@ -43,6 +43,8 @@ extern void fpu_init_task(struct pt_regs *regs); · 42 unmodified lines
4343
4444 #endif /* !CONFIG_ISA_ARCOMPACT */
4545
46+struct task_struct;
47+
4648 extern void fpu_save_restore(struct task_struct *p, struct task_struct *n);
4749
4850 #else /* !CONFIG_ARC_FPU_SAVE_RESTORE */
arch/arc/include/asm/linkage.h+2−0
@@ -29,6 +29,8 @@ · 28 unmodified lines
2929 .endm
3030
3131 #define ASM_NL ` /* use '`' to mark new line in macro */
32+#define __ALIGN .align 4
33+#define __ALIGN_STR __stringify(__ALIGN)
3234
3335 /* annotation for data we want in DCCM - if enabled in .config */
3436 .macro ARCFP_DATA nm
arch/arc/kernel/setup.c+1−1
@@ -8,11 +8,11 @@ · 7 unmodified lines
88 #include <linux/delay.h>
99 #include <linux/root_dev.h>
1010 #include <linux/clk.h>
11−#include <linux/clk-provider.h>
1211 #include <linux/clocksource.h>
1312 #include <linux/console.h>
1413 #include <linux/module.h>
1514 #include <linux/cpu.h>
15+#include <linux/of_clk.h>
1616 #include <linux/of_fdt.h>
1717 #include <linux/of.h>
1818 #include <linux/cache.h>
arch/arc/kernel/troubleshoot.c+12−15
@@ -104,8 +104,7 @@ static void show_faulting_vma(unsigned long address) · 103 unmodified lines
104104 if (IS_ERR(nm))
105105 nm = "?";
106106 }
107− pr_info(" @off 0x%lx in [%s]\n"
108− " VMA: 0x%08lx to 0x%08lx\n",
107+ pr_info(" @off 0x%lx in [%s] VMA: 0x%08lx to 0x%08lx\n",
109108 vma->vm_start < TASK_UNMAPPED_BASE ?
110109 address : address - vma->vm_start,
111110 nm, vma->vm_start, vma->vm_end);
@@ -120,8 +119,6 @@ static void show_ecr_verbose(struct pt_regs *regs) · 8 unmodified lines
120119 unsigned int vec, cause_code;
121120 unsigned long address;
122121
123− pr_info("\n[ECR ]: 0x%08lx => ", regs->event);
124−
125122 /* For Data fault, this is data address not instruction addr */
126123 address = current->thread.fault_address;
127124
@@ -130,10 +127,10 @@ static void show_ecr_verbose(struct pt_regs *regs) · 2 unmodified lines
130127
131128 /* For DTLB Miss or ProtV, display the memory involved too */
132129 if (vec == ECR_V_DTLB_MISS) {
133− pr_cont("Invalid %s @ 0x%08lx by insn @ 0x%08lx\n",
130+ pr_cont("Invalid %s @ 0x%08lx by insn @ %pS\n",
134131 (cause_code == 0x01) ? "Read" :
135132 ((cause_code == 0x02) ? "Write" : "EX"),
136− address, regs->ret);
133+ address, (void *)regs->ret);
137134 } else if (vec == ECR_V_ITLB_MISS) {
138135 pr_cont("Insn could not be fetched\n");
139136 } else if (vec == ECR_V_MACH_CHK) {
@@ -191,31 +188,31 @@ void show_regs(struct pt_regs *regs) · 51 unmodified lines
191188
192189 show_ecr_verbose(regs);
193190
194− pr_info("[EFA ]: 0x%08lx\n[BLINK ]: %pS\n[ERET ]: %pS\n",
195− current->thread.fault_address,
196− (void *)regs->blink, (void *)regs->ret);
197−
198191 if (user_mode(regs))
199192 show_faulting_vma(regs->ret); /* faulting code, not data */
200193
201− pr_info("[STAT32]: 0x%08lx", regs->status32);
194+ pr_info("ECR: 0x%08lx EFA: 0x%08lx ERET: 0x%08lx\n",
195+ regs->event, current->thread.fault_address, regs->ret);
196+
197+ pr_info("STAT32: 0x%08lx", regs->status32);
202198
203199 #define STS_BIT(r, bit) r->status32 & STATUS_##bit##_MASK ? #bit" " : ""
204200
205201 #ifdef CONFIG_ISA_ARCOMPACT
206− pr_cont(" : %2s%2s%2s%2s%2s%2s%2s\n",
202+ pr_cont(" [%2s%2s%2s%2s%2s%2s%2s]",
207203 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",
208204 STS_BIT(regs, DE), STS_BIT(regs, AE),
209205 STS_BIT(regs, A2), STS_BIT(regs, A1),
210206 STS_BIT(regs, E2), STS_BIT(regs, E1));
211207 #else
212− pr_cont(" : %2s%2s%2s%2s\n",
208+ pr_cont(" [%2s%2s%2s%2s]",
213209 STS_BIT(regs, IE),
214210 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",
215211 STS_BIT(regs, DE), STS_BIT(regs, AE));
216212 #endif
217− pr_info("BTA: 0x%08lx\t SP: 0x%08lx\t FP: 0x%08lx\n",
218− regs->bta, regs->sp, regs->fp);
213+ pr_cont(" BTA: 0x%08lx\n", regs->bta);
214+ pr_info("BLK: %pS\n SP: 0x%08lx FP: 0x%08lx\n",
215+ (void *)regs->blink, regs->sp, regs->fp);
219216 pr_info("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n",
220217 regs->lp_start, regs->lp_end, regs->lp_count);
221218
arch/arm/Makefile+3−1
@@ -307,13 +307,15 @@ endif · 306 unmodified lines
307307 ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
308308 prepare: stack_protector_prepare
309309 stack_protector_prepare: prepare0
310− $(eval KBUILD_CFLAGS += \
310+ $(eval SSP_PLUGIN_CFLAGS := \
311311 -fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell \
312312 awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\
313313 include/generated/asm-offsets.h) \
314314 -fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \
315315 awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\
316316 include/generated/asm-offsets.h))
317+ $(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS))
318+ $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS))
317319 endif
318320
319321 all: $(notdir $(KBUILD_IMAGE))
arch/arm/boot/compressed/Makefile+2−2
@@ -101,7 +101,6 @@ clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S \ · 100 unmodified lines
101101 $(libfdt) $(libfdt_hdrs) hyp-stub.S
102102
103103 KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
104−KBUILD_CFLAGS += $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
105104
106105 ifeq ($(CONFIG_FUNCTION_TRACER),y)
107106 ORIG_CFLAGS := $(KBUILD_CFLAGS)
@@ -117,7 +116,8 @@ CFLAGS_fdt_ro.o := $(nossp-flags-y) · 9 unmodified lines
117116 CFLAGS_fdt_rw.o := $(nossp-flags-y)
118117 CFLAGS_fdt_wip.o := $(nossp-flags-y)
119118
120−ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin -I$(obj)
119+ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
120+ -I$(obj) $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
121121 asflags-y := -DZIMAGE
122122
123123 # Supply kernel BSS size to the decompressor via a linker symbol.
arch/arm/boot/dts/bcm2835-rpi-zero-w.dts+1−0
@@ -112,6 +112,7 @@ · 111 unmodified lines
112112 &sdhci {
113113 #address-cells = <1>;
114114 #size-cells = <0>;
115+ pinctrl-names = "default";
115116 pinctrl-0 = <&emmc_gpio34 &gpclk2_gpio43>;
116117 bus-width = <4>;
117118 mmc-pwrseq = <&wifi_pwrseq>;
arch/arm/boot/dts/bcm2835-rpi.dtsi+1−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 firmware: firmware {
1616 compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
1717 mboxes = <&mailbox>;
18+ dma-ranges;
1819 };
1920
2021 power: power {
arch/arm/boot/dts/dm8148-evm.dts+2−2
@@ -24,12 +24,12 @@ · 23 unmodified lines
2424
2525 &cpsw_emac0 {
2626 phy-handle = <&ethphy0>;
27− phy-mode = "rgmii";
27+ phy-mode = "rgmii-id";
2828 };
2929
3030 &cpsw_emac1 {
3131 phy-handle = <&ethphy1>;
32− phy-mode = "rgmii";
32+ phy-mode = "rgmii-id";
3333 };
3434
3535 &davinci_mdio {
arch/arm/boot/dts/dm8148-t410.dts+2−2
@@ -33,12 +33,12 @@ · 32 unmodified lines
3333
3434 &cpsw_emac0 {
3535 phy-handle = <&ethphy0>;
36− phy-mode = "rgmii";
36+ phy-mode = "rgmii-id";
3737 };
3838
3939 &cpsw_emac1 {
4040 phy-handle = <&ethphy1>;
41− phy-mode = "rgmii";
41+ phy-mode = "rgmii-id";
4242 };
4343
4444 &davinci_mdio {
arch/arm/boot/dts/dra62x-j5eco-evm.dts+2−2
@@ -24,12 +24,12 @@ · 23 unmodified lines
2424
2525 &cpsw_emac0 {
2626 phy-handle = <&ethphy0>;
27− phy-mode = "rgmii";
27+ phy-mode = "rgmii-id";
2828 };
2929
3030 &cpsw_emac1 {
3131 phy-handle = <&ethphy1>;
32− phy-mode = "rgmii";
32+ phy-mode = "rgmii-id";
3333 };
3434
3535 &davinci_mdio {
arch/arm/boot/dts/dra7.dtsi+1−0
@@ -148,6 +148,7 @@ · 147 unmodified lines
148148 #address-cells = <1>;
149149 #size-cells = <1>;
150150 ranges = <0x0 0x0 0x0 0xc0000000>;
151+ dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
151152 ti,hwmods = "l3_main_1", "l3_main_2";
152153 reg = <0x0 0x44000000 0x0 0x1000000>,
153154 <0x0 0x45000000 0x0 0x1000>;
arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi+2−2
@@ -33,7 +33,7 @@ · 32 unmodified lines
3333 };
3434 };
3535
36− lcd_vdd3_reg: voltage-regulator-6 {
36+ lcd_vdd3_reg: voltage-regulator-7 {
3737 compatible = "regulator-fixed";
3838 regulator-name = "LCD_VDD_2.2V";
3939 regulator-min-microvolt = <2200000>;
@@ -42,7 +42,7 @@ · 2 unmodified lines
4242 enable-active-high;
4343 };
4444
45− ps_als_reg: voltage-regulator-7 {
45+ ps_als_reg: voltage-regulator-8 {
4646 compatible = "regulator-fixed";
4747 regulator-name = "LED_A_3.0V";
4848 regulator-min-microvolt = <3000000>;
arch/arm/boot/dts/exynos4412-n710x.dts+1−1
@@ -13,7 +13,7 @@ · 12 unmodified lines
1313
1414 /* bootargs are passed in by bootloader */
1515
16− cam_vdda_reg: voltage-regulator-6 {
16+ cam_vdda_reg: voltage-regulator-7 {
1717 compatible = "regulator-fixed";
1818 regulator-name = "CAM_SENSOR_CORE_1.2V";
1919 regulator-min-microvolt = <1200000>;
arch/arm/boot/dts/imx6qdl-phytec-phycore-som.dtsi+2−2
@@ -112,7 +112,7 @@ · 111 unmodified lines
112112 regulators {
113113 vdd_arm: buck1 {
114114 regulator-name = "vdd_arm";
115− regulator-min-microvolt = <730000>;
115+ regulator-min-microvolt = <925000>;
116116 regulator-max-microvolt = <1380000>;
117117 regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>;
118118 regulator-always-on;
@@ -120,7 +120,7 @@ · 1 unmodified line
120120
121121 vdd_soc: buck2 {
122122 regulator-name = "vdd_soc";
123− regulator-min-microvolt = <730000>;
123+ regulator-min-microvolt = <1150000>;
124124 regulator-max-microvolt = <1380000>;
125125 regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>;
126126 regulator-always-on;
arch/arm/boot/dts/motorola-mapphone-common.dtsi+1−1
@@ -429,7 +429,7 @@ · 428 unmodified lines
429429 reset-gpios = <&gpio6 13 GPIO_ACTIVE_HIGH>; /* gpio173 */
430430
431431 /* gpio_183 with sys_nirq2 pad as wakeup */
432− interrupts-extended = <&gpio6 23 IRQ_TYPE_EDGE_FALLING>,
432+ interrupts-extended = <&gpio6 23 IRQ_TYPE_LEVEL_LOW>,
433433 <&omap4_pmx_core 0x160>;
434434 interrupt-names = "irq", "wakeup";
435435 wakeup-source;
arch/arm/boot/dts/omap3-n900.dts+28−16
@@ -854,34 +854,46 @@ · 853 unmodified lines
854854 compatible = "ti,omap2-onenand";
855855 reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */
856856
857+ /*
858+ * These timings are based on CONFIG_OMAP_GPMC_DEBUG=y reported
859+ * bootloader set values when booted with v5.1
860+ * (OneNAND Manufacturer: Samsung):
861+ *
862+ * cs0 GPMC_CS_CONFIG1: 0xfb001202
863+ * cs0 GPMC_CS_CONFIG2: 0x00111100
864+ * cs0 GPMC_CS_CONFIG3: 0x00020200
865+ * cs0 GPMC_CS_CONFIG4: 0x11001102
866+ * cs0 GPMC_CS_CONFIG5: 0x03101616
867+ * cs0 GPMC_CS_CONFIG6: 0x90060000
868+ */
857869 gpmc,sync-read;
858870 gpmc,sync-write;
859871 gpmc,burst-length = <16>;
860872 gpmc,burst-read;
861873 gpmc,burst-wrap;
862874 gpmc,burst-write;
863− gpmc,device-width = <2>; /* GPMC_DEVWIDTH_16BIT */
864− gpmc,mux-add-data = <2>; /* GPMC_MUX_AD */
875+ gpmc,device-width = <2>;
876+ gpmc,mux-add-data = <2>;
865877 gpmc,cs-on-ns = <0>;
866− gpmc,cs-rd-off-ns = <87>;
867− gpmc,cs-wr-off-ns = <87>;
878+ gpmc,cs-rd-off-ns = <102>;
879+ gpmc,cs-wr-off-ns = <102>;
868880 gpmc,adv-on-ns = <0>;
869− gpmc,adv-rd-off-ns = <10>;
870− gpmc,adv-wr-off-ns = <10>;
871− gpmc,oe-on-ns = <15>;
872− gpmc,oe-off-ns = <87>;
881+ gpmc,adv-rd-off-ns = <12>;
882+ gpmc,adv-wr-off-ns = <12>;
883+ gpmc,oe-on-ns = <12>;
884+ gpmc,oe-off-ns = <102>;
873885 gpmc,we-on-ns = <0>;
874− gpmc,we-off-ns = <87>;
875− gpmc,rd-cycle-ns = <112>;
876− gpmc,wr-cycle-ns = <112>;
877− gpmc,access-ns = <81>;
878− gpmc,page-burst-access-ns = <15>;
886+ gpmc,we-off-ns = <102>;
887+ gpmc,rd-cycle-ns = <132>;
888+ gpmc,wr-cycle-ns = <132>;
889+ gpmc,access-ns = <96>;
890+ gpmc,page-burst-access-ns = <18>;
879891 gpmc,bus-turnaround-ns = <0>;
880892 gpmc,cycle2cycle-delay-ns = <0>;
881893 gpmc,wait-monitoring-ns = <0>;
882− gpmc,clk-activation-ns = <5>;
883− gpmc,wr-data-mux-bus-ns = <30>;
884− gpmc,wr-access-ns = <81>;
894+ gpmc,clk-activation-ns = <6>;
895+ gpmc,wr-data-mux-bus-ns = <36>;
896+ gpmc,wr-access-ns = <96>;
885897 gpmc,sync-clk-ps = <15000>;
886898
887899 /*
arch/arm/boot/dts/omap5.dtsi+1−0
@@ -143,6 +143,7 @@ · 142 unmodified lines
143143 #address-cells = <1>;
144144 #size-cells = <1>;
145145 ranges = <0 0 0 0xc0000000>;
146+ dma-ranges = <0x80000000 0x0 0x80000000 0x80000000>;
146147 ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
147148 reg = <0 0x44000000 0 0x2000>,
148149 <0 0x44800000 0 0x3000>,
arch/arm/boot/dts/ox810se.dtsi+2−2
@@ -323,8 +323,8 @@ · 322 unmodified lines
323323 interrupt-controller;
324324 reg = <0 0x200>;
325325 #interrupt-cells = <1>;
326− valid-mask = <0xFFFFFFFF>;
327− clear-mask = <0>;
326+ valid-mask = <0xffffffff>;
327+ clear-mask = <0xffffffff>;
328328 };
329329
330330 timer0: timer@200 {
arch/arm/boot/dts/ox820.dtsi+2−2
@@ -240,8 +240,8 @@ · 239 unmodified lines
240240 reg = <0 0x200>;
241241 interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
242242 #interrupt-cells = <1>;
243− valid-mask = <0xFFFFFFFF>;
244− clear-mask = <0>;
243+ valid-mask = <0xffffffff>;
244+ clear-mask = <0xffffffff>;
245245 };
246246
247247 timer0: timer@200 {
arch/arm/boot/dts/sun8i-a33.dtsi+1−1
@@ -215,7 +215,7 @@ · 214 unmodified lines
215215 };
216216
217217 crypto: crypto-engine@1c15000 {
218− compatible = "allwinner,sun4i-a10-crypto";
218+ compatible = "allwinner,sun8i-a33-crypto";
219219 reg = <0x01c15000 0x1000>;
220220 interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
221221 clocks = <&ccu CLK_BUS_SS>, <&ccu CLK_SS>;
arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts+4−3
@@ -374,8 +374,8 @@ · 373 unmodified lines
374374 };
375375
376376 &reg_dldo3 {
377− regulator-min-microvolt = <2800000>;
378− regulator-max-microvolt = <2800000>;
377+ regulator-min-microvolt = <1800000>;
378+ regulator-max-microvolt = <1800000>;
379379 regulator-name = "vdd-csi";
380380 };
381381
@@ -498,7 +498,8 @@ · 116 unmodified lines
498498 };
499499
500500 &usbphy {
501− usb0_id_det-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
501+ usb0_id_det-gpios = <&pio 7 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH11 */
502+ usb0_vbus_power-supply = <&usb_power_supply>;
502503 usb0_vbus-supply = <&reg_drivevbus>;
503504 usb1_vbus-supply = <&reg_vmain>;
504505 usb2_vbus-supply = <&reg_vmain>;
arch/arm/boot/dts/sun8i-a83t.dtsi+3−3
@@ -1006,10 +1006,10 @@ · 1005 unmodified lines
10061006 reg = <0x01c30000 0x104>;
10071007 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
10081008 interrupt-names = "macirq";
1009− resets = <&ccu CLK_BUS_EMAC>;
1010− reset-names = "stmmaceth";
1011− clocks = <&ccu RST_BUS_EMAC>;
1009+ clocks = <&ccu CLK_BUS_EMAC>;
10121010 clock-names = "stmmaceth";
1011+ resets = <&ccu RST_BUS_EMAC>;
1012+ reset-names = "stmmaceth";
10131013 status = "disabled";
10141014
10151015 mdio: mdio {
arch/arm/boot/dts/sun8i-r40.dtsi+62−63
@@ -181,6 +181,32 @@ · 180 unmodified lines
181181 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
182182 };
183183
184+ spi0: spi@1c05000 {
185+ compatible = "allwinner,sun8i-r40-spi",
186+ "allwinner,sun8i-h3-spi";
187+ reg = <0x01c05000 0x1000>;
188+ interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
189+ clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
190+ clock-names = "ahb", "mod";
191+ resets = <&ccu RST_BUS_SPI0>;
192+ status = "disabled";
193+ #address-cells = <1>;
194+ #size-cells = <0>;
195+ };
196+
197+ spi1: spi@1c06000 {
198+ compatible = "allwinner,sun8i-r40-spi",
199+ "allwinner,sun8i-h3-spi";
200+ reg = <0x01c06000 0x1000>;
201+ interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
202+ clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
203+ clock-names = "ahb", "mod";
204+ resets = <&ccu RST_BUS_SPI1>;
205+ status = "disabled";
206+ #address-cells = <1>;
207+ #size-cells = <0>;
208+ };
209+
184210 csi0: csi@1c09000 {
185211 compatible = "allwinner,sun8i-r40-csi0",
186212 "allwinner,sun7i-a20-csi0";
@@ -290,6 +316,29 @@ · 103 unmodified lines
290316 resets = <&ccu RST_BUS_CE>;
291317 };
292318
319+ spi2: spi@1c17000 {
320+ compatible = "allwinner,sun8i-r40-spi",
321+ "allwinner,sun8i-h3-spi";
322+ reg = <0x01c17000 0x1000>;
323+ interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
324+ clocks = <&ccu CLK_BUS_SPI2>, <&ccu CLK_SPI2>;
325+ clock-names = "ahb", "mod";
326+ resets = <&ccu RST_BUS_SPI2>;
327+ status = "disabled";
328+ #address-cells = <1>;
329+ #size-cells = <0>;
330+ };
331+
332+ ahci: sata@1c18000 {
333+ compatible = "allwinner,sun8i-r40-ahci";
334+ reg = <0x01c18000 0x1000>;
335+ interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
336+ clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
337+ resets = <&ccu RST_BUS_SATA>;
338+ reset-names = "ahci";
339+ status = "disabled";
340+ };
341+
293342 ehci1: usb@1c19000 {
294343 compatible = "allwinner,sun8i-r40-ehci", "generic-ehci";
295344 reg = <0x01c19000 0x100>;
@@ -336,6 +385,19 @@ · 40 unmodified lines
336385 status = "disabled";
337386 };
338387
388+ spi3: spi@1c1f000 {
389+ compatible = "allwinner,sun8i-r40-spi",
390+ "allwinner,sun8i-h3-spi";
391+ reg = <0x01c1f000 0x1000>;
392+ interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
393+ clocks = <&ccu CLK_BUS_SPI3>, <&ccu CLK_SPI3>;
394+ clock-names = "ahb", "mod";
395+ resets = <&ccu RST_BUS_SPI3>;
396+ status = "disabled";
397+ #address-cells = <1>;
398+ #size-cells = <0>;
399+ };
400+
339401 ccu: clock@1c20000 {
340402 compatible = "allwinner,sun8i-r40-ccu";
341403 reg = <0x01c20000 0x400>;
@@ -653,69 +715,6 @@ · 311 unmodified lines
653715 #size-cells = <0>;
654716 };
655717
656− spi0: spi@1c05000 {
657− compatible = "allwinner,sun8i-r40-spi",
658− "allwinner,sun8i-h3-spi";
659− reg = <0x01c05000 0x1000>;
660− interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
661− clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
662− clock-names = "ahb", "mod";
663− resets = <&ccu RST_BUS_SPI0>;
664− status = "disabled";
665− #address-cells = <1>;
666− #size-cells = <0>;
667− };
668−
669− spi1: spi@1c06000 {
670− compatible = "allwinner,sun8i-r40-spi",
671− "allwinner,sun8i-h3-spi";
672− reg = <0x01c06000 0x1000>;
673− interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
674− clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
675− clock-names = "ahb", "mod";
676− resets = <&ccu RST_BUS_SPI1>;
677− status = "disabled";
678− #address-cells = <1>;
679− #size-cells = <0>;
680− };
681−
682− spi2: spi@1c07000 {
683− compatible = "allwinner,sun8i-r40-spi",
684− "allwinner,sun8i-h3-spi";
685− reg = <0x01c07000 0x1000>;
686− interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
687− clocks = <&ccu CLK_BUS_SPI2>, <&ccu CLK_SPI2>;
688− clock-names = "ahb", "mod";
689− resets = <&ccu RST_BUS_SPI2>;
690− status = "disabled";
691− #address-cells = <1>;
692− #size-cells = <0>;
693− };
694−
695− spi3: spi@1c0f000 {
696− compatible = "allwinner,sun8i-r40-spi",
697− "allwinner,sun8i-h3-spi";
698− reg = <0x01c0f000 0x1000>;
699− interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
700− clocks = <&ccu CLK_BUS_SPI3>, <&ccu CLK_SPI3>;
701− clock-names = "ahb", "mod";
702− resets = <&ccu RST_BUS_SPI3>;
703− status = "disabled";
704− #address-cells = <1>;
705− #size-cells = <0>;
706− };
707−
708− ahci: sata@1c18000 {
709− compatible = "allwinner,sun8i-r40-ahci";
710− reg = <0x01c18000 0x1000>;
711− interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
712− clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
713− resets = <&ccu RST_BUS_SATA>;
714− reset-names = "ahci";
715− status = "disabled";
716−
717− };
718−
719718 gmac: ethernet@1c50000 {
720719 compatible = "allwinner,sun8i-r40-gmac";
721720 syscon = <&ccu>;
arch/arm/kernel/vdso.c+2−0
@@ -94,6 +94,8 @@ static bool __init cntvct_functional(void) · 93 unmodified lines
9494 * this.
9595 */
9696 np = of_find_compatible_node(NULL, NULL, "arm,armv7-timer");
97+ if (!np)
98+ np = of_find_compatible_node(NULL, NULL, "arm,armv8-timer");
9799 if (!np)
98100 goto out_put;
99101
arch/arm/lib/copy_from_user.S+1−1
@@ -118,7 +118,7 @@ ENTRY(arm_copy_from_user) · 117 unmodified lines
118118
119119 ENDPROC(arm_copy_from_user)
120120
121− .pushsection .fixup,"ax"
121+ .pushsection .text.fixup,"ax"
122122 .align 0
123123 copy_abort_preamble
124124 ldmfd sp!, {r1, r2, r3}
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi+1−1
@@ -53,7 +53,7 @@ · 52 unmodified lines
5353 * PSCI node is not added default, U-boot will add missing
5454 * parts if it determines to use PSCI.
5555 */
56− entry-method = "arm,psci";
56+ entry-method = "psci";
5757
5858 CPU_PW20: cpu-pw20 {
5959 compatible = "arm,idle-state";
arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi+2−0
@@ -20,6 +20,8 @@ · 19 unmodified lines
2020 };
2121
2222 &fman0 {
23+ fsl,erratum-a050385;
24+
2325 /* these aliases provide the FMan ports mapping */
2426 enet0: ethernet@e0000 {
2527 };
arch/arm64/boot/dts/freescale/fsl-ls1043a-rdb.dts+2−2
@@ -119,12 +119,12 @@ · 118 unmodified lines
119119
120120 ethernet@e4000 {
121121 phy-handle = <&rgmii_phy1>;
122− phy-connection-type = "rgmii-txid";
122+ phy-connection-type = "rgmii-id";
123123 };
124124
125125 ethernet@e6000 {
126126 phy-handle = <&rgmii_phy2>;
127− phy-connection-type = "rgmii-txid";
127+ phy-connection-type = "rgmii-id";
128128 };
129129
130130 ethernet@e8000 {
arch/arm64/boot/dts/freescale/fsl-ls1046a-rdb.dts+2−2
@@ -131,12 +131,12 @@ · 130 unmodified lines
131131 &fman0 {
132132 ethernet@e4000 {
133133 phy-handle = <&rgmii_phy1>;
134− phy-connection-type = "rgmii";
134+ phy-connection-type = "rgmii-id";
135135 };
136136
137137 ethernet@e6000 {
138138 phy-handle = <&rgmii_phy2>;
139− phy-connection-type = "rgmii";
139+ phy-connection-type = "rgmii-id";
140140 };
141141
142142 ethernet@e8000 {
arch/arm64/boot/dts/sprd/sc9863a.dtsi+1−1
@@ -108,7 +108,7 @@ · 107 unmodified lines
108108 };
109109
110110 idle-states {
111− entry-method = "arm,psci";
111+ entry-method = "psci";
112112 CORE_PD: core-pd {
113113 compatible = "arm,idle-state";
114114 entry-latency-us = <4000>;
arch/arm64/crypto/chacha-neon-glue.c+4−4
@@ -55,10 +55,10 @@ static void chacha_doneon(u32 *state, u8 *dst, const u8 *src, · 54 unmodified lines
5555 break;
5656 }
5757 chacha_4block_xor_neon(state, dst, src, nrounds, l);
58− bytes -= CHACHA_BLOCK_SIZE * 5;
59− src += CHACHA_BLOCK_SIZE * 5;
60− dst += CHACHA_BLOCK_SIZE * 5;
61− state[12] += 5;
58+ bytes -= l;
59+ src += l;
60+ dst += l;
61+ state[12] += DIV_ROUND_UP(l, CHACHA_BLOCK_SIZE);
6262 }
6363 }
6464
arch/arm64/include/asm/alternative.h+1−1
@@ -221,7 +221,7 @@ alternative_endif · 220 unmodified lines
221221
222222 .macro user_alt, label, oldinstr, newinstr, cond
223223 9999: alternative_insn "\oldinstr", "\newinstr", \cond
224− _ASM_EXTABLE 9999b, \label
224+ _asm_extable 9999b, \label
225225 .endm
226226
227227 /*
arch/arm64/include/asm/mmu.h+1−3
@@ -29,11 +29,9 @@ typedef struct { · 28 unmodified lines
2929 */
3030 #define ASID(mm) ((mm)->context.id.counter & 0xffff)
3131
32−extern bool arm64_use_ng_mappings;
33−
3432 static inline bool arm64_kernel_unmapped_at_el0(void)
3533 {
36− return arm64_use_ng_mappings;
34+ return cpus_have_const_cap(ARM64_UNMAP_KERNEL_AT_EL0);
3735 }
3836
3937 typedef void (*bp_hardening_cb_t)(void);
arch/arm64/include/asm/pgtable-prot.h+4−2
@@ -23,11 +23,13 @@ · 22 unmodified lines
2323
2424 #include <asm/pgtable-types.h>
2525
26+extern bool arm64_use_ng_mappings;
27+
2628 #define _PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
2729 #define _PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)
2830
29−#define PTE_MAYBE_NG (arm64_kernel_unmapped_at_el0() ? PTE_NG : 0)
30−#define PMD_MAYBE_NG (arm64_kernel_unmapped_at_el0() ? PMD_SECT_NG : 0)
31+#define PTE_MAYBE_NG (arm64_use_ng_mappings ? PTE_NG : 0)
32+#define PMD_MAYBE_NG (arm64_use_ng_mappings ? PMD_SECT_NG : 0)
3133
3234 #define PROT_DEFAULT (_PROT_DEFAULT | PTE_MAYBE_NG)
3335 #define PROT_SECT_DEFAULT (_PROT_SECT_DEFAULT | PMD_MAYBE_NG)
arch/arm64/include/asm/unistd.h+1−1
@@ -25,8 +25,8 @@ · 24 unmodified lines
2525 #define __NR_compat_gettimeofday 78
2626 #define __NR_compat_sigreturn 119
2727 #define __NR_compat_rt_sigreturn 173
28−#define __NR_compat_clock_getres 247
2928 #define __NR_compat_clock_gettime 263
29+#define __NR_compat_clock_getres 264
3030 #define __NR_compat_clock_gettime64 403
3131 #define __NR_compat_clock_getres_time64 406
3232
arch/arm64/kernel/smp.c+20−5
@@ -958,11 +958,22 @@ void tick_broadcast(const struct cpumask *mask) · 957 unmodified lines
958958 }
959959 #endif
960960
961+/*
962+ * The number of CPUs online, not counting this CPU (which may not be
963+ * fully online and so not counted in num_online_cpus()).
964+ */
965+static inline unsigned int num_other_online_cpus(void)
966+{
967+ unsigned int this_cpu_online = cpu_online(smp_processor_id());
968+
969+ return num_online_cpus() - this_cpu_online;
970+}
971+
961972 void smp_send_stop(void)
962973 {
963974 unsigned long timeout;
964975
965− if (num_online_cpus() > 1) {
976+ if (num_other_online_cpus()) {
966977 cpumask_t mask;
967978
968979 cpumask_copy(&mask, cpu_online_mask);
@@ -975,10 +986,10 @@ void smp_send_stop(void) · 6 unmodified lines
975986
976987 /* Wait up to one second for other CPUs to stop */
977988 timeout = USEC_PER_SEC;
978− while (num_online_cpus() > 1 && timeout--)
989+ while (num_other_online_cpus() && timeout--)
979990 udelay(1);
980991
981− if (num_online_cpus() > 1)
992+ if (num_other_online_cpus())
982993 pr_warn("SMP: failed to stop secondary CPUs %*pbl\n",
983994 cpumask_pr_args(cpu_online_mask));
984995
@@ -1001,7 +1012,11 @@ void crash_smp_send_stop(void) · 16 unmodified lines
10011012
10021013 cpus_stopped = 1;
10031014
1004− if (num_online_cpus() == 1) {
1015+ /*
1016+ * If this cpu is the only one alive at this point in time, online or
1017+ * not, there are no stop messages to be sent around, so just back out.
1018+ */
1019+ if (num_other_online_cpus() == 0) {
10051020 sdei_mask_local_cpu();
10061021 return;
10071022 }
@@ -1009,7 +1024,7 @@ void crash_smp_send_stop(void) · 1 unmodified line
10091024 cpumask_copy(&mask, cpu_online_mask);
10101025 cpumask_clear_cpu(smp_processor_id(), &mask);
10111026
1012− atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
1027+ atomic_set(&waiting_for_crash_ipi, num_other_online_cpus());
10131028
10141029 pr_crit("SMP: stopping secondary CPUs\n");
10151030 smp_cross_call(&mask, IPI_CPU_CRASH_STOP);
arch/mips/boot/dts/ingenic/ci20.dts+28−16
@@ -4,6 +4,8 @@ · 3 unmodified lines
44 #include "jz4780.dtsi"
55 #include <dt-bindings/clock/ingenic,tcu.h>
66 #include <dt-bindings/gpio/gpio.h>
7+#include <dt-bindings/interrupt-controller/irq.h>
8+#include <dt-bindings/regulator/active-semi,8865-regulator.h>
79
810 / {
911 compatible = "img,ci20", "ingenic,jz4780";
@@ -163,63 +165,71 @@ · 153 unmodified lines
163165
164166 regulators {
165167 vddcore: SUDCDC1 {
166− regulator-name = "VDDCORE";
168+ regulator-name = "DCDC_REG1";
167169 regulator-min-microvolt = <1100000>;
168170 regulator-max-microvolt = <1100000>;
169171 regulator-always-on;
170172 };
171173 vddmem: SUDCDC2 {
172− regulator-name = "VDDMEM";
174+ regulator-name = "DCDC_REG2";
173175 regulator-min-microvolt = <1500000>;
174176 regulator-max-microvolt = <1500000>;
175177 regulator-always-on;
176178 };
177179 vcc_33: SUDCDC3 {
178− regulator-name = "VCC33";
180+ regulator-name = "DCDC_REG3";
179181 regulator-min-microvolt = <3300000>;
180182 regulator-max-microvolt = <3300000>;
181183 regulator-always-on;
182184 };
183185 vcc_50: SUDCDC4 {
184− regulator-name = "VCC50";
186+ regulator-name = "SUDCDC_REG4";
185187 regulator-min-microvolt = <5000000>;
186188 regulator-max-microvolt = <5000000>;
187189 regulator-always-on;
188190 };
189191 vcc_25: LDO_REG5 {
190− regulator-name = "VCC25";
192+ regulator-name = "LDO_REG5";
191193 regulator-min-microvolt = <2500000>;
192194 regulator-max-microvolt = <2500000>;
193195 regulator-always-on;
194196 };
195197 wifi_io: LDO_REG6 {
196− regulator-name = "WIFIIO";
198+ regulator-name = "LDO_REG6";
197199 regulator-min-microvolt = <2500000>;
198200 regulator-max-microvolt = <2500000>;
199201 regulator-always-on;
200202 };
201203 vcc_28: LDO_REG7 {
202− regulator-name = "VCC28";
204+ regulator-name = "LDO_REG7";
203205 regulator-min-microvolt = <2800000>;
204206 regulator-max-microvolt = <2800000>;
205207 regulator-always-on;
206208 };
207209 vcc_15: LDO_REG8 {
208− regulator-name = "VCC15";
210+ regulator-name = "LDO_REG8";
209211 regulator-min-microvolt = <1500000>;
210212 regulator-max-microvolt = <1500000>;
211213 regulator-always-on;
212214 };
213− vcc_18: LDO_REG9 {
214− regulator-name = "VCC18";
215− regulator-min-microvolt = <1800000>;
216− regulator-max-microvolt = <1800000>;
215+ vrtc_18: LDO_REG9 {
216+ regulator-name = "LDO_REG9";
217+ /* Despite the datasheet stating 3.3V
218+ * for REG9 and the driver expecting that,
219+ * REG9 outputs 1.8V.
220+ * Likely the CI20 uses a proprietary
221+ * factory programmed chip variant.
222+ * Since this is a simple on/off LDO the
223+ * exact values do not matter.
224+ */
225+ regulator-min-microvolt = <3300000>;
226+ regulator-max-microvolt = <3300000>;
217227 regulator-always-on;
218228 };
219229 vcc_11: LDO_REG10 {
220− regulator-name = "VCC11";
221− regulator-min-microvolt = <1100000>;
222− regulator-max-microvolt = <1100000>;
230+ regulator-name = "LDO_REG10";
231+ regulator-min-microvolt = <1200000>;
232+ regulator-max-microvolt = <1200000>;
223233 regulator-always-on;
224234 };
225235 };
@@ -261,7 +271,9 @@ · 35 unmodified lines
261271 rtc@51 {
262272 compatible = "nxp,pcf8563";
263273 reg = <0x51>;
264− interrupts = <110>;
274+
275+ interrupt-parent = <&gpf>;
276+ interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
265277 };
266278 };
267279
arch/mips/kernel/setup.c+2−1
@@ -605,7 +605,8 @@ static void __init bootcmdline_init(char **cmdline_p) · 604 unmodified lines
605605 * If we're configured to take boot arguments from DT, look for those
606606 * now.
607607 */
608− if (IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_DTB))
608+ if (IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_DTB) ||
609+ IS_ENABLED(CONFIG_MIPS_CMDLINE_DTB_EXTEND))
609610 of_scan_flat_dt(bootcmdline_scan_chosen, &dt_bootargs);
610611 #endif
611612
arch/parisc/Kconfig+5−0
@@ -79,6 +79,11 @@ config MMU · 78 unmodified lines
7979 config STACK_GROWSUP
8080 def_bool y
8181
82+config ARCH_DEFCONFIG
83+ string
84+ default "arch/parisc/configs/generic-32bit_defconfig" if !64BIT
85+ default "arch/parisc/configs/generic-64bit_defconfig" if 64BIT
86+
8287 config GENERIC_LOCKBREAK
8388 bool
8489 default y
arch/parisc/Makefile+7−0
@@ -34,6 +34,13 @@ CC_ARCHES = hppa hppa2.0 hppa1.1 · 33 unmodified lines
3434 LD_BFD := elf32-hppa-linux
3535 endif
3636
37+# select defconfig based on actual architecture
38+ifeq ($(shell uname -m),parisc64)
39+ KBUILD_DEFCONFIG := generic-64bit_defconfig
40+else
41+ KBUILD_DEFCONFIG := generic-32bit_defconfig
42+endif
43+
3744 export LD_BFD
3845
3946 ifneq ($(SUBARCH),$(UTS_MACHINE))
arch/powerpc/kvm/book3s_pr.c+1−0
@@ -1817,6 +1817,7 @@ static void kvmppc_core_vcpu_free_pr(struct kvm_vcpu *vcpu) · 1816 unmodified lines
18171817 {
18181818 struct kvmppc_vcpu_book3s *vcpu_book3s = to_book3s(vcpu);
18191819
1820+ kvmppc_mmu_destroy_pr(vcpu);
18201821 free_page((unsigned long)vcpu->arch.shared & PAGE_MASK);
18211822 #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
18221823 kfree(vcpu->arch.shadow_vcpu);
arch/powerpc/kvm/powerpc.c+0−2
@@ -759,7 +759,6 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) · 758 unmodified lines
759759 return 0;
760760
761761 out_vcpu_uninit:
762− kvmppc_mmu_destroy(vcpu);
763762 kvmppc_subarch_vcpu_uninit(vcpu);
764763 return err;
765764 }
@@ -792,7 +791,6 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) · 26 unmodified lines
792791
793792 kvmppc_core_vcpu_free(vcpu);
794793
795− kvmppc_mmu_destroy(vcpu);
796794 kvmppc_subarch_vcpu_uninit(vcpu);
797795 }
798796
arch/powerpc/mm/kasan/kasan_init_32.c+2−7
@@ -120,12 +120,6 @@ static void __init kasan_unmap_early_shadow_vmalloc(void) · 119 unmodified lines
120120 unsigned long k_cur;
121121 phys_addr_t pa = __pa(kasan_early_shadow_page);
122122
123− if (!early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) {
124− int ret = kasan_init_shadow_page_tables(k_start, k_end);
125−
126− if (ret)
127− panic("kasan: kasan_init_shadow_page_tables() failed");
128− }
129123 for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) {
130124 pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur);
131125 pte_t *ptep = pte_offset_kernel(pmd, k_cur);
@@ -143,7 +137,8 @@ void __init kasan_mmu_init(void) · 11 unmodified lines
143137 int ret;
144138 struct memblock_region *reg;
145139
146− if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) {
140+ if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ||
141+ IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
147142 ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END);
148143
149144 if (ret)
arch/riscv/Kconfig+0−1
@@ -50,7 +50,6 @@ config RISCV · 49 unmodified lines
5050 select PCI_DOMAINS_GENERIC if PCI
5151 select PCI_MSI if PCI
5252 select RISCV_TIMER
53− select UACCESS_MEMCPY if !MMU
5453 select GENERIC_IRQ_MULTI_HANDLER
5554 select GENERIC_ARCH_TOPOLOGY if SMP
5655 select ARCH_HAS_PTE_SPECIAL
arch/riscv/Kconfig.socs+0−14
@@ -12,20 +12,6 @@ config SOC_SIFIVE · 11 unmodified lines
1212
1313 config SOC_VIRT
1414 bool "QEMU Virt Machine"
15− select VIRTIO_PCI
16− select VIRTIO_BALLOON
17− select VIRTIO_MMIO
18− select VIRTIO_CONSOLE
19− select VIRTIO_NET
20− select NET_9P_VIRTIO
21− select VIRTIO_BLK
22− select SCSI_VIRTIO
23− select DRM_VIRTIO_GPU
24− select HW_RANDOM_VIRTIO
25− select RPMSG_CHAR
26− select RPMSG_VIRTIO
27− select CRYPTO_DEV_VIRTIO
28− select VIRTIO_INPUT
2915 select POWER_RESET_SYSCON
3016 select POWER_RESET_SYSCON_POWEROFF
3117 select GOLDFISH
arch/riscv/configs/defconfig+15−1
@@ -31,6 +31,7 @@ CONFIG_IP_PNP_BOOTP=y · 30 unmodified lines
3131 CONFIG_IP_PNP_RARP=y
3232 CONFIG_NETLINK_DIAG=y
3333 CONFIG_NET_9P=y
34+CONFIG_NET_9P_VIRTIO=y
3435 CONFIG_PCI=y
3536 CONFIG_PCIEPORTBUS=y
3637 CONFIG_PCI_HOST_GENERIC=y
@@ -38,12 +39,15 @@ CONFIG_PCIE_XILINX=y · 1 unmodified line
3839 CONFIG_DEVTMPFS=y
3940 CONFIG_DEVTMPFS_MOUNT=y
4041 CONFIG_BLK_DEV_LOOP=y
42+CONFIG_VIRTIO_BLK=y
4143 CONFIG_BLK_DEV_SD=y
4244 CONFIG_BLK_DEV_SR=y
45+CONFIG_SCSI_VIRTIO=y
4346 CONFIG_ATA=y
4447 CONFIG_SATA_AHCI=y
4548 CONFIG_SATA_AHCI_PLATFORM=y
4649 CONFIG_NETDEVICES=y
50+CONFIG_VIRTIO_NET=y
4751 CONFIG_MACB=y
4852 CONFIG_E1000E=y
4953 CONFIG_R8169=y
@@ -54,13 +58,16 @@ CONFIG_SERIAL_8250_CONSOLE=y · 4 unmodified lines
5458 CONFIG_SERIAL_OF_PLATFORM=y
5559 CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
5660 CONFIG_HVC_RISCV_SBI=y
61+CONFIG_VIRTIO_CONSOLE=y
5762 CONFIG_HW_RANDOM=y
63+CONFIG_HW_RANDOM_VIRTIO=y
5864 CONFIG_SPI=y
5965 CONFIG_SPI_SIFIVE=y
6066 # CONFIG_PTP_1588_CLOCK is not set
6167 CONFIG_POWER_RESET=y
6268 CONFIG_DRM=y
6369 CONFIG_DRM_RADEON=y
70+CONFIG_DRM_VIRTIO_GPU=y
6471 CONFIG_FRAMEBUFFER_CONSOLE=y
6572 CONFIG_USB=y
6673 CONFIG_USB_XHCI_HCD=y
@@ -74,6 +81,12 @@ CONFIG_USB_UAS=y · 7 unmodified lines
7481 CONFIG_MMC=y
7582 CONFIG_MMC_SPI=y
7683 CONFIG_RTC_CLASS=y
84+CONFIG_VIRTIO_PCI=y
85+CONFIG_VIRTIO_BALLOON=y
86+CONFIG_VIRTIO_INPUT=y
87+CONFIG_VIRTIO_MMIO=y
88+CONFIG_RPMSG_CHAR=y
89+CONFIG_RPMSG_VIRTIO=y
7790 CONFIG_EXT4_FS=y
7891 CONFIG_EXT4_FS_POSIX_ACL=y
7992 CONFIG_AUTOFS4_FS=y
@@ -88,16 +101,17 @@ CONFIG_NFS_V4_2=y · 8 unmodified lines
88101 CONFIG_ROOT_NFS=y
89102 CONFIG_9P_FS=y
90103 CONFIG_CRYPTO_USER_API_HASH=y
104+CONFIG_CRYPTO_DEV_VIRTIO=y
91105 CONFIG_PRINTK_TIME=y
92106 CONFIG_DEBUG_FS=y
93107 CONFIG_DEBUG_PAGEALLOC=y
108+CONFIG_SCHED_STACK_END_CHECK=y
94109 CONFIG_DEBUG_VM=y
95110 CONFIG_DEBUG_VM_PGFLAGS=y
96111 CONFIG_DEBUG_MEMORY_INIT=y
97112 CONFIG_DEBUG_PER_CPU_MAPS=y
98113 CONFIG_SOFTLOCKUP_DETECTOR=y
99114 CONFIG_WQ_WATCHDOG=y
100−CONFIG_SCHED_STACK_END_CHECK=y
101115 CONFIG_DEBUG_TIMEKEEPING=y
102116 CONFIG_DEBUG_RT_MUTEXES=y
103117 CONFIG_DEBUG_SPINLOCK=y
arch/riscv/configs/rv32_defconfig+15−1
@@ -31,6 +31,7 @@ CONFIG_IP_PNP_BOOTP=y · 30 unmodified lines
3131 CONFIG_IP_PNP_RARP=y
3232 CONFIG_NETLINK_DIAG=y
3333 CONFIG_NET_9P=y
34+CONFIG_NET_9P_VIRTIO=y
3435 CONFIG_PCI=y
3536 CONFIG_PCIEPORTBUS=y
3637 CONFIG_PCI_HOST_GENERIC=y
@@ -38,12 +39,15 @@ CONFIG_PCIE_XILINX=y · 1 unmodified line
3839 CONFIG_DEVTMPFS=y
3940 CONFIG_DEVTMPFS_MOUNT=y
4041 CONFIG_BLK_DEV_LOOP=y
42+CONFIG_VIRTIO_BLK=y
4143 CONFIG_BLK_DEV_SD=y
4244 CONFIG_BLK_DEV_SR=y
45+CONFIG_SCSI_VIRTIO=y
4346 CONFIG_ATA=y
4447 CONFIG_SATA_AHCI=y
4548 CONFIG_SATA_AHCI_PLATFORM=y
4649 CONFIG_NETDEVICES=y
50+CONFIG_VIRTIO_NET=y
4751 CONFIG_MACB=y
4852 CONFIG_E1000E=y
4953 CONFIG_R8169=y
@@ -54,11 +58,14 @@ CONFIG_SERIAL_8250_CONSOLE=y · 4 unmodified lines
5458 CONFIG_SERIAL_OF_PLATFORM=y
5559 CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
5660 CONFIG_HVC_RISCV_SBI=y
61+CONFIG_VIRTIO_CONSOLE=y
5762 CONFIG_HW_RANDOM=y
63+CONFIG_HW_RANDOM_VIRTIO=y
5864 # CONFIG_PTP_1588_CLOCK is not set
5965 CONFIG_POWER_RESET=y
6066 CONFIG_DRM=y
6167 CONFIG_DRM_RADEON=y
68+CONFIG_DRM_VIRTIO_GPU=y
6269 CONFIG_FRAMEBUFFER_CONSOLE=y
6370 CONFIG_USB=y
6471 CONFIG_USB_XHCI_HCD=y
@@ -70,6 +77,12 @@ CONFIG_USB_OHCI_HCD_PLATFORM=y · 5 unmodified lines
7077 CONFIG_USB_STORAGE=y
7178 CONFIG_USB_UAS=y
7279 CONFIG_RTC_CLASS=y
80+CONFIG_VIRTIO_PCI=y
81+CONFIG_VIRTIO_BALLOON=y
82+CONFIG_VIRTIO_INPUT=y
83+CONFIG_VIRTIO_MMIO=y
84+CONFIG_RPMSG_CHAR=y
85+CONFIG_RPMSG_VIRTIO=y
7386 CONFIG_EXT4_FS=y
7487 CONFIG_EXT4_FS_POSIX_ACL=y
7588 CONFIG_AUTOFS4_FS=y
@@ -84,16 +97,17 @@ CONFIG_NFS_V4_2=y · 8 unmodified lines
8497 CONFIG_ROOT_NFS=y
8598 CONFIG_9P_FS=y
8699 CONFIG_CRYPTO_USER_API_HASH=y
100+CONFIG_CRYPTO_DEV_VIRTIO=y
87101 CONFIG_PRINTK_TIME=y
88102 CONFIG_DEBUG_FS=y
89103 CONFIG_DEBUG_PAGEALLOC=y
104+CONFIG_SCHED_STACK_END_CHECK=y
90105 CONFIG_DEBUG_VM=y
91106 CONFIG_DEBUG_VM_PGFLAGS=y
92107 CONFIG_DEBUG_MEMORY_INIT=y
93108 CONFIG_DEBUG_PER_CPU_MAPS=y
94109 CONFIG_SOFTLOCKUP_DETECTOR=y
95110 CONFIG_WQ_WATCHDOG=y
96−CONFIG_SCHED_STACK_END_CHECK=y
97111 CONFIG_DEBUG_TIMEKEEPING=y
98112 CONFIG_DEBUG_RT_MUTEXES=y
99113 CONFIG_DEBUG_SPINLOCK=y
arch/riscv/include/asm/clint.h+4−4
@@ -15,12 +15,12 @@ static inline void clint_send_ipi_single(unsigned long hartid) · 14 unmodified lines
1515 writel(1, clint_ipi_base + hartid);
1616 }
1717
18−static inline void clint_send_ipi_mask(const struct cpumask *hartid_mask)
18+static inline void clint_send_ipi_mask(const struct cpumask *mask)
1919 {
20− int hartid;
20+ int cpu;
2121
22− for_each_cpu(hartid, hartid_mask)
23− clint_send_ipi_single(hartid);
22+ for_each_cpu(cpu, mask)
23+ clint_send_ipi_single(cpuid_to_hartid_map(cpu));
2424 }
2525
2626 static inline void clint_clear_ipi(unsigned long hartid)
arch/riscv/include/asm/pgtable.h+41−37
@@ -19,6 +19,47 @@ · 18 unmodified lines
1919 #include <asm/tlbflush.h>
2020 #include <linux/mm_types.h>
2121
22+#ifdef CONFIG_MMU
23+
24+#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
25+#define VMALLOC_END (PAGE_OFFSET - 1)
26+#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
27+
28+#define BPF_JIT_REGION_SIZE (SZ_128M)
29+#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
30+#define BPF_JIT_REGION_END (VMALLOC_END)
31+
32+/*
33+ * Roughly size the vmemmap space to be large enough to fit enough
34+ * struct pages to map half the virtual address space. Then
35+ * position vmemmap directly below the VMALLOC region.
36+ */
37+#define VMEMMAP_SHIFT \
38+ (CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
39+#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
40+#define VMEMMAP_END (VMALLOC_START - 1)
41+#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
42+
43+/*
44+ * Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
45+ * is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
46+ */
47+#define vmemmap ((struct page *)VMEMMAP_START)
48+
49+#define PCI_IO_SIZE SZ_16M
50+#define PCI_IO_END VMEMMAP_START
51+#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
52+
53+#define FIXADDR_TOP PCI_IO_START
54+#ifdef CONFIG_64BIT
55+#define FIXADDR_SIZE PMD_SIZE
56+#else
57+#define FIXADDR_SIZE PGDIR_SIZE
58+#endif
59+#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
60+
61+#endif
62+
2263 #ifdef CONFIG_64BIT
2364 #include <asm/pgtable-64.h>
2465 #else
@@ -90,31 +131,6 @@ extern pgd_t swapper_pg_dir[]; · 65 unmodified lines
90131 #define __S110 PAGE_SHARED_EXEC
91132 #define __S111 PAGE_SHARED_EXEC
92133
93−#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
94−#define VMALLOC_END (PAGE_OFFSET - 1)
95−#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
96−
97−#define BPF_JIT_REGION_SIZE (SZ_128M)
98−#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
99−#define BPF_JIT_REGION_END (VMALLOC_END)
100−
101−/*
102− * Roughly size the vmemmap space to be large enough to fit enough
103− * struct pages to map half the virtual address space. Then
104− * position vmemmap directly below the VMALLOC region.
105− */
106−#define VMEMMAP_SHIFT \
107− (CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
108−#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
109−#define VMEMMAP_END (VMALLOC_START - 1)
110−#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
111−
112−/*
113− * Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
114− * is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
115− */
116−#define vmemmap ((struct page *)VMEMMAP_START)
117−
118134 static inline int pmd_present(pmd_t pmd)
119135 {
120136 return (pmd_val(pmd) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
@@ -432,18 +448,6 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma, · 311 unmodified lines
432448 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
433449 #define __swp_entry_to_pte(x) ((pte_t) { (x).val })
434450
435−#define PCI_IO_SIZE SZ_16M
436−#define PCI_IO_END VMEMMAP_START
437−#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
438−
439−#define FIXADDR_TOP PCI_IO_START
440−#ifdef CONFIG_64BIT
441−#define FIXADDR_SIZE PMD_SIZE
442−#else
443−#define FIXADDR_SIZE PGDIR_SIZE
444−#endif
445−#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
446−
447451 /*
448452 * Task size is 0x4000000000 for RV64 or 0x9fc00000 for RV32.
449453 * Note that PGDIR_SIZE must evenly divide TASK_SIZE.
arch/riscv/include/asm/uaccess.h+18−18
@@ -11,6 +11,24 @@ · 10 unmodified lines
1111 /*
1212 * User space memory access functions
1313 */
14+
15+extern unsigned long __must_check __asm_copy_to_user(void __user *to,
16+ const void *from, unsigned long n);
17+extern unsigned long __must_check __asm_copy_from_user(void *to,
18+ const void __user *from, unsigned long n);
19+
20+static inline unsigned long
21+raw_copy_from_user(void *to, const void __user *from, unsigned long n)
22+{
23+ return __asm_copy_from_user(to, from, n);
24+}
25+
26+static inline unsigned long
27+raw_copy_to_user(void __user *to, const void *from, unsigned long n)
28+{
29+ return __asm_copy_to_user(to, from, n);
30+}
31+
1432 #ifdef CONFIG_MMU
1533 #include <linux/errno.h>
1634 #include <linux/compiler.h>
@@ -367,24 +385,6 @@ do { \ · 350 unmodified lines
367385 -EFAULT; \
368386 })
369387
370−
371−extern unsigned long __must_check __asm_copy_to_user(void __user *to,
372− const void *from, unsigned long n);
373−extern unsigned long __must_check __asm_copy_from_user(void *to,
374− const void __user *from, unsigned long n);
375−
376−static inline unsigned long
377−raw_copy_from_user(void *to, const void __user *from, unsigned long n)
378−{
379− return __asm_copy_from_user(to, from, n);
380−}
381−
382−static inline unsigned long
383−raw_copy_to_user(void __user *to, const void *from, unsigned long n)
384−{
385− return __asm_copy_to_user(to, from, n);
386−}
387−
388388 extern long strncpy_from_user(char *dest, const char __user *src, long count);
389389
390390 extern long __must_check strlen_user(const char __user *str);
arch/riscv/kernel/smp.c+1−1
@@ -96,7 +96,7 @@ static void send_ipi_mask(const struct cpumask *mask, enum ipi_message_type op) · 95 unmodified lines
9696 if (IS_ENABLED(CONFIG_RISCV_SBI))
9797 sbi_send_ipi(cpumask_bits(&hartid_mask));
9898 else
99− clint_send_ipi_mask(&hartid_mask);
99+ clint_send_ipi_mask(mask);
100100 }
101101
102102 static void send_ipi_single(int cpu, enum ipi_message_type op)
arch/riscv/lib/Makefile+1−1
@@ -2,5 +2,5 @@ · 1 unmodified line
22 lib-y += delay.o
33 lib-y += memcpy.o
44 lib-y += memset.o
5−lib-$(CONFIG_MMU) += uaccess.o
5+lib-y += uaccess.o
66 lib-$(CONFIG_64BIT) += tishift.o
arch/s390/kvm/kvm-s390.c+17−1
@@ -3268,7 +3268,10 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) · 3267 unmodified lines
32683268 /* Initial reset is a superset of the normal reset */
32693269 kvm_arch_vcpu_ioctl_normal_reset(vcpu);
32703270
3271− /* this equals initial cpu reset in pop, but we don't switch to ESA */
3271+ /*
3272+ * This equals initial cpu reset in pop, but we don't switch to ESA.
3273+ * We do not only reset the internal data, but also ...
3274+ */
32723275 vcpu->arch.sie_block->gpsw.mask = 0;
32733276 vcpu->arch.sie_block->gpsw.addr = 0;
32743277 kvm_s390_set_prefix(vcpu, 0);
@@ -3278,6 +3281,19 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) · 3 unmodified lines
32783281 memset(vcpu->arch.sie_block->gcr, 0, sizeof(vcpu->arch.sie_block->gcr));
32793282 vcpu->arch.sie_block->gcr[0] = CR0_INITIAL_MASK;
32803283 vcpu->arch.sie_block->gcr[14] = CR14_INITIAL_MASK;
3284+
3285+ /* ... the data in sync regs */
3286+ memset(vcpu->run->s.regs.crs, 0, sizeof(vcpu->run->s.regs.crs));
3287+ vcpu->run->s.regs.ckc = 0;
3288+ vcpu->run->s.regs.crs[0] = CR0_INITIAL_MASK;
3289+ vcpu->run->s.regs.crs[14] = CR14_INITIAL_MASK;
3290+ vcpu->run->psw_addr = 0;
3291+ vcpu->run->psw_mask = 0;
3292+ vcpu->run->s.regs.todpr = 0;
3293+ vcpu->run->s.regs.cputm = 0;
3294+ vcpu->run->s.regs.ckc = 0;
3295+ vcpu->run->s.regs.pp = 0;
3296+ vcpu->run->s.regs.gbea = 1;
32813297 vcpu->run->s.regs.fpc = 0;
32823298 vcpu->arch.sie_block->gbea = 1;
32833299 vcpu->arch.sie_block->pp = 0;
arch/x86/Makefile+3−2
@@ -194,9 +194,10 @@ avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) · 193 unmodified lines
194194 avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
195195 sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
196196 sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
197+adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
197198
198−KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
199−KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
199+KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
200+KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
200201
201202 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
202203
arch/x86/crypto/Makefile+6−1
@@ -11,6 +11,7 @@ avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\ · 10 unmodified lines
1111 avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)
1212 sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)
1313 sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)
14+adx_supported := $(call as-instr,adox %r10$(comma)%r10,yes,no)
1415
1516 obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
1617
@@ -39,7 +40,11 @@ obj-$(CONFIG_CRYPTO_AEGIS128_AESNI_SSE2) += aegis128-aesni.o · 22 unmodified lines
3940
4041 obj-$(CONFIG_CRYPTO_NHPOLY1305_SSE2) += nhpoly1305-sse2.o
4142 obj-$(CONFIG_CRYPTO_NHPOLY1305_AVX2) += nhpoly1305-avx2.o
42−obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o
43+
44+# These modules require the assembler to support ADX.
45+ifeq ($(adx_supported),yes)
46+ obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o
47+endif
4348
4449 # These modules require assembler to support AVX.
4550 ifeq ($(avx_supported),yes)
arch/x86/events/amd/uncore.c+7−10
@@ -190,15 +190,12 @@ static int amd_uncore_event_init(struct perf_event *event) · 189 unmodified lines
190190
191191 /*
192192 * NB and Last level cache counters (MSRs) are shared across all cores
193− * that share the same NB / Last level cache. Interrupts can be directed
194− * to a single target core, however, event counts generated by processes
195− * running on other cores cannot be masked out. So we do not support
196− * sampling and per-thread events.
193+ * that share the same NB / Last level cache. On family 16h and below,
194+ * Interrupts can be directed to a single target core, however, event
195+ * counts generated by processes running on other cores cannot be masked
196+ * out. So we do not support sampling and per-thread events via
197+ * CAP_NO_INTERRUPT, and we do not enable counter overflow interrupts:
197198 */
198− if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
199− return -EINVAL;
200−
201− /* and we do not enable counter overflow interrupts */
202199 hwc->config = event->attr.config & AMD64_RAW_EVENT_MASK_NB;
203200 hwc->idx = -1;
204201
@@ -306,7 +303,7 @@ static struct pmu amd_nb_pmu = { · 101 unmodified lines
306303 .start = amd_uncore_start,
307304 .stop = amd_uncore_stop,
308305 .read = amd_uncore_read,
309− .capabilities = PERF_PMU_CAP_NO_EXCLUDE,
306+ .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT,
310307 };
311308
312309 static struct pmu amd_llc_pmu = {
@@ -317,7 +314,7 @@ static struct pmu amd_llc_pmu = { · 4 unmodified lines
317314 .start = amd_uncore_start,
318315 .stop = amd_uncore_stop,
319316 .read = amd_uncore_read,
320− .capabilities = PERF_PMU_CAP_NO_EXCLUDE,
317+ .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT,
321318 };
322319
323320 static struct amd_uncore *amd_uncore_alloc(unsigned int cpu)
arch/x86/include/asm/kvm_emulate.h+0−1
@@ -360,7 +360,6 @@ struct x86_emulate_ctxt { · 359 unmodified lines
360360 u64 d;
361361 unsigned long _eip;
362362 struct operand memop;
363− /* Fields above regs are cleared together. */
364363 unsigned long _regs[NR_VCPU_REGS];
365364 struct operand *memopp;
366365 struct fetch_cache fetch;
arch/x86/kernel/apic/vector.c+8−6
@@ -838,13 +838,15 @@ static void free_moved_vector(struct apic_chip_data *apicd) · 837 unmodified lines
838838 bool managed = apicd->is_managed;
839839
840840 /*
841− * This should never happen. Managed interrupts are not
842− * migrated except on CPU down, which does not involve the
843− * cleanup vector. But try to keep the accounting correct
844− * nevertheless.
841+ * Managed interrupts are usually not migrated away
842+ * from an online CPU, but CPU isolation 'managed_irq'
843+ * can make that happen.
844+ * 1) Activation does not take the isolation into account
845+ * to keep the code simple
846+ * 2) Migration away from an isolated CPU can happen when
847+ * a non-isolated CPU which is in the calculated
848+ * affinity mask comes online.
845849 */
846− WARN_ON_ONCE(managed);
847−
848850 trace_vector_free_moved(apicd->irq, cpu, vector, managed);
849851 irq_matrix_free(vector_matrix, cpu, vector, managed);
850852 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED;
arch/x86/kernel/cpu/mce/intel.c+5−4
@@ -493,17 +493,18 @@ static void intel_ppin_init(struct cpuinfo_x86 *c) · 492 unmodified lines
493493 return;
494494
495495 if ((val & 3UL) == 1UL) {
496− /* PPIN available but disabled: */
496+ /* PPIN locked in disabled mode */
497497 return;
498498 }
499499
500− /* If PPIN is disabled, but not locked, try to enable: */
501− if (!(val & 3UL)) {
500+ /* If PPIN is disabled, try to enable */
501+ if (!(val & 2UL)) {
502502 wrmsrl_safe(MSR_PPIN_CTL, val | 2UL);
503503 rdmsrl_safe(MSR_PPIN_CTL, &val);
504504 }
505505
506− if ((val & 3UL) == 2UL)
506+ /* Is the enable bit set? */
507+ if (val & 2UL)
507508 set_cpu_cap(c, X86_FEATURE_INTEL_PPIN);
508509 }
509510 }
arch/x86/kernel/cpu/mce/therm_throt.c+7−2
@@ -486,9 +486,14 @@ static int thermal_throttle_offline(unsigned int cpu) · 485 unmodified lines
486486 {
487487 struct thermal_state *state = &per_cpu(thermal_state, cpu);
488488 struct device *dev = get_cpu_device(cpu);
489+ u32 l;
490+
491+ /* Mask the thermal vector before draining evtl. pending work */
492+ l = apic_read(APIC_LVTTHMR);
493+ apic_write(APIC_LVTTHMR, l | APIC_LVT_MASKED);
489494
490− cancel_delayed_work(&state->package_throttle.therm_work);
491− cancel_delayed_work(&state->core_throttle.therm_work);
495+ cancel_delayed_work_sync(&state->package_throttle.therm_work);
496+ cancel_delayed_work_sync(&state->core_throttle.therm_work);
492497
493498 state->package_throttle.rate_control_active = false;
494499 state->core_throttle.rate_control_active = false;
arch/x86/kvm/Kconfig+1−1
@@ -68,7 +68,7 @@ config KVM_WERROR · 67 unmodified lines
6868 depends on (X86_64 && !KASAN) || !COMPILE_TEST
6969 depends on EXPERT
7070 help
71− Add -Werror to the build flags for (and only for) i915.ko.
71+ Add -Werror to the build flags for KVM.
7272
7373 If in doubt, say "N".
7474
arch/x86/kvm/emulate.c+1−0
@@ -5173,6 +5173,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) · 5172 unmodified lines
51735173 ctxt->fetch.ptr = ctxt->fetch.data;
51745174 ctxt->fetch.end = ctxt->fetch.data + insn_len;
51755175 ctxt->opcode_len = 1;
5176+ ctxt->intercept = x86_intercept_none;
51765177 if (insn_len > 0)
51775178 memcpy(ctxt->fetch.data, insn, insn_len);
51785179 else {
arch/x86/kvm/ioapic.c+5−2
@@ -378,12 +378,15 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val) · 377 unmodified lines
378378 if (e->fields.delivery_mode == APIC_DM_FIXED) {
379379 struct kvm_lapic_irq irq;
380380
381− irq.shorthand = APIC_DEST_NOSHORT;
382381 irq.vector = e->fields.vector;
383382 irq.delivery_mode = e->fields.delivery_mode << 8;
384− irq.dest_id = e->fields.dest_id;
385383 irq.dest_mode =
386384 kvm_lapic_irq_dest_mode(!!e->fields.dest_mode);
385+ irq.level = false;
386+ irq.trig_mode = e->fields.trig_mode;
387+ irq.shorthand = APIC_DEST_NOSHORT;
388+ irq.dest_id = e->fields.dest_id;
389+ irq.msi_redir_hint = false;
387390 bitmap_zero(&vcpu_bitmap, 16);
388391 kvm_bitmap_or_dest_vcpus(ioapic->kvm, &irq,
389392 &vcpu_bitmap);
arch/x86/kvm/lapic.c+7−1
@@ -1445,6 +1445,8 @@ static void limit_periodic_timer_frequency(struct kvm_lapic *apic) · 1444 unmodified lines
14451445 }
14461446 }
14471447
1448+static void cancel_hv_timer(struct kvm_lapic *apic);
1449+
14481450 static void apic_update_lvtt(struct kvm_lapic *apic)
14491451 {
14501452 u32 timer_mode = kvm_lapic_get_reg(apic, APIC_LVTT) &
@@ -1454,6 +1456,10 @@ static void apic_update_lvtt(struct kvm_lapic *apic) · 3 unmodified lines
14541456 if (apic_lvtt_tscdeadline(apic) != (timer_mode ==
14551457 APIC_LVT_TIMER_TSCDEADLINE)) {
14561458 hrtimer_cancel(&apic->lapic_timer.timer);
1459+ preempt_disable();
1460+ if (apic->lapic_timer.hv_timer_in_use)
1461+ cancel_hv_timer(apic);
1462+ preempt_enable();
14571463 kvm_lapic_set_reg(apic, APIC_TMICT, 0);
14581464 apic->lapic_timer.period = 0;
14591465 apic->lapic_timer.tscdeadline = 0;
@@ -1715,7 +1721,7 @@ static void start_sw_period(struct kvm_lapic *apic) · 255 unmodified lines
17151721
17161722 hrtimer_start(&apic->lapic_timer.timer,
17171723 apic->lapic_timer.target_expiration,
1718− HRTIMER_MODE_ABS);
1724+ HRTIMER_MODE_ABS_HARD);
17191725 }
17201726
17211727 bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu)
arch/x86/kvm/svm.c+19−9
@@ -1933,14 +1933,6 @@ static void sev_clflush_pages(struct page *pages[], unsigned long npages) · 1932 unmodified lines
19331933 static void __unregister_enc_region_locked(struct kvm *kvm,
19341934 struct enc_region *region)
19351935 {
1936− /*
1937− * The guest may change the memory encryption attribute from C=0 -> C=1
1938− * or vice versa for this memory range. Lets make sure caches are
1939− * flushed to ensure that guest data gets written into memory with
1940− * correct C-bit.
1941− */
1942− sev_clflush_pages(region->pages, region->npages);
1943−
19441936 sev_unpin_memory(kvm, region->pages, region->npages);
19451937 list_del(&region->list);
19461938 kfree(region);
@@ -1970,6 +1962,13 @@ static void sev_vm_destroy(struct kvm *kvm) · 23 unmodified lines
19701962
19711963 mutex_lock(&kvm->lock);
19721964
1965+ /*
1966+ * Ensure that all guest tagged cache entries are flushed before
1967+ * releasing the pages back to the system for use. CLFLUSH will
1968+ * not do this, so issue a WBINVD.
1969+ */
1970+ wbinvd_on_all_cpus();
1971+
19731972 /*
19741973 * if userspace was terminated before unregistering the memory regions
19751974 * then lets unpin all the registered memory.
@@ -6312,7 +6311,8 @@ static void svm_handle_exit_irqoff(struct kvm_vcpu *vcpu, · 4336 unmodified lines
63126311 enum exit_fastpath_completion *exit_fastpath)
63136312 {
63146313 if (!is_guest_mode(vcpu) &&
6315− to_svm(vcpu)->vmcb->control.exit_code == EXIT_REASON_MSR_WRITE)
6314+ to_svm(vcpu)->vmcb->control.exit_code == SVM_EXIT_MSR &&
6315+ to_svm(vcpu)->vmcb->control.exit_info_1)
63166316 *exit_fastpath = handle_fastpath_set_msr_irqoff(vcpu);
63176317 }
63186318
@@ -7157,6 +7157,9 @@ static int svm_mem_enc_op(struct kvm *kvm, void __user *argp) · 838 unmodified lines
71577157 if (!svm_sev_enabled())
71587158 return -ENOTTY;
71597159
7160+ if (!argp)
7161+ return 0;
7162+
71607163 if (copy_from_user(&sev_cmd, argp, sizeof(struct kvm_sev_cmd)))
71617164 return -EFAULT;
71627165
@@ -7284,6 +7287,13 @@ static int svm_unregister_enc_region(struct kvm *kvm, · 121 unmodified lines
72847287 goto failed;
72857288 }
72867289
7290+ /*
7291+ * Ensure that all guest tagged cache entries are flushed before
7292+ * releasing the pages back to the system for use. CLFLUSH will
7293+ * not do this, so issue a WBINVD.
7294+ */
7295+ wbinvd_on_all_cpus();
7296+
72877297 __unregister_enc_region_locked(kvm, region);
72887298
72897299 mutex_unlock(&kvm->lock);
arch/x86/kvm/vmx/nested.c+3−2
@@ -224,7 +224,7 @@ static inline void nested_release_evmcs(struct kvm_vcpu *vcpu) · 223 unmodified lines
224224 return;
225225
226226 kvm_vcpu_unmap(vcpu, &vmx->nested.hv_evmcs_map, true);
227− vmx->nested.hv_evmcs_vmptr = -1ull;
227+ vmx->nested.hv_evmcs_vmptr = 0;
228228 vmx->nested.hv_evmcs = NULL;
229229 }
230230
@@ -1923,7 +1923,8 @@ static int nested_vmx_handle_enlightened_vmptrld(struct kvm_vcpu *vcpu, · 1692 unmodified lines
19231923 if (!nested_enlightened_vmentry(vcpu, &evmcs_gpa))
19241924 return 1;
19251925
1926− if (unlikely(evmcs_gpa != vmx->nested.hv_evmcs_vmptr)) {
1926+ if (unlikely(!vmx->nested.hv_evmcs ||
1927+ evmcs_gpa != vmx->nested.hv_evmcs_vmptr)) {
19271928 if (!vmx->nested.hv_evmcs)
19281929 vmx->nested.current_vmptr = -1ull;
19291930
arch/x86/kvm/vmx/vmx.c+15−3
@@ -2338,6 +2338,17 @@ static void hardware_disable(void) · 2337 unmodified lines
23382338 kvm_cpu_vmxoff();
23392339 }
23402340
2341+/*
2342+ * There is no X86_FEATURE for SGX yet, but anyway we need to query CPUID
2343+ * directly instead of going through cpu_has(), to ensure KVM is trapping
2344+ * ENCLS whenever it's supported in hardware. It does not matter whether
2345+ * the host OS supports or has enabled SGX.
2346+ */
2347+static bool cpu_has_sgx(void)
2348+{
2349+ return cpuid_eax(0) >= 0x12 && (cpuid_eax(0x12) & BIT(0));
2350+}
2351+
23412352 static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
23422353 u32 msr, u32 *result)
23432354 {
@@ -2418,8 +2429,9 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf, · 74 unmodified lines
24182429 SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE |
24192430 SECONDARY_EXEC_PT_USE_GPA |
24202431 SECONDARY_EXEC_PT_CONCEAL_VMX |
2421− SECONDARY_EXEC_ENABLE_VMFUNC |
2422− SECONDARY_EXEC_ENCLS_EXITING;
2432+ SECONDARY_EXEC_ENABLE_VMFUNC;
2433+ if (cpu_has_sgx())
2434+ opt2 |= SECONDARY_EXEC_ENCLS_EXITING;
24232435 if (adjust_vmx_controls(min2, opt2,
24242436 MSR_IA32_VMX_PROCBASED_CTLS2,
24252437 &_cpu_based_2nd_exec_control) < 0)
@@ -6275,7 +6287,7 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu) · 3849 unmodified lines
62756287 #endif
62766288 ASM_CALL_CONSTRAINT
62776289 :
6278− THUNK_TARGET(entry),
6290+ [thunk_target]"r"(entry),
62796291 [ss]"i"(__KERNEL_DS),
62806292 [cs]"i"(__KERNEL_CS)
62816293 );
arch/x86/kvm/x86.c+9−5
@@ -1554,7 +1554,10 @@ EXPORT_SYMBOL_GPL(kvm_emulate_wrmsr); · 1553 unmodified lines
15541554 */
15551555 static int handle_fastpath_set_x2apic_icr_irqoff(struct kvm_vcpu *vcpu, u64 data)
15561556 {
1557− if (lapic_in_kernel(vcpu) && apic_x2apic_mode(vcpu->arch.apic) &&
1557+ if (!lapic_in_kernel(vcpu) || !apic_x2apic_mode(vcpu->arch.apic))
1558+ return 1;
1559+
1560+ if (((data & APIC_SHORT_MASK) == APIC_DEST_NOSHORT) &&
15581561 ((data & APIC_DEST_MASK) == APIC_DEST_PHYSICAL) &&
15591562 ((data & APIC_MODE_MASK) == APIC_DM_FIXED)) {
15601563
@@ -2444,7 +2447,6 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) · 883 unmodified lines
24442447 vcpu->hv_clock.tsc_timestamp = tsc_timestamp;
24452448 vcpu->hv_clock.system_time = kernel_ns + v->kvm->arch.kvmclock_offset;
24462449 vcpu->last_guest_tsc = tsc_timestamp;
2447− WARN_ON((s64)vcpu->hv_clock.system_time < 0);
24482450
24492451 /* If the host uses TSC clocksource, then it is stable */
24502452 pvclock_flags = 0;
@@ -7195,10 +7197,12 @@ static void kvm_timer_init(void) · 4744 unmodified lines
71957197
71967198 cpu = get_cpu();
71977199 policy = cpufreq_cpu_get(cpu);
7198− if (policy && policy->cpuinfo.max_freq)
7199− max_tsc_khz = policy->cpuinfo.max_freq;
7200+ if (policy) {
7201+ if (policy->cpuinfo.max_freq)
7202+ max_tsc_khz = policy->cpuinfo.max_freq;
7203+ cpufreq_cpu_put(policy);
7204+ }
72007205 put_cpu();
7201− cpufreq_cpu_put(policy);
72027206 #endif
72037207 cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block,
72047208 CPUFREQ_TRANSITION_NOTIFIER);
arch/x86/mm/fault.c+24−2
@@ -190,7 +190,7 @@ static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address) · 189 unmodified lines
190190 return pmd_k;
191191 }
192192
193−void vmalloc_sync_all(void)
193+static void vmalloc_sync(void)
194194 {
195195 unsigned long address;
196196
@@ -217,6 +217,16 @@ void vmalloc_sync_all(void) · 20 unmodified lines
217217 }
218218 }
219219
220+void vmalloc_sync_mappings(void)
221+{
222+ vmalloc_sync();
223+}
224+
225+void vmalloc_sync_unmappings(void)
226+{
227+ vmalloc_sync();
228+}
229+
220230 /*
221231 * 32-bit:
222232 *
@@ -319,11 +329,23 @@ out: · 96 unmodified lines
319329
320330 #else /* CONFIG_X86_64: */
321331
322−void vmalloc_sync_all(void)
332+void vmalloc_sync_mappings(void)
323333 {
334+ /*
335+ * 64-bit mappings might allocate new p4d/pud pages
336+ * that need to be propagated to all tasks' PGDs.
337+ */
324338 sync_global_pgds(VMALLOC_START & PGDIR_MASK, VMALLOC_END);
325339 }
326340
341+void vmalloc_sync_unmappings(void)
342+{
343+ /*
344+ * Unmappings never allocate or free p4d/pud pages.
345+ * No work is required here.
346+ */
347+}
348+
327349 /*
328350 * 64-bit:
329351 *
arch/x86/mm/ioremap.c+21−0
@@ -106,6 +106,22 @@ static unsigned int __ioremap_check_encrypted(struct resource *res) · 105 unmodified lines
106106 return 0;
107107 }
108108
109+/*
110+ * The EFI runtime services data area is not covered by walk_mem_res(), but must
111+ * be mapped encrypted when SEV is active.
112+ */
113+static void __ioremap_check_other(resource_size_t addr, struct ioremap_desc *desc)
114+{
115+ if (!sev_active())
116+ return;
117+
118+ if (!IS_ENABLED(CONFIG_EFI))
119+ return;
120+
121+ if (efi_mem_type(addr) == EFI_RUNTIME_SERVICES_DATA)
122+ desc->flags |= IORES_MAP_ENCRYPTED;
123+}
124+
109125 static int __ioremap_collect_map_flags(struct resource *res, void *arg)
110126 {
111127 struct ioremap_desc *desc = arg;
@@ -124,6 +140,9 @@ static int __ioremap_collect_map_flags(struct resource *res, void *arg) · 12 unmodified lines
124140 * To avoid multiple resource walks, this function walks resources marked as
125141 * IORESOURCE_MEM and IORESOURCE_BUSY and looking for system RAM and/or a
126142 * resource described not as IORES_DESC_NONE (e.g. IORES_DESC_ACPI_TABLES).
143+ *
144+ * After that, deal with misc other ranges in __ioremap_check_other() which do
145+ * not fall into the above category.
127146 */
128147 static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
129148 struct ioremap_desc *desc)
@@ -135,6 +154,8 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size, · 5 unmodified lines
135154 memset(desc, 0, sizeof(struct ioremap_desc));
136155
137156 walk_mem_res(start, end, desc, __ioremap_collect_map_flags);
157+
158+ __ioremap_check_other(addr, desc);
138159 }
139160
140161 /*
arch/x86/net/bpf_jit_comp32.c+6−4
@@ -2039,10 +2039,12 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, · 2038 unmodified lines
20392039 }
20402040 /* and dreg_lo,sreg_lo */
20412041 EMIT2(0x23, add_2reg(0xC0, sreg_lo, dreg_lo));
2042− /* and dreg_hi,sreg_hi */
2043− EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
2044− /* or dreg_lo,dreg_hi */
2045− EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
2042+ if (is_jmp64) {
2043+ /* and dreg_hi,sreg_hi */
2044+ EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
2045+ /* or dreg_lo,dreg_hi */
2046+ EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
2047+ }
20462048 goto emit_cond_jmp;
20472049 }
20482050 case BPF_JMP | BPF_JSET | BPF_K:
block/blk-iocost.c+1−1
@@ -1318,7 +1318,7 @@ static bool iocg_is_idle(struct ioc_gq *iocg) · 1317 unmodified lines
13181318 return false;
13191319
13201320 /* is something in flight? */
1321− if (atomic64_read(&iocg->done_vtime) < atomic64_read(&iocg->vtime))
1321+ if (atomic64_read(&iocg->done_vtime) != atomic64_read(&iocg->vtime))
13221322 return false;
13231323
13241324 return true;
block/blk-mq-sched.c+22−0
@@ -398,6 +398,28 @@ void blk_mq_sched_insert_request(struct request *rq, bool at_head, · 397 unmodified lines
398398 WARN_ON(e && (rq->tag != -1));
399399
400400 if (blk_mq_sched_bypass_insert(hctx, !!e, rq)) {
401+ /*
402+ * Firstly normal IO request is inserted to scheduler queue or
403+ * sw queue, meantime we add flush request to dispatch queue(
404+ * hctx->dispatch) directly and there is at most one in-flight
405+ * flush request for each hw queue, so it doesn't matter to add
406+ * flush request to tail or front of the dispatch queue.
407+ *
408+ * Secondly in case of NCQ, flush request belongs to non-NCQ
409+ * command, and queueing it will fail when there is any
410+ * in-flight normal IO request(NCQ command). When adding flush
411+ * rq to the front of hctx->dispatch, it is easier to introduce
412+ * extra time to flush rq's latency because of S_SCHED_RESTART
413+ * compared with adding to the tail of dispatch queue, then
414+ * chance of flush merge is increased, and less flush requests
415+ * will be issued to controller. It is observed that ~10% time
416+ * is saved in blktests block/004 on disk attached to AHCI/NCQ
417+ * drive when adding flush rq to the front of hctx->dispatch.
418+ *
419+ * Simply queue flush rq to the front of hctx->dispatch so that
420+ * intensive flush workloads can benefit in case of NCQ HW.
421+ */
422+ at_head = (rq->rq_flags & RQF_FLUSH_SEQ) ? true : at_head;
401423 blk_mq_request_bypass_insert(rq, at_head, false);
402424 goto run;
403425 }
block/genhd.c+36−0
@@ -301,6 +301,42 @@ struct hd_struct *disk_map_sector_rcu(struct gendisk *disk, sector_t sector) · 300 unmodified lines
301301 }
302302 EXPORT_SYMBOL_GPL(disk_map_sector_rcu);
303303
304+/**
305+ * disk_has_partitions
306+ * @disk: gendisk of interest
307+ *
308+ * Walk through the partition table and check if valid partition exists.
309+ *
310+ * CONTEXT:
311+ * Don't care.
312+ *
313+ * RETURNS:
314+ * True if the gendisk has at least one valid non-zero size partition.
315+ * Otherwise false.
316+ */
317+bool disk_has_partitions(struct gendisk *disk)
318+{
319+ struct disk_part_tbl *ptbl;
320+ int i;
321+ bool ret = false;
322+
323+ rcu_read_lock();
324+ ptbl = rcu_dereference(disk->part_tbl);
325+
326+ /* Iterate partitions skipping the whole device at index 0 */
327+ for (i = 1; i < ptbl->len; i++) {
328+ if (rcu_dereference(ptbl->part[i])) {
329+ ret = true;
330+ break;
331+ }
332+ }
333+
334+ rcu_read_unlock();
335+
336+ return ret;
337+}
338+EXPORT_SYMBOL_GPL(disk_has_partitions);
339+
304340 /*
305341 * Can be deleted altogether. Later.
306342 *
drivers/acpi/apei/ghes.c+1−1
@@ -171,7 +171,7 @@ int ghes_estatus_pool_init(int num_ghes) · 170 unmodified lines
171171 * New allocation must be visible in all pgd before it can be found by
172172 * an NMI allocating from the pool.
173173 */
174− vmalloc_sync_all();
174+ vmalloc_sync_mappings();
175175
176176 rc = gen_pool_add(ghes_estatus_pool, addr, PAGE_ALIGN(len), -1);
177177 if (rc)
drivers/android/binderfs.c+1−0
@@ -448,6 +448,7 @@ static int binderfs_binder_ctl_create(struct super_block *sb) · 447 unmodified lines
448448 inode->i_uid = info->root_uid;
449449 inode->i_gid = info->root_gid;
450450
451+ refcount_set(&device->ref, 1);
451452 device->binderfs_inode = inode;
452453 device->miscdev.minor = minor;
453454
drivers/atm/nicstar.c+1−1
@@ -91,7 +91,7 @@ · 90 unmodified lines
9191 #ifdef GENERAL_DEBUG
9292 #define PRINTK(args...) printk(args)
9393 #else
94−#define PRINTK(args...)
94+#define PRINTK(args...) do {} while (0)
9595 #endif /* GENERAL_DEBUG */
9696
9797 #ifdef EXTRA_DEBUG
drivers/auxdisplay/Kconfig+8−8
@@ -111,7 +111,7 @@ config CFAG12864B · 110 unmodified lines
111111 If unsure, say N.
112112
113113 config CFAG12864B_RATE
114− int "Refresh rate (hertz)"
114+ int "Refresh rate (hertz)"
115115 depends on CFAG12864B
116116 default "20"
117117 ---help---
@@ -329,7 +329,7 @@ config PANEL_LCD_PROTO · 211 unmodified lines
329329
330330 config PANEL_LCD_PIN_E
331331 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
332− int "Parallel port pin number & polarity connected to the LCD E signal (-17...17) "
332+ int "Parallel port pin number & polarity connected to the LCD E signal (-17...17) "
333333 range -17 17
334334 default 14
335335 ---help---
@@ -344,7 +344,7 @@ config PANEL_LCD_PIN_E · 8 unmodified lines
344344
345345 config PANEL_LCD_PIN_RS
346346 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
347− int "Parallel port pin number & polarity connected to the LCD RS signal (-17...17) "
347+ int "Parallel port pin number & polarity connected to the LCD RS signal (-17...17) "
348348 range -17 17
349349 default 17
350350 ---help---
@@ -359,7 +359,7 @@ config PANEL_LCD_PIN_RS · 8 unmodified lines
359359
360360 config PANEL_LCD_PIN_RW
361361 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
362− int "Parallel port pin number & polarity connected to the LCD RW signal (-17...17) "
362+ int "Parallel port pin number & polarity connected to the LCD RW signal (-17...17) "
363363 range -17 17
364364 default 16
365365 ---help---
@@ -374,7 +374,7 @@ config PANEL_LCD_PIN_RW · 8 unmodified lines
374374
375375 config PANEL_LCD_PIN_SCL
376376 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
377− int "Parallel port pin number & polarity connected to the LCD SCL signal (-17...17) "
377+ int "Parallel port pin number & polarity connected to the LCD SCL signal (-17...17) "
378378 range -17 17
379379 default 1
380380 ---help---
@@ -389,7 +389,7 @@ config PANEL_LCD_PIN_SCL · 8 unmodified lines
389389
390390 config PANEL_LCD_PIN_SDA
391391 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
392− int "Parallel port pin number & polarity connected to the LCD SDA signal (-17...17) "
392+ int "Parallel port pin number & polarity connected to the LCD SDA signal (-17...17) "
393393 range -17 17
394394 default 2
395395 ---help---
@@ -404,12 +404,12 @@ config PANEL_LCD_PIN_SDA · 8 unmodified lines
404404
405405 config PANEL_LCD_PIN_BL
406406 depends on PANEL_PROFILE="0" && PANEL_LCD="1"
407− int "Parallel port pin number & polarity connected to the LCD backlight signal (-17...17) "
407+ int "Parallel port pin number & polarity connected to the LCD backlight signal (-17...17) "
408408 range -17 17
409409 default 0
410410 ---help---
411411 This describes the number of the parallel port pin to which the LCD 'BL' signal
412− has been connected. It can be :
412+ has been connected. It can be :
413413
414414 0 : no connection (eg: connected to ground)
415415 1..17 : directly connected to any of these pins on the DB25 plug
drivers/auxdisplay/charlcd.c+1−1
@@ -88,7 +88,7 @@ struct charlcd_priv { · 87 unmodified lines
8888 int len;
8989 } esc_seq;
9090
91− unsigned long long drvdata[0];
91+ unsigned long long drvdata[];
9292 };
9393
9494 #define charlcd_to_priv(p) container_of(p, struct charlcd_priv, lcd)
drivers/auxdisplay/img-ascii-lcd.c+1−3
@@ -356,7 +356,6 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) · 355 unmodified lines
356356 const struct of_device_id *match;
357357 const struct img_ascii_lcd_config *cfg;
358358 struct img_ascii_lcd_ctx *ctx;
359− struct resource *res;
360359 int err;
361360
362361 match = of_match_device(img_ascii_lcd_matches, &pdev->dev);
@@ -378,8 +377,7 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) · 15 unmodified lines
378377 &ctx->offset))
379378 return -EINVAL;
380379 } else {
381− res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
382− ctx->base = devm_ioremap_resource(&pdev->dev, res);
380+ ctx->base = devm_platform_ioremap_resource(pdev, 0);
383381 if (IS_ERR(ctx->base))
384382 return PTR_ERR(ctx->base);
385383 }
drivers/base/memory.c+3−20
@@ -97,30 +97,13 @@ static ssize_t phys_index_show(struct device *dev, · 96 unmodified lines
9797 }
9898
9999 /*
100− * Show whether the memory block is likely to be offlineable (or is already
101− * offline). Once offline, the memory block could be removed. The return
102− * value does, however, not indicate that there is a way to remove the
103− * memory block.
100+ * Legacy interface that we cannot remove. Always indicate "removable"
101+ * with CONFIG_MEMORY_HOTREMOVE - bad heuristic.
104102 */
105103 static ssize_t removable_show(struct device *dev, struct device_attribute *attr,
106104 char *buf)
107105 {
108− struct memory_block *mem = to_memory_block(dev);
109− unsigned long pfn;
110− int ret = 1, i;
111−
112− if (mem->state != MEM_ONLINE)
113− goto out;
114−
115− for (i = 0; i < sections_per_block; i++) {
116− if (!present_section_nr(mem->start_section_nr + i))
117− continue;
118− pfn = section_nr_to_pfn(mem->start_section_nr + i);
119− ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION);
120− }
121−
122−out:
123− return sprintf(buf, "%d\n", ret);
106+ return sprintf(buf, "%d\n", (int)IS_ENABLED(CONFIG_MEMORY_HOTREMOVE));
124107 }
125108
126109 /*
drivers/base/platform.c+6−19
@@ -363,10 +363,10 @@ static void setup_pdev_dma_masks(struct platform_device *pdev) · 362 unmodified lines
363363 {
364364 if (!pdev->dev.coherent_dma_mask)
365365 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
366− if (!pdev->dma_mask)
367− pdev->dma_mask = DMA_BIT_MASK(32);
368− if (!pdev->dev.dma_mask)
369− pdev->dev.dma_mask = &pdev->dma_mask;
366+ if (!pdev->dev.dma_mask) {
367+ pdev->platform_dma_mask = DMA_BIT_MASK(32);
368+ pdev->dev.dma_mask = &pdev->platform_dma_mask;
369+ }
370370 };
371371
372372 /**
@@ -662,20 +662,8 @@ struct platform_device *platform_device_register_full( · 289 unmodified lines
662662 pdev->dev.of_node_reused = pdevinfo->of_node_reused;
663663
664664 if (pdevinfo->dma_mask) {
665− /*
666− * This memory isn't freed when the device is put,
667− * I don't have a nice idea for that though. Conceptually
668− * dma_mask in struct device should not be a pointer.
669− * See http://thread.gmane.org/gmane.linux.kernel.pci/9081
670− */
671− pdev->dev.dma_mask =
672− kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
673− if (!pdev->dev.dma_mask)
674− goto err;
675−
676− kmemleak_ignore(pdev->dev.dma_mask);
677−
678− *pdev->dev.dma_mask = pdevinfo->dma_mask;
665+ pdev->platform_dma_mask = pdevinfo->dma_mask;
666+ pdev->dev.dma_mask = &pdev->platform_dma_mask;
679667 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask;
680668 }
681669
@@ -700,7 +688,6 @@ struct platform_device *platform_device_register_full( · 18 unmodified lines
700688 if (ret) {
701689 err:
702690 ACPI_COMPANION_SET(&pdev->dev, NULL);
703− kfree(pdev->dev.dma_mask);
704691 platform_device_put(pdev);
705692 return ERR_PTR(ret);
706693 }
drivers/block/virtio_blk.c+12−5
@@ -245,13 +245,20 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx, · 244 unmodified lines
245245 err = virtblk_add_req(vblk->vqs[qid].vq, vbr, vbr->sg, num);
246246 if (err) {
247247 virtqueue_kick(vblk->vqs[qid].vq);
248− blk_mq_stop_hw_queue(hctx);
248+ /* Don't stop the queue if -ENOMEM: we may have failed to
249+ * bounce the buffer due to global resource outage.
250+ */
251+ if (err == -ENOSPC)
252+ blk_mq_stop_hw_queue(hctx);
249253 spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
250− /* Out of mem doesn't actually happen, since we fall back
251− * to direct descriptors */
252− if (err == -ENOMEM || err == -ENOSPC)
254+ switch (err) {
255+ case -ENOSPC:
253256 return BLK_STS_DEV_RESOURCE;
254− return BLK_STS_IOERR;
257+ case -ENOMEM:
258+ return BLK_STS_RESOURCE;
259+ default:
260+ return BLK_STS_IOERR;
261+ }
255262 }
256263
257264 if (bd->last && virtqueue_kick_prepare(vblk->vqs[qid].vq))
drivers/bus/sunxi-rsb.c+1−1
@@ -345,7 +345,7 @@ static int sunxi_rsb_read(struct sunxi_rsb *rsb, u8 rtaddr, u8 addr, · 344 unmodified lines
345345 if (ret)
346346 goto unlock;
347347
348− *buf = readl(rsb->regs + RSB_DATA);
348+ *buf = readl(rsb->regs + RSB_DATA) & GENMASK(len * 8 - 1, 0);
349349
350350 unlock:
351351 mutex_unlock(&rsb->lock);
drivers/bus/ti-sysc.c+2−1
@@ -1266,6 +1266,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { · 1265 unmodified lines
12661266 SYSC_QUIRK("gpu", 0x50000000, 0x14, -1, -1, 0x00010201, 0xffffffff, 0),
12671267 SYSC_QUIRK("gpu", 0x50000000, 0xfe00, 0xfe10, -1, 0x40000000 , 0xffffffff,
12681268 SYSC_MODULE_QUIRK_SGX),
1269+ SYSC_QUIRK("lcdc", 0, 0, 0x54, -1, 0x4f201000, 0xffffffff,
1270+ SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
12691271 SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050,
12701272 0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
12711273 SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -1, 0x4ea2080d, 0xffffffff,
@@ -1294,7 +1296,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { · 22 unmodified lines
12941296 SYSC_QUIRK("gpu", 0, 0xfe00, 0xfe10, -1, 0x40000000 , 0xffffffff, 0),
12951297 SYSC_QUIRK("hsi", 0, 0, 0x10, 0x14, 0x50043101, 0xffffffff, 0),
12961298 SYSC_QUIRK("iss", 0, 0, 0x10, -1, 0x40000101, 0xffffffff, 0),
1297− SYSC_QUIRK("lcdc", 0, 0, 0x54, -1, 0x4f201000, 0xffffffff, 0),
12981299 SYSC_QUIRK("mcasp", 0, 0, 0x4, -1, 0x44306302, 0xffffffff, 0),
12991300 SYSC_QUIRK("mcasp", 0, 0, 0x4, -1, 0x44307b02, 0xffffffff, 0),
13001301 SYSC_QUIRK("mcbsp", 0, -1, 0x8c, -1, 0, 0, 0),
drivers/char/ipmi/ipmi_si_platform.c+2−2
@@ -194,7 +194,7 @@ static int platform_ipmi_probe(struct platform_device *pdev) · 193 unmodified lines
194194 else
195195 io.slave_addr = slave_addr;
196196
197− io.irq = platform_get_irq(pdev, 0);
197+ io.irq = platform_get_irq_optional(pdev, 0);
198198 if (io.irq > 0)
199199 io.irq_setup = ipmi_std_irq_setup;
200200 else
@@ -378,7 +378,7 @@ static int acpi_ipmi_probe(struct platform_device *pdev) · 177 unmodified lines
378378 io.irq = tmp;
379379 io.irq_setup = acpi_gpe_irq_setup;
380380 } else {
381− int irq = platform_get_irq(pdev, 0);
381+ int irq = platform_get_irq_optional(pdev, 0);
382382
383383 if (irq > 0) {
384384 io.irq = irq;
drivers/clk/clk.c+2−2
@@ -4713,7 +4713,7 @@ EXPORT_SYMBOL(of_clk_get_by_name); · 4712 unmodified lines
47134713 *
47144714 * Returns: The number of clocks that are possible parents of this node
47154715 */
4716−unsigned int of_clk_get_parent_count(struct device_node *np)
4716+unsigned int of_clk_get_parent_count(const struct device_node *np)
47174717 {
47184718 int count;
47194719
@@ -4725,7 +4725,7 @@ unsigned int of_clk_get_parent_count(struct device_node *np) · 5 unmodified lines
47254725 }
47264726 EXPORT_SYMBOL_GPL(of_clk_get_parent_count);
47274727
4728−const char *of_clk_get_parent_name(struct device_node *np, int index)
4728+const char *of_clk_get_parent_name(const struct device_node *np, int index)
47294729 {
47304730 struct of_phandle_args clkspec;
47314731 struct property *prop;
drivers/clk/imx/clk-imx8mp.c+2−2
@@ -560,7 +560,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) · 559 unmodified lines
560560 hws[IMX8MP_CLK_MEDIA_AXI] = imx8m_clk_hw_composite("media_axi", imx8mp_media_axi_sels, ccm_base + 0x8a00);
561561 hws[IMX8MP_CLK_MEDIA_APB] = imx8m_clk_hw_composite("media_apb", imx8mp_media_apb_sels, ccm_base + 0x8a80);
562562 hws[IMX8MP_CLK_HDMI_APB] = imx8m_clk_hw_composite("hdmi_apb", imx8mp_media_apb_sels, ccm_base + 0x8b00);
563− hws[IMX8MP_CLK_HDMI_AXI] = imx8m_clk_hw_composite("hdmi_axi", imx8mp_media_apb_sels, ccm_base + 0x8b80);
563+ hws[IMX8MP_CLK_HDMI_AXI] = imx8m_clk_hw_composite("hdmi_axi", imx8mp_media_axi_sels, ccm_base + 0x8b80);
564564 hws[IMX8MP_CLK_GPU_AXI] = imx8m_clk_hw_composite("gpu_axi", imx8mp_gpu_axi_sels, ccm_base + 0x8c00);
565565 hws[IMX8MP_CLK_GPU_AHB] = imx8m_clk_hw_composite("gpu_ahb", imx8mp_gpu_ahb_sels, ccm_base + 0x8c80);
566566 hws[IMX8MP_CLK_NOC] = imx8m_clk_hw_composite_critical("noc", imx8mp_noc_sels, ccm_base + 0x8d00);
@@ -686,7 +686,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) · 119 unmodified lines
686686 hws[IMX8MP_CLK_CAN1_ROOT] = imx_clk_hw_gate2("can1_root_clk", "can1", ccm_base + 0x4350, 0);
687687 hws[IMX8MP_CLK_CAN2_ROOT] = imx_clk_hw_gate2("can2_root_clk", "can2", ccm_base + 0x4360, 0);
688688 hws[IMX8MP_CLK_SDMA1_ROOT] = imx_clk_hw_gate4("sdma1_root_clk", "ipg_root", ccm_base + 0x43a0, 0);
689− hws[IMX8MP_CLK_ENET_QOS_ROOT] = imx_clk_hw_gate4("enet_qos_root_clk", "enet_axi", ccm_base + 0x43b0, 0);
689+ hws[IMX8MP_CLK_ENET_QOS_ROOT] = imx_clk_hw_gate4("enet_qos_root_clk", "sim_enet_root_clk", ccm_base + 0x43b0, 0);
690690 hws[IMX8MP_CLK_SIM_ENET_ROOT] = imx_clk_hw_gate4("sim_enet_root_clk", "enet_axi", ccm_base + 0x4400, 0);
691691 hws[IMX8MP_CLK_GPU2D_ROOT] = imx_clk_hw_gate4("gpu2d_root_clk", "gpu2d_div", ccm_base + 0x4450, 0);
692692 hws[IMX8MP_CLK_GPU3D_ROOT] = imx_clk_hw_gate4("gpu3d_root_clk", "gpu3d_core_div", ccm_base + 0x4460, 0);
drivers/clk/imx/clk-scu.c+4−4
@@ -43,12 +43,12 @@ struct imx_sc_msg_req_set_clock_rate { · 42 unmodified lines
4343 __le32 rate;
4444 __le16 resource;
4545 u8 clk;
46−} __packed;
46+} __packed __aligned(4);
4747
4848 struct req_get_clock_rate {
4949 __le16 resource;
5050 u8 clk;
51−} __packed;
51+} __packed __aligned(4);
5252
5353 struct resp_get_clock_rate {
5454 __le32 rate;
@@ -84,7 +84,7 @@ struct imx_sc_msg_get_clock_parent { · 29 unmodified lines
8484 struct req_get_clock_parent {
8585 __le16 resource;
8686 u8 clk;
87− } __packed req;
87+ } __packed __aligned(4) req;
8888 struct resp_get_clock_parent {
8989 u8 parent;
9090 } resp;
@@ -121,7 +121,7 @@ struct imx_sc_msg_req_clock_enable { · 30 unmodified lines
121121 u8 clk;
122122 u8 enable;
123123 u8 autog;
124−} __packed;
124+} __packed __aligned(4);
125125
126126 static inline struct clk_scu *to_clk_scu(struct clk_hw *hw)
127127 {
drivers/clk/qcom/dispcc-sc7180.c+0−19
@@ -592,24 +592,6 @@ static struct clk_branch disp_cc_mdss_rot_clk = { · 591 unmodified lines
592592 },
593593 };
594594
595−static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
596− .halt_reg = 0x400c,
597− .halt_check = BRANCH_HALT,
598− .clkr = {
599− .enable_reg = 0x400c,
600− .enable_mask = BIT(0),
601− .hw.init = &(struct clk_init_data){
602− .name = "disp_cc_mdss_rscc_ahb_clk",
603− .parent_data = &(const struct clk_parent_data){
604− .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw,
605− },
606− .num_parents = 1,
607− .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
608− .ops = &clk_branch2_ops,
609− },
610− },
611−};
612−
613595 static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
614596 .halt_reg = 0x4008,
615597 .halt_check = BRANCH_HALT,
@@ -687,7 +669,6 @@ static struct clk_regmap *disp_cc_sc7180_clocks[] = { · 71 unmodified lines
687669 [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
688670 [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
689671 [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
690− [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
691672 [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
692673 [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
693674 [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
drivers/clk/qcom/videocc-sc7180.c+1−1
@@ -97,7 +97,7 @@ static struct clk_branch video_cc_vcodec0_axi_clk = { · 96 unmodified lines
9797
9898 static struct clk_branch video_cc_vcodec0_core_clk = {
9999 .halt_reg = 0x890,
100− .halt_check = BRANCH_HALT,
100+ .halt_check = BRANCH_HALT_VOTED,
101101 .clkr = {
102102 .enable_reg = 0x890,
103103 .enable_mask = BIT(0),
drivers/clk/ti/clk-43xx.c+1−1
@@ -78,7 +78,7 @@ static const struct omap_clkctrl_reg_data am4_gfx_l3_clkctrl_regs[] __initconst · 77 unmodified lines
7878 };
7979
8080 static const struct omap_clkctrl_reg_data am4_l4_rtc_clkctrl_regs[] __initconst = {
81− { AM4_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clk_32768_ck" },
81+ { AM4_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clkdiv32k_ick" },
8282 { 0 },
8383 };
8484
drivers/clocksource/hyperv_timer.c+4−2
@@ -343,7 +343,8 @@ static u64 notrace read_hv_clock_tsc_cs(struct clocksource *arg) · 342 unmodified lines
343343
344344 static u64 read_hv_sched_clock_tsc(void)
345345 {
346− return read_hv_clock_tsc() - hv_sched_clock_offset;
346+ return (read_hv_clock_tsc() - hv_sched_clock_offset) *
347+ (NSEC_PER_SEC / HV_CLOCK_HZ);
347348 }
348349
349350 static void suspend_hv_clock_tsc(struct clocksource *arg)
@@ -398,7 +399,8 @@ static u64 notrace read_hv_clock_msr_cs(struct clocksource *arg) · 48 unmodified lines
398399
399400 static u64 read_hv_sched_clock_msr(void)
400401 {
401− return read_hv_clock_msr() - hv_sched_clock_offset;
402+ return (read_hv_clock_msr() - hv_sched_clock_offset) *
403+ (NSEC_PER_SEC / HV_CLOCK_HZ);
402404 }
403405
404406 static struct clocksource hyperv_cs_msr = {
drivers/dma/dmaengine.c+1−1
@@ -1151,7 +1151,7 @@ int dma_async_device_register(struct dma_device *device) · 1150 unmodified lines
11511151 }
11521152
11531153 if (!device->device_release)
1154− dev_warn(device->dev,
1154+ dev_dbg(device->dev,
11551155 "WARN: Device release is not defined so it is not safe to unbind this driver while in use\n");
11561156
11571157 kref_init(&device->ref);
drivers/dma/idxd/cdev.c+2−2
@@ -81,9 +81,9 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp) · 80 unmodified lines
8181 dev = &idxd->pdev->dev;
8282 idxd_cdev = &wq->idxd_cdev;
8383
84− dev_dbg(dev, "%s called\n", __func__);
84+ dev_dbg(dev, "%s called: %d\n", __func__, idxd_wq_refcount(wq));
8585
86− if (idxd_wq_refcount(wq) > 1 && wq_dedicated(wq))
86+ if (idxd_wq_refcount(wq) > 0 && wq_dedicated(wq))
8787 return -EBUSY;
8888
8989 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
drivers/dma/ti/k3-udma-glue.c+19−10
@@ -564,12 +564,12 @@ static int k3_udma_glue_cfg_rx_flow(struct k3_udma_glue_rx_channel *rx_chn, · 563 unmodified lines
564564 if (IS_ERR(flow->udma_rflow)) {
565565 ret = PTR_ERR(flow->udma_rflow);
566566 dev_err(dev, "UDMAX rflow get err %d\n", ret);
567− goto err;
567+ return ret;
568568 }
569569
570570 if (flow->udma_rflow_id != xudma_rflow_get_id(flow->udma_rflow)) {
571− xudma_rflow_put(rx_chn->common.udmax, flow->udma_rflow);
572− return -ENODEV;
571+ ret = -ENODEV;
572+ goto err_rflow_put;
573573 }
574574
575575 /* request and cfg rings */
@@ -578,7 +578,7 @@ static int k3_udma_glue_cfg_rx_flow(struct k3_udma_glue_rx_channel *rx_chn, · 2 unmodified lines
578578 if (!flow->ringrx) {
579579 ret = -ENODEV;
580580 dev_err(dev, "Failed to get RX ring\n");
581− goto err;
581+ goto err_rflow_put;
582582 }
583583
584584 flow->ringrxfdq = k3_ringacc_request_ring(rx_chn->common.ringacc,
@@ -586,19 +586,19 @@ static int k3_udma_glue_cfg_rx_flow(struct k3_udma_glue_rx_channel *rx_chn, · 1 unmodified line
586586 if (!flow->ringrxfdq) {
587587 ret = -ENODEV;
588588 dev_err(dev, "Failed to get RXFDQ ring\n");
589− goto err;
589+ goto err_ringrx_free;
590590 }
591591
592592 ret = k3_ringacc_ring_cfg(flow->ringrx, &flow_cfg->rx_cfg);
593593 if (ret) {
594594 dev_err(dev, "Failed to cfg ringrx %d\n", ret);
595− goto err;
595+ goto err_ringrxfdq_free;
596596 }
597597
598598 ret = k3_ringacc_ring_cfg(flow->ringrxfdq, &flow_cfg->rxfdq_cfg);
599599 if (ret) {
600600 dev_err(dev, "Failed to cfg ringrxfdq %d\n", ret);
601− goto err;
601+ goto err_ringrxfdq_free;
602602 }
603603
604604 if (rx_chn->remote) {
@@ -648,7 +648,7 @@ static int k3_udma_glue_cfg_rx_flow(struct k3_udma_glue_rx_channel *rx_chn, · 43 unmodified lines
648648 if (ret) {
649649 dev_err(dev, "flow%d config failed: %d\n", flow->udma_rflow_id,
650650 ret);
651− goto err;
651+ goto err_ringrxfdq_free;
652652 }
653653
654654 rx_chn->flows_ready++;
@@ -656,8 +656,17 @@ static int k3_udma_glue_cfg_rx_flow(struct k3_udma_glue_rx_channel *rx_chn, · 1 unmodified line
656656 flow->udma_rflow_id, rx_chn->flows_ready);
657657
658658 return 0;
659−err:
660− k3_udma_glue_release_rx_flow(rx_chn, flow_idx);
659+
660+err_ringrxfdq_free:
661+ k3_ringacc_ring_free(flow->ringrxfdq);
662+
663+err_ringrx_free:
664+ k3_ringacc_ring_free(flow->ringrx);
665+
666+err_rflow_put:
667+ xudma_rflow_put(rx_chn->common.udmax, flow->udma_rflow);
668+ flow->udma_rflow = NULL;
669+
661670 return ret;
662671 }
663672
drivers/firmware/efi/efivars.c+23−9
@@ -83,13 +83,16 @@ static ssize_t · 82 unmodified lines
8383 efivar_attr_read(struct efivar_entry *entry, char *buf)
8484 {
8585 struct efi_variable *var = &entry->var;
86+ unsigned long size = sizeof(var->Data);
8687 char *str = buf;
88+ int ret;
8789
8890 if (!entry || !buf)
8991 return -EINVAL;
9092
91− var->DataSize = 1024;
92− if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))
93+ ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
94+ var->DataSize = size;
95+ if (ret)
9396 return -EIO;
9497
9598 if (var->Attributes & EFI_VARIABLE_NON_VOLATILE)
@@ -116,13 +119,16 @@ static ssize_t · 20 unmodified lines
116119 efivar_size_read(struct efivar_entry *entry, char *buf)
117120 {
118121 struct efi_variable *var = &entry->var;
122+ unsigned long size = sizeof(var->Data);
119123 char *str = buf;
124+ int ret;
120125
121126 if (!entry || !buf)
122127 return -EINVAL;
123128
124− var->DataSize = 1024;
125− if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))
129+ ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
130+ var->DataSize = size;
131+ if (ret)
126132 return -EIO;
127133
128134 str += sprintf(str, "0x%lx\n", var->DataSize);
@@ -133,12 +139,15 @@ static ssize_t · 4 unmodified lines
133139 efivar_data_read(struct efivar_entry *entry, char *buf)
134140 {
135141 struct efi_variable *var = &entry->var;
142+ unsigned long size = sizeof(var->Data);
143+ int ret;
136144
137145 if (!entry || !buf)
138146 return -EINVAL;
139147
140− var->DataSize = 1024;
141− if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))
148+ ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
149+ var->DataSize = size;
150+ if (ret)
142151 return -EIO;
143152
144153 memcpy(buf, var->Data, var->DataSize);
@@ -199,6 +208,9 @@ efivar_store_raw(struct efivar_entry *entry, const char *buf, size_t count) · 54 unmodified lines
199208 u8 *data;
200209 int err;
201210
211+ if (!entry || !buf)
212+ return -EINVAL;
213+
202214 if (in_compat_syscall()) {
203215 struct compat_efi_variable *compat;
204216
@@ -250,14 +262,16 @@ efivar_show_raw(struct efivar_entry *entry, char *buf) · 45 unmodified lines
250262 {
251263 struct efi_variable *var = &entry->var;
252264 struct compat_efi_variable *compat;
265+ unsigned long datasize = sizeof(var->Data);
253266 size_t size;
267+ int ret;
254268
255269 if (!entry || !buf)
256270 return 0;
257271
258− var->DataSize = 1024;
259− if (efivar_entry_get(entry, &entry->var.Attributes,
260− &entry->var.DataSize, entry->var.Data))
272+ ret = efivar_entry_get(entry, &var->Attributes, &datasize, var->Data);
273+ var->DataSize = datasize;
274+ if (ret)
261275 return -EIO;
262276
263277 if (in_compat_syscall()) {
drivers/gpio/gpiolib-acpi.c+114−26
@@ -21,18 +21,21 @@ · 20 unmodified lines
2121 #include "gpiolib.h"
2222 #include "gpiolib-acpi.h"
2323
24−#define QUIRK_NO_EDGE_EVENTS_ON_BOOT 0x01l
25−#define QUIRK_NO_WAKEUP 0x02l
26−
2724 static int run_edge_events_on_boot = -1;
2825 module_param(run_edge_events_on_boot, int, 0444);
2926 MODULE_PARM_DESC(run_edge_events_on_boot,
3027 "Run edge _AEI event-handlers at boot: 0=no, 1=yes, -1=auto");
3128
32−static int honor_wakeup = -1;
33−module_param(honor_wakeup, int, 0444);
34−MODULE_PARM_DESC(honor_wakeup,
35− "Honor the ACPI wake-capable flag: 0=no, 1=yes, -1=auto");
29+static char *ignore_wake;
30+module_param(ignore_wake, charp, 0444);
31+MODULE_PARM_DESC(ignore_wake,
32+ "controller@pin combos on which to ignore the ACPI wake flag "
33+ "ignore_wake=controller@pin[,controller@pin[,...]]");
34+
35+struct acpi_gpiolib_dmi_quirk {
36+ bool no_edge_events_on_boot;
37+ char *ignore_wake;
38+};
3639
3740 /**
3841 * struct acpi_gpio_event - ACPI GPIO event handler data
@@ -202,6 +205,57 @@ static void acpi_gpiochip_request_irqs(struct acpi_gpio_chip *acpi_gpio) · 163 unmodified lines
202205 acpi_gpiochip_request_irq(acpi_gpio, event);
203206 }
204207
208+static bool acpi_gpio_in_ignore_list(const char *controller_in, int pin_in)
209+{
210+ const char *controller, *pin_str;
211+ int len, pin;
212+ char *endp;
213+
214+ controller = ignore_wake;
215+ while (controller) {
216+ pin_str = strchr(controller, '@');
217+ if (!pin_str)
218+ goto err;
219+
220+ len = pin_str - controller;
221+ if (len == strlen(controller_in) &&
222+ strncmp(controller, controller_in, len) == 0) {
223+ pin = simple_strtoul(pin_str + 1, &endp, 10);
224+ if (*endp != 0 && *endp != ',')
225+ goto err;
226+
227+ if (pin == pin_in)
228+ return true;
229+ }
230+
231+ controller = strchr(controller, ',');
232+ if (controller)
233+ controller++;
234+ }
235+
236+ return false;
237+err:
238+ pr_err_once("Error invalid value for gpiolib_acpi.ignore_wake: %s\n",
239+ ignore_wake);
240+ return false;
241+}
242+
243+static bool acpi_gpio_irq_is_wake(struct device *parent,
244+ struct acpi_resource_gpio *agpio)
245+{
246+ int pin = agpio->pin_table[0];
247+
248+ if (agpio->wake_capable != ACPI_WAKE_CAPABLE)
249+ return false;
250+
251+ if (acpi_gpio_in_ignore_list(dev_name(parent), pin)) {
252+ dev_info(parent, "Ignoring wakeup on pin %d\n", pin);
253+ return false;
254+ }
255+
256+ return true;
257+}
258+
205259 /* Always returns AE_OK so that we keep looping over the resources */
206260 static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,
207261 void *context)
@@ -289,7 +343,7 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, · 81 unmodified lines
289343 event->handle = evt_handle;
290344 event->handler = handler;
291345 event->irq = irq;
292− event->irq_is_wake = honor_wakeup && agpio->wake_capable == ACPI_WAKE_CAPABLE;
346+ event->irq_is_wake = acpi_gpio_irq_is_wake(chip->parent, agpio);
293347 event->pin = pin;
294348 event->desc = desc;
295349
@@ -1328,7 +1382,9 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = { · 1032 unmodified lines
13281382 DMI_MATCH(DMI_SYS_VENDOR, "MINIX"),
13291383 DMI_MATCH(DMI_PRODUCT_NAME, "Z83-4"),
13301384 },
1331− .driver_data = (void *)QUIRK_NO_EDGE_EVENTS_ON_BOOT,
1385+ .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1386+ .no_edge_events_on_boot = true,
1387+ },
13321388 },
13331389 {
13341390 /*
@@ -1341,16 +1397,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = { · 6 unmodified lines
13411397 DMI_MATCH(DMI_SYS_VENDOR, "Wortmann_AG"),
13421398 DMI_MATCH(DMI_PRODUCT_NAME, "TERRA_PAD_1061"),
13431399 },
1344− .driver_data = (void *)QUIRK_NO_EDGE_EVENTS_ON_BOOT,
1400+ .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1401+ .no_edge_events_on_boot = true,
1402+ },
13451403 },
13461404 {
13471405 /*
1348− * Various HP X2 10 Cherry Trail models use an external
1349− * embedded-controller connected via I2C + an ACPI GPIO
1350− * event handler. The embedded controller generates various
1351− * spurious wakeup events when suspended. So disable wakeup
1352− * for its handler (it uses the only ACPI GPIO event handler).
1353− * This breaks wakeup when opening the lid, the user needs
1406+ * HP X2 10 models with Cherry Trail SoC + TI PMIC use an
1407+ * external embedded-controller connected via I2C + an ACPI GPIO
1408+ * event handler on INT33FF:01 pin 0, causing spurious wakeups.
1409+ * When suspending by closing the LID, the power to the USB
1410+ * keyboard is turned off, causing INT0002 ACPI events to
1411+ * trigger once the XHCI controller notices the keyboard is
1412+ * gone. So INT0002 events cause spurious wakeups too. Ignoring
1413+ * EC wakes breaks wakeup when opening the lid, the user needs
13541414 * to press the power-button to wakeup the system. The
13551415 * alternative is suspend simply not working, which is worse.
13561416 */
@@ -1358,33 +1418,61 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = { · 1 unmodified line
13581418 DMI_MATCH(DMI_SYS_VENDOR, "HP"),
13591419 DMI_MATCH(DMI_PRODUCT_NAME, "HP x2 Detachable 10-p0XX"),
13601420 },
1361− .driver_data = (void *)QUIRK_NO_WAKEUP,
1421+ .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1422+ .ignore_wake = "INT33FF:01@0,INT0002:00@2",
1423+ },
1424+ },
1425+ {
1426+ /*
1427+ * HP X2 10 models with Bay Trail SoC + AXP288 PMIC use an
1428+ * external embedded-controller connected via I2C + an ACPI GPIO
1429+ * event handler on INT33FC:02 pin 28, causing spurious wakeups.
1430+ */
1431+ .matches = {
1432+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1433+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
1434+ DMI_MATCH(DMI_BOARD_NAME, "815D"),
1435+ },
1436+ .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1437+ .ignore_wake = "INT33FC:02@28",
1438+ },
1439+ },
1440+ {
1441+ /*
1442+ * HP X2 10 models with Cherry Trail SoC + AXP288 PMIC use an
1443+ * external embedded-controller connected via I2C + an ACPI GPIO
1444+ * event handler on INT33FF:01 pin 0, causing spurious wakeups.
1445+ */
1446+ .matches = {
1447+ DMI_MATCH(DMI_SYS_VENDOR, "HP"),
1448+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"),
1449+ DMI_MATCH(DMI_BOARD_NAME, "813E"),
1450+ },
1451+ .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
1452+ .ignore_wake = "INT33FF:01@0",
1453+ },
13621454 },
13631455 {} /* Terminating entry */
13641456 };
13651457
13661458 static int acpi_gpio_setup_params(void)
13671459 {
1460+ const struct acpi_gpiolib_dmi_quirk *quirk = NULL;
13681461 const struct dmi_system_id *id;
1369− long quirks = 0;
13701462
13711463 id = dmi_first_match(gpiolib_acpi_quirks);
13721464 if (id)
1373− quirks = (long)id->driver_data;
1465+ quirk = id->driver_data;
13741466
13751467 if (run_edge_events_on_boot < 0) {
1376− if (quirks & QUIRK_NO_EDGE_EVENTS_ON_BOOT)
1468+ if (quirk && quirk->no_edge_events_on_boot)
13771469 run_edge_events_on_boot = 0;
13781470 else
13791471 run_edge_events_on_boot = 1;
13801472 }
13811473
1382− if (honor_wakeup < 0) {
1383− if (quirks & QUIRK_NO_WAKEUP)
1384− honor_wakeup = 0;
1385− else
1386− honor_wakeup = 1;
1387− }
1474+ if (ignore_wake == NULL && quirk && quirk->ignore_wake)
1475+ ignore_wake = quirk->ignore_wake;
13881476
13891477 return 0;
13901478 }
drivers/gpio/gpiolib.c+8−1
@@ -2306,9 +2306,16 @@ static void gpiochip_irq_disable(struct irq_data *d) · 2305 unmodified lines
23062306 {
23072307 struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
23082308
2309+ /*
2310+ * Since we override .irq_disable() we need to mimic the
2311+ * behaviour of __irq_disable() in irq/chip.c.
2312+ * First call .irq_disable() if it exists, else mimic the
2313+ * behaviour of mask_irq() which calls .irq_mask() if
2314+ * it exists.
2315+ */
23092316 if (chip->irq.irq_disable)
23102317 chip->irq.irq_disable(d);
2311− else
2318+ else if (chip->irq.chip->irq_mask)
23122319 chip->irq.chip->irq_mask(d);
23132320 gpiochip_disable_irq(chip, d->hwirq);
23142321 }
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c+1−1
@@ -968,7 +968,7 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm) · 967 unmodified lines
968968 /* Map SG to device */
969969 r = -ENOMEM;
970970 nents = dma_map_sg(adev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
971− if (nents != ttm->sg->nents)
971+ if (nents == 0)
972972 goto release_sg;
973973
974974 /* convert SG to linear array of pages and dma addresses */
drivers/gpu/drm/arm/display/komeda/komeda_drv.c+2−2
@@ -146,14 +146,14 @@ static const struct of_device_id komeda_of_match[] = { · 145 unmodified lines
146146
147147 MODULE_DEVICE_TABLE(of, komeda_of_match);
148148
149−static int komeda_rt_pm_suspend(struct device *dev)
149+static int __maybe_unused komeda_rt_pm_suspend(struct device *dev)
150150 {
151151 struct komeda_drv *mdrv = dev_get_drvdata(dev);
152152
153153 return komeda_dev_suspend(mdrv->mdev);
154154 }
155155
156−static int komeda_rt_pm_resume(struct device *dev)
156+static int __maybe_unused komeda_rt_pm_resume(struct device *dev)
157157 {
158158 struct komeda_drv *mdrv = dev_get_drvdata(dev);
159159
drivers/gpu/drm/bochs/bochs_hw.c+2−4
@@ -157,10 +157,8 @@ int bochs_hw_init(struct drm_device *dev) · 156 unmodified lines
157157 size = min(size, mem);
158158 }
159159
160− if (pci_request_region(pdev, 0, "bochs-drm") != 0) {
161− DRM_ERROR("Cannot request framebuffer\n");
162− return -EBUSY;
163− }
160+ if (pci_request_region(pdev, 0, "bochs-drm") != 0)
161+ DRM_WARN("Cannot request framebuffer, boot fb still active?\n");
164162
165163 bochs->fb_map = ioremap(addr, size);
166164 if (bochs->fb_map == NULL) {
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c+26−20
@@ -1624,28 +1624,34 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) · 1623 unmodified lines
16241624 frame.colorspace = HDMI_COLORSPACE_RGB;
16251625
16261626 /* Set up colorimetry */
1627− switch (hdmi->hdmi_data.enc_out_encoding) {
1628− case V4L2_YCBCR_ENC_601:
1629− if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)
1630− frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1631− else
1627+ if (!hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format)) {
1628+ switch (hdmi->hdmi_data.enc_out_encoding) {
1629+ case V4L2_YCBCR_ENC_601:
1630+ if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)
1631+ frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1632+ else
1633+ frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1634+ frame.extended_colorimetry =
1635+ HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1636+ break;
1637+ case V4L2_YCBCR_ENC_709:
1638+ if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
1639+ frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1640+ else
1641+ frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
1642+ frame.extended_colorimetry =
1643+ HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1644+ break;
1645+ default: /* Carries no data */
16321646 frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1647+ frame.extended_colorimetry =
1648+ HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1649+ break;
1650+ }
1651+ } else {
1652+ frame.colorimetry = HDMI_COLORIMETRY_NONE;
16331653 frame.extended_colorimetry =
1634− HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1635− break;
1636− case V4L2_YCBCR_ENC_709:
1637− if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
1638− frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1639− else
1640− frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
1641− frame.extended_colorimetry =
1642− HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1643− break;
1644− default: /* Carries no data */
1645− frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1646− frame.extended_colorimetry =
1647− HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1648− break;
1654+ HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
16491655 }
16501656
16511657 frame.scan_mode = HDMI_SCAN_MODE_NONE;
drivers/gpu/drm/drm_dp_mst_topology.c+126−58
@@ -1937,7 +1937,7 @@ static u8 drm_dp_calculate_rad(struct drm_dp_mst_port *port, · 1936 unmodified lines
19371937 return parent_lct + 1;
19381938 }
19391939
1940−static bool drm_dp_mst_is_dp_mst_end_device(u8 pdt, bool mcs)
1940+static bool drm_dp_mst_is_end_device(u8 pdt, bool mcs)
19411941 {
19421942 switch (pdt) {
19431943 case DP_PEER_DEVICE_DP_LEGACY_CONV:
@@ -1967,13 +1967,13 @@ drm_dp_port_set_pdt(struct drm_dp_mst_port *port, u8 new_pdt, · 23 unmodified lines
19671967
19681968 /* Teardown the old pdt, if there is one */
19691969 if (port->pdt != DP_PEER_DEVICE_NONE) {
1970− if (drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {
1970+ if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
19711971 /*
19721972 * If the new PDT would also have an i2c bus,
19731973 * don't bother with reregistering it
19741974 */
19751975 if (new_pdt != DP_PEER_DEVICE_NONE &&
1976− drm_dp_mst_is_dp_mst_end_device(new_pdt, new_mcs)) {
1976+ drm_dp_mst_is_end_device(new_pdt, new_mcs)) {
19771977 port->pdt = new_pdt;
19781978 port->mcs = new_mcs;
19791979 return 0;
@@ -1993,7 +1993,7 @@ drm_dp_port_set_pdt(struct drm_dp_mst_port *port, u8 new_pdt, · 13 unmodified lines
19931993 port->mcs = new_mcs;
19941994
19951995 if (port->pdt != DP_PEER_DEVICE_NONE) {
1996− if (drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {
1996+ if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
19971997 /* add i2c over sideband */
19981998 ret = drm_dp_mst_register_i2c_bus(&port->aux);
19991999 } else {
@@ -2172,7 +2172,7 @@ drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, · 172 unmodified lines
21722172 }
21732173
21742174 if (port->pdt != DP_PEER_DEVICE_NONE &&
2175− drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {
2175+ drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
21762176 port->cached_edid = drm_get_edid(port->connector,
21772177 &port->aux.ddc);
21782178 drm_connector_set_tile_property(port->connector);
@@ -2302,14 +2302,18 @@ drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, · 123 unmodified lines
23022302 mutex_unlock(&mgr->lock);
23032303 }
23042304
2305− if (old_ddps != port->ddps) {
2306− if (port->ddps) {
2307− if (!port->input) {
2308− drm_dp_send_enum_path_resources(mgr, mstb,
2309− port);
2310− }
2305+ /*
2306+ * Reprobe PBN caps on both hotplug, and when re-probing the link
2307+ * for our parent mstb
2308+ */
2309+ if (old_ddps != port->ddps || !created) {
2310+ if (port->ddps && !port->input) {
2311+ ret = drm_dp_send_enum_path_resources(mgr, mstb,
2312+ port);
2313+ if (ret == 1)
2314+ changed = true;
23112315 } else {
2312− port->available_pbn = 0;
2316+ port->full_pbn = 0;
23132317 }
23142318 }
23152319
@@ -2401,11 +2405,10 @@ drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, · 85 unmodified lines
24012405 port->ddps = conn_stat->displayport_device_plug_status;
24022406
24032407 if (old_ddps != port->ddps) {
2404− if (port->ddps) {
2405− dowork = true;
2406− } else {
2407− port->available_pbn = 0;
2408− }
2408+ if (port->ddps && !port->input)
2409+ drm_dp_send_enum_path_resources(mgr, mstb, port);
2410+ else
2411+ port->full_pbn = 0;
24092412 }
24102413
24112414 new_pdt = port->input ? DP_PEER_DEVICE_NONE : conn_stat->peer_device_type;
@@ -2556,13 +2559,6 @@ static int drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *mg · 144 unmodified lines
25562559 if (port->input || !port->ddps)
25572560 continue;
25582561
2559− if (!port->available_pbn) {
2560− drm_modeset_lock(&mgr->base.lock, NULL);
2561− drm_dp_send_enum_path_resources(mgr, mstb, port);
2562− drm_modeset_unlock(&mgr->base.lock);
2563− changed = true;
2564− }
2565−
25662562 if (port->mstb)
25672563 mstb_child = drm_dp_mst_topology_get_mstb_validated(
25682564 mgr, port->mstb);
@@ -2996,6 +2992,7 @@ drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, · 427 unmodified lines
29962992
29972993 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
29982994 if (ret > 0) {
2995+ ret = 0;
29992996 path_res = &txmsg->reply.u.path_resources;
30002997
30012998 if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {
@@ -3008,14 +3005,22 @@ drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, · 6 unmodified lines
30083005 path_res->port_number,
30093006 path_res->full_payload_bw_number,
30103007 path_res->avail_payload_bw_number);
3011− port->available_pbn =
3012− path_res->avail_payload_bw_number;
3008+
3009+ /*
3010+ * If something changed, make sure we send a
3011+ * hotplug
3012+ */
3013+ if (port->full_pbn != path_res->full_payload_bw_number ||
3014+ port->fec_capable != path_res->fec_capable)
3015+ ret = 1;
3016+
3017+ port->full_pbn = path_res->full_payload_bw_number;
30133018 port->fec_capable = path_res->fec_capable;
30143019 }
30153020 }
30163021
30173022 kfree(txmsg);
3018− return 0;
3023+ return ret;
30193024 }
30203025
30213026 static struct drm_dp_mst_port *drm_dp_get_last_connected_port_to_mstb(struct drm_dp_mst_branch *mstb)
@@ -3589,13 +3594,9 @@ drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) · 567 unmodified lines
35893594 /* The link address will need to be re-sent on resume */
35903595 mstb->link_address_sent = false;
35913596
3592− list_for_each_entry(port, &mstb->ports, next) {
3593− /* The PBN for each port will also need to be re-probed */
3594− port->available_pbn = 0;
3595−
3597+ list_for_each_entry(port, &mstb->ports, next)
35963598 if (port->mstb)
35973599 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb);
3598− }
35993600 }
36003601
36013602 /**
@@ -4858,41 +4859,102 @@ static bool drm_dp_mst_port_downstream_of_branch(struct drm_dp_mst_port *port, · 1256 unmodified lines
48584859 return false;
48594860 }
48604861
4861−static inline
4862−int drm_dp_mst_atomic_check_bw_limit(struct drm_dp_mst_branch *branch,
4863− struct drm_dp_mst_topology_state *mst_state)
4862+static int
4863+drm_dp_mst_atomic_check_port_bw_limit(struct drm_dp_mst_port *port,
4864+ struct drm_dp_mst_topology_state *state);
4865+
4866+static int
4867+drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb,
4868+ struct drm_dp_mst_topology_state *state)
48644869 {
4865− struct drm_dp_mst_port *port;
48664870 struct drm_dp_vcpi_allocation *vcpi;
4867− int pbn_limit = 0, pbn_used = 0;
4871+ struct drm_dp_mst_port *port;
4872+ int pbn_used = 0, ret;
4873+ bool found = false;
48684874
4869− list_for_each_entry(port, &branch->ports, next) {
4870− if (port->mstb)
4871− if (drm_dp_mst_atomic_check_bw_limit(port->mstb, mst_state))
4872− return -ENOSPC;
4875+ /* Check that we have at least one port in our state that's downstream
4876+ * of this branch, otherwise we can skip this branch
4877+ */
4878+ list_for_each_entry(vcpi, &state->vcpis, next) {
4879+ if (!vcpi->pbn ||
4880+ !drm_dp_mst_port_downstream_of_branch(vcpi->port, mstb))
4881+ continue;
48734882
4874− if (port->available_pbn > 0)
4875− pbn_limit = port->available_pbn;
4883+ found = true;
4884+ break;
48764885 }
4877− DRM_DEBUG_ATOMIC("[MST BRANCH:%p] branch has %d PBN available\n",
4878− branch, pbn_limit);
4886+ if (!found)
4887+ return 0;
48794888
4880− list_for_each_entry(vcpi, &mst_state->vcpis, next) {
4881− if (!vcpi->pbn)
4882− continue;
4889+ if (mstb->port_parent)
4890+ DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] Checking bandwidth limits on [MSTB:%p]\n",
4891+ mstb->port_parent->parent, mstb->port_parent,
4892+ mstb);
4893+ else
4894+ DRM_DEBUG_ATOMIC("[MSTB:%p] Checking bandwidth limits\n",
4895+ mstb);
4896+
4897+ list_for_each_entry(port, &mstb->ports, next) {
4898+ ret = drm_dp_mst_atomic_check_port_bw_limit(port, state);
4899+ if (ret < 0)
4900+ return ret;
4901+
4902+ pbn_used += ret;
4903+ }
4904+
4905+ return pbn_used;
4906+}
4907+
4908+static int
4909+drm_dp_mst_atomic_check_port_bw_limit(struct drm_dp_mst_port *port,
4910+ struct drm_dp_mst_topology_state *state)
4911+{
4912+ struct drm_dp_vcpi_allocation *vcpi;
4913+ int pbn_used = 0;
4914+
4915+ if (port->pdt == DP_PEER_DEVICE_NONE)
4916+ return 0;
4917+
4918+ if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
4919+ bool found = false;
4920+
4921+ list_for_each_entry(vcpi, &state->vcpis, next) {
4922+ if (vcpi->port != port)
4923+ continue;
4924+ if (!vcpi->pbn)
4925+ return 0;
4926+
4927+ found = true;
4928+ break;
4929+ }
4930+ if (!found)
4931+ return 0;
48834932
4884− if (drm_dp_mst_port_downstream_of_branch(vcpi->port, branch))
4885− pbn_used += vcpi->pbn;
4933+ /* This should never happen, as it means we tried to
4934+ * set a mode before querying the full_pbn
4935+ */
4936+ if (WARN_ON(!port->full_pbn))
4937+ return -EINVAL;
4938+
4939+ pbn_used = vcpi->pbn;
4940+ } else {
4941+ pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb,
4942+ state);
4943+ if (pbn_used <= 0)
4944+ return pbn_used;
48864945 }
4887− DRM_DEBUG_ATOMIC("[MST BRANCH:%p] branch used %d PBN\n",
4888− branch, pbn_used);
48894946
4890− if (pbn_used > pbn_limit) {
4891− DRM_DEBUG_ATOMIC("[MST BRANCH:%p] No available bandwidth\n",
4892− branch);
4947+ if (pbn_used > port->full_pbn) {
4948+ DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] required PBN of %d exceeds port limit of %d\n",
4949+ port->parent, port, pbn_used,
4950+ port->full_pbn);
48934951 return -ENOSPC;
48944952 }
4895− return 0;
4953+
4954+ DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] uses %d out of %d PBN\n",
4955+ port->parent, port, pbn_used, port->full_pbn);
4956+
4957+ return pbn_used;
48964958 }
48974959
48984960 static inline int
@@ -5090,9 +5152,15 @@ int drm_dp_mst_atomic_check(struct drm_atomic_state *state) · 191 unmodified lines
50905152 ret = drm_dp_mst_atomic_check_vcpi_alloc_limit(mgr, mst_state);
50915153 if (ret)
50925154 break;
5093− ret = drm_dp_mst_atomic_check_bw_limit(mgr->mst_primary, mst_state);
5094− if (ret)
5155+
5156+ mutex_lock(&mgr->lock);
5157+ ret = drm_dp_mst_atomic_check_mstb_bw_limit(mgr->mst_primary,
5158+ mst_state);
5159+ mutex_unlock(&mgr->lock);
5160+ if (ret < 0)
50955161 break;
5162+ else
5163+ ret = 0;
50965164 }
50975165
50985166 return ret;
drivers/gpu/drm/drm_lease.c+2−1
@@ -542,10 +542,12 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, · 541 unmodified lines
542542 }
543543
544544 DRM_DEBUG_LEASE("Creating lease\n");
545+ /* lessee will take the ownership of leases */
545546 lessee = drm_lease_create(lessor, &leases);
546547
547548 if (IS_ERR(lessee)) {
548549 ret = PTR_ERR(lessee);
550+ idr_destroy(&leases);
549551 goto out_leases;
550552 }
551553
@@ -580,7 +582,6 @@ out_lessee: · 28 unmodified lines
580582
581583 out_leases:
582584 put_unused_fd(fd);
583− idr_destroy(&leases);
584585
585586 DRM_DEBUG_LEASE("drm_mode_create_lease_ioctl failed: %d\n", ret);
586587 return ret;
drivers/gpu/drm/drm_prime.c+1−1
@@ -967,7 +967,7 @@ int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, · 966 unmodified lines
967967
968968 index = 0;
969969 for_each_sg(sgt->sgl, sg, sgt->nents, count) {
970− len = sg->length;
970+ len = sg_dma_len(sg);
971971 page = sg_page(sg);
972972 addr = sg_dma_address(sg);
973973
drivers/gpu/drm/exynos/exynos5433_drm_decon.c+3−2
@@ -55,6 +55,7 @@ static const char * const decon_clks_name[] = { · 54 unmodified lines
5555 struct decon_context {
5656 struct device *dev;
5757 struct drm_device *drm_dev;
58+ void *dma_priv;
5859 struct exynos_drm_crtc *crtc;
5960 struct exynos_drm_plane planes[WINDOWS_NR];
6061 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -644,7 +645,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data) · 583 unmodified lines
644645
645646 decon_clear_channels(ctx->crtc);
646647
647− return exynos_drm_register_dma(drm_dev, dev);
648+ return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
648649 }
649650
650651 static void decon_unbind(struct device *dev, struct device *master, void *data)
@@ -654,7 +655,7 @@ static void decon_unbind(struct device *dev, struct device *master, void *data) · 3 unmodified lines
654655 decon_atomic_disable(ctx->crtc);
655656
656657 /* detach this sub driver from iommu mapping if supported. */
657− exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
658+ exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
658659 }
659660
660661 static const struct component_ops decon_component_ops = {
drivers/gpu/drm/exynos/exynos7_drm_decon.c+3−2
@@ -40,6 +40,7 @@ · 39 unmodified lines
4040 struct decon_context {
4141 struct device *dev;
4242 struct drm_device *drm_dev;
43+ void *dma_priv;
4344 struct exynos_drm_crtc *crtc;
4445 struct exynos_drm_plane planes[WINDOWS_NR];
4546 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -127,13 +128,13 @@ static int decon_ctx_initialize(struct decon_context *ctx, · 81 unmodified lines
127128
128129 decon_clear_channels(ctx->crtc);
129130
130− return exynos_drm_register_dma(drm_dev, ctx->dev);
131+ return exynos_drm_register_dma(drm_dev, ctx->dev, &ctx->dma_priv);
131132 }
132133
133134 static void decon_ctx_remove(struct decon_context *ctx)
134135 {
135136 /* detach this sub driver from iommu mapping if supported. */
136− exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
137+ exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
137138 }
138139
139140 static u32 decon_calc_clkdiv(struct decon_context *ctx,
drivers/gpu/drm/exynos/exynos_drm_dma.c+19−9
@@ -58,7 +58,7 @@ static inline void clear_dma_max_seg_size(struct device *dev) · 57 unmodified lines
5858 * mapping.
5959 */
6060 static int drm_iommu_attach_device(struct drm_device *drm_dev,
61− struct device *subdrv_dev)
61+ struct device *subdrv_dev, void **dma_priv)
6262 {
6363 struct exynos_drm_private *priv = drm_dev->dev_private;
6464 int ret;
@@ -74,7 +74,14 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev, · 9 unmodified lines
7474 return ret;
7575
7676 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
77− if (to_dma_iommu_mapping(subdrv_dev))
77+ /*
78+ * Keep the original DMA mapping of the sub-device and
79+ * restore it on Exynos DRM detach, otherwise the DMA
80+ * framework considers it as IOMMU-less during the next
81+ * probe (in case of deferred probe or modular build)
82+ */
83+ *dma_priv = to_dma_iommu_mapping(subdrv_dev);
84+ if (*dma_priv)
7885 arm_iommu_detach_device(subdrv_dev);
7986
8087 ret = arm_iommu_attach_device(subdrv_dev, priv->mapping);
@@ -98,19 +105,21 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev, · 17 unmodified lines
98105 * mapping
99106 */
100107 static void drm_iommu_detach_device(struct drm_device *drm_dev,
101− struct device *subdrv_dev)
108+ struct device *subdrv_dev, void **dma_priv)
102109 {
103110 struct exynos_drm_private *priv = drm_dev->dev_private;
104111
105− if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
112+ if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
106113 arm_iommu_detach_device(subdrv_dev);
107− else if (IS_ENABLED(CONFIG_IOMMU_DMA))
114+ arm_iommu_attach_device(subdrv_dev, *dma_priv);
115+ } else if (IS_ENABLED(CONFIG_IOMMU_DMA))
108116 iommu_detach_device(priv->mapping, subdrv_dev);
109117
110118 clear_dma_max_seg_size(subdrv_dev);
111119 }
112120
113−int exynos_drm_register_dma(struct drm_device *drm, struct device *dev)
121+int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
122+ void **dma_priv)
114123 {
115124 struct exynos_drm_private *priv = drm->dev_private;
116125
@@ -137,13 +146,14 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev) · 20 unmodified lines
137146 priv->mapping = mapping;
138147 }
139148
140− return drm_iommu_attach_device(drm, dev);
149+ return drm_iommu_attach_device(drm, dev, dma_priv);
141150 }
142151
143−void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev)
152+void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
153+ void **dma_priv)
144154 {
145155 if (IS_ENABLED(CONFIG_EXYNOS_IOMMU))
146− drm_iommu_detach_device(drm, dev);
156+ drm_iommu_detach_device(drm, dev, dma_priv);
147157 }
148158
149159 void exynos_drm_cleanup_dma(struct drm_device *drm)
drivers/gpu/drm/exynos/exynos_drm_drv.h+4−2
@@ -223,8 +223,10 @@ static inline bool is_drm_iommu_supported(struct drm_device *drm_dev) · 222 unmodified lines
223223 return priv->mapping ? true : false;
224224 }
225225
226−int exynos_drm_register_dma(struct drm_device *drm, struct device *dev);
227−void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev);
226+int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
227+ void **dma_priv);
228+void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
229+ void **dma_priv);
228230 void exynos_drm_cleanup_dma(struct drm_device *drm);
229231
230232 #ifdef CONFIG_DRM_EXYNOS_DPI
drivers/gpu/drm/exynos/exynos_drm_fimc.c+3−2
@@ -97,6 +97,7 @@ struct fimc_scaler { · 96 unmodified lines
9797 struct fimc_context {
9898 struct exynos_drm_ipp ipp;
9999 struct drm_device *drm_dev;
100+ void *dma_priv;
100101 struct device *dev;
101102 struct exynos_drm_ipp_task *task;
102103 struct exynos_drm_ipp_formats *formats;
@@ -1133,7 +1134,7 @@ static int fimc_bind(struct device *dev, struct device *master, void *data) · 1030 unmodified lines
11331134
11341135 ctx->drm_dev = drm_dev;
11351136 ipp->drm_dev = drm_dev;
1136− exynos_drm_register_dma(drm_dev, dev);
1137+ exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
11371138
11381139 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
11391140 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -1153,7 +1154,7 @@ static void fimc_unbind(struct device *dev, struct device *master, · 13 unmodified lines
11531154 struct exynos_drm_ipp *ipp = &ctx->ipp;
11541155
11551156 exynos_drm_ipp_unregister(dev, ipp);
1156− exynos_drm_unregister_dma(drm_dev, dev);
1157+ exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
11571158 }
11581159
11591160 static const struct component_ops fimc_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_fimd.c+3−2
@@ -167,6 +167,7 @@ static struct fimd_driver_data exynos5420_fimd_driver_data = { · 166 unmodified lines
167167 struct fimd_context {
168168 struct device *dev;
169169 struct drm_device *drm_dev;
170+ void *dma_priv;
170171 struct exynos_drm_crtc *crtc;
171172 struct exynos_drm_plane planes[WINDOWS_NR];
172173 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -1090,7 +1091,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data) · 917 unmodified lines
10901091 if (is_drm_iommu_supported(drm_dev))
10911092 fimd_clear_channels(ctx->crtc);
10921093
1093− return exynos_drm_register_dma(drm_dev, dev);
1094+ return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
10941095 }
10951096
10961097 static void fimd_unbind(struct device *dev, struct device *master,
@@ -1100,7 +1101,7 @@ static void fimd_unbind(struct device *dev, struct device *master, · 3 unmodified lines
11001101
11011102 fimd_atomic_disable(ctx->crtc);
11021103
1103− exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);
1104+ exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
11041105
11051106 if (ctx->encoder)
11061107 exynos_dpi_remove(ctx->encoder);
drivers/gpu/drm/exynos/exynos_drm_g2d.c+3−2
@@ -232,6 +232,7 @@ struct g2d_runqueue_node { · 231 unmodified lines
232232
233233 struct g2d_data {
234234 struct device *dev;
235+ void *dma_priv;
235236 struct clk *gate_clk;
236237 void __iomem *regs;
237238 int irq;
@@ -1409,7 +1410,7 @@ static int g2d_bind(struct device *dev, struct device *master, void *data) · 1171 unmodified lines
14091410 return ret;
14101411 }
14111412
1412− ret = exynos_drm_register_dma(drm_dev, dev);
1413+ ret = exynos_drm_register_dma(drm_dev, dev, &g2d->dma_priv);
14131414 if (ret < 0) {
14141415 dev_err(dev, "failed to enable iommu.\n");
14151416 g2d_fini_cmdlist(g2d);
@@ -1434,7 +1435,7 @@ static void g2d_unbind(struct device *dev, struct device *master, void *data) · 18 unmodified lines
14341435 priv->g2d_dev = NULL;
14351436
14361437 cancel_work_sync(&g2d->runqueue_work);
1437− exynos_drm_unregister_dma(g2d->drm_dev, dev);
1438+ exynos_drm_unregister_dma(g2d->drm_dev, dev, &g2d->dma_priv);
14381439 }
14391440
14401441 static const struct component_ops g2d_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_gsc.c+3−2
@@ -97,6 +97,7 @@ struct gsc_scaler { · 96 unmodified lines
9797 struct gsc_context {
9898 struct exynos_drm_ipp ipp;
9999 struct drm_device *drm_dev;
100+ void *dma_priv;
100101 struct device *dev;
101102 struct exynos_drm_ipp_task *task;
102103 struct exynos_drm_ipp_formats *formats;
@@ -1169,7 +1170,7 @@ static int gsc_bind(struct device *dev, struct device *master, void *data) · 1066 unmodified lines
11691170
11701171 ctx->drm_dev = drm_dev;
11711172 ctx->drm_dev = drm_dev;
1172− exynos_drm_register_dma(drm_dev, dev);
1173+ exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
11731174
11741175 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
11751176 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -1189,7 +1190,7 @@ static void gsc_unbind(struct device *dev, struct device *master, · 13 unmodified lines
11891190 struct exynos_drm_ipp *ipp = &ctx->ipp;
11901191
11911192 exynos_drm_ipp_unregister(dev, ipp);
1192− exynos_drm_unregister_dma(drm_dev, dev);
1193+ exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
11931194 }
11941195
11951196 static const struct component_ops gsc_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_rotator.c+3−2
@@ -56,6 +56,7 @@ struct rot_variant { · 55 unmodified lines
5656 struct rot_context {
5757 struct exynos_drm_ipp ipp;
5858 struct drm_device *drm_dev;
59+ void *dma_priv;
5960 struct device *dev;
6061 void __iomem *regs;
6162 struct clk *clock;
@@ -243,7 +244,7 @@ static int rotator_bind(struct device *dev, struct device *master, void *data) · 181 unmodified lines
243244
244245 rot->drm_dev = drm_dev;
245246 ipp->drm_dev = drm_dev;
246− exynos_drm_register_dma(drm_dev, dev);
247+ exynos_drm_register_dma(drm_dev, dev, &rot->dma_priv);
247248
248249 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
249250 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE,
@@ -261,7 +262,7 @@ static void rotator_unbind(struct device *dev, struct device *master, · 11 unmodified lines
261262 struct exynos_drm_ipp *ipp = &rot->ipp;
262263
263264 exynos_drm_ipp_unregister(dev, ipp);
264− exynos_drm_unregister_dma(rot->drm_dev, rot->dev);
265+ exynos_drm_unregister_dma(rot->drm_dev, rot->dev, &rot->dma_priv);
265266 }
266267
267268 static const struct component_ops rotator_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_scaler.c+4−2
@@ -39,6 +39,7 @@ struct scaler_data { · 38 unmodified lines
3939 struct scaler_context {
4040 struct exynos_drm_ipp ipp;
4141 struct drm_device *drm_dev;
42+ void *dma_priv;
4243 struct device *dev;
4344 void __iomem *regs;
4445 struct clk *clock[SCALER_MAX_CLK];
@@ -450,7 +451,7 @@ static int scaler_bind(struct device *dev, struct device *master, void *data) · 405 unmodified lines
450451
451452 scaler->drm_dev = drm_dev;
452453 ipp->drm_dev = drm_dev;
453− exynos_drm_register_dma(drm_dev, dev);
454+ exynos_drm_register_dma(drm_dev, dev, &scaler->dma_priv);
454455
455456 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
456457 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -470,7 +471,8 @@ static void scaler_unbind(struct device *dev, struct device *master, · 13 unmodified lines
470471 struct exynos_drm_ipp *ipp = &scaler->ipp;
471472
472473 exynos_drm_ipp_unregister(dev, ipp);
473− exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev);
474+ exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev,
475+ &scaler->dma_priv);
474476 }
475477
476478 static const struct component_ops scaler_component_ops = {
drivers/gpu/drm/exynos/exynos_mixer.c+5−2
@@ -94,6 +94,7 @@ struct mixer_context { · 93 unmodified lines
9494 struct platform_device *pdev;
9595 struct device *dev;
9696 struct drm_device *drm_dev;
97+ void *dma_priv;
9798 struct exynos_drm_crtc *crtc;
9899 struct exynos_drm_plane planes[MIXER_WIN_NR];
99100 unsigned long flags;
@@ -894,12 +895,14 @@ static int mixer_initialize(struct mixer_context *mixer_ctx, · 794 unmodified lines
894895 }
895896 }
896897
897− return exynos_drm_register_dma(drm_dev, mixer_ctx->dev);
898+ return exynos_drm_register_dma(drm_dev, mixer_ctx->dev,
899+ &mixer_ctx->dma_priv);
898900 }
899901
900902 static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
901903 {
902− exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev);
904+ exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev,
905+ &mixer_ctx->dma_priv);
903906 }
904907
905908 static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
drivers/gpu/drm/i915/gvt/opregion.c+2−3
@@ -147,15 +147,14 @@ static void virt_vbt_generation(struct vbt *v) · 146 unmodified lines
147147 /* there's features depending on version! */
148148 v->header.version = 155;
149149 v->header.header_size = sizeof(v->header);
150− v->header.vbt_size = sizeof(struct vbt) - sizeof(v->header);
150+ v->header.vbt_size = sizeof(struct vbt);
151151 v->header.bdb_offset = offsetof(struct vbt, bdb_header);
152152
153153 strcpy(&v->bdb_header.signature[0], "BIOS_DATA_BLOCK");
154154 v->bdb_header.version = 186; /* child_dev_size = 33 */
155155 v->bdb_header.header_size = sizeof(v->bdb_header);
156156
157− v->bdb_header.bdb_size = sizeof(struct vbt) - sizeof(struct vbt_header)
158− - sizeof(struct bdb_header);
157+ v->bdb_header.bdb_size = sizeof(struct vbt) - sizeof(struct vbt_header);
159158
160159 /* general features */
161160 v->general_features_header.id = BDB_GENERAL_FEATURES;
drivers/gpu/drm/i915/gvt/vgpu.c+9−3
@@ -274,10 +274,17 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) · 273 unmodified lines
274274 struct intel_gvt *gvt = vgpu->gvt;
275275 struct drm_i915_private *i915 = gvt->gt->i915;
276276
277− mutex_lock(&vgpu->vgpu_lock);
278−
279277 drm_WARN(&i915->drm, vgpu->active, "vGPU is still active!\n");
280278
279+ /*
280+ * remove idr first so later clean can judge if need to stop
281+ * service if no active vgpu.
282+ */
283+ mutex_lock(&gvt->lock);
284+ idr_remove(&gvt->vgpu_idr, vgpu->id);
285+ mutex_unlock(&gvt->lock);
286+
287+ mutex_lock(&vgpu->vgpu_lock);
281288 intel_gvt_debugfs_remove_vgpu(vgpu);
282289 intel_vgpu_clean_sched_policy(vgpu);
283290 intel_vgpu_clean_submission(vgpu);
@@ -292,7 +299,6 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) · 8 unmodified lines
292299 mutex_unlock(&vgpu->vgpu_lock);
293300
294301 mutex_lock(&gvt->lock);
295− idr_remove(&gvt->vgpu_idr, vgpu->id);
296302 if (idr_is_empty(&gvt->vgpu_idr))
297303 intel_gvt_clean_irq(gvt);
298304 intel_gvt_update_vgpu_types(gvt);
drivers/gpu/drm/radeon/radeon_ttm.c+1−1
@@ -523,7 +523,7 @@ static int radeon_ttm_tt_pin_userptr(struct ttm_tt *ttm) · 522 unmodified lines
523523
524524 r = -ENOMEM;
525525 nents = dma_map_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
526− if (nents != ttm->sg->nents)
526+ if (nents == 0)
527527 goto release_sg;
528528
529529 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages,
drivers/hid/hid-google-hammer.c+2−0
@@ -532,6 +532,8 @@ static const struct hid_device_id hammer_devices[] = { · 531 unmodified lines
532532 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MAGNEMITE) },
533533 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
534534 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MASTERBALL) },
535+ { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
536+ USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MOONBALL) },
535537 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
536538 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },
537539 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
drivers/hid/hid-ids.h+2−0
@@ -478,6 +478,7 @@ · 477 unmodified lines
478478 #define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030
479479 #define USB_DEVICE_ID_GOOGLE_MASTERBALL 0x503c
480480 #define USB_DEVICE_ID_GOOGLE_MAGNEMITE 0x503d
481+#define USB_DEVICE_ID_GOOGLE_MOONBALL 0x5044
481482
482483 #define USB_VENDOR_ID_GOTOP 0x08f2
483484 #define USB_DEVICE_ID_SUPER_Q2 0x007f
@@ -726,6 +727,7 @@ · 242 unmodified lines
726727 #define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085
727728 #define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3
728729 #define USB_DEVICE_ID_LENOVO_X1_TAB3 0x60b5
730+#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D 0x608d
729731
730732 #define USB_VENDOR_ID_LG 0x1fd2
731733 #define USB_DEVICE_ID_LG_MULTITOUCH 0x0064
drivers/hid/hid-picolcd_fb.c+2−2
@@ -458,9 +458,9 @@ static ssize_t picolcd_fb_update_rate_show(struct device *dev, · 457 unmodified lines
458458 if (ret >= PAGE_SIZE)
459459 break;
460460 else if (i == fb_update_rate)
461− ret += snprintf(buf+ret, PAGE_SIZE-ret, "[%u] ", i);
461+ ret += scnprintf(buf+ret, PAGE_SIZE-ret, "[%u] ", i);
462462 else
463− ret += snprintf(buf+ret, PAGE_SIZE-ret, "%u ", i);
463+ ret += scnprintf(buf+ret, PAGE_SIZE-ret, "%u ", i);
464464 if (ret > 0)
465465 buf[min(ret, (size_t)PAGE_SIZE)-1] = '\n';
466466 return ret;
drivers/hid/hid-quirks.c+1−0
@@ -103,6 +103,7 @@ static const struct hid_device_id hid_quirks[] = { · 102 unmodified lines
103103 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HID_QUIRK_MULTI_INPUT },
104104 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT },
105105 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },
106+ { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL },
106107 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL },
107108 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL },
108109 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET },
drivers/hid/hid-sensor-custom.c+3−3
@@ -313,7 +313,7 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr, · 312 unmodified lines
313313
314314 while (i < ret) {
315315 if (i + attribute->size > ret) {
316− len += snprintf(&buf[len],
316+ len += scnprintf(&buf[len],
317317 PAGE_SIZE - len,
318318 "%d ", values[i]);
319319 break;
@@ -336,10 +336,10 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr, · 16 unmodified lines
336336 ++i;
337337 break;
338338 }
339− len += snprintf(&buf[len], PAGE_SIZE - len,
339+ len += scnprintf(&buf[len], PAGE_SIZE - len,
340340 "%lld ", value);
341341 }
342− len += snprintf(&buf[len], PAGE_SIZE - len, "\n");
342+ len += scnprintf(&buf[len], PAGE_SIZE - len, "\n");
343343
344344 return len;
345345 } else if (input)
drivers/hwtracing/intel_th/msu.c+7−6
@@ -718,9 +718,6 @@ static int msc_win_set_lockout(struct msc_window *win, · 717 unmodified lines
718718
719719 if (old != expect) {
720720 ret = -EINVAL;
721− dev_warn_ratelimited(msc_dev(win->msc),
722− "expected lockout state %d, got %d\n",
723− expect, old);
724721 goto unlock;
725722 }
726723
@@ -741,6 +738,10 @@ unlock: · 14 unmodified lines
741738 /* from intel_th_msc_window_unlock(), don't warn if not locked */
742739 if (expect == WIN_LOCKED && old == new)
743740 return 0;
741+
742+ dev_warn_ratelimited(msc_dev(win->msc),
743+ "expected lockout state %d, got %d\n",
744+ expect, old);
744745 }
745746
746747 return ret;
@@ -760,7 +761,7 @@ static int msc_configure(struct msc *msc) · 13 unmodified lines
760761 lockdep_assert_held(&msc->buf_mutex);
761762
762763 if (msc->mode > MSC_MODE_MULTI)
763− return -ENOTSUPP;
764+ return -EINVAL;
764765
765766 if (msc->mode == MSC_MODE_MULTI) {
766767 if (msc_win_set_lockout(msc->cur_win, WIN_READY, WIN_INUSE))
@@ -1294,7 +1295,7 @@ static int msc_buffer_alloc(struct msc *msc, unsigned long *nr_pages, · 527 unmodified lines
12941295 } else if (msc->mode == MSC_MODE_MULTI) {
12951296 ret = msc_buffer_multi_alloc(msc, nr_pages, nr_wins);
12961297 } else {
1297− ret = -ENOTSUPP;
1298+ ret = -EINVAL;
12981299 }
12991300
13001301 if (!ret) {
@@ -1530,7 +1531,7 @@ static ssize_t intel_th_msc_read(struct file *file, char __user *buf, · 229 unmodified lines
15301531 if (ret >= 0)
15311532 *ppos = iter->offset;
15321533 } else {
1533− ret = -ENOTSUPP;
1534+ ret = -EINVAL;
15341535 }
15351536
15361537 put_count:
drivers/hwtracing/intel_th/pci.c+5−0
@@ -234,6 +234,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { · 233 unmodified lines
234234 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4da6),
235235 .driver_data = (kernel_ulong_t)&intel_th_2x,
236236 },
237+ {
238+ /* Elkhart Lake CPU */
239+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4529),
240+ .driver_data = (kernel_ulong_t)&intel_th_2x,
241+ },
237242 {
238243 /* Elkhart Lake */
239244 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4b26),
drivers/hwtracing/stm/p_sys-t.c+3−3
@@ -238,7 +238,7 @@ static struct configfs_attribute *sys_t_policy_attrs[] = { · 237 unmodified lines
238238 static inline bool sys_t_need_ts(struct sys_t_output *op)
239239 {
240240 if (op->node.ts_interval &&
241− time_after(op->ts_jiffies + op->node.ts_interval, jiffies)) {
241+ time_after(jiffies, op->ts_jiffies + op->node.ts_interval)) {
242242 op->ts_jiffies = jiffies;
243243
244244 return true;
@@ -250,8 +250,8 @@ static inline bool sys_t_need_ts(struct sys_t_output *op) · 5 unmodified lines
250250 static bool sys_t_need_clock_sync(struct sys_t_output *op)
251251 {
252252 if (op->node.clocksync_interval &&
253− time_after(op->clocksync_jiffies + op->node.clocksync_interval,
254− jiffies)) {
253+ time_after(jiffies,
254+ op->clocksync_jiffies + op->node.clocksync_interval)) {
255255 op->clocksync_jiffies = jiffies;
256256
257257 return true;
drivers/i2c/busses/i2c-designware-pcidrv.c+1−0
@@ -313,6 +313,7 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev) · 312 unmodified lines
313313 pm_runtime_get_noresume(&pdev->dev);
314314
315315 i2c_del_adapter(&dev->adapter);
316+ devm_free_irq(&pdev->dev, dev->irq, dev);
316317 pci_free_irq_vectors(pdev);
317318 }
318319
drivers/i2c/busses/i2c-gpio.c+1−1
@@ -348,7 +348,7 @@ static struct gpio_desc *i2c_gpio_get_desc(struct device *dev, · 347 unmodified lines
348348 if (ret == -ENOENT)
349349 retdesc = ERR_PTR(-EPROBE_DEFER);
350350
351− if (ret != -EPROBE_DEFER)
351+ if (PTR_ERR(retdesc) != -EPROBE_DEFER)
352352 dev_err(dev, "error trying to get descriptor: %d\n", ret);
353353
354354 return retdesc;
drivers/i2c/busses/i2c-hix5hd2.c+1−0
@@ -477,6 +477,7 @@ static int hix5hd2_i2c_remove(struct platform_device *pdev) · 476 unmodified lines
477477 i2c_del_adapter(&priv->adap);
478478 pm_runtime_disable(priv->dev);
479479 pm_runtime_set_suspended(priv->dev);
480+ clk_disable_unprepare(priv->clk);
480481
481482 return 0;
482483 }
drivers/i2c/busses/i2c-i801.c+12−33
@@ -132,11 +132,6 @@ · 131 unmodified lines
132132 #define TCOBASE 0x050
133133 #define TCOCTL 0x054
134134
135−#define ACPIBASE 0x040
136−#define ACPIBASE_SMI_OFF 0x030
137−#define ACPICTRL 0x044
138−#define ACPICTRL_EN 0x080
139−
140135 #define SBREG_BAR 0x10
141136 #define SBREG_SMBCTRL 0xc6000c
142137 #define SBREG_SMBCTRL_DNV 0xcf000c
@@ -1553,7 +1548,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, · 1410 unmodified lines
15531548 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);
15541549 spin_unlock(&p2sb_spinlock);
15551550
1556− res = &tco_res[ICH_RES_MEM_OFF];
1551+ res = &tco_res[1];
15571552 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)
15581553 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV;
15591554 else
@@ -1563,7 +1558,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, · 3 unmodified lines
15631558 res->flags = IORESOURCE_MEM;
15641559
15651560 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1566− tco_res, 3, &spt_tco_platform_data,
1561+ tco_res, 2, &spt_tco_platform_data,
15671562 sizeof(spt_tco_platform_data));
15681563 }
15691564
@@ -1576,17 +1571,16 @@ static struct platform_device * · 6 unmodified lines
15761571 i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,
15771572 struct resource *tco_res)
15781573 {
1579− return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1580− tco_res, 2, &cnl_tco_platform_data,
1581− sizeof(cnl_tco_platform_data));
1574+ return platform_device_register_resndata(&pci_dev->dev,
1575+ "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data,
1576+ sizeof(cnl_tco_platform_data));
15821577 }
15831578
15841579 static void i801_add_tco(struct i801_priv *priv)
15851580 {
1586− u32 base_addr, tco_base, tco_ctl, ctrl_val;
15871581 struct pci_dev *pci_dev = priv->pci_dev;
1588− struct resource tco_res[3], *res;
1589− unsigned int devfn;
1582+ struct resource tco_res[2], *res;
1583+ u32 tco_base, tco_ctl;
15901584
15911585 /* If we have ACPI based watchdog use that instead */
15921586 if (acpi_has_watchdog())
@@ -1601,30 +1595,15 @@ static void i801_add_tco(struct i801_priv *priv) · 8 unmodified lines
16011595 return;
16021596
16031597 memset(tco_res, 0, sizeof(tco_res));
1604−
1605− res = &tco_res[ICH_RES_IO_TCO];
1606− res->start = tco_base & ~1;
1607− res->end = res->start + 32 - 1;
1608− res->flags = IORESOURCE_IO;
1609−
16101598 /*
1611− * Power Management registers.
1599+ * Always populate the main iTCO IO resource here. The second entry
1600+ * for NO_REBOOT MMIO is filled by the SPT specific function.
16121601 */
1613− devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
1614− pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
1615−
1616− res = &tco_res[ICH_RES_IO_SMI];
1617− res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
1618− res->end = res->start + 3;
1602+ res = &tco_res[0];
1603+ res->start = tco_base & ~1;
1604+ res->end = res->start + 32 - 1;
16191605 res->flags = IORESOURCE_IO;
16201606
1621− /*
1622− * Enable the ACPI I/O space.
1623− */
1624− pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
1625− ctrl_val |= ACPICTRL_EN;
1626− pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
1627−
16281607 if (priv->features & FEATURE_TCO_CNL)
16291608 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);
16301609 else
drivers/i2c/busses/i2c-nvidia-gpu.c+8−12
@@ -8,6 +8,7 @@ · 7 unmodified lines
88 #include <linux/delay.h>
99 #include <linux/i2c.h>
1010 #include <linux/interrupt.h>
11+#include <linux/iopoll.h>
1112 #include <linux/module.h>
1213 #include <linux/pci.h>
1314 #include <linux/platform_device.h>
@@ -75,20 +76,15 @@ static void gpu_enable_i2c_bus(struct gpu_i2c_dev *i2cd) · 61 unmodified lines
7576
7677 static int gpu_i2c_check_status(struct gpu_i2c_dev *i2cd)
7778 {
78− unsigned long target = jiffies + msecs_to_jiffies(1000);
7979 u32 val;
80+ int ret;
8081
81− do {
82− val = readl(i2cd->regs + I2C_MST_CNTL);
83− if (!(val & I2C_MST_CNTL_CYCLE_TRIGGER))
84− break;
85− if ((val & I2C_MST_CNTL_STATUS) !=
86− I2C_MST_CNTL_STATUS_BUS_BUSY)
87− break;
88− usleep_range(500, 600);
89− } while (time_is_after_jiffies(target));
90−
91− if (time_is_before_jiffies(target)) {
82+ ret = readl_poll_timeout(i2cd->regs + I2C_MST_CNTL, val,
83+ !(val & I2C_MST_CNTL_CYCLE_TRIGGER) ||
84+ (val & I2C_MST_CNTL_STATUS) != I2C_MST_CNTL_STATUS_BUS_BUSY,
85+ 500, 1000 * USEC_PER_MSEC);
86+
87+ if (ret) {
9288 dev_err(i2cd->dev, "i2c timeout error %x\n", val);
9389 return -ETIMEDOUT;
9490 }
drivers/i2c/busses/i2c-pca-platform.c+1−1
@@ -140,7 +140,7 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) · 139 unmodified lines
140140 int ret = 0;
141141 int irq;
142142
143− irq = platform_get_irq(pdev, 0);
143+ irq = platform_get_irq_optional(pdev, 0);
144144 /* If irq is 0, we do polling. */
145145 if (irq < 0)
146146 irq = 0;
drivers/i2c/busses/i2c-st.c+1−0
@@ -434,6 +434,7 @@ static void st_i2c_wr_fill_tx_fifo(struct st_i2c_dev *i2c_dev) · 433 unmodified lines
434434 /**
435435 * st_i2c_rd_fill_tx_fifo() - Fill the Tx FIFO in read mode
436436 * @i2c_dev: Controller's private data
437+ * @max: Maximum amount of data to fill into the Tx FIFO
437438 *
438439 * This functions fills the Tx FIFO with fixed pattern when
439440 * in read mode to trigger clock.
drivers/i2c/i2c-core-acpi.c+9−1
@@ -394,9 +394,17 @@ EXPORT_SYMBOL_GPL(i2c_acpi_find_adapter_by_handle); · 393 unmodified lines
394394 static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
395395 {
396396 struct device *dev;
397+ struct i2c_client *client;
397398
398399 dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);
399− return dev ? i2c_verify_client(dev) : NULL;
400+ if (!dev)
401+ return NULL;
402+
403+ client = i2c_verify_client(dev);
404+ if (!client)
405+ put_device(dev);
406+
407+ return client;
400408 }
401409
402410 static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
drivers/iio/accel/adxl372.c+1−0
@@ -237,6 +237,7 @@ static const struct adxl372_axis_lookup adxl372_axis_lookup_table[] = { · 236 unmodified lines
237237 .realbits = 12, \
238238 .storagebits = 16, \
239239 .shift = 4, \
240+ .endianness = IIO_BE, \
240241 }, \
241242 }
242243
drivers/iio/accel/st_accel_i2c.c+1−1
@@ -110,7 +110,7 @@ MODULE_DEVICE_TABLE(of, st_accel_of_match); · 109 unmodified lines
110110
111111 #ifdef CONFIG_ACPI
112112 static const struct acpi_device_id st_accel_acpi_match[] = {
113− {"SMO8840", (kernel_ulong_t)LNG2DM_ACCEL_DEV_NAME},
113+ {"SMO8840", (kernel_ulong_t)LIS2DH12_ACCEL_DEV_NAME},
114114 {"SMO8A90", (kernel_ulong_t)LNG2DM_ACCEL_DEV_NAME},
115115 { },
116116 };
drivers/iio/adc/at91-sama5d2_adc.c+15−0
@@ -723,6 +723,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 722 unmodified lines
723723
724724 for_each_set_bit(bit, indio->active_scan_mask, indio->num_channels) {
725725 struct iio_chan_spec const *chan = at91_adc_chan_get(indio, bit);
726+ u32 cor;
726727
727728 if (!chan)
728729 continue;
@@ -731,6 +732,20 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 2 unmodified lines
731732 chan->type == IIO_PRESSURE)
732733 continue;
733734
735+ if (state) {
736+ cor = at91_adc_readl(st, AT91_SAMA5D2_COR);
737+
738+ if (chan->differential)
739+ cor |= (BIT(chan->channel) |
740+ BIT(chan->channel2)) <<
741+ AT91_SAMA5D2_COR_DIFF_OFFSET;
742+ else
743+ cor &= ~(BIT(chan->channel) <<
744+ AT91_SAMA5D2_COR_DIFF_OFFSET);
745+
746+ at91_adc_writel(st, AT91_SAMA5D2_COR, cor);
747+ }
748+
734749 if (state) {
735750 at91_adc_writel(st, AT91_SAMA5D2_CHER,
736751 BIT(chan->channel));
drivers/iio/adc/stm32-dfsdm-adc.c+10−33
@@ -842,31 +842,6 @@ static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc, · 841 unmodified lines
842842 }
843843 }
844844
845−static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
846−{
847− struct iio_poll_func *pf = p;
848− struct iio_dev *indio_dev = pf->indio_dev;
849− struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
850− int available = stm32_dfsdm_adc_dma_residue(adc);
851−
852− while (available >= indio_dev->scan_bytes) {
853− s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
854−
855− stm32_dfsdm_process_data(adc, buffer);
856−
857− iio_push_to_buffers_with_timestamp(indio_dev, buffer,
858− pf->timestamp);
859− available -= indio_dev->scan_bytes;
860− adc->bufi += indio_dev->scan_bytes;
861− if (adc->bufi >= adc->buf_sz)
862− adc->bufi = 0;
863− }
864−
865− iio_trigger_notify_done(indio_dev->trig);
866−
867− return IRQ_HANDLED;
868−}
869−
870845 static void stm32_dfsdm_dma_buffer_done(void *data)
871846 {
872847 struct iio_dev *indio_dev = data;
@@ -874,11 +849,6 @@ static void stm32_dfsdm_dma_buffer_done(void *data) · 1 unmodified line
874849 int available = stm32_dfsdm_adc_dma_residue(adc);
875850 size_t old_pos;
876851
877− if (indio_dev->currentmode & INDIO_BUFFER_TRIGGERED) {
878− iio_trigger_poll_chained(indio_dev->trig);
879− return;
880− }
881−
882852 /*
883853 * FIXME: In Kernel interface does not support cyclic DMA buffer,and
884854 * offers only an interface to push data samples per samples.
@@ -906,7 +876,15 @@ static void stm32_dfsdm_dma_buffer_done(void *data) · 21 unmodified lines
906876 adc->bufi = 0;
907877 old_pos = 0;
908878 }
909− /* regular iio buffer without trigger */
879+ /*
880+ * In DMA mode the trigger services of IIO are not used
881+ * (e.g. no call to iio_trigger_poll).
882+ * Calling irq handler associated to the hardware trigger is not
883+ * relevant as the conversions have already been done. Data
884+ * transfers are performed directly in DMA callback instead.
885+ * This implementation avoids to call trigger irq handler that
886+ * may sleep, in an atomic context (DMA irq handler context).
887+ */
910888 if (adc->dev_data->type == DFSDM_IIO)
911889 iio_push_to_buffers(indio_dev, buffer);
912890 }
@@ -1536,8 +1514,7 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev) · 623 unmodified lines
15361514 }
15371515
15381516 ret = iio_triggered_buffer_setup(indio_dev,
1539− &iio_pollfunc_store_time,
1540− &stm32_dfsdm_adc_trigger_handler,
1517+ &iio_pollfunc_store_time, NULL,
15411518 &stm32_dfsdm_buffer_setup_ops);
15421519 if (ret) {
15431520 stm32_dfsdm_dma_release(indio_dev);
drivers/iio/chemical/Kconfig+2−0
@@ -91,6 +91,8 @@ config SPS30 · 90 unmodified lines
9191 tristate "SPS30 particulate matter sensor"
9292 depends on I2C
9393 select CRC8
94+ select IIO_BUFFER
95+ select IIO_TRIGGERED_BUFFER
9496 help
9597 Say Y here to build support for the Sensirion SPS30 particulate
9698 matter sensor.
drivers/iio/light/vcnl4000.c+8−7
@@ -167,16 +167,17 @@ static int vcnl4200_init(struct vcnl4000_data *data) · 166 unmodified lines
167167 data->vcnl4200_ps.reg = VCNL4200_PS_DATA;
168168 switch (id) {
169169 case VCNL4200_PROD_ID:
170− /* Integration time is 50ms, but the experiments */
171− /* show 54ms in total. */
172− data->vcnl4200_al.sampling_rate = ktime_set(0, 54000 * 1000);
173− data->vcnl4200_ps.sampling_rate = ktime_set(0, 4200 * 1000);
170+ /* Default wait time is 50ms, add 20% tolerance. */
171+ data->vcnl4200_al.sampling_rate = ktime_set(0, 60000 * 1000);
172+ /* Default wait time is 4.8ms, add 20% tolerance. */
173+ data->vcnl4200_ps.sampling_rate = ktime_set(0, 5760 * 1000);
174174 data->al_scale = 24000;
175175 break;
176176 case VCNL4040_PROD_ID:
177− /* Integration time is 80ms, add 10ms. */
178− data->vcnl4200_al.sampling_rate = ktime_set(0, 100000 * 1000);
179− data->vcnl4200_ps.sampling_rate = ktime_set(0, 100000 * 1000);
177+ /* Default wait time is 80ms, add 20% tolerance. */
178+ data->vcnl4200_al.sampling_rate = ktime_set(0, 96000 * 1000);
179+ /* Default wait time is 5ms, add 20% tolerance. */
180+ data->vcnl4200_ps.sampling_rate = ktime_set(0, 6000 * 1000);
180181 data->al_scale = 120000;
181182 break;
182183 }
drivers/iio/magnetometer/ak8974.c+1−1
@@ -564,7 +564,7 @@ static int ak8974_read_raw(struct iio_dev *indio_dev, · 563 unmodified lines
564564 * We read all axes and discard all but one, for optimized
565565 * reading, use the triggered buffer.
566566 */
567− *val = le16_to_cpu(hw_values[chan->address]);
567+ *val = (s16)le16_to_cpu(hw_values[chan->address]);
568568
569569 ret = IIO_VAL_INT;
570570 }
drivers/iio/proximity/ping.c+1−1
@@ -269,7 +269,7 @@ static const struct iio_chan_spec ping_chan_spec[] = { · 268 unmodified lines
269269
270270 static const struct of_device_id of_ping_match[] = {
271271 { .compatible = "parallax,ping", .data = &pa_ping_cfg},
272− { .compatible = "parallax,laserping", .data = &pa_ping_cfg},
272+ { .compatible = "parallax,laserping", .data = &pa_laser_ping_cfg},
273273 {},
274274 };
275275
drivers/iio/trigger/stm32-timer-trigger.c+9−2
@@ -161,7 +161,8 @@ static int stm32_timer_start(struct stm32_timer_trigger *priv, · 160 unmodified lines
161161 return 0;
162162 }
163163
164−static void stm32_timer_stop(struct stm32_timer_trigger *priv)
164+static void stm32_timer_stop(struct stm32_timer_trigger *priv,
165+ struct iio_trigger *trig)
165166 {
166167 u32 ccer, cr1;
167168
@@ -179,6 +180,12 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv) · 11 unmodified lines
179180 regmap_write(priv->regmap, TIM_PSC, 0);
180181 regmap_write(priv->regmap, TIM_ARR, 0);
181182
183+ /* Force disable master mode */
184+ if (stm32_timer_is_trgo2_name(trig->name))
185+ regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2, 0);
186+ else
187+ regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS, 0);
188+
182189 /* Make sure that registers are updated */
183190 regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
184191 }
@@ -197,7 +204,7 @@ static ssize_t stm32_tt_store_frequency(struct device *dev, · 12 unmodified lines
197204 return ret;
198205
199206 if (freq == 0) {
200− stm32_timer_stop(priv);
207+ stm32_timer_stop(priv, trig);
201208 } else {
202209 ret = stm32_timer_start(priv, trig, freq);
203210 if (ret)
drivers/infiniband/core/device.c+3−1
@@ -896,7 +896,9 @@ static int add_one_compat_dev(struct ib_device *device, · 895 unmodified lines
896896 cdev->dev.parent = device->dev.parent;
897897 rdma_init_coredev(cdev, device, read_pnet(&rnet->net));
898898 cdev->dev.release = compatdev_release;
899− dev_set_name(&cdev->dev, "%s", dev_name(&device->dev));
899+ ret = dev_set_name(&cdev->dev, "%s", dev_name(&device->dev));
900+ if (ret)
901+ goto add_err;
900902
901903 ret = device_add(&cdev->dev);
902904 if (ret)
drivers/infiniband/core/nldev.c+5−1
@@ -918,6 +918,10 @@ static int nldev_set_doit(struct sk_buff *skb, struct nlmsghdr *nlh, · 917 unmodified lines
918918
919919 nla_strlcpy(name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
920920 IB_DEVICE_NAME_MAX);
921+ if (strlen(name) == 0) {
922+ err = -EINVAL;
923+ goto done;
924+ }
921925 err = ib_device_rename(device, name);
922926 goto done;
923927 }
@@ -1514,7 +1518,7 @@ static int nldev_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, · 590 unmodified lines
15141518
15151519 nla_strlcpy(ibdev_name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
15161520 sizeof(ibdev_name));
1517− if (strchr(ibdev_name, '%'))
1521+ if (strchr(ibdev_name, '%') || strlen(ibdev_name) == 0)
15181522 return -EINVAL;
15191523
15201524 nla_strlcpy(type, tb[RDMA_NLDEV_ATTR_LINK_TYPE], sizeof(type));
drivers/infiniband/core/security.c+3−8
@@ -349,16 +349,11 @@ static struct ib_ports_pkeys *get_new_pps(const struct ib_qp *qp, · 348 unmodified lines
349349 else if (qp_pps)
350350 new_pps->main.pkey_index = qp_pps->main.pkey_index;
351351
352− if ((qp_attr_mask & IB_QP_PKEY_INDEX) && (qp_attr_mask & IB_QP_PORT))
352+ if (((qp_attr_mask & IB_QP_PKEY_INDEX) &&
353+ (qp_attr_mask & IB_QP_PORT)) ||
354+ (qp_pps && qp_pps->main.state != IB_PORT_PKEY_NOT_VALID))
353355 new_pps->main.state = IB_PORT_PKEY_VALID;
354356
355− if (!(qp_attr_mask & (IB_QP_PKEY_INDEX | IB_QP_PORT)) && qp_pps) {
356− new_pps->main.port_num = qp_pps->main.port_num;
357− new_pps->main.pkey_index = qp_pps->main.pkey_index;
358− if (qp_pps->main.state != IB_PORT_PKEY_NOT_VALID)
359− new_pps->main.state = IB_PORT_PKEY_VALID;
360− }
361−
362357 if (qp_attr_mask & IB_QP_ALT_PATH) {
363358 new_pps->alt.port_num = qp_attr->alt_port_num;
364359 new_pps->alt.pkey_index = qp_attr->alt_pkey_index;
drivers/infiniband/core/umem_odp.c+1−1
@@ -275,8 +275,8 @@ void ib_umem_odp_release(struct ib_umem_odp *umem_odp) · 274 unmodified lines
275275 mmu_interval_notifier_remove(&umem_odp->notifier);
276276 kvfree(umem_odp->dma_list);
277277 kvfree(umem_odp->page_list);
278− put_pid(umem_odp->tgid);
279278 }
279+ put_pid(umem_odp->tgid);
280280 kfree(umem_odp);
281281 }
282282 EXPORT_SYMBOL(ib_umem_odp_release);
drivers/infiniband/core/user_mad.c+22−11
@@ -1129,17 +1129,30 @@ static const struct file_operations umad_sm_fops = { · 1128 unmodified lines
11291129 .llseek = no_llseek,
11301130 };
11311131
1132+static struct ib_umad_port *get_port(struct ib_device *ibdev,
1133+ struct ib_umad_device *umad_dev,
1134+ unsigned int port)
1135+{
1136+ if (!umad_dev)
1137+ return ERR_PTR(-EOPNOTSUPP);
1138+ if (!rdma_is_port_valid(ibdev, port))
1139+ return ERR_PTR(-EINVAL);
1140+ if (!rdma_cap_ib_mad(ibdev, port))
1141+ return ERR_PTR(-EOPNOTSUPP);
1142+
1143+ return &umad_dev->ports[port - rdma_start_port(ibdev)];
1144+}
1145+
11321146 static int ib_umad_get_nl_info(struct ib_device *ibdev, void *client_data,
11331147 struct ib_client_nl_info *res)
11341148 {
1135− struct ib_umad_device *umad_dev = client_data;
1149+ struct ib_umad_port *port = get_port(ibdev, client_data, res->port);
11361150
1137− if (!rdma_is_port_valid(ibdev, res->port))
1138− return -EINVAL;
1151+ if (IS_ERR(port))
1152+ return PTR_ERR(port);
11391153
11401154 res->abi = IB_USER_MAD_ABI_VERSION;
1141− res->cdev = &umad_dev->ports[res->port - rdma_start_port(ibdev)].dev;
1142−
1155+ res->cdev = &port->dev;
11431156 return 0;
11441157 }
11451158
@@ -1154,15 +1167,13 @@ MODULE_ALIAS_RDMA_CLIENT("umad"); · 8 unmodified lines
11541167 static int ib_issm_get_nl_info(struct ib_device *ibdev, void *client_data,
11551168 struct ib_client_nl_info *res)
11561169 {
1157− struct ib_umad_device *umad_dev =
1158− ib_get_client_data(ibdev, &umad_client);
1170+ struct ib_umad_port *port = get_port(ibdev, client_data, res->port);
11591171
1160− if (!rdma_is_port_valid(ibdev, res->port))
1161− return -EINVAL;
1172+ if (IS_ERR(port))
1173+ return PTR_ERR(port);
11621174
11631175 res->abi = IB_USER_MAD_ABI_VERSION;
1164− res->cdev = &umad_dev->ports[res->port - rdma_start_port(ibdev)].sm_dev;
1165−
1176+ res->cdev = &port->sm_dev;
11661177 return 0;
11671178 }
11681179
drivers/infiniband/hw/hfi1/user_sdma.c+22−3
@@ -141,6 +141,7 @@ static int defer_packet_queue( · 140 unmodified lines
141141 */
142142 xchg(&pq->state, SDMA_PKT_Q_DEFERRED);
143143 if (list_empty(&pq->busy.list)) {
144+ pq->busy.lock = &sde->waitlock;
144145 iowait_get_priority(&pq->busy);
145146 iowait_queue(pkts_sent, &pq->busy, &sde->dmawait);
146147 }
@@ -155,6 +156,7 @@ static void activate_packet_queue(struct iowait *wait, int reason) · 8 unmodified lines
155156 {
156157 struct hfi1_user_sdma_pkt_q *pq =
157158 container_of(wait, struct hfi1_user_sdma_pkt_q, busy);
159+ pq->busy.lock = NULL;
158160 xchg(&pq->state, SDMA_PKT_Q_ACTIVE);
159161 wake_up(&wait->wait_dma);
160162 };
@@ -256,6 +258,21 @@ pq_reqs_nomem: · 95 unmodified lines
256258 return ret;
257259 }
258260
261+static void flush_pq_iowait(struct hfi1_user_sdma_pkt_q *pq)
262+{
263+ unsigned long flags;
264+ seqlock_t *lock = pq->busy.lock;
265+
266+ if (!lock)
267+ return;
268+ write_seqlock_irqsave(lock, flags);
269+ if (!list_empty(&pq->busy.list)) {
270+ list_del_init(&pq->busy.list);
271+ pq->busy.lock = NULL;
272+ }
273+ write_sequnlock_irqrestore(lock, flags);
274+}
275+
259276 int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd,
260277 struct hfi1_ctxtdata *uctxt)
261278 {
@@ -281,6 +298,7 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, · 19 unmodified lines
281298 kfree(pq->reqs);
282299 kfree(pq->req_in_use);
283300 kmem_cache_destroy(pq->txreq_cache);
301+ flush_pq_iowait(pq);
284302 kfree(pq);
285303 } else {
286304 spin_unlock(&fd->pq_rcu_lock);
@@ -587,11 +605,12 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, · 300 unmodified lines
587605 if (ret < 0) {
588606 if (ret != -EBUSY)
589607 goto free_req;
590− wait_event_interruptible_timeout(
608+ if (wait_event_interruptible_timeout(
591609 pq->busy.wait_dma,
592− (pq->state == SDMA_PKT_Q_ACTIVE),
610+ pq->state == SDMA_PKT_Q_ACTIVE,
593611 msecs_to_jiffies(
594− SDMA_IOWAIT_TIMEOUT));
612+ SDMA_IOWAIT_TIMEOUT)) <= 0)
613+ flush_pq_iowait(pq);
595614 }
596615 }
597616 *count += idx;
drivers/infiniband/hw/mlx5/cq.c+25−2
@@ -330,6 +330,22 @@ static void mlx5_handle_error_cqe(struct mlx5_ib_dev *dev, · 329 unmodified lines
330330 dump_cqe(dev, cqe);
331331 }
332332
333+static void handle_atomics(struct mlx5_ib_qp *qp, struct mlx5_cqe64 *cqe64,
334+ u16 tail, u16 head)
335+{
336+ u16 idx;
337+
338+ do {
339+ idx = tail & (qp->sq.wqe_cnt - 1);
340+ if (idx == head)
341+ break;
342+
343+ tail = qp->sq.w_list[idx].next;
344+ } while (1);
345+ tail = qp->sq.w_list[idx].next;
346+ qp->sq.last_poll = tail;
347+}
348+
333349 static void free_cq_buf(struct mlx5_ib_dev *dev, struct mlx5_ib_cq_buf *buf)
334350 {
335351 mlx5_frag_buf_free(dev->mdev, &buf->frag_buf);
@@ -368,7 +384,7 @@ static void get_sig_err_item(struct mlx5_sig_err_cqe *cqe, · 32 unmodified lines
368384 }
369385
370386 static void sw_comp(struct mlx5_ib_qp *qp, int num_entries, struct ib_wc *wc,
371− int *npolled, int is_send)
387+ int *npolled, bool is_send)
372388 {
373389 struct mlx5_ib_wq *wq;
374390 unsigned int cur;
@@ -383,10 +399,16 @@ static void sw_comp(struct mlx5_ib_qp *qp, int num_entries, struct ib_wc *wc, · 8 unmodified lines
383399 return;
384400
385401 for (i = 0; i < cur && np < num_entries; i++) {
386− wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
402+ unsigned int idx;
403+
404+ idx = (is_send) ? wq->last_poll : wq->tail;
405+ idx &= (wq->wqe_cnt - 1);
406+ wc->wr_id = wq->wrid[idx];
387407 wc->status = IB_WC_WR_FLUSH_ERR;
388408 wc->vendor_err = MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
389409 wq->tail++;
410+ if (is_send)
411+ wq->last_poll = wq->w_list[idx].next;
390412 np++;
391413 wc->qp = &qp->ibqp;
392414 wc++;
@@ -473,6 +495,7 @@ repoll: · 80 unmodified lines
473495 wqe_ctr = be16_to_cpu(cqe64->wqe_counter);
474496 idx = wqe_ctr & (wq->wqe_cnt - 1);
475497 handle_good_req(wc, cqe64, wq, idx);
498+ handle_atomics(*cur_qp, cqe64, wq->last_poll, idx);
476499 wc->wr_id = wq->wrid[idx];
477500 wq->tail = wq->wqe_head[idx] + 1;
478501 wc->status = IB_WC_SUCCESS;
drivers/infiniband/hw/mlx5/main.c+3−2
@@ -5722,9 +5722,10 @@ mlx5_ib_counter_alloc_stats(struct rdma_counter *counter) · 5721 unmodified lines
57225722 const struct mlx5_ib_counters *cnts =
57235723 get_counters(dev, counter->port - 1);
57245724
5725− /* Q counters are in the beginning of all counters */
57265725 return rdma_alloc_hw_stats_struct(cnts->names,
5727− cnts->num_q_counters,
5726+ cnts->num_q_counters +
5727+ cnts->num_cong_counters +
5728+ cnts->num_ext_ppcnt_counters,
57285729 RDMA_HW_STATS_DEFAULT_LIFESPAN);
57295730 }
57305731
drivers/infiniband/hw/mlx5/mlx5_ib.h+1−0
@@ -288,6 +288,7 @@ struct mlx5_ib_wq { · 287 unmodified lines
288288 unsigned head;
289289 unsigned tail;
290290 u16 cur_post;
291+ u16 last_poll;
291292 void *cur_edge;
292293 };
293294
drivers/infiniband/hw/mlx5/qp.c+5−0
@@ -3775,6 +3775,7 @@ static int __mlx5_ib_modify_qp(struct ib_qp *ibqp, · 3774 unmodified lines
37753775 qp->sq.cur_post = 0;
37763776 if (qp->sq.wqe_cnt)
37773777 qp->sq.cur_edge = get_sq_edge(&qp->sq, 0);
3778+ qp->sq.last_poll = 0;
37783779 qp->db.db[MLX5_RCV_DBR] = 0;
37793780 qp->db.db[MLX5_SND_DBR] = 0;
37803781 }
@@ -6204,6 +6205,10 @@ struct ib_wq *mlx5_ib_create_wq(struct ib_pd *pd, · 2423 unmodified lines
62046205 if (udata->outlen && udata->outlen < min_resp_len)
62056206 return ERR_PTR(-EINVAL);
62066207
6208+ if (!capable(CAP_SYS_RAWIO) &&
6209+ init_attr->create_flags & IB_WQ_FLAGS_DELAY_DROP)
6210+ return ERR_PTR(-EPERM);
6211+
62076212 dev = to_mdev(pd->device);
62086213 switch (init_attr->wq_type) {
62096214 case IB_WQT_RQ:
drivers/infiniband/sw/rdmavt/cq.c+1−1
@@ -327,7 +327,7 @@ void rvt_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata) · 326 unmodified lines
327327 if (cq->ip)
328328 kref_put(&cq->ip->ref, rvt_release_mmap_info);
329329 else
330− vfree(cq->queue);
330+ vfree(cq->kqueue);
331331 }
332332
333333 /**
drivers/input/input.c+1−0
@@ -190,6 +190,7 @@ static void input_repeat_key(struct timer_list *t) · 189 unmodified lines
190190 input_value_sync
191191 };
192192
193+ input_set_timestamp(dev, ktime_get());
193194 input_pass_values(dev, vals, ARRAY_SIZE(vals));
194195
195196 if (dev->rep[REP_PERIOD])
drivers/input/keyboard/tm2-touchkey.c+11−0
@@ -75,6 +75,14 @@ static struct touchkey_variant aries_touchkey_variant = { · 74 unmodified lines
7575 .cmd_led_off = ARIES_TOUCHKEY_CMD_LED_OFF,
7676 };
7777
78+static const struct touchkey_variant tc360_touchkey_variant = {
79+ .keycode_reg = 0x00,
80+ .base_reg = 0x00,
81+ .fixed_regulator = true,
82+ .cmd_led_on = TM2_TOUCHKEY_CMD_LED_ON,
83+ .cmd_led_off = TM2_TOUCHKEY_CMD_LED_OFF,
84+};
85+
7886 static int tm2_touchkey_led_brightness_set(struct led_classdev *led_dev,
7987 enum led_brightness brightness)
8088 {
@@ -327,6 +335,9 @@ static const struct of_device_id tm2_touchkey_of_match[] = { · 246 unmodified lines
327335 }, {
328336 .compatible = "cypress,aries-touchkey",
329337 .data = &aries_touchkey_variant,
338+ }, {
339+ .compatible = "coreriver,tc360-touchkey",
340+ .data = &tc360_touchkey_variant,
330341 },
331342 { },
332343 };
drivers/input/mouse/synaptics.c+1−0
@@ -186,6 +186,7 @@ static const char * const smbus_pnp_ids[] = { · 185 unmodified lines
186186 "SYN3052", /* HP EliteBook 840 G4 */
187187 "SYN3221", /* HP 15-ay000 */
188188 "SYN323d", /* HP Spectre X360 13-w013dx */
189+ "SYN3257", /* HP Envy 13-ad105ng */
189190 NULL
190191 };
191192
drivers/input/rmi4/rmi_f11.c+2−2
@@ -1203,8 +1203,8 @@ static int rmi_f11_initialize(struct rmi_function *fn) · 1202 unmodified lines
12031203 * If distance threshold values are set, switch to reduced reporting
12041204 * mode so they actually get used by the controller.
12051205 */
1206− if (ctrl->ctrl0_11[RMI_F11_DELTA_X_THRESHOLD] ||
1207− ctrl->ctrl0_11[RMI_F11_DELTA_Y_THRESHOLD]) {
1206+ if (sensor->axis_align.delta_x_threshold ||
1207+ sensor->axis_align.delta_y_threshold) {
12081208 ctrl->ctrl0_11[0] &= ~RMI_F11_REPORT_MODE_MASK;
12091209 ctrl->ctrl0_11[0] |= RMI_F11_REPORT_MODE_REDUCED;
12101210 }
drivers/input/touchscreen/raydium_i2c_ts.c+4−4
@@ -432,7 +432,7 @@ static int raydium_i2c_write_object(struct i2c_client *client, · 431 unmodified lines
432432 return 0;
433433 }
434434
435−static bool raydium_i2c_boot_trigger(struct i2c_client *client)
435+static int raydium_i2c_boot_trigger(struct i2c_client *client)
436436 {
437437 static const u8 cmd[7][6] = {
438438 { 0x08, 0x0C, 0x09, 0x00, 0x50, 0xD7 },
@@ -457,10 +457,10 @@ static bool raydium_i2c_boot_trigger(struct i2c_client *client) · 18 unmodified lines
457457 }
458458 }
459459
460− return false;
460+ return 0;
461461 }
462462
463−static bool raydium_i2c_fw_trigger(struct i2c_client *client)
463+static int raydium_i2c_fw_trigger(struct i2c_client *client)
464464 {
465465 static const u8 cmd[5][11] = {
466466 { 0, 0x09, 0x71, 0x0C, 0x09, 0x00, 0x50, 0xD7, 0, 0, 0 },
@@ -483,7 +483,7 @@ static bool raydium_i2c_fw_trigger(struct i2c_client *client) · 16 unmodified lines
483483 }
484484 }
485485
486− return false;
486+ return 0;
487487 }
488488
489489 static int raydium_i2c_check_path(struct i2c_client *client)
drivers/iommu/amd_iommu.c+2−2
@@ -3826,7 +3826,7 @@ int amd_iommu_activate_guest_mode(void *data) · 3825 unmodified lines
38263826 entry->lo.fields_vapic.ga_tag = ir_data->ga_tag;
38273827
38283828 return modify_irte_ga(ir_data->irq_2_irte.devid,
3829− ir_data->irq_2_irte.index, entry, NULL);
3829+ ir_data->irq_2_irte.index, entry, ir_data);
38303830 }
38313831 EXPORT_SYMBOL(amd_iommu_activate_guest_mode);
38323832
@@ -3852,7 +3852,7 @@ int amd_iommu_deactivate_guest_mode(void *data) · 19 unmodified lines
38523852 APICID_TO_IRTE_DEST_HI(cfg->dest_apicid);
38533853
38543854 return modify_irte_ga(ir_data->irq_2_irte.devid,
3855− ir_data->irq_2_irte.index, entry, NULL);
3855+ ir_data->irq_2_irte.index, entry, ir_data);
38563856 }
38573857 EXPORT_SYMBOL(amd_iommu_deactivate_guest_mode);
38583858
drivers/iommu/dma-iommu.c+8−8
@@ -177,15 +177,15 @@ static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie, · 176 unmodified lines
177177 start -= iova_offset(iovad, start);
178178 num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);
179179
180− msi_page = kcalloc(num_pages, sizeof(*msi_page), GFP_KERNEL);
181− if (!msi_page)
182− return -ENOMEM;
183−
184180 for (i = 0; i < num_pages; i++) {
185− msi_page[i].phys = start;
186− msi_page[i].iova = start;
187− INIT_LIST_HEAD(&msi_page[i].list);
188− list_add(&msi_page[i].list, &cookie->msi_page_list);
181+ msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL);
182+ if (!msi_page)
183+ return -ENOMEM;
184+
185+ msi_page->phys = start;
186+ msi_page->iova = start;
187+ INIT_LIST_HEAD(&msi_page->list);
188+ list_add(&msi_page->list, &cookie->msi_page_list);
189189 start += iovad->granule;
190190 }
191191
drivers/iommu/dmar.c+17−7
@@ -28,6 +28,7 @@ · 27 unmodified lines
2828 #include <linux/slab.h>
2929 #include <linux/iommu.h>
3030 #include <linux/numa.h>
31+#include <linux/limits.h>
3132 #include <asm/irq_remapping.h>
3233 #include <asm/iommu_table.h>
3334
@@ -128,6 +129,13 @@ dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event) · 94 unmodified lines
128129
129130 BUG_ON(dev->is_virtfn);
130131
132+ /*
133+ * Ignore devices that have a domain number higher than what can
134+ * be looked up in DMAR, e.g. VMD subdevices with domain 0x10000
135+ */
136+ if (pci_domain_nr(dev->bus) > U16_MAX)
137+ return NULL;
138+
131139 /* Only generate path[] for device addition event */
132140 if (event == BUS_NOTIFY_ADD_DEVICE)
133141 for (tmp = dev; tmp; tmp = tmp->bus->self)
@@ -363,7 +371,8 @@ dmar_find_dmaru(struct acpi_dmar_hardware_unit *drhd) · 229 unmodified lines
363371 {
364372 struct dmar_drhd_unit *dmaru;
365373
366− list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list)
374+ list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list,
375+ dmar_rcu_check())
367376 if (dmaru->segment == drhd->segment &&
368377 dmaru->reg_base_addr == drhd->address)
369378 return dmaru;
@@ -440,12 +449,13 @@ static int __init dmar_parse_one_andd(struct acpi_dmar_header *header, · 70 unmodified lines
440449
441450 /* Check for NUL termination within the designated length */
442451 if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {
443− WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
452+ pr_warn(FW_BUG
444453 "Your BIOS is broken; ANDD object name is not NUL-terminated\n"
445454 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
446455 dmi_get_system_info(DMI_BIOS_VENDOR),
447456 dmi_get_system_info(DMI_BIOS_VERSION),
448457 dmi_get_system_info(DMI_PRODUCT_VERSION));
458+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
449459 return -EINVAL;
450460 }
451461 pr_info("ANDD device: %x name: %s\n", andd->device_number,
@@ -471,14 +481,14 @@ static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg) · 19 unmodified lines
471481 return 0;
472482 }
473483 }
474− WARN_TAINT(
475− 1, TAINT_FIRMWARE_WORKAROUND,
484+ pr_warn(FW_BUG
476485 "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
477486 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
478− drhd->reg_base_addr,
487+ rhsa->base_address,
479488 dmi_get_system_info(DMI_BIOS_VENDOR),
480489 dmi_get_system_info(DMI_BIOS_VERSION),
481490 dmi_get_system_info(DMI_PRODUCT_VERSION));
491+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
482492
483493 return 0;
484494 }
@@ -827,14 +837,14 @@ int __init dmar_table_init(void) · 342 unmodified lines
827837
828838 static void warn_invalid_dmar(u64 addr, const char *message)
829839 {
830− WARN_TAINT_ONCE(
831− 1, TAINT_FIRMWARE_WORKAROUND,
840+ pr_warn_once(FW_BUG
832841 "Your BIOS is broken; DMAR reported at address %llx%s!\n"
833842 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
834843 addr, message,
835844 dmi_get_system_info(DMI_BIOS_VENDOR),
836845 dmi_get_system_info(DMI_BIOS_VERSION),
837846 dmi_get_system_info(DMI_PRODUCT_VERSION));
847+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
838848 }
839849
840850 static int __ref
drivers/iommu/intel-iommu-debugfs.c+35−16
@@ -33,38 +33,42 @@ struct iommu_regset { · 32 unmodified lines
3333
3434 #define IOMMU_REGSET_ENTRY(_reg_) \
3535 { DMAR_##_reg_##_REG, __stringify(_reg_) }
36−static const struct iommu_regset iommu_regs[] = {
36+
37+static const struct iommu_regset iommu_regs_32[] = {
3738 IOMMU_REGSET_ENTRY(VER),
38− IOMMU_REGSET_ENTRY(CAP),
39− IOMMU_REGSET_ENTRY(ECAP),
4039 IOMMU_REGSET_ENTRY(GCMD),
4140 IOMMU_REGSET_ENTRY(GSTS),
42− IOMMU_REGSET_ENTRY(RTADDR),
43− IOMMU_REGSET_ENTRY(CCMD),
4441 IOMMU_REGSET_ENTRY(FSTS),
4542 IOMMU_REGSET_ENTRY(FECTL),
4643 IOMMU_REGSET_ENTRY(FEDATA),
4744 IOMMU_REGSET_ENTRY(FEADDR),
4845 IOMMU_REGSET_ENTRY(FEUADDR),
49− IOMMU_REGSET_ENTRY(AFLOG),
5046 IOMMU_REGSET_ENTRY(PMEN),
5147 IOMMU_REGSET_ENTRY(PLMBASE),
5248 IOMMU_REGSET_ENTRY(PLMLIMIT),
49+ IOMMU_REGSET_ENTRY(ICS),
50+ IOMMU_REGSET_ENTRY(PRS),
51+ IOMMU_REGSET_ENTRY(PECTL),
52+ IOMMU_REGSET_ENTRY(PEDATA),
53+ IOMMU_REGSET_ENTRY(PEADDR),
54+ IOMMU_REGSET_ENTRY(PEUADDR),
55+};
56+
57+static const struct iommu_regset iommu_regs_64[] = {
58+ IOMMU_REGSET_ENTRY(CAP),
59+ IOMMU_REGSET_ENTRY(ECAP),
60+ IOMMU_REGSET_ENTRY(RTADDR),
61+ IOMMU_REGSET_ENTRY(CCMD),
62+ IOMMU_REGSET_ENTRY(AFLOG),
5363 IOMMU_REGSET_ENTRY(PHMBASE),
5464 IOMMU_REGSET_ENTRY(PHMLIMIT),
5565 IOMMU_REGSET_ENTRY(IQH),
5666 IOMMU_REGSET_ENTRY(IQT),
5767 IOMMU_REGSET_ENTRY(IQA),
58− IOMMU_REGSET_ENTRY(ICS),
5968 IOMMU_REGSET_ENTRY(IRTA),
6069 IOMMU_REGSET_ENTRY(PQH),
6170 IOMMU_REGSET_ENTRY(PQT),
6271 IOMMU_REGSET_ENTRY(PQA),
63− IOMMU_REGSET_ENTRY(PRS),
64− IOMMU_REGSET_ENTRY(PECTL),
65− IOMMU_REGSET_ENTRY(PEDATA),
66− IOMMU_REGSET_ENTRY(PEADDR),
67− IOMMU_REGSET_ENTRY(PEUADDR),
6872 IOMMU_REGSET_ENTRY(MTRRCAP),
6973 IOMMU_REGSET_ENTRY(MTRRDEF),
7074 IOMMU_REGSET_ENTRY(MTRR_FIX64K_00000),
@@ -127,10 +131,16 @@ static int iommu_regset_show(struct seq_file *m, void *unused) · 56 unmodified lines
127131 * by adding the offset to the pointer (virtual address).
128132 */
129133 raw_spin_lock_irqsave(&iommu->register_lock, flag);
130− for (i = 0 ; i < ARRAY_SIZE(iommu_regs); i++) {
131− value = dmar_readq(iommu->reg + iommu_regs[i].offset);
134+ for (i = 0 ; i < ARRAY_SIZE(iommu_regs_32); i++) {
135+ value = dmar_readl(iommu->reg + iommu_regs_32[i].offset);
136+ seq_printf(m, "%-16s\t0x%02x\t\t0x%016llx\n",
137+ iommu_regs_32[i].regs, iommu_regs_32[i].offset,
138+ value);
139+ }
140+ for (i = 0 ; i < ARRAY_SIZE(iommu_regs_64); i++) {
141+ value = dmar_readq(iommu->reg + iommu_regs_64[i].offset);
132142 seq_printf(m, "%-16s\t0x%02x\t\t0x%016llx\n",
133− iommu_regs[i].regs, iommu_regs[i].offset,
143+ iommu_regs_64[i].regs, iommu_regs_64[i].offset,
134144 value);
135145 }
136146 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
@@ -272,9 +282,16 @@ static int dmar_translation_struct_show(struct seq_file *m, void *unused) · 135 unmodified lines
272282 {
273283 struct dmar_drhd_unit *drhd;
274284 struct intel_iommu *iommu;
285+ u32 sts;
275286
276287 rcu_read_lock();
277288 for_each_active_iommu(iommu, drhd) {
289+ sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
290+ if (!(sts & DMA_GSTS_TES)) {
291+ seq_printf(m, "DMA Remapping is not enabled on %s\n",
292+ iommu->name);
293+ continue;
294+ }
278295 root_tbl_walk(m, iommu);
279296 seq_putc(m, '\n');
280297 }
@@ -415,6 +432,7 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused) · 134 unmodified lines
415432 struct dmar_drhd_unit *drhd;
416433 struct intel_iommu *iommu;
417434 u64 irta;
435+ u32 sts;
418436
419437 rcu_read_lock();
420438 for_each_active_iommu(iommu, drhd) {
@@ -424,7 +442,8 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused) · 3 unmodified lines
424442 seq_printf(m, "Remapped Interrupt supported on IOMMU: %s\n",
425443 iommu->name);
426444
427− if (iommu->ir_table) {
445+ sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
446+ if (iommu->ir_table && (sts & DMA_GSTS_IRES)) {
428447 irta = virt_to_phys(iommu->ir_table->base);
429448 seq_printf(m, " IR table address:%llx\n", irta);
430449 ir_tbl_remap_entry_show(m, iommu);
drivers/iommu/intel-iommu.c+19−9
@@ -4261,10 +4261,11 @@ static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev) · 4260 unmodified lines
42614261
42624262 /* we know that the this iommu should be at offset 0xa000 from vtbar */
42634263 drhd = dmar_find_matched_drhd_unit(pdev);
4264− if (WARN_TAINT_ONCE(!drhd || drhd->reg_base_addr - vtbar != 0xa000,
4265− TAINT_FIRMWARE_WORKAROUND,
4266− "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))
4264+ if (!drhd || drhd->reg_base_addr - vtbar != 0xa000) {
4265+ pr_warn_once(FW_BUG "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n");
4266+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
42674267 pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
4268+ }
42684269 }
42694270 DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu);
42704271
@@ -4460,14 +4461,16 @@ int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg) · 189 unmodified lines
44604461 struct dmar_rmrr_unit *rmrru;
44614462
44624463 rmrr = (struct acpi_dmar_reserved_memory *)header;
4463− if (rmrr_sanity_check(rmrr))
4464− WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
4464+ if (rmrr_sanity_check(rmrr)) {
4465+ pr_warn(FW_BUG
44654466 "Your BIOS is broken; bad RMRR [%#018Lx-%#018Lx]\n"
44664467 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
44674468 rmrr->base_address, rmrr->end_address,
44684469 dmi_get_system_info(DMI_BIOS_VENDOR),
44694470 dmi_get_system_info(DMI_BIOS_VERSION),
44704471 dmi_get_system_info(DMI_PRODUCT_VERSION));
4472+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
4473+ }
44714474
44724475 rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
44734476 if (!rmrru)
@@ -5130,6 +5133,9 @@ int __init intel_iommu_init(void) · 656 unmodified lines
51305133
51315134 down_write(&dmar_global_lock);
51325135
5136+ if (!no_iommu)
5137+ intel_iommu_debugfs_init();
5138+
51335139 if (no_iommu || dmar_disabled) {
51345140 /*
51355141 * We exit the function here to ensure IOMMU's remapping and
@@ -5193,6 +5199,7 @@ int __init intel_iommu_init(void) · 57 unmodified lines
51935199
51945200 init_iommu_pm_ops();
51955201
5202+ down_read(&dmar_global_lock);
51965203 for_each_active_iommu(iommu, drhd) {
51975204 iommu_device_sysfs_add(&iommu->iommu, NULL,
51985205 intel_iommu_groups,
@@ -5200,6 +5207,7 @@ int __init intel_iommu_init(void) · 1 unmodified line
52005207 iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops);
52015208 iommu_device_register(&iommu->iommu);
52025209 }
5210+ up_read(&dmar_global_lock);
52035211
52045212 bus_set_iommu(&pci_bus_type, &intel_iommu_ops);
52055213 if (si_domain && !hw_pass_through)
@@ -5210,7 +5218,6 @@ int __init intel_iommu_init(void) · 4 unmodified lines
52105218 down_read(&dmar_global_lock);
52115219 if (probe_acpi_namespace_devices())
52125220 pr_warn("ACPI name space devices didn't probe correctly\n");
5213− up_read(&dmar_global_lock);
52145221
52155222 /* Finally, we enable the DMA remapping hardware. */
52165223 for_each_iommu(iommu, drhd) {
@@ -5219,10 +5226,11 @@ int __init intel_iommu_init(void) · 2 unmodified lines
52195226
52205227 iommu_disable_protect_mem_regions(iommu);
52215228 }
5229+ up_read(&dmar_global_lock);
5230+
52225231 pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
52235232
52245233 intel_iommu_enabled = 1;
5225− intel_iommu_debugfs_init();
52265234
52275235 return 0;
52285236
@@ -5700,8 +5708,10 @@ static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain, · 471 unmodified lines
57005708 u64 phys = 0;
57015709
57025710 pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level);
5703− if (pte)
5704− phys = dma_pte_addr(pte);
5711+ if (pte && dma_pte_present(pte))
5712+ phys = dma_pte_addr(pte) +
5713+ (iova & (BIT_MASK(level_to_offset_bits(level) +
5714+ VTD_PAGE_SHIFT) - 1));
57055715
57065716 return phys;
57075717 }
drivers/iommu/io-pgtable-arm.c+2−2
@@ -468,7 +468,7 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova, · 467 unmodified lines
468468 arm_lpae_iopte *ptep = data->pgd;
469469 int ret, lvl = data->start_level;
470470 arm_lpae_iopte prot;
471− long iaext = (long)iova >> cfg->ias;
471+ long iaext = (s64)iova >> cfg->ias;
472472
473473 /* If no access, then nothing to do */
474474 if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE)))
@@ -645,7 +645,7 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, · 170 unmodified lines
645645 struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
646646 struct io_pgtable_cfg *cfg = &data->iop.cfg;
647647 arm_lpae_iopte *ptep = data->pgd;
648− long iaext = (long)iova >> cfg->ias;
648+ long iaext = (s64)iova >> cfg->ias;
649649
650650 if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size))
651651 return 0;
drivers/irqchip/irq-gic-v3.c+29−1
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #define GICD_INT_NMI_PRI (GICD_INT_DEF_PRI & ~0x80)
3535
3636 #define FLAGS_WORKAROUND_GICR_WAKER_MSM8996 (1ULL << 0)
37+#define FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539 (1ULL << 1)
3738
3839 struct redist_region {
3940 void __iomem *redist_base;
@@ -1464,6 +1465,15 @@ static bool gic_enable_quirk_msm8996(void *data) · 1424 unmodified lines
14641465 return true;
14651466 }
14661467
1468+static bool gic_enable_quirk_cavium_38539(void *data)
1469+{
1470+ struct gic_chip_data *d = data;
1471+
1472+ d->flags |= FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539;
1473+
1474+ return true;
1475+}
1476+
14671477 static bool gic_enable_quirk_hip06_07(void *data)
14681478 {
14691479 struct gic_chip_data *d = data;
@@ -1502,6 +1512,19 @@ static const struct gic_quirk gic_quirks[] = { · 32 unmodified lines
15021512 .mask = 0xffffffff,
15031513 .init = gic_enable_quirk_hip06_07,
15041514 },
1515+ {
1516+ /*
1517+ * Reserved register accesses generate a Synchronous
1518+ * External Abort. This erratum applies to:
1519+ * - ThunderX: CN88xx
1520+ * - OCTEON TX: CN83xx, CN81xx
1521+ * - OCTEON TX2: CN93xx, CN96xx, CN98xx, CNF95xx*
1522+ */
1523+ .desc = "GICv3: Cavium erratum 38539",
1524+ .iidr = 0xa000034c,
1525+ .mask = 0xe8f00fff,
1526+ .init = gic_enable_quirk_cavium_38539,
1527+ },
15051528 {
15061529 }
15071530 };
@@ -1577,7 +1600,12 @@ static int __init gic_init_bases(void __iomem *dist_base, · 69 unmodified lines
15771600 pr_info("%d SPIs implemented\n", GIC_LINE_NR - 32);
15781601 pr_info("%d Extended SPIs implemented\n", GIC_ESPI_NR);
15791602
1580− gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);
1603+ /*
1604+ * ThunderX1 explodes on reading GICD_TYPER2, in violation of the
1605+ * architecture spec (which says that reserved registers are RES0).
1606+ */
1607+ if (!(gic_data.flags & FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539))
1608+ gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);
15811609
15821610 gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops,
15831611 &gic_data);
drivers/macintosh/windfarm_ad7417_sensor.c+7−0
@@ -312,9 +312,16 @@ static const struct i2c_device_id wf_ad7417_id[] = { · 311 unmodified lines
312312 };
313313 MODULE_DEVICE_TABLE(i2c, wf_ad7417_id);
314314
315+static const struct of_device_id wf_ad7417_of_id[] = {
316+ { .compatible = "ad7417", },
317+ { }
318+};
319+MODULE_DEVICE_TABLE(of, wf_ad7417_of_id);
320+
315321 static struct i2c_driver wf_ad7417_driver = {
316322 .driver = {
317323 .name = "wf_ad7417",
324+ .of_match_table = wf_ad7417_of_id,
318325 },
319326 .probe = wf_ad7417_probe,
320327 .remove = wf_ad7417_remove,
drivers/macintosh/windfarm_fcu_controls.c+7−0
@@ -580,9 +580,16 @@ static const struct i2c_device_id wf_fcu_id[] = { · 579 unmodified lines
580580 };
581581 MODULE_DEVICE_TABLE(i2c, wf_fcu_id);
582582
583+static const struct of_device_id wf_fcu_of_id[] = {
584+ { .compatible = "fcu", },
585+ { }
586+};
587+MODULE_DEVICE_TABLE(of, wf_fcu_of_id);
588+
583589 static struct i2c_driver wf_fcu_driver = {
584590 .driver = {
585591 .name = "wf_fcu",
592+ .of_match_table = wf_fcu_of_id,
586593 },
587594 .probe = wf_fcu_probe,
588595 .remove = wf_fcu_remove,
drivers/macintosh/windfarm_lm75_sensor.c+15−1
@@ -14,6 +14,7 @@ · 13 unmodified lines
1414 #include <linux/init.h>
1515 #include <linux/wait.h>
1616 #include <linux/i2c.h>
17+#include <linux/of_device.h>
1718 #include <asm/prom.h>
1819 #include <asm/machdep.h>
1920 #include <asm/io.h>
@@ -91,9 +92,14 @@ static int wf_lm75_probe(struct i2c_client *client, · 71 unmodified lines
9192 const struct i2c_device_id *id)
9293 {
9394 struct wf_lm75_sensor *lm;
94− int rc, ds1775 = id->driver_data;
95+ int rc, ds1775;
9596 const char *name, *loc;
9697
98+ if (id)
99+ ds1775 = id->driver_data;
100+ else
101+ ds1775 = !!of_device_get_match_data(&client->dev);
102+
97103 DBG("wf_lm75: creating %s device at address 0x%02x\n",
98104 ds1775 ? "ds1775" : "lm75", client->addr);
99105
@@ -164,9 +170,17 @@ static const struct i2c_device_id wf_lm75_id[] = { · 64 unmodified lines
164170 };
165171 MODULE_DEVICE_TABLE(i2c, wf_lm75_id);
166172
173+static const struct of_device_id wf_lm75_of_id[] = {
174+ { .compatible = "lm75", .data = (void *)0},
175+ { .compatible = "ds1775", .data = (void *)1 },
176+ { }
177+};
178+MODULE_DEVICE_TABLE(of, wf_lm75_of_id);
179+
167180 static struct i2c_driver wf_lm75_driver = {
168181 .driver = {
169182 .name = "wf_lm75",
183+ .of_match_table = wf_lm75_of_id,
170184 },
171185 .probe = wf_lm75_probe,
172186 .remove = wf_lm75_remove,
drivers/macintosh/windfarm_lm87_sensor.c+7−0
@@ -166,9 +166,16 @@ static const struct i2c_device_id wf_lm87_id[] = { · 165 unmodified lines
166166 };
167167 MODULE_DEVICE_TABLE(i2c, wf_lm87_id);
168168
169+static const struct of_device_id wf_lm87_of_id[] = {
170+ { .compatible = "lm87cimt", },
171+ { }
172+};
173+MODULE_DEVICE_TABLE(of, wf_lm87_of_id);
174+
169175 static struct i2c_driver wf_lm87_driver = {
170176 .driver = {
171177 .name = "wf_lm87",
178+ .of_match_table = wf_lm87_of_id,
172179 },
173180 .probe = wf_lm87_probe,
174181 .remove = wf_lm87_remove,
drivers/macintosh/windfarm_max6690_sensor.c+7−0
@@ -120,9 +120,16 @@ static const struct i2c_device_id wf_max6690_id[] = { · 119 unmodified lines
120120 };
121121 MODULE_DEVICE_TABLE(i2c, wf_max6690_id);
122122
123+static const struct of_device_id wf_max6690_of_id[] = {
124+ { .compatible = "max6690", },
125+ { }
126+};
127+MODULE_DEVICE_TABLE(of, wf_max6690_of_id);
128+
123129 static struct i2c_driver wf_max6690_driver = {
124130 .driver = {
125131 .name = "wf_max6690",
132+ .of_match_table = wf_max6690_of_id,
126133 },
127134 .probe = wf_max6690_probe,
128135 .remove = wf_max6690_remove,
drivers/macintosh/windfarm_smu_sat.c+7−0
@@ -341,9 +341,16 @@ static const struct i2c_device_id wf_sat_id[] = { · 340 unmodified lines
341341 };
342342 MODULE_DEVICE_TABLE(i2c, wf_sat_id);
343343
344+static const struct of_device_id wf_sat_of_id[] = {
345+ { .compatible = "smu-sat", },
346+ { }
347+};
348+MODULE_DEVICE_TABLE(of, wf_sat_of_id);
349+
344350 static struct i2c_driver wf_sat_driver = {
345351 .driver = {
346352 .name = "wf_smu_sat",
353+ .of_match_table = wf_sat_of_id,
347354 },
348355 .probe = wf_sat_probe,
349356 .remove = wf_sat_remove,
drivers/misc/cardreader/rts5227.c+1−1
@@ -394,7 +394,7 @@ static const struct pcr_ops rts522a_pcr_ops = { · 393 unmodified lines
394394 void rts522a_init_params(struct rtsx_pcr *pcr)
395395 {
396396 rts5227_init_params(pcr);
397−
397+ pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 20, 11);
398398 pcr->reg_pm_ctrl3 = RTS522A_PM_CTRL3;
399399
400400 pcr->option.ocp_en = 1;
drivers/misc/cardreader/rts5249.c+2−0
@@ -618,6 +618,7 @@ static const struct pcr_ops rts524a_pcr_ops = { · 617 unmodified lines
618618 void rts524a_init_params(struct rtsx_pcr *pcr)
619619 {
620620 rts5249_init_params(pcr);
621+ pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 29, 11);
621622 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;
622623 pcr->option.ltr_l1off_snooze_sspwrgate =
623624 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;
@@ -733,6 +734,7 @@ static const struct pcr_ops rts525a_pcr_ops = { · 109 unmodified lines
733734 void rts525a_init_params(struct rtsx_pcr *pcr)
734735 {
735736 rts5249_init_params(pcr);
737+ pcr->tx_initial_phase = SET_CLOCK_PHASE(25, 29, 11);
736738 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;
737739 pcr->option.ltr_l1off_snooze_sspwrgate =
738740 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;
drivers/misc/cardreader/rts5260.c+1−1
@@ -662,7 +662,7 @@ void rts5260_init_params(struct rtsx_pcr *pcr) · 661 unmodified lines
662662 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;
663663 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;
664664 pcr->aspm_en = ASPM_L1_EN;
665− pcr->tx_initial_phase = SET_CLOCK_PHASE(1, 29, 16);
665+ pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 29, 11);
666666 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);
667667
668668 pcr->ic_version = rts5260_get_ic_version(pcr);
drivers/misc/cardreader/rts5261.c+1−1
@@ -764,7 +764,7 @@ void rts5261_init_params(struct rtsx_pcr *pcr) · 763 unmodified lines
764764 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;
765765 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;
766766 pcr->aspm_en = ASPM_L1_EN;
767− pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 27, 16);
767+ pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 27, 11);
768768 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);
769769
770770 pcr->ic_version = rts5261_get_ic_version(pcr);
drivers/misc/eeprom/at24.c+2−1
@@ -712,13 +712,14 @@ static int at24_probe(struct i2c_client *client) · 711 unmodified lines
712712 * chip is functional.
713713 */
714714 err = at24_read(at24, 0, &test_byte, 1);
715− pm_runtime_idle(dev);
716715 if (err) {
717716 pm_runtime_disable(dev);
718717 regulator_disable(at24->vcc_reg);
719718 return -ENODEV;
720719 }
721720
721+ pm_runtime_idle(dev);
722+
722723 if (writable)
723724 dev_info(dev, "%u byte %s EEPROM, writable, %u bytes/write\n",
724725 byte_len, client->name, at24->write_max);
drivers/mmc/core/core.c+4−1
@@ -1732,8 +1732,11 @@ static int mmc_do_erase(struct mmc_card *card, unsigned int from, · 1731 unmodified lines
17321732 * the erase operation does not exceed the max_busy_timeout, we should
17331733 * use R1B response. Or we need to prevent the host from doing hw busy
17341734 * detection, which is done by converting to a R1 response instead.
1735+ * Note, some hosts requires R1B, which also means they are on their own
1736+ * when it comes to deal with the busy timeout.
17351737 */
1736− if (card->host->max_busy_timeout &&
1738+ if (!(card->host->caps & MMC_CAP_NEED_RSP_BUSY) &&
1739+ card->host->max_busy_timeout &&
17371740 busy_timeout > card->host->max_busy_timeout) {
17381741 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
17391742 } else {
drivers/mmc/core/mmc.c+5−2
@@ -1910,9 +1910,12 @@ static int mmc_sleep(struct mmc_host *host) · 1909 unmodified lines
19101910 * If the max_busy_timeout of the host is specified, validate it against
19111911 * the sleep cmd timeout. A failure means we need to prevent the host
19121912 * from doing hw busy detection, which is done by converting to a R1
1913− * response instead of a R1B.
1913+ * response instead of a R1B. Note, some hosts requires R1B, which also
1914+ * means they are on their own when it comes to deal with the busy
1915+ * timeout.
19141916 */
1915− if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout)) {
1917+ if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && host->max_busy_timeout &&
1918+ (timeout_ms > host->max_busy_timeout)) {
19161919 cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
19171920 } else {
19181921 cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
drivers/mmc/core/mmc_ops.c+4−2
@@ -542,9 +542,11 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value, · 541 unmodified lines
542542 * If the max_busy_timeout of the host is specified, make sure it's
543543 * enough to fit the used timeout_ms. In case it's not, let's instruct
544544 * the host to avoid HW busy detection, by converting to a R1 response
545− * instead of a R1B.
545+ * instead of a R1B. Note, some hosts requires R1B, which also means
546+ * they are on their own when it comes to deal with the busy timeout.
546547 */
547− if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout))
548+ if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && host->max_busy_timeout &&
549+ (timeout_ms > host->max_busy_timeout))
548550 use_r1b_resp = false;
549551
550552 cmd.opcode = MMC_SWITCH;
drivers/mmc/host/rtsx_pci_sdmmc.c+8−5
@@ -606,19 +606,22 @@ static int sd_change_phase(struct realtek_pci_sdmmc *host, · 605 unmodified lines
606606 u8 sample_point, bool rx)
607607 {
608608 struct rtsx_pcr *pcr = host->pcr;
609−
609+ u16 SD_VP_CTL = 0;
610610 dev_dbg(sdmmc_dev(host), "%s(%s): sample_point = %d\n",
611611 __func__, rx ? "RX" : "TX", sample_point);
612612
613613 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
614− if (rx)
614+ if (rx) {
615+ SD_VP_CTL = SD_VPRX_CTL;
615616 rtsx_pci_write_register(pcr, SD_VPRX_CTL,
616617 PHASE_SELECT_MASK, sample_point);
617− else
618+ } else {
619+ SD_VP_CTL = SD_VPTX_CTL;
618620 rtsx_pci_write_register(pcr, SD_VPTX_CTL,
619621 PHASE_SELECT_MASK, sample_point);
620− rtsx_pci_write_register(pcr, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
621− rtsx_pci_write_register(pcr, SD_VPCLK0_CTL, PHASE_NOT_RESET,
622+ }
623+ rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET, 0);
624+ rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET,
622625 PHASE_NOT_RESET);
623626 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, 0);
624627 rtsx_pci_write_register(pcr, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
drivers/mmc/host/sdhci-acpi.c+82−2
@@ -23,6 +23,7 @@ · 22 unmodified lines
2323 #include <linux/pm.h>
2424 #include <linux/pm_runtime.h>
2525 #include <linux/delay.h>
26+#include <linux/dmi.h>
2627
2728 #include <linux/mmc/host.h>
2829 #include <linux/mmc/pm.h>
@@ -72,9 +73,16 @@ struct sdhci_acpi_host { · 43 unmodified lines
7273 const struct sdhci_acpi_slot *slot;
7374 struct platform_device *pdev;
7475 bool use_runtime_pm;
76+ bool is_intel;
77+ bool reset_signal_volt_on_suspend;
7578 unsigned long private[0] ____cacheline_aligned;
7679 };
7780
81+enum {
82+ DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP = BIT(0),
83+ DMI_QUIRK_SD_NO_WRITE_PROTECT = BIT(1),
84+};
85+
7886 static inline void *sdhci_acpi_priv(struct sdhci_acpi_host *c)
7987 {
8088 return (void *)c->private;
@@ -391,6 +399,8 @@ static int intel_probe_slot(struct platform_device *pdev, struct acpi_device *ad · 310 unmodified lines
391399 host->mmc_host_ops.start_signal_voltage_switch =
392400 intel_start_signal_voltage_switch;
393401
402+ c->is_intel = true;
403+
394404 return 0;
395405 }
396406
@@ -647,6 +657,36 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { · 250 unmodified lines
647657 };
648658 MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids);
649659
660+static const struct dmi_system_id sdhci_acpi_quirks[] = {
661+ {
662+ /*
663+ * The Lenovo Miix 320-10ICR has a bug in the _PS0 method of
664+ * the SHC1 ACPI device, this bug causes it to reprogram the
665+ * wrong LDO (DLDO3) to 1.8V if 1.8V modes are used and the
666+ * card is (runtime) suspended + resumed. DLDO3 is used for
667+ * the LCD and setting it to 1.8V causes the LCD to go black.
668+ */
669+ .matches = {
670+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
671+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"),
672+ },
673+ .driver_data = (void *)DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP,
674+ },
675+ {
676+ /*
677+ * The Acer Aspire Switch 10 (SW5-012) microSD slot always
678+ * reports the card being write-protected even though microSD
679+ * cards do not have a write-protect switch at all.
680+ */
681+ .matches = {
682+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
683+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
684+ },
685+ .driver_data = (void *)DMI_QUIRK_SD_NO_WRITE_PROTECT,
686+ },
687+ {} /* Terminating entry */
688+};
689+
650690 static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(struct acpi_device *adev)
651691 {
652692 const struct sdhci_acpi_uid_slot *u;
@@ -663,17 +703,23 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 10 unmodified lines
663703 struct device *dev = &pdev->dev;
664704 const struct sdhci_acpi_slot *slot;
665705 struct acpi_device *device, *child;
706+ const struct dmi_system_id *id;
666707 struct sdhci_acpi_host *c;
667708 struct sdhci_host *host;
668709 struct resource *iomem;
669710 resource_size_t len;
670711 size_t priv_size;
712+ int quirks = 0;
671713 int err;
672714
673715 device = ACPI_COMPANION(dev);
674716 if (!device)
675717 return -ENODEV;
676718
719+ id = dmi_first_match(sdhci_acpi_quirks);
720+ if (id)
721+ quirks = (long)id->driver_data;
722+
677723 slot = sdhci_acpi_get_slot(device);
678724
679725 /* Power on the SDHCI controller and its children */
@@ -759,6 +805,12 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 79 unmodified lines
759805 dev_warn(dev, "failed to setup card detect gpio\n");
760806 c->use_runtime_pm = false;
761807 }
808+
809+ if (quirks & DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP)
810+ c->reset_signal_volt_on_suspend = true;
811+
812+ if (quirks & DMI_QUIRK_SD_NO_WRITE_PROTECT)
813+ host->mmc->caps2 |= MMC_CAP2_NO_WRITE_PROTECT;
762814 }
763815
764816 err = sdhci_setup_host(host);
@@ -823,17 +875,39 @@ static int sdhci_acpi_remove(struct platform_device *pdev) · 58 unmodified lines
823875 return 0;
824876 }
825877
878+static void __maybe_unused sdhci_acpi_reset_signal_voltage_if_needed(
879+ struct device *dev)
880+{
881+ struct sdhci_acpi_host *c = dev_get_drvdata(dev);
882+ struct sdhci_host *host = c->host;
883+
884+ if (c->is_intel && c->reset_signal_volt_on_suspend &&
885+ host->mmc->ios.signal_voltage != MMC_SIGNAL_VOLTAGE_330) {
886+ struct intel_host *intel_host = sdhci_acpi_priv(c);
887+ unsigned int fn = INTEL_DSM_V33_SWITCH;
888+ u32 result = 0;
889+
890+ intel_dsm(intel_host, dev, fn, &result);
891+ }
892+}
893+
826894 #ifdef CONFIG_PM_SLEEP
827895
828896 static int sdhci_acpi_suspend(struct device *dev)
829897 {
830898 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
831899 struct sdhci_host *host = c->host;
900+ int ret;
832901
833902 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
834903 mmc_retune_needed(host->mmc);
835904
836− return sdhci_suspend_host(host);
905+ ret = sdhci_suspend_host(host);
906+ if (ret)
907+ return ret;
908+
909+ sdhci_acpi_reset_signal_voltage_if_needed(dev);
910+ return 0;
837911 }
838912
839913 static int sdhci_acpi_resume(struct device *dev)
@@ -853,11 +927,17 @@ static int sdhci_acpi_runtime_suspend(struct device *dev) · 13 unmodified lines
853927 {
854928 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
855929 struct sdhci_host *host = c->host;
930+ int ret;
856931
857932 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
858933 mmc_retune_needed(host->mmc);
859934
860− return sdhci_runtime_suspend_host(host);
935+ ret = sdhci_runtime_suspend_host(host);
936+ if (ret)
937+ return ret;
938+
939+ sdhci_acpi_reset_signal_voltage_if_needed(dev);
940+ return 0;
861941 }
862942
863943 static int sdhci_acpi_runtime_resume(struct device *dev)
drivers/mmc/host/sdhci-cadence.c+16−2
@@ -11,6 +11,7 @@ · 10 unmodified lines
1111 #include <linux/mmc/host.h>
1212 #include <linux/mmc/mmc.h>
1313 #include <linux/of.h>
14+#include <linux/of_device.h>
1415
1516 #include "sdhci-pltfm.h"
1617
@@ -235,6 +236,11 @@ static const struct sdhci_ops sdhci_cdns_ops = { · 218 unmodified lines
235236 .set_uhs_signaling = sdhci_cdns_set_uhs_signaling,
236237 };
237238
239+static const struct sdhci_pltfm_data sdhci_cdns_uniphier_pltfm_data = {
240+ .ops = &sdhci_cdns_ops,
241+ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
242+};
243+
238244 static const struct sdhci_pltfm_data sdhci_cdns_pltfm_data = {
239245 .ops = &sdhci_cdns_ops,
240246 };
@@ -334,6 +340,7 @@ static void sdhci_cdns_hs400_enhanced_strobe(struct mmc_host *mmc, · 93 unmodified lines
334340 static int sdhci_cdns_probe(struct platform_device *pdev)
335341 {
336342 struct sdhci_host *host;
343+ const struct sdhci_pltfm_data *data;
337344 struct sdhci_pltfm_host *pltfm_host;
338345 struct sdhci_cdns_priv *priv;
339346 struct clk *clk;
@@ -350,8 +357,12 @@ static int sdhci_cdns_probe(struct platform_device *pdev) · 10 unmodified lines
350357 if (ret)
351358 return ret;
352359
360+ data = of_device_get_match_data(dev);
361+ if (!data)
362+ data = &sdhci_cdns_pltfm_data;
363+
353364 nr_phy_params = sdhci_cdns_phy_param_count(dev->of_node);
354− host = sdhci_pltfm_init(pdev, &sdhci_cdns_pltfm_data,
365+ host = sdhci_pltfm_init(pdev, data,
355366 struct_size(priv, phy_params, nr_phy_params));
356367 if (IS_ERR(host)) {
357368 ret = PTR_ERR(host);
@@ -431,7 +442,10 @@ static const struct dev_pm_ops sdhci_cdns_pm_ops = { · 73 unmodified lines
431442 };
432443
433444 static const struct of_device_id sdhci_cdns_match[] = {
434− { .compatible = "socionext,uniphier-sd4hc" },
445+ {
446+ .compatible = "socionext,uniphier-sd4hc",
447+ .data = &sdhci_cdns_uniphier_pltfm_data,
448+ },
435449 { .compatible = "cdns,sd4hc" },
436450 { /* sentinel */ }
437451 };
drivers/mmc/host/sdhci-msm.c+1−1
@@ -1590,7 +1590,7 @@ static u32 sdhci_msm_cqe_irq(struct sdhci_host *host, u32 intmask) · 1589 unmodified lines
15901590 return 0;
15911591 }
15921592
1593−void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)
1593+static void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)
15941594 {
15951595 struct sdhci_host *host = mmc_priv(mmc);
15961596 unsigned long flags;
drivers/mmc/host/sdhci-of-at91.c+6−2
@@ -132,7 +132,8 @@ static void sdhci_at91_reset(struct sdhci_host *host, u8 mask) · 131 unmodified lines
132132
133133 sdhci_reset(host, mask);
134134
135− if (host->mmc->caps & MMC_CAP_NONREMOVABLE)
135+ if ((host->mmc->caps & MMC_CAP_NONREMOVABLE)
136+ || mmc_gpio_get_cd(host->mmc) >= 0)
136137 sdhci_at91_set_force_card_detect(host);
137138
138139 if (priv->cal_always_on && (mask & SDHCI_RESET_ALL))
@@ -427,8 +428,11 @@ static int sdhci_at91_probe(struct platform_device *pdev) · 288 unmodified lines
427428 * detection procedure using the SDMCC_CD signal is bypassed.
428429 * This bit is reset when a software reset for all command is performed
429430 * so we need to implement our own reset function to set back this bit.
431+ *
432+ * WA: SAMA5D2 doesn't drive CMD if using CD GPIO line.
430433 */
431− if (host->mmc->caps & MMC_CAP_NONREMOVABLE)
434+ if ((host->mmc->caps & MMC_CAP_NONREMOVABLE)
435+ || mmc_gpio_get_cd(host->mmc) >= 0)
432436 sdhci_at91_set_force_card_detect(host);
433437
434438 pm_runtime_put_autosuspend(&pdev->dev);
drivers/mmc/host/sdhci-omap.c+3−0
@@ -1192,6 +1192,9 @@ static int sdhci_omap_probe(struct platform_device *pdev) · 1191 unmodified lines
11921192 if (of_find_property(dev->of_node, "dmas", NULL))
11931193 sdhci_switch_external_dma(host, true);
11941194
1195+ /* R1B responses is required to properly manage HW busy detection. */
1196+ mmc->caps |= MMC_CAP_NEED_RSP_BUSY;
1197+
11951198 ret = sdhci_setup_host(host);
11961199 if (ret)
11971200 goto err_put_sync;
drivers/mmc/host/sdhci-pci-gli.c+17−0
@@ -262,10 +262,26 @@ static int gl9750_execute_tuning(struct sdhci_host *host, u32 opcode) · 261 unmodified lines
262262 return 0;
263263 }
264264
265+static void gli_pcie_enable_msi(struct sdhci_pci_slot *slot)
266+{
267+ int ret;
268+
269+ ret = pci_alloc_irq_vectors(slot->chip->pdev, 1, 1,
270+ PCI_IRQ_MSI | PCI_IRQ_MSIX);
271+ if (ret < 0) {
272+ pr_warn("%s: enable PCI MSI failed, error=%d\n",
273+ mmc_hostname(slot->host->mmc), ret);
274+ return;
275+ }
276+
277+ slot->host->irq = pci_irq_vector(slot->chip->pdev, 0);
278+}
279+
265280 static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)
266281 {
267282 struct sdhci_host *host = slot->host;
268283
284+ gli_pcie_enable_msi(slot);
269285 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
270286 sdhci_enable_v4_mode(host);
271287
@@ -276,6 +292,7 @@ static int gli_probe_slot_gl9755(struct sdhci_pci_slot *slot) · 4 unmodified lines
276292 {
277293 struct sdhci_host *host = slot->host;
278294
295+ gli_pcie_enable_msi(slot);
279296 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
280297 sdhci_enable_v4_mode(host);
281298
drivers/mmc/host/sdhci-tegra.c+3−0
@@ -1552,6 +1552,9 @@ static int sdhci_tegra_probe(struct platform_device *pdev) · 1551 unmodified lines
15521552 if (tegra_host->soc_data->nvquirks & NVQUIRK_ENABLE_DDR50)
15531553 host->mmc->caps |= MMC_CAP_1_8V_DDR;
15541554
1555+ /* R1B responses is required to properly manage HW busy detection. */
1556+ host->mmc->caps |= MMC_CAP_NEED_RSP_BUSY;
1557+
15551558 tegra_sdhci_parse_dt(host);
15561559
15571560 tegra_host->power_gpio = devm_gpiod_get_optional(&pdev->dev, "power",
drivers/net/Kconfig+1−0
@@ -149,6 +149,7 @@ config NET_FC · 148 unmodified lines
149149 config IFB
150150 tristate "Intermediate Functional Block support"
151151 depends on NET_CLS_ACT
152+ select NET_REDIRECT
152153 ---help---
153154 This is an intermediate driver that allows sharing of
154155 resources.
drivers/net/bonding/bond_alb.c+10−10
@@ -50,11 +50,6 @@ struct arp_pkt { · 49 unmodified lines
5050 };
5151 #pragma pack()
5252
53−static inline struct arp_pkt *arp_pkt(const struct sk_buff *skb)
54−{
55− return (struct arp_pkt *)skb_network_header(skb);
56−}
57−
5853 /* Forward declaration */
5954 static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[],
6055 bool strict_match);
@@ -553,10 +548,11 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip) · 492 unmodified lines
553548 spin_unlock(&bond->mode_lock);
554549 }
555550
556−static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bond)
551+static struct slave *rlb_choose_channel(struct sk_buff *skb,
552+ struct bonding *bond,
553+ const struct arp_pkt *arp)
557554 {
558555 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
559− struct arp_pkt *arp = arp_pkt(skb);
560556 struct slave *assigned_slave, *curr_active_slave;
561557 struct rlb_client_info *client_info;
562558 u32 hash_index = 0;
@@ -653,8 +649,12 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon · 90 unmodified lines
653649 */
654650 static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
655651 {
656− struct arp_pkt *arp = arp_pkt(skb);
657652 struct slave *tx_slave = NULL;
653+ struct arp_pkt *arp;
654+
655+ if (!pskb_network_may_pull(skb, sizeof(*arp)))
656+ return NULL;
657+ arp = (struct arp_pkt *)skb_network_header(skb);
658658
659659 /* Don't modify or load balance ARPs that do not originate locally
660660 * (e.g.,arrive via a bridge).
@@ -664,7 +664,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond) · 3 unmodified lines
664664
665665 if (arp->op_code == htons(ARPOP_REPLY)) {
666666 /* the arp must be sent on the selected rx channel */
667− tx_slave = rlb_choose_channel(skb, bond);
667+ tx_slave = rlb_choose_channel(skb, bond, arp);
668668 if (tx_slave)
669669 bond_hw_addr_copy(arp->mac_src, tx_slave->dev->dev_addr,
670670 tx_slave->dev->addr_len);
@@ -676,7 +676,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond) · 5 unmodified lines
676676 * When the arp reply is received the entry will be updated
677677 * with the correct unicast address of the client.
678678 */
679− tx_slave = rlb_choose_channel(skb, bond);
679+ tx_slave = rlb_choose_channel(skb, bond, arp);
680680
681681 /* The ARP reply packets must be delayed so that
682682 * they can cancel out the influence of the ARP request.
drivers/net/caif/caif_spi.c+36−36
@@ -141,29 +141,29 @@ static ssize_t dbgfs_state(struct file *file, char __user *user_buf, · 140 unmodified lines
141141 return 0;
142142
143143 /* Print out debug information. */
144− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
145− "CAIF SPI debug information:\n");
146−
147− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len), FLAVOR);
148−
149− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
150− "STATE: %d\n", cfspi->dbg_state);
151− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
152− "Previous CMD: 0x%x\n", cfspi->pcmd);
153− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
154− "Current CMD: 0x%x\n", cfspi->cmd);
155− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
156− "Previous TX len: %d\n", cfspi->tx_ppck_len);
157− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
158− "Previous RX len: %d\n", cfspi->rx_ppck_len);
159− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
160− "Current TX len: %d\n", cfspi->tx_cpck_len);
161− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
162− "Current RX len: %d\n", cfspi->rx_cpck_len);
163− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
164− "Next TX len: %d\n", cfspi->tx_npck_len);
165− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
166− "Next RX len: %d\n", cfspi->rx_npck_len);
144+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
145+ "CAIF SPI debug information:\n");
146+
147+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len), FLAVOR);
148+
149+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
150+ "STATE: %d\n", cfspi->dbg_state);
151+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
152+ "Previous CMD: 0x%x\n", cfspi->pcmd);
153+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
154+ "Current CMD: 0x%x\n", cfspi->cmd);
155+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
156+ "Previous TX len: %d\n", cfspi->tx_ppck_len);
157+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
158+ "Previous RX len: %d\n", cfspi->rx_ppck_len);
159+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
160+ "Current TX len: %d\n", cfspi->tx_cpck_len);
161+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
162+ "Current RX len: %d\n", cfspi->rx_cpck_len);
163+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
164+ "Next TX len: %d\n", cfspi->tx_npck_len);
165+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
166+ "Next RX len: %d\n", cfspi->rx_npck_len);
167167
168168 if (len > DEBUGFS_BUF_SIZE)
169169 len = DEBUGFS_BUF_SIZE;
@@ -180,23 +180,23 @@ static ssize_t print_frame(char *buf, size_t size, char *frm, · 10 unmodified lines
180180 int len = 0;
181181 int i;
182182 for (i = 0; i < count; i++) {
183− len += snprintf((buf + len), (size - len),
183+ len += scnprintf((buf + len), (size - len),
184184 "[0x" BYTE_HEX_FMT "]",
185185 frm[i]);
186186 if ((i == cut) && (count > (cut * 2))) {
187187 /* Fast forward. */
188188 i = count - cut;
189− len += snprintf((buf + len), (size - len),
190− "--- %zu bytes skipped ---\n",
191− count - (cut * 2));
189+ len += scnprintf((buf + len), (size - len),
190+ "--- %zu bytes skipped ---\n",
191+ count - (cut * 2));
192192 }
193193
194194 if ((!(i % 10)) && i) {
195− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
196− "\n");
195+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
196+ "\n");
197197 }
198198 }
199− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len), "\n");
199+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len), "\n");
200200 return len;
201201 }
202202
@@ -214,18 +214,18 @@ static ssize_t dbgfs_frame(struct file *file, char __user *user_buf, · 11 unmodified lines
214214 return 0;
215215
216216 /* Print out debug information. */
217− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
218− "Current frame:\n");
217+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
218+ "Current frame:\n");
219219
220− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
221− "Tx data (Len: %d):\n", cfspi->tx_cpck_len);
220+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
221+ "Tx data (Len: %d):\n", cfspi->tx_cpck_len);
222222
223223 len += print_frame((buf + len), (DEBUGFS_BUF_SIZE - len),
224224 cfspi->xfer.va_tx[0],
225225 (cfspi->tx_cpck_len + SPI_CMD_SZ), 100);
226226
227− len += snprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
228− "Rx data (Len: %d):\n", cfspi->rx_cpck_len);
227+ len += scnprintf((buf + len), (DEBUGFS_BUF_SIZE - len),
228+ "Rx data (Len: %d):\n", cfspi->rx_cpck_len);
229229
230230 len += print_frame((buf + len), (DEBUGFS_BUF_SIZE - len),
231231 cfspi->xfer.va_rx,
drivers/net/can/dev.c+1−0
@@ -883,6 +883,7 @@ static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = { · 882 unmodified lines
883883 = { .len = sizeof(struct can_bittiming) },
884884 [IFLA_CAN_DATA_BITTIMING_CONST]
885885 = { .len = sizeof(struct can_bittiming_const) },
886+ [IFLA_CAN_TERMINATION] = { .type = NLA_U16 },
886887 };
887888
888889 static int can_validate(struct nlattr *tb[], struct nlattr *data[],
drivers/net/can/slcan.c+3−0
@@ -625,7 +625,10 @@ err_free_chan: · 624 unmodified lines
625625 tty->disc_data = NULL;
626626 clear_bit(SLF_INUSE, &sl->flags);
627627 slc_free_netdev(sl->dev);
628+ /* do not call free_netdev before rtnl_unlock */
629+ rtnl_unlock();
628630 free_netdev(sl->dev);
631+ return err;
629632
630633 err_exit:
631634 rtnl_unlock();
drivers/net/dsa/mt7530.c+2−2
@@ -566,7 +566,7 @@ mt7530_mib_reset(struct dsa_switch *ds) · 565 unmodified lines
566566 static void
567567 mt7530_port_set_status(struct mt7530_priv *priv, int port, int enable)
568568 {
569− u32 mask = PMCR_TX_EN | PMCR_RX_EN;
569+ u32 mask = PMCR_TX_EN | PMCR_RX_EN | PMCR_FORCE_LNK;
570570
571571 if (enable)
572572 mt7530_set(priv, MT7530_PMCR_P(port), mask);
@@ -1444,7 +1444,7 @@ static void mt7530_phylink_mac_config(struct dsa_switch *ds, int port, · 871 unmodified lines
14441444 mcr_new &= ~(PMCR_FORCE_SPEED_1000 | PMCR_FORCE_SPEED_100 |
14451445 PMCR_FORCE_FDX | PMCR_TX_FC_EN | PMCR_RX_FC_EN);
14461446 mcr_new |= PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | PMCR_BACKOFF_EN |
1447− PMCR_BACKPR_EN | PMCR_FORCE_MODE | PMCR_FORCE_LNK;
1447+ PMCR_BACKPR_EN | PMCR_FORCE_MODE;
14481448
14491449 /* Are we connected to external phy */
14501450 if (port == 5 && dsa_is_user_port(ds, 5))
drivers/net/dsa/mv88e6xxx/chip.c+2−0
@@ -2769,6 +2769,8 @@ static u64 mv88e6xxx_devlink_atu_bin_get(struct mv88e6xxx_chip *chip, · 2768 unmodified lines
27692769 goto unlock;
27702770 }
27712771
2772+ occupancy &= MV88E6XXX_G2_ATU_STATS_MASK;
2773+
27722774 unlock:
27732775 mv88e6xxx_reg_unlock(chip);
27742776
drivers/net/dsa/mv88e6xxx/global2.c+7−1
@@ -1099,6 +1099,13 @@ int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip) · 1098 unmodified lines
10991099 {
11001100 int err, irq, virq;
11011101
1102+ chip->g2_irq.masked = ~0;
1103+ mv88e6xxx_reg_lock(chip);
1104+ err = mv88e6xxx_g2_int_mask(chip, ~chip->g2_irq.masked);
1105+ mv88e6xxx_reg_unlock(chip);
1106+ if (err)
1107+ return err;
1108+
11021109 chip->g2_irq.domain = irq_domain_add_simple(
11031110 chip->dev->of_node, 16, 0, &mv88e6xxx_g2_irq_domain_ops, chip);
11041111 if (!chip->g2_irq.domain)
@@ -1108,7 +1115,6 @@ int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip) · 3 unmodified lines
11081115 irq_create_mapping(chip->g2_irq.domain, irq);
11091116
11101117 chip->g2_irq.chip = mv88e6xxx_g2_irq_chip;
1111− chip->g2_irq.masked = ~0;
11121118
11131119 chip->device_irq = irq_find_mapping(chip->g1_irq.domain,
11141120 MV88E6XXX_G1_STS_IRQ_DEVICE);
drivers/net/dsa/sja1105/sja1105_main.c+2−1
@@ -1741,7 +1741,8 @@ static void sja1105_teardown(struct dsa_switch *ds) · 1740 unmodified lines
17411741 if (!dsa_is_user_port(ds, port))
17421742 continue;
17431743
1744− kthread_destroy_worker(sp->xmit_worker);
1744+ if (sp->xmit_worker)
1745+ kthread_destroy_worker(sp->xmit_worker);
17451746 }
17461747
17471748 sja1105_tas_teardown(ds);
drivers/net/ethernet/amazon/ena/ena_netdev.c+60−18
@@ -1018,13 +1018,9 @@ static int ena_refill_rx_bufs(struct ena_ring *rx_ring, u32 num) · 1017 unmodified lines
10181018 struct ena_rx_buffer *rx_info;
10191019
10201020 req_id = rx_ring->free_ids[next_to_use];
1021− rc = validate_rx_req_id(rx_ring, req_id);
1022− if (unlikely(rc < 0))
1023− break;
10241021
10251022 rx_info = &rx_ring->rx_buffer_info[req_id];
10261023
1027−
10281024 rc = ena_alloc_rx_page(rx_ring, rx_info,
10291025 GFP_ATOMIC | __GFP_COMP);
10301026 if (unlikely(rc < 0)) {
@@ -1379,9 +1375,15 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring, · 348 unmodified lines
13791375 struct ena_rx_buffer *rx_info;
13801376 u16 len, req_id, buf = 0;
13811377 void *va;
1378+ int rc;
13821379
13831380 len = ena_bufs[buf].len;
13841381 req_id = ena_bufs[buf].req_id;
1382+
1383+ rc = validate_rx_req_id(rx_ring, req_id);
1384+ if (unlikely(rc < 0))
1385+ return NULL;
1386+
13851387 rx_info = &rx_ring->rx_buffer_info[req_id];
13861388
13871389 if (unlikely(!rx_info->page)) {
@@ -1454,6 +1456,11 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring, · 66 unmodified lines
14541456 buf++;
14551457 len = ena_bufs[buf].len;
14561458 req_id = ena_bufs[buf].req_id;
1459+
1460+ rc = validate_rx_req_id(rx_ring, req_id);
1461+ if (unlikely(rc < 0))
1462+ return NULL;
1463+
14571464 rx_info = &rx_ring->rx_buffer_info[req_id];
14581465 } while (1);
14591466
@@ -1968,7 +1975,7 @@ static int ena_enable_msix(struct ena_adapter *adapter) · 508 unmodified lines
19681975 }
19691976
19701977 /* Reserved the max msix vectors we might need */
1971− msix_vecs = ENA_MAX_MSIX_VEC(adapter->num_io_queues);
1978+ msix_vecs = ENA_MAX_MSIX_VEC(adapter->max_num_io_queues);
19721979 netif_dbg(adapter, probe, adapter->netdev,
19731980 "trying to enable MSI-X, vectors %d\n", msix_vecs);
19741981
@@ -2068,6 +2075,7 @@ static int ena_request_mgmnt_irq(struct ena_adapter *adapter) · 93 unmodified lines
20682075
20692076 static int ena_request_io_irq(struct ena_adapter *adapter)
20702077 {
2078+ u32 io_queue_count = adapter->num_io_queues + adapter->xdp_num_queues;
20712079 unsigned long flags = 0;
20722080 struct ena_irq *irq;
20732081 int rc = 0, i, k;
@@ -2078,7 +2086,7 @@ static int ena_request_io_irq(struct ena_adapter *adapter) · 4 unmodified lines
20782086 return -EINVAL;
20792087 }
20802088
2081− for (i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) {
2089+ for (i = ENA_IO_IRQ_FIRST_IDX; i < ENA_MAX_MSIX_VEC(io_queue_count); i++) {
20822090 irq = &adapter->irq_tbl[i];
20832091 rc = request_irq(irq->vector, irq->handler, flags, irq->name,
20842092 irq->data);
@@ -2119,6 +2127,7 @@ static void ena_free_mgmnt_irq(struct ena_adapter *adapter) · 34 unmodified lines
21192127
21202128 static void ena_free_io_irq(struct ena_adapter *adapter)
21212129 {
2130+ u32 io_queue_count = adapter->num_io_queues + adapter->xdp_num_queues;
21222131 struct ena_irq *irq;
21232132 int i;
21242133
@@ -2129,7 +2138,7 @@ static void ena_free_io_irq(struct ena_adapter *adapter) · 4 unmodified lines
21292138 }
21302139 #endif /* CONFIG_RFS_ACCEL */
21312140
2132− for (i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) {
2141+ for (i = ENA_IO_IRQ_FIRST_IDX; i < ENA_MAX_MSIX_VEC(io_queue_count); i++) {
21332142 irq = &adapter->irq_tbl[i];
21342143 irq_set_affinity_hint(irq->vector, NULL);
21352144 free_irq(irq->vector, irq->data);
@@ -2144,12 +2153,13 @@ static void ena_disable_msix(struct ena_adapter *adapter) · 8 unmodified lines
21442153
21452154 static void ena_disable_io_intr_sync(struct ena_adapter *adapter)
21462155 {
2156+ u32 io_queue_count = adapter->num_io_queues + adapter->xdp_num_queues;
21472157 int i;
21482158
21492159 if (!netif_running(adapter->netdev))
21502160 return;
21512161
2152− for (i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++)
2162+ for (i = ENA_IO_IRQ_FIRST_IDX; i < ENA_MAX_MSIX_VEC(io_queue_count); i++)
21532163 synchronize_irq(adapter->irq_tbl[i].vector);
21542164 }
21552165
@@ -3476,6 +3486,7 @@ static int ena_restore_device(struct ena_adapter *adapter) · 1320 unmodified lines
34763486 netif_carrier_on(adapter->netdev);
34773487
34783488 mod_timer(&adapter->timer_service, round_jiffies(jiffies + HZ));
3489+ adapter->last_keep_alive_jiffies = jiffies;
34793490 dev_err(&pdev->dev,
34803491 "Device reset completed successfully, Driver info: %s\n",
34813492 version);
@@ -4325,13 +4336,15 @@ err_disable_device: · 843 unmodified lines
43254336
43264337 /*****************************************************************************/
43274338
4328−/* ena_remove - Device Removal Routine
4339+/* __ena_shutoff - Helper used in both PCI remove/shutdown routines
43294340 * @pdev: PCI device information struct
4341+ * @shutdown: Is it a shutdown operation? If false, means it is a removal
43304342 *
4331− * ena_remove is called by the PCI subsystem to alert the driver
4332− * that it should release a PCI device.
4343+ * __ena_shutoff is a helper routine that does the real work on shutdown and
4344+ * removal paths; the difference between those paths is with regards to whether
4345+ * dettach or unregister the netdevice.
43334346 */
4334−static void ena_remove(struct pci_dev *pdev)
4347+static void __ena_shutoff(struct pci_dev *pdev, bool shutdown)
43354348 {
43364349 struct ena_adapter *adapter = pci_get_drvdata(pdev);
43374350 struct ena_com_dev *ena_dev;
@@ -4350,13 +4363,17 @@ static void ena_remove(struct pci_dev *pdev) · 12 unmodified lines
43504363
43514364 cancel_work_sync(&adapter->reset_task);
43524365
4353− rtnl_lock();
4366+ rtnl_lock(); /* lock released inside the below if-else block */
43544367 ena_destroy_device(adapter, true);
4355− rtnl_unlock();
4356−
4357− unregister_netdev(netdev);
4358−
4359− free_netdev(netdev);
4368+ if (shutdown) {
4369+ netif_device_detach(netdev);
4370+ dev_close(netdev);
4371+ rtnl_unlock();
4372+ } else {
4373+ rtnl_unlock();
4374+ unregister_netdev(netdev);
4375+ free_netdev(netdev);
4376+ }
43604377
43614378 ena_com_rss_destroy(ena_dev);
43624379
@@ -4371,6 +4388,30 @@ static void ena_remove(struct pci_dev *pdev) · 8 unmodified lines
43714388 vfree(ena_dev);
43724389 }
43734390
4391+/* ena_remove - Device Removal Routine
4392+ * @pdev: PCI device information struct
4393+ *
4394+ * ena_remove is called by the PCI subsystem to alert the driver
4395+ * that it should release a PCI device.
4396+ */
4397+
4398+static void ena_remove(struct pci_dev *pdev)
4399+{
4400+ __ena_shutoff(pdev, false);
4401+}
4402+
4403+/* ena_shutdown - Device Shutdown Routine
4404+ * @pdev: PCI device information struct
4405+ *
4406+ * ena_shutdown is called by the PCI subsystem to alert the driver that
4407+ * a shutdown/reboot (or kexec) is happening and device must be disabled.
4408+ */
4409+
4410+static void ena_shutdown(struct pci_dev *pdev)
4411+{
4412+ __ena_shutoff(pdev, true);
4413+}
4414+
43744415 #ifdef CONFIG_PM
43754416 /* ena_suspend - PM suspend callback
43764417 * @pdev: PCI device information struct
@@ -4420,6 +4461,7 @@ static struct pci_driver ena_pci_driver = { · 43 unmodified lines
44204461 .id_table = ena_pci_tbl,
44214462 .probe = ena_probe,
44224463 .remove = ena_remove,
4464+ .shutdown = ena_shutdown,
44234465 #ifdef CONFIG_PM
44244466 .suspend = ena_suspend,
44254467 .resume = ena_resume,
drivers/net/ethernet/broadcom/bcmsysport.c+1−1
@@ -2135,7 +2135,7 @@ static int bcm_sysport_rule_set(struct bcm_sysport_priv *priv, · 2134 unmodified lines
21352135 return -ENOSPC;
21362136
21372137 index = find_first_zero_bit(priv->filters, RXCHK_BRCM_TAG_MAX);
2138− if (index > RXCHK_BRCM_TAG_MAX)
2138+ if (index >= RXCHK_BRCM_TAG_MAX)
21392139 return -ENOSPC;
21402140
21412141 /* Location is the classification ID, and index is the position
drivers/net/ethernet/broadcom/bnxt/bnxt.c+22−10
@@ -6880,12 +6880,12 @@ skip_rdma: · 6879 unmodified lines
68806880 }
68816881 ena |= FUNC_BACKING_STORE_CFG_REQ_DFLT_ENABLES;
68826882 rc = bnxt_hwrm_func_backing_store_cfg(bp, ena);
6883− if (rc)
6883+ if (rc) {
68846884 netdev_err(bp->dev, "Failed configuring context mem, rc = %d.\n",
68856885 rc);
6886− else
6887− ctx->flags |= BNXT_CTX_FLAG_INITED;
6888−
6886+ return rc;
6887+ }
6888+ ctx->flags |= BNXT_CTX_FLAG_INITED;
68896889 return 0;
68906890 }
68916891
@@ -7406,14 +7406,22 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp) · 514 unmodified lines
74067406 pri2cos = &resp2->pri0_cos_queue_id;
74077407 for (i = 0; i < 8; i++) {
74087408 u8 queue_id = pri2cos[i];
7409+ u8 queue_idx;
74097410
7411+ /* Per port queue IDs start from 0, 10, 20, etc */
7412+ queue_idx = queue_id % 10;
7413+ if (queue_idx > BNXT_MAX_QUEUE) {
7414+ bp->pri2cos_valid = false;
7415+ goto qstats_done;
7416+ }
74107417 for (j = 0; j < bp->max_q; j++) {
74117418 if (bp->q_ids[j] == queue_id)
7412− bp->pri2cos[i] = j;
7419+ bp->pri2cos_idx[i] = queue_idx;
74137420 }
74147421 }
74157422 bp->pri2cos_valid = 1;
74167423 }
7424+qstats_done:
74177425 mutex_unlock(&bp->hwrm_cmd_lock);
74187426 return rc;
74197427 }
@@ -10982,13 +10990,13 @@ static int bnxt_change_mtu(struct net_device *dev, int new_mtu) · 3562 unmodified lines
1098210990 struct bnxt *bp = netdev_priv(dev);
1098310991
1098410992 if (netif_running(dev))
10985− bnxt_close_nic(bp, false, false);
10993+ bnxt_close_nic(bp, true, false);
1098610994
1098710995 dev->mtu = new_mtu;
1098810996 bnxt_set_ring_params(bp);
1098910997
1099010998 if (netif_running(dev))
10991− return bnxt_open_nic(bp, false, false);
10999+ return bnxt_open_nic(bp, true, false);
1099211000
1099311001 return 0;
1099411002 }
@@ -11669,6 +11677,10 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh) · 674 unmodified lines
1166911677 bp->rx_nr_rings++;
1167011678 bp->cp_nr_rings++;
1167111679 }
11680+ if (rc) {
11681+ bp->tx_nr_rings = 0;
11682+ bp->rx_nr_rings = 0;
11683+ }
1167211684 return rc;
1167311685 }
1167411686
@@ -11962,12 +11974,12 @@ init_err_pci_clean: · 287 unmodified lines
1196211974 bnxt_hwrm_func_drv_unrgtr(bp);
1196311975 bnxt_free_hwrm_short_cmd_req(bp);
1196411976 bnxt_free_hwrm_resources(bp);
11965− bnxt_free_ctx_mem(bp);
11966− kfree(bp->ctx);
11967− bp->ctx = NULL;
1196811977 kfree(bp->fw_health);
1196911978 bp->fw_health = NULL;
1197011979 bnxt_cleanup_pci(bp);
11980+ bnxt_free_ctx_mem(bp);
11981+ kfree(bp->ctx);
11982+ bp->ctx = NULL;
1197111983
1197211984 init_err_free:
1197311985 free_netdev(dev);
drivers/net/ethernet/broadcom/bnxt/bnxt.h+1−1
@@ -1716,7 +1716,7 @@ struct bnxt { · 1715 unmodified lines
17161716 u16 fw_rx_stats_ext_size;
17171717 u16 fw_tx_stats_ext_size;
17181718 u16 hw_ring_stats_size;
1719− u8 pri2cos[8];
1719+ u8 pri2cos_idx[8];
17201720 u8 pri2cos_valid;
17211721
17221722 u16 hwrm_max_req_len;
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c+10−5
@@ -479,24 +479,26 @@ static int bnxt_dcbnl_ieee_getets(struct net_device *dev, struct ieee_ets *ets) · 478 unmodified lines
479479 {
480480 struct bnxt *bp = netdev_priv(dev);
481481 struct ieee_ets *my_ets = bp->ieee_ets;
482+ int rc;
482483
483484 ets->ets_cap = bp->max_tc;
484485
485486 if (!my_ets) {
486− int rc;
487−
488487 if (bp->dcbx_cap & DCB_CAP_DCBX_HOST)
489488 return 0;
490489
491490 my_ets = kzalloc(sizeof(*my_ets), GFP_KERNEL);
492491 if (!my_ets)
493− return 0;
492+ return -ENOMEM;
494493 rc = bnxt_hwrm_queue_cos2bw_qcfg(bp, my_ets);
495494 if (rc)
496− return 0;
495+ goto error;
497496 rc = bnxt_hwrm_queue_pri2cos_qcfg(bp, my_ets);
498497 if (rc)
499− return 0;
498+ goto error;
499+
500+ /* cache result */
501+ bp->ieee_ets = my_ets;
500502 }
501503
502504 ets->cbs = my_ets->cbs;
@@ -505,6 +507,9 @@ static int bnxt_dcbnl_ieee_getets(struct net_device *dev, struct ieee_ets *ets) · 2 unmodified lines
505507 memcpy(ets->tc_tsa, my_ets->tc_tsa, sizeof(ets->tc_tsa));
506508 memcpy(ets->prio_tc, my_ets->prio_tc, sizeof(ets->prio_tc));
507509 return 0;
510+error:
511+ kfree(my_ets);
512+ return rc;
508513 }
509514
510515 static int bnxt_dcbnl_ieee_setets(struct net_device *dev, struct ieee_ets *ets)
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c+15−17
@@ -589,25 +589,25 @@ skip_ring_stats: · 588 unmodified lines
589589 if (bp->pri2cos_valid) {
590590 for (i = 0; i < 8; i++, j++) {
591591 long n = bnxt_rx_bytes_pri_arr[i].base_off +
592− bp->pri2cos[i];
592+ bp->pri2cos_idx[i];
593593
594594 buf[j] = le64_to_cpu(*(rx_port_stats_ext + n));
595595 }
596596 for (i = 0; i < 8; i++, j++) {
597597 long n = bnxt_rx_pkts_pri_arr[i].base_off +
598− bp->pri2cos[i];
598+ bp->pri2cos_idx[i];
599599
600600 buf[j] = le64_to_cpu(*(rx_port_stats_ext + n));
601601 }
602602 for (i = 0; i < 8; i++, j++) {
603603 long n = bnxt_tx_bytes_pri_arr[i].base_off +
604− bp->pri2cos[i];
604+ bp->pri2cos_idx[i];
605605
606606 buf[j] = le64_to_cpu(*(tx_port_stats_ext + n));
607607 }
608608 for (i = 0; i < 8; i++, j++) {
609609 long n = bnxt_tx_pkts_pri_arr[i].base_off +
610− bp->pri2cos[i];
610+ bp->pri2cos_idx[i];
611611
612612 buf[j] = le64_to_cpu(*(tx_port_stats_ext + n));
613613 }
@@ -2007,8 +2007,8 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 1393 unmodified lines
20072007 struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr;
20082008 struct hwrm_nvm_install_update_input install = {0};
20092009 const struct firmware *fw;
2010− int rc, hwrm_err = 0;
20112010 u32 item_len;
2011+ int rc = 0;
20122012 u16 index;
20132013
20142014 bnxt_hwrm_fw_set_time(bp);
@@ -2052,15 +2052,14 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 37 unmodified lines
20522052 memcpy(kmem, fw->data, fw->size);
20532053 modify.host_src_addr = cpu_to_le64(dma_handle);
20542054
2055− hwrm_err = hwrm_send_message(bp, &modify,
2056− sizeof(modify),
2057− FLASH_PACKAGE_TIMEOUT);
2055+ rc = hwrm_send_message(bp, &modify, sizeof(modify),
2056+ FLASH_PACKAGE_TIMEOUT);
20582057 dma_free_coherent(&bp->pdev->dev, fw->size, kmem,
20592058 dma_handle);
20602059 }
20612060 }
20622061 release_firmware(fw);
2063− if (rc || hwrm_err)
2062+ if (rc)
20642063 goto err_exit;
20652064
20662065 if ((install_type & 0xffff) == 0)
@@ -2069,20 +2068,19 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 2 unmodified lines
20692068 install.install_type = cpu_to_le32(install_type);
20702069
20712070 mutex_lock(&bp->hwrm_cmd_lock);
2072− hwrm_err = _hwrm_send_message(bp, &install, sizeof(install),
2073− INSTALL_PACKAGE_TIMEOUT);
2074− if (hwrm_err) {
2071+ rc = _hwrm_send_message(bp, &install, sizeof(install),
2072+ INSTALL_PACKAGE_TIMEOUT);
2073+ if (rc) {
20752074 u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;
20762075
20772076 if (resp->error_code && error_code ==
20782077 NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
20792078 install.flags |= cpu_to_le16(
20802079 NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);
2081− hwrm_err = _hwrm_send_message(bp, &install,
2082− sizeof(install),
2083− INSTALL_PACKAGE_TIMEOUT);
2080+ rc = _hwrm_send_message(bp, &install, sizeof(install),
2081+ INSTALL_PACKAGE_TIMEOUT);
20842082 }
2085− if (hwrm_err)
2083+ if (rc)
20862084 goto flash_pkg_exit;
20872085 }
20882086
@@ -2094,7 +2092,7 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 5 unmodified lines
20942092 flash_pkg_exit:
20952093 mutex_unlock(&bp->hwrm_cmd_lock);
20962094 err_exit:
2097− if (hwrm_err == -EACCES)
2095+ if (rc == -EACCES)
20982096 bnxt_print_admin_err(bp);
20992097 return rc;
21002098 }
drivers/net/ethernet/broadcom/genet/bcmgenet.c+42−100
@@ -94,12 +94,6 @@ static inline void dmadesc_set_length_status(struct bcmgenet_priv *priv, · 93 unmodified lines
9494 bcmgenet_writel(value, d + DMA_DESC_LENGTH_STATUS);
9595 }
9696
97−static inline u32 dmadesc_get_length_status(struct bcmgenet_priv *priv,
98− void __iomem *d)
99−{
100− return bcmgenet_readl(d + DMA_DESC_LENGTH_STATUS);
101−}
102−
10397 static inline void dmadesc_set_addr(struct bcmgenet_priv *priv,
10498 void __iomem *d,
10599 dma_addr_t addr)
@@ -508,61 +502,6 @@ static int bcmgenet_set_link_ksettings(struct net_device *dev, · 402 unmodified lines
508502 return phy_ethtool_ksettings_set(dev->phydev, cmd);
509503 }
510504
511−static void bcmgenet_set_rx_csum(struct net_device *dev,
512− netdev_features_t wanted)
513−{
514− struct bcmgenet_priv *priv = netdev_priv(dev);
515− u32 rbuf_chk_ctrl;
516− bool rx_csum_en;
517−
518− rx_csum_en = !!(wanted & NETIF_F_RXCSUM);
519−
520− rbuf_chk_ctrl = bcmgenet_rbuf_readl(priv, RBUF_CHK_CTRL);
521−
522− /* enable rx checksumming */
523− if (rx_csum_en)
524− rbuf_chk_ctrl |= RBUF_RXCHK_EN | RBUF_L3_PARSE_DIS;
525− else
526− rbuf_chk_ctrl &= ~RBUF_RXCHK_EN;
527− priv->desc_rxchk_en = rx_csum_en;
528−
529− /* If UniMAC forwards CRC, we need to skip over it to get
530− * a valid CHK bit to be set in the per-packet status word
531− */
532− if (rx_csum_en && priv->crc_fwd_en)
533− rbuf_chk_ctrl |= RBUF_SKIP_FCS;
534− else
535− rbuf_chk_ctrl &= ~RBUF_SKIP_FCS;
536−
537− bcmgenet_rbuf_writel(priv, rbuf_chk_ctrl, RBUF_CHK_CTRL);
538−}
539−
540−static void bcmgenet_set_tx_csum(struct net_device *dev,
541− netdev_features_t wanted)
542−{
543− struct bcmgenet_priv *priv = netdev_priv(dev);
544− bool desc_64b_en;
545− u32 tbuf_ctrl, rbuf_ctrl;
546−
547− tbuf_ctrl = bcmgenet_tbuf_ctrl_get(priv);
548− rbuf_ctrl = bcmgenet_rbuf_readl(priv, RBUF_CTRL);
549−
550− desc_64b_en = !!(wanted & NETIF_F_HW_CSUM);
551−
552− /* enable 64 bytes descriptor in both directions (RBUF and TBUF) */
553− if (desc_64b_en) {
554− tbuf_ctrl |= RBUF_64B_EN;
555− rbuf_ctrl |= RBUF_64B_EN;
556− } else {
557− tbuf_ctrl &= ~RBUF_64B_EN;
558− rbuf_ctrl &= ~RBUF_64B_EN;
559− }
560− priv->desc_64b_en = desc_64b_en;
561−
562− bcmgenet_tbuf_ctrl_set(priv, tbuf_ctrl);
563− bcmgenet_rbuf_writel(priv, rbuf_ctrl, RBUF_CTRL);
564−}
565−
566505 static int bcmgenet_set_features(struct net_device *dev,
567506 netdev_features_t features)
568507 {
@@ -578,9 +517,6 @@ static int bcmgenet_set_features(struct net_device *dev, · 9 unmodified lines
578517 reg = bcmgenet_umac_readl(priv, UMAC_CMD);
579518 priv->crc_fwd_en = !!(reg & CMD_CRC_FWD);
580519
581− bcmgenet_set_tx_csum(dev, features);
582− bcmgenet_set_rx_csum(dev, features);
583−
584520 clk_disable_unprepare(priv->clk);
585521
586522 return ret;
@@ -1475,8 +1411,8 @@ static void bcmgenet_tx_reclaim_all(struct net_device *dev) · 888 unmodified lines
14751411 /* Reallocate the SKB to put enough headroom in front of it and insert
14761412 * the transmit checksum offsets in the descriptors
14771413 */
1478−static struct sk_buff *bcmgenet_put_tx_csum(struct net_device *dev,
1479− struct sk_buff *skb)
1414+static struct sk_buff *bcmgenet_add_tsb(struct net_device *dev,
1415+ struct sk_buff *skb)
14801416 {
14811417 struct bcmgenet_priv *priv = netdev_priv(dev);
14821418 struct status_64 *status = NULL;
@@ -1590,13 +1526,11 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev) · 107 unmodified lines
15901526 */
15911527 GENET_CB(skb)->bytes_sent = skb->len;
15921528
1593− /* set the SKB transmit checksum */
1594− if (priv->desc_64b_en) {
1595− skb = bcmgenet_put_tx_csum(dev, skb);
1596− if (!skb) {
1597− ret = NETDEV_TX_OK;
1598− goto out;
1599− }
1529+ /* add the Transmit Status Block */
1530+ skb = bcmgenet_add_tsb(dev, skb);
1531+ if (!skb) {
1532+ ret = NETDEV_TX_OK;
1533+ goto out;
16001534 }
16011535
16021536 for (i = 0; i <= nr_frags; i++) {
@@ -1775,6 +1709,9 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring, · 172 unmodified lines
17751709
17761710 while ((rxpktprocessed < rxpkttoprocess) &&
17771711 (rxpktprocessed < budget)) {
1712+ struct status_64 *status;
1713+ __be16 rx_csum;
1714+
17781715 cb = &priv->rx_cbs[ring->read_ptr];
17791716 skb = bcmgenet_rx_refill(priv, cb);
17801717
@@ -1783,20 +1720,12 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring, · 2 unmodified lines
17831720 goto next;
17841721 }
17851722
1786− if (!priv->desc_64b_en) {
1787− dma_length_status =
1788− dmadesc_get_length_status(priv, cb->bd_addr);
1789− } else {
1790− struct status_64 *status;
1791− __be16 rx_csum;
1792−
1793− status = (struct status_64 *)skb->data;
1794− dma_length_status = status->length_status;
1723+ status = (struct status_64 *)skb->data;
1724+ dma_length_status = status->length_status;
1725+ if (dev->features & NETIF_F_RXCSUM) {
17951726 rx_csum = (__force __be16)(status->rx_csum & 0xffff);
1796− if (priv->desc_rxchk_en) {
1797− skb->csum = (__force __wsum)ntohs(rx_csum);
1798− skb->ip_summed = CHECKSUM_COMPLETE;
1799− }
1727+ skb->csum = (__force __wsum)ntohs(rx_csum);
1728+ skb->ip_summed = CHECKSUM_COMPLETE;
18001729 }
18011730
18021731 /* DMA flags and length are still valid no matter how
@@ -1840,14 +1769,10 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring, · 37 unmodified lines
18401769 } /* error packet */
18411770
18421771 skb_put(skb, len);
1843− if (priv->desc_64b_en) {
1844− skb_pull(skb, 64);
1845− len -= 64;
1846− }
18471772
1848− /* remove hardware 2bytes added for IP alignment */
1849− skb_pull(skb, 2);
1850− len -= 2;
1773+ /* remove RSB and hardware 2bytes added for IP alignment */
1774+ skb_pull(skb, 66);
1775+ len -= 66;
18511776
18521777 if (priv->crc_fwd_en) {
18531778 skb_trim(skb, len - ETH_FCS_LEN);
@@ -1965,6 +1890,8 @@ static void umac_enable_set(struct bcmgenet_priv *priv, u32 mask, bool enable) · 111 unmodified lines
19651890 u32 reg;
19661891
19671892 reg = bcmgenet_umac_readl(priv, UMAC_CMD);
1893+ if (reg & CMD_SW_RESET)
1894+ return;
19681895 if (enable)
19691896 reg |= mask;
19701897 else
@@ -1984,11 +1911,9 @@ static void reset_umac(struct bcmgenet_priv *priv) · 13 unmodified lines
19841911 bcmgenet_rbuf_ctrl_set(priv, 0);
19851912 udelay(10);
19861913
1987− /* disable MAC while updating its registers */
1988− bcmgenet_umac_writel(priv, 0, UMAC_CMD);
1989−
1990− /* issue soft reset with (rg)mii loopback to ensure a stable rxclk */
1991− bcmgenet_umac_writel(priv, CMD_SW_RESET | CMD_LCL_LOOP_EN, UMAC_CMD);
1914+ /* issue soft reset and disable MAC while updating its registers */
1915+ bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD);
1916+ udelay(2);
19921917 }
19931918
19941919 static void bcmgenet_intr_disable(struct bcmgenet_priv *priv)
@@ -2038,11 +1963,28 @@ static void init_umac(struct bcmgenet_priv *priv) · 43 unmodified lines
20381963
20391964 bcmgenet_umac_writel(priv, ENET_MAX_MTU_SIZE, UMAC_MAX_FRAME_LEN);
20401965
2041− /* init rx registers, enable ip header optimization */
1966+ /* init tx registers, enable TSB */
1967+ reg = bcmgenet_tbuf_ctrl_get(priv);
1968+ reg |= TBUF_64B_EN;
1969+ bcmgenet_tbuf_ctrl_set(priv, reg);
1970+
1971+ /* init rx registers, enable ip header optimization and RSB */
20421972 reg = bcmgenet_rbuf_readl(priv, RBUF_CTRL);
2043− reg |= RBUF_ALIGN_2B;
1973+ reg |= RBUF_ALIGN_2B | RBUF_64B_EN;
20441974 bcmgenet_rbuf_writel(priv, reg, RBUF_CTRL);
20451975
1976+ /* enable rx checksumming */
1977+ reg = bcmgenet_rbuf_readl(priv, RBUF_CHK_CTRL);
1978+ reg |= RBUF_RXCHK_EN | RBUF_L3_PARSE_DIS;
1979+ /* If UniMAC forwards CRC, we need to skip over it to get
1980+ * a valid CHK bit to be set in the per-packet status word
1981+ */
1982+ if (priv->crc_fwd_en)
1983+ reg |= RBUF_SKIP_FCS;
1984+ else
1985+ reg &= ~RBUF_SKIP_FCS;
1986+ bcmgenet_rbuf_writel(priv, reg, RBUF_CHK_CTRL);
1987+
20461988 if (!GENET_IS_V1(priv) && !GENET_IS_V2(priv))
20471989 bcmgenet_rbuf_writel(priv, 1, RBUF_TBUF_SIZE_CTRL);
20481990
drivers/net/ethernet/broadcom/genet/bcmgenet.h+1−2
@@ -273,6 +273,7 @@ struct bcmgenet_mib_counters { · 272 unmodified lines
273273 #define RBUF_FLTR_LEN_SHIFT 8
274274
275275 #define TBUF_CTRL 0x00
276+#define TBUF_64B_EN (1 << 0)
276277 #define TBUF_BP_MC 0x0C
277278 #define TBUF_ENERGY_CTRL 0x14
278279 #define TBUF_EEE_EN (1 << 0)
@@ -662,8 +663,6 @@ struct bcmgenet_priv { · 383 unmodified lines
662663 unsigned int irq0_stat;
663664
664665 /* HW descriptors/checksum variables */
665− bool desc_64b_en;
666− bool desc_rxchk_en;
667666 bool crc_fwd_en;
668667
669668 u32 dma_max_burst_length;
drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c+5−1
@@ -132,8 +132,12 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv, · 131 unmodified lines
132132 return -EINVAL;
133133 }
134134
135− /* disable RX */
135+ /* Can't suspend with WoL if MAC is still in reset */
136136 reg = bcmgenet_umac_readl(priv, UMAC_CMD);
137+ if (reg & CMD_SW_RESET)
138+ reg &= ~CMD_SW_RESET;
139+
140+ /* disable RX */
137141 reg &= ~CMD_RX_EN;
138142 bcmgenet_umac_writel(priv, reg, UMAC_CMD);
139143 mdelay(10);
drivers/net/ethernet/broadcom/genet/bcmmii.c+6−34
@@ -95,6 +95,12 @@ void bcmgenet_mii_setup(struct net_device *dev) · 94 unmodified lines
9595 CMD_HD_EN |
9696 CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE);
9797 reg |= cmd_bits;
98+ if (reg & CMD_SW_RESET) {
99+ reg &= ~CMD_SW_RESET;
100+ bcmgenet_umac_writel(priv, reg, UMAC_CMD);
101+ udelay(2);
102+ reg |= CMD_TX_EN | CMD_RX_EN;
103+ }
98104 bcmgenet_umac_writel(priv, reg, UMAC_CMD);
99105 } else {
100106 /* done if nothing has changed */
@@ -181,38 +187,8 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) · 80 unmodified lines
181187 const char *phy_name = NULL;
182188 u32 id_mode_dis = 0;
183189 u32 port_ctrl;
184− int bmcr = -1;
185− int ret;
186190 u32 reg;
187191
188− /* MAC clocking workaround during reset of umac state machines */
189− reg = bcmgenet_umac_readl(priv, UMAC_CMD);
190− if (reg & CMD_SW_RESET) {
191− /* An MII PHY must be isolated to prevent TXC contention */
192− if (priv->phy_interface == PHY_INTERFACE_MODE_MII) {
193− ret = phy_read(phydev, MII_BMCR);
194− if (ret >= 0) {
195− bmcr = ret;
196− ret = phy_write(phydev, MII_BMCR,
197− bmcr | BMCR_ISOLATE);
198− }
199− if (ret) {
200− netdev_err(dev, "failed to isolate PHY\n");
201− return ret;
202− }
203− }
204− /* Switch MAC clocking to RGMII generated clock */
205− bcmgenet_sys_writel(priv, PORT_MODE_EXT_GPHY, SYS_PORT_CTRL);
206− /* Ensure 5 clks with Rx disabled
207− * followed by 5 clks with Reset asserted
208− */
209− udelay(4);
210− reg &= ~(CMD_SW_RESET | CMD_LCL_LOOP_EN);
211− bcmgenet_umac_writel(priv, reg, UMAC_CMD);
212− /* Ensure 5 more clocks before Rx is enabled */
213− udelay(2);
214− }
215−
216192 switch (priv->phy_interface) {
217193 case PHY_INTERFACE_MODE_INTERNAL:
218194 phy_name = "internal PHY";
@@ -282,10 +258,6 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) · 63 unmodified lines
282258
283259 bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
284260
285− /* Restore the MII PHY after isolation */
286− if (bmcr >= 0)
287− phy_write(phydev, MII_BMCR, bmcr);
288−
289261 priv->ext_phy = !priv->internal_phy &&
290262 (priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
291263
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c+2−2
@@ -902,7 +902,7 @@ void clear_all_filters(struct adapter *adapter) · 901 unmodified lines
902902 adapter->tids.tid_tab[i];
903903
904904 if (f && (f->valid || f->pending))
905− cxgb4_del_filter(dev, i, &f->fs);
905+ cxgb4_del_filter(dev, f->tid, &f->fs);
906906 }
907907
908908 sb = t4_read_reg(adapter, LE_DB_SRVR_START_INDEX_A);
@@ -910,7 +910,7 @@ void clear_all_filters(struct adapter *adapter) · 1 unmodified line
910910 f = (struct filter_entry *)adapter->tids.tid_tab[i];
911911
912912 if (f && (f->valid || f->pending))
913− cxgb4_del_filter(dev, i, &f->fs);
913+ cxgb4_del_filter(dev, f->tid, &f->fs);
914914 }
915915 }
916916 }
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c+27−22
@@ -5381,12 +5381,11 @@ static inline bool is_x_10g_port(const struct link_config *lc) · 5380 unmodified lines
53815381 static int cfg_queues(struct adapter *adap)
53825382 {
53835383 u32 avail_qsets, avail_eth_qsets, avail_uld_qsets;
5384+ u32 i, n10g = 0, qidx = 0, n1g = 0;
5385+ u32 ncpus = num_online_cpus();
53845386 u32 niqflint, neq, num_ulds;
53855387 struct sge *s = &adap->sge;
5386− u32 i, n10g = 0, qidx = 0;
5387−#ifndef CONFIG_CHELSIO_T4_DCB
5388− int q10g = 0;
5389−#endif
5388+ u32 q10g = 0, q1g;
53905389
53915390 /* Reduce memory usage in kdump environment, disable all offload. */
53925391 if (is_kdump_kernel() || (is_uld(adap) && t4_uld_mem_alloc(adap))) {
@@ -5424,44 +5423,50 @@ static int cfg_queues(struct adapter *adap) · 31 unmodified lines
54245423 n10g += is_x_10g_port(&adap2pinfo(adap, i)->link_cfg);
54255424
54265425 avail_eth_qsets = min_t(u32, avail_qsets, MAX_ETH_QSETS);
5426+
5427+ /* We default to 1 queue per non-10G port and up to # of cores queues
5428+ * per 10G port.
5429+ */
5430+ if (n10g)
5431+ q10g = (avail_eth_qsets - (adap->params.nports - n10g)) / n10g;
5432+
5433+ n1g = adap->params.nports - n10g;
54275434 #ifdef CONFIG_CHELSIO_T4_DCB
54285435 /* For Data Center Bridging support we need to be able to support up
54295436 * to 8 Traffic Priorities; each of which will be assigned to its
54305437 * own TX Queue in order to prevent Head-Of-Line Blocking.
54315438 */
5439+ q1g = 8;
54325440 if (adap->params.nports * 8 > avail_eth_qsets) {
54335441 dev_err(adap->pdev_dev, "DCB avail_eth_qsets=%d < %d!\n",
54345442 avail_eth_qsets, adap->params.nports * 8);
54355443 return -ENOMEM;
54365444 }
54375445
5438− for_each_port(adap, i) {
5439− struct port_info *pi = adap2pinfo(adap, i);
5446+ if (adap->params.nports * ncpus < avail_eth_qsets)
5447+ q10g = max(8U, ncpus);
5448+ else
5449+ q10g = max(8U, q10g);
54405450
5441− pi->first_qset = qidx;
5442− pi->nqsets = is_kdump_kernel() ? 1 : 8;
5443− qidx += pi->nqsets;
5444− }
5445−#else /* !CONFIG_CHELSIO_T4_DCB */
5446− /* We default to 1 queue per non-10G port and up to # of cores queues
5447− * per 10G port.
5448− */
5449− if (n10g)
5450− q10g = (avail_eth_qsets - (adap->params.nports - n10g)) / n10g;
5451− if (q10g > netif_get_num_default_rss_queues())
5452− q10g = netif_get_num_default_rss_queues();
5451+ while ((q10g * n10g) > (avail_eth_qsets - n1g * q1g))
5452+ q10g--;
54535453
5454− if (is_kdump_kernel())
5454+#else /* !CONFIG_CHELSIO_T4_DCB */
5455+ q1g = 1;
5456+ q10g = min(q10g, ncpus);
5457+#endif /* !CONFIG_CHELSIO_T4_DCB */
5458+ if (is_kdump_kernel()) {
54555459 q10g = 1;
5460+ q1g = 1;
5461+ }
54565462
54575463 for_each_port(adap, i) {
54585464 struct port_info *pi = adap2pinfo(adap, i);
54595465
54605466 pi->first_qset = qidx;
5461− pi->nqsets = is_x_10g_port(&pi->link_cfg) ? q10g : 1;
5467+ pi->nqsets = is_x_10g_port(&pi->link_cfg) ? q10g : q1g;
54625468 qidx += pi->nqsets;
54635469 }
5464−#endif /* !CONFIG_CHELSIO_T4_DCB */
54655470
54665471 s->ethqsets = qidx;
54675472 s->max_ethqsets = qidx; /* MSI-X may lower it later */
@@ -5473,7 +5478,7 @@ static int cfg_queues(struct adapter *adap) · 5 unmodified lines
54735478 * capped by the number of available cores.
54745479 */
54755480 num_ulds = adap->num_uld + adap->num_ofld_uld;
5476− i = min_t(u32, MAX_OFLD_QSETS, num_online_cpus());
5481+ i = min_t(u32, MAX_OFLD_QSETS, ncpus);
54775482 avail_uld_qsets = roundup(i, adap->params.nports);
54785483 if (avail_qsets < num_ulds * adap->params.nports) {
54795484 adap->params.offload = 0;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c+3−0
@@ -246,6 +246,9 @@ static int cxgb4_ptp_fineadjtime(struct adapter *adapter, s64 delta) · 245 unmodified lines
246246 FW_PTP_CMD_PORTID_V(0));
247247 c.retval_len16 = cpu_to_be32(FW_CMD_LEN16_V(sizeof(c) / 16));
248248 c.u.ts.sc = FW_PTP_SC_ADJ_FTIME;
249+ c.u.ts.sign = (delta < 0) ? 1 : 0;
250+ if (delta < 0)
251+ delta = -delta;
249252 c.u.ts.tm = cpu_to_be64(delta);
250253
251254 err = t4_wr_mbox(adapter, adapter->mbox, &c, sizeof(c), NULL);
drivers/net/ethernet/chelsio/cxgb4/sge.c+10−42
@@ -1307,8 +1307,9 @@ static inline void *write_tso_wr(struct adapter *adap, struct sk_buff *skb, · 1306 unmodified lines
13071307 int t4_sge_eth_txq_egress_update(struct adapter *adap, struct sge_eth_txq *eq,
13081308 int maxreclaim)
13091309 {
1310+ unsigned int reclaimed, hw_cidx;
13101311 struct sge_txq *q = &eq->q;
1311− unsigned int reclaimed;
1312+ int hw_in_use;
13121313
13131314 if (!q->in_use || !__netif_tx_trylock(eq->txq))
13141315 return 0;
@@ -1316,12 +1317,17 @@ int t4_sge_eth_txq_egress_update(struct adapter *adap, struct sge_eth_txq *eq, · 1 unmodified line
13161317 /* Reclaim pending completed TX Descriptors. */
13171318 reclaimed = reclaim_completed_tx(adap, &eq->q, maxreclaim, true);
13181319
1320+ hw_cidx = ntohs(READ_ONCE(q->stat->cidx));
1321+ hw_in_use = q->pidx - hw_cidx;
1322+ if (hw_in_use < 0)
1323+ hw_in_use += q->size;
1324+
13191325 /* If the TX Queue is currently stopped and there's now more than half
13201326 * the queue available, restart it. Otherwise bail out since the rest
13211327 * of what we want do here is with the possibility of shipping any
13221328 * currently buffered Coalesced TX Work Request.
13231329 */
1324− if (netif_tx_queue_stopped(eq->txq) && txq_avail(q) > (q->size / 2)) {
1330+ if (netif_tx_queue_stopped(eq->txq) && hw_in_use < (q->size / 2)) {
13251331 netif_tx_wake_queue(eq->txq);
13261332 eq->q.restarts++;
13271333 }
@@ -1486,16 +1492,7 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev) · 158 unmodified lines
14861492 * has opened up.
14871493 */
14881494 eth_txq_stop(q);
1489−
1490− /* If we're using the SGE Doorbell Queue Timer facility, we
1491− * don't need to ask the Firmware to send us Egress Queue CIDX
1492− * Updates: the Hardware will do this automatically. And
1493− * since we send the Ingress Queue CIDX Updates to the
1494− * corresponding Ethernet Response Queue, we'll get them very
1495− * quickly.
1496− */
1497− if (!q->dbqt)
1498− wr_mid |= FW_WR_EQUEQ_F | FW_WR_EQUIQ_F;
1495+ wr_mid |= FW_WR_EQUEQ_F | FW_WR_EQUIQ_F;
14991496 }
15001497
15011498 wr = (void *)&q->q.desc[q->q.pidx];
@@ -1805,16 +1802,7 @@ static netdev_tx_t cxgb4_vf_eth_xmit(struct sk_buff *skb, · 303 unmodified lines
18051802 * has opened up.
18061803 */
18071804 eth_txq_stop(txq);
1808−
1809− /* If we're using the SGE Doorbell Queue Timer facility, we
1810− * don't need to ask the Firmware to send us Egress Queue CIDX
1811− * Updates: the Hardware will do this automatically. And
1812− * since we send the Ingress Queue CIDX Updates to the
1813− * corresponding Ethernet Response Queue, we'll get them very
1814− * quickly.
1815− */
1816− if (!txq->dbqt)
1817− wr_mid |= FW_WR_EQUEQ_F | FW_WR_EQUIQ_F;
1805+ wr_mid |= FW_WR_EQUEQ_F | FW_WR_EQUIQ_F;
18181806 }
18191807
18201808 /* Start filling in our Work Request. Note that we do _not_ handle
@@ -3370,26 +3358,6 @@ static void t4_tx_completion_handler(struct sge_rspq *rspq, · 1549 unmodified lines
33703358 }
33713359
33723360 txq = &s->ethtxq[pi->first_qset + rspq->idx];
3373−
3374− /* We've got the Hardware Consumer Index Update in the Egress Update
3375− * message. If we're using the SGE Doorbell Queue Timer mechanism,
3376− * these Egress Update messages will be our sole CIDX Updates we get
3377− * since we don't want to chew up PCIe bandwidth for both Ingress
3378− * Messages and Status Page writes. However, The code which manages
3379− * reclaiming successfully DMA'ed TX Work Requests uses the CIDX value
3380− * stored in the Status Page at the end of the TX Queue. It's easiest
3381− * to simply copy the CIDX Update value from the Egress Update message
3382− * to the Status Page. Also note that no Endian issues need to be
3383− * considered here since both are Big Endian and we're just copying
3384− * bytes consistently ...
3385− */
3386− if (txq->dbqt) {
3387− struct cpl_sge_egr_update *egr;
3388−
3389− egr = (struct cpl_sge_egr_update *)rsp;
3390− WRITE_ONCE(txq->q.stat->cidx, egr->cidx);
3391− }
3392−
33933361 t4_sge_eth_txq_egress_update(adapter, txq, -1);
33943362 }
33953363
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c+108−6
@@ -1,4 +1,5 @@
11 /* Copyright 2008 - 2016 Freescale Semiconductor Inc.
2+ * Copyright 2020 NXP
23 *
34 * Redistribution and use in source and binary forms, with or without
45 * modification, are permitted provided that the following conditions are met:
@@ -123,7 +124,22 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); · 118 unmodified lines
123124 #define FSL_QMAN_MAX_OAL 127
124125
125126 /* Default alignment for start of data in an Rx FD */
127+#ifdef CONFIG_DPAA_ERRATUM_A050385
128+/* aligning data start to 64 avoids DMA transaction splits, unless the buffer
129+ * is crossing a 4k page boundary
130+ */
131+#define DPAA_FD_DATA_ALIGNMENT (fman_has_errata_a050385() ? 64 : 16)
132+/* aligning to 256 avoids DMA transaction splits caused by 4k page boundary
133+ * crossings; also, all SG fragments except the last must have a size multiple
134+ * of 256 to avoid DMA transaction splits
135+ */
136+#define DPAA_A050385_ALIGN 256
137+#define DPAA_FD_RX_DATA_ALIGNMENT (fman_has_errata_a050385() ? \
138+ DPAA_A050385_ALIGN : 16)
139+#else
126140 #define DPAA_FD_DATA_ALIGNMENT 16
141+#define DPAA_FD_RX_DATA_ALIGNMENT DPAA_FD_DATA_ALIGNMENT
142+#endif
127143
128144 /* The DPAA requires 256 bytes reserved and mapped for the SGT */
129145 #define DPAA_SGT_SIZE 256
@@ -158,8 +174,13 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); · 28 unmodified lines
158174 #define DPAA_PARSE_RESULTS_SIZE sizeof(struct fman_prs_result)
159175 #define DPAA_TIME_STAMP_SIZE 8
160176 #define DPAA_HASH_RESULTS_SIZE 8
177+#ifdef CONFIG_DPAA_ERRATUM_A050385
178+#define DPAA_RX_PRIV_DATA_SIZE (DPAA_A050385_ALIGN - (DPAA_PARSE_RESULTS_SIZE\
179+ + DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE))
180+#else
161181 #define DPAA_RX_PRIV_DATA_SIZE (u16)(DPAA_TX_PRIV_DATA_SIZE + \
162182 dpaa_rx_extra_headroom)
183+#endif
163184
164185 #define DPAA_ETH_PCD_RXQ_NUM 128
165186
@@ -180,7 +201,12 @@ static struct dpaa_bp *dpaa_bp_array[BM_MAX_NUM_OF_POOLS]; · 14 unmodified lines
180201
181202 #define DPAA_BP_RAW_SIZE 4096
182203
204+#ifdef CONFIG_DPAA_ERRATUM_A050385
205+#define dpaa_bp_size(raw_size) (SKB_WITH_OVERHEAD(raw_size) & \
206+ ~(DPAA_A050385_ALIGN - 1))
207+#else
183208 #define dpaa_bp_size(raw_size) SKB_WITH_OVERHEAD(raw_size)
209+#endif
184210
185211 static int dpaa_max_frm;
186212
@@ -1192,7 +1218,7 @@ static int dpaa_eth_init_rx_port(struct fman_port *port, struct dpaa_bp *bp, · 1005 unmodified lines
11921218 buf_prefix_content.pass_prs_result = true;
11931219 buf_prefix_content.pass_hash_result = true;
11941220 buf_prefix_content.pass_time_stamp = true;
1195− buf_prefix_content.data_align = DPAA_FD_DATA_ALIGNMENT;
1221+ buf_prefix_content.data_align = DPAA_FD_RX_DATA_ALIGNMENT;
11961222
11971223 rx_p = &params.specific_params.rx_params;
11981224 rx_p->err_fqid = errq->fqid;
@@ -1662,6 +1688,8 @@ static u8 rx_csum_offload(const struct dpaa_priv *priv, const struct qm_fd *fd) · 463 unmodified lines
16621688 return CHECKSUM_NONE;
16631689 }
16641690
1691+#define PTR_IS_ALIGNED(x, a) (IS_ALIGNED((unsigned long)(x), (a)))
1692+
16651693 /* Build a linear skb around the received buffer.
16661694 * We are guaranteed there is enough room at the end of the data buffer to
16671695 * accommodate the shared info area of the skb.
@@ -1733,8 +1761,7 @@ static struct sk_buff *sg_fd_to_skb(const struct dpaa_priv *priv, · 65 unmodified lines
17331761
17341762 sg_addr = qm_sg_addr(&sgt[i]);
17351763 sg_vaddr = phys_to_virt(sg_addr);
1736− WARN_ON(!IS_ALIGNED((unsigned long)sg_vaddr,
1737− SMP_CACHE_BYTES));
1764+ WARN_ON(!PTR_IS_ALIGNED(sg_vaddr, SMP_CACHE_BYTES));
17381765
17391766 dma_unmap_page(priv->rx_dma_dev, sg_addr,
17401767 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
@@ -2022,6 +2049,75 @@ static inline int dpaa_xmit(struct dpaa_priv *priv, · 281 unmodified lines
20222049 return 0;
20232050 }
20242051
2052+#ifdef CONFIG_DPAA_ERRATUM_A050385
2053+int dpaa_a050385_wa(struct net_device *net_dev, struct sk_buff **s)
2054+{
2055+ struct dpaa_priv *priv = netdev_priv(net_dev);
2056+ struct sk_buff *new_skb, *skb = *s;
2057+ unsigned char *start, i;
2058+
2059+ /* check linear buffer alignment */
2060+ if (!PTR_IS_ALIGNED(skb->data, DPAA_A050385_ALIGN))
2061+ goto workaround;
2062+
2063+ /* linear buffers just need to have an aligned start */
2064+ if (!skb_is_nonlinear(skb))
2065+ return 0;
2066+
2067+ /* linear data size for nonlinear skbs needs to be aligned */
2068+ if (!IS_ALIGNED(skb_headlen(skb), DPAA_A050385_ALIGN))
2069+ goto workaround;
2070+
2071+ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2072+ skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2073+
2074+ /* all fragments need to have aligned start addresses */
2075+ if (!IS_ALIGNED(skb_frag_off(frag), DPAA_A050385_ALIGN))
2076+ goto workaround;
2077+
2078+ /* all but last fragment need to have aligned sizes */
2079+ if (!IS_ALIGNED(skb_frag_size(frag), DPAA_A050385_ALIGN) &&
2080+ (i < skb_shinfo(skb)->nr_frags - 1))
2081+ goto workaround;
2082+ }
2083+
2084+ return 0;
2085+
2086+workaround:
2087+ /* copy all the skb content into a new linear buffer */
2088+ new_skb = netdev_alloc_skb(net_dev, skb->len + DPAA_A050385_ALIGN - 1 +
2089+ priv->tx_headroom);
2090+ if (!new_skb)
2091+ return -ENOMEM;
2092+
2093+ /* NET_SKB_PAD bytes already reserved, adding up to tx_headroom */
2094+ skb_reserve(new_skb, priv->tx_headroom - NET_SKB_PAD);
2095+
2096+ /* Workaround for DPAA_A050385 requires data start to be aligned */
2097+ start = PTR_ALIGN(new_skb->data, DPAA_A050385_ALIGN);
2098+ if (start - new_skb->data != 0)
2099+ skb_reserve(new_skb, start - new_skb->data);
2100+
2101+ skb_put(new_skb, skb->len);
2102+ skb_copy_bits(skb, 0, new_skb->data, skb->len);
2103+ skb_copy_header(new_skb, skb);
2104+ new_skb->dev = skb->dev;
2105+
2106+ /* We move the headroom when we align it so we have to reset the
2107+ * network and transport header offsets relative to the new data
2108+ * pointer. The checksum offload relies on these offsets.
2109+ */
2110+ skb_set_network_header(new_skb, skb_network_offset(skb));
2111+ skb_set_transport_header(new_skb, skb_transport_offset(skb));
2112+
2113+ /* TODO: does timestamping need the result in the old skb? */
2114+ dev_kfree_skb(skb);
2115+ *s = new_skb;
2116+
2117+ return 0;
2118+}
2119+#endif
2120+
20252121 static netdev_tx_t
20262122 dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
20272123 {
@@ -2068,6 +2164,14 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev) · 40 unmodified lines
20682164 nonlinear = skb_is_nonlinear(skb);
20692165 }
20702166
2167+#ifdef CONFIG_DPAA_ERRATUM_A050385
2168+ if (unlikely(fman_has_errata_a050385())) {
2169+ if (dpaa_a050385_wa(net_dev, &skb))
2170+ goto enomem;
2171+ nonlinear = skb_is_nonlinear(skb);
2172+ }
2173+#endif
2174+
20712175 if (nonlinear) {
20722176 /* Just create a S/G fd based on the skb */
20732177 err = skb_to_sg_fd(priv, skb, &fd);
@@ -2741,9 +2845,7 @@ static inline u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl) · 667 unmodified lines
27412845 headroom = (u16)(bl->priv_data_size + DPAA_PARSE_RESULTS_SIZE +
27422846 DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE);
27432847
2744− return DPAA_FD_DATA_ALIGNMENT ? ALIGN(headroom,
2745− DPAA_FD_DATA_ALIGNMENT) :
2746− headroom;
2848+ return ALIGN(headroom, DPAA_FD_DATA_ALIGNMENT);
27472849 }
27482850
27492851 static int dpaa_eth_probe(struct platform_device *pdev)
drivers/net/ethernet/freescale/fec_main.c+3−3
@@ -2529,15 +2529,15 @@ fec_enet_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec) · 2528 unmodified lines
25292529 return -EINVAL;
25302530 }
25312531
2532− cycle = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr);
2532+ cycle = fec_enet_us_to_itr_clock(ndev, ec->rx_coalesce_usecs);
25332533 if (cycle > 0xFFFF) {
25342534 dev_err(dev, "Rx coalesced usec exceed hardware limitation\n");
25352535 return -EINVAL;
25362536 }
25372537
2538− cycle = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr);
2538+ cycle = fec_enet_us_to_itr_clock(ndev, ec->tx_coalesce_usecs);
25392539 if (cycle > 0xFFFF) {
2540− dev_err(dev, "Rx coalesced usec exceed hardware limitation\n");
2540+ dev_err(dev, "Tx coalesced usec exceed hardware limitation\n");
25412541 return -EINVAL;
25422542 }
25432543
drivers/net/ethernet/freescale/fman/Kconfig+28−0
@@ -8,3 +8,31 @@ config FSL_FMAN · 7 unmodified lines
88 help
99 Freescale Data-Path Acceleration Architecture Frame Manager
1010 (FMan) support
11+
12+config DPAA_ERRATUM_A050385
13+ bool
14+ depends on ARM64 && FSL_DPAA
15+ default y
16+ help
17+ DPAA FMan erratum A050385 software workaround implementation:
18+ align buffers, data start, SG fragment length to avoid FMan DMA
19+ splits.
20+ FMAN DMA read or writes under heavy traffic load may cause FMAN
21+ internal resource leak thus stopping further packet processing.
22+ The FMAN internal queue can overflow when FMAN splits single
23+ read or write transactions into multiple smaller transactions
24+ such that more than 17 AXI transactions are in flight from FMAN
25+ to interconnect. When the FMAN internal queue overflows, it can
26+ stall further packet processing. The issue can occur with any
27+ one of the following three conditions:
28+ 1. FMAN AXI transaction crosses 4K address boundary (Errata
29+ A010022)
30+ 2. FMAN DMA address for an AXI transaction is not 16 byte
31+ aligned, i.e. the last 4 bits of an address are non-zero
32+ 3. Scatter Gather (SG) frames have more than one SG buffer in
33+ the SG list and any one of the buffers, except the last
34+ buffer in the SG list has data size that is not a multiple
35+ of 16 bytes, i.e., other than 16, 32, 48, 64, etc.
36+ With any one of the above three conditions present, there is
37+ likelihood of stalled FMAN packet processing, especially under
38+ stress with multiple ports injecting line-rate traffic.
drivers/net/ethernet/freescale/fman/fman.c+18−0
@@ -1,5 +1,6 @@
11 /*
22 * Copyright 2008-2015 Freescale Semiconductor Inc.
3+ * Copyright 2020 NXP
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are met:
@@ -566,6 +567,10 @@ struct fman_cfg { · 560 unmodified lines
566567 u32 qmi_def_tnums_thresh;
567568 };
568569
570+#ifdef CONFIG_DPAA_ERRATUM_A050385
571+static bool fman_has_err_a050385;
572+#endif
573+
569574 static irqreturn_t fman_exceptions(struct fman *fman,
570575 enum fman_exceptions exception)
571576 {
@@ -2518,6 +2523,14 @@ struct fman *fman_bind(struct device *fm_dev) · 1946 unmodified lines
25182523 }
25192524 EXPORT_SYMBOL(fman_bind);
25202525
2526+#ifdef CONFIG_DPAA_ERRATUM_A050385
2527+bool fman_has_errata_a050385(void)
2528+{
2529+ return fman_has_err_a050385;
2530+}
2531+EXPORT_SYMBOL(fman_has_errata_a050385);
2532+#endif
2533+
25212534 static irqreturn_t fman_err_irq(int irq, void *handle)
25222535 {
25232536 struct fman *fman = (struct fman *)handle;
@@ -2845,6 +2858,11 @@ static struct fman *read_dts_node(struct platform_device *of_dev) · 321 unmodified lines
28452858 goto fman_free;
28462859 }
28472860
2861+#ifdef CONFIG_DPAA_ERRATUM_A050385
2862+ fman_has_err_a050385 =
2863+ of_property_read_bool(fm_node, "fsl,erratum-a050385");
2864+#endif
2865+
28482866 return fman;
28492867
28502868 fman_node_put:
drivers/net/ethernet/freescale/fman/fman.h+5−0
@@ -1,5 +1,6 @@
11 /*
22 * Copyright 2008-2015 Freescale Semiconductor Inc.
3+ * Copyright 2020 NXP
34 *
45 * Redistribution and use in source and binary forms, with or without
56 * modification, are permitted provided that the following conditions are met:
@@ -398,6 +399,10 @@ u16 fman_get_max_frm(void); · 392 unmodified lines
398399
399400 int fman_get_rx_extra_headroom(void);
400401
402+#ifdef CONFIG_DPAA_ERRATUM_A050385
403+bool fman_has_errata_a050385(void);
404+#endif
405+
401406 struct fman *fman_bind(struct device *dev);
402407
403408 #endif /* __FM_H */
drivers/net/ethernet/freescale/fman/fman_memac.c+1−1
@@ -782,7 +782,7 @@ int memac_adjust_link(struct fman_mac *memac, u16 speed) · 781 unmodified lines
782782 /* Set full duplex */
783783 tmp &= ~IF_MODE_HD;
784784
785− if (memac->phy_if == PHY_INTERFACE_MODE_RGMII) {
785+ if (phy_interface_mode_is_rgmii(memac->phy_if)) {
786786 /* Configure RGMII in manual mode */
787787 tmp &= ~IF_MODE_RGMII_AUTO;
788788 tmp &= ~IF_MODE_RGMII_SP_MASK;
drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h+1−0
@@ -46,6 +46,7 @@ enum HCLGE_MBX_OPCODE { · 45 unmodified lines
4646 HCLGE_MBX_PUSH_VLAN_INFO, /* (PF -> VF) push port base vlan */
4747 HCLGE_MBX_GET_MEDIA_TYPE, /* (VF -> PF) get media type */
4848 HCLGE_MBX_PUSH_PROMISC_INFO, /* (PF -> VF) push vf promisc info */
49+ HCLGE_MBX_VF_UNINIT, /* (VF -> PF) vf is unintializing */
4950
5051 HCLGE_MBX_GET_VF_FLR_STATUS = 200, /* (M7 -> PF) get vf flr status */
5152 HCLGE_MBX_PUSH_LINK_STATUS, /* (M7 -> PF) get port link status */
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c+1−1
@@ -1711,7 +1711,7 @@ static int hns3_setup_tc(struct net_device *netdev, void *type_data) · 1710 unmodified lines
17111711 netif_dbg(h, drv, netdev, "setup tc: num_tc=%u\n", tc);
17121712
17131713 return (kinfo->dcb_ops && kinfo->dcb_ops->setup_tc) ?
1714− kinfo->dcb_ops->setup_tc(h, tc, prio_tc) : -EOPNOTSUPP;
1714+ kinfo->dcb_ops->setup_tc(h, tc ? tc : 1, prio_tc) : -EOPNOTSUPP;
17151715 }
17161716
17171717 static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c+42−5
@@ -2446,10 +2446,12 @@ static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed, · 2445 unmodified lines
24462446
24472447 int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
24482448 {
2449+ struct hclge_mac *mac = &hdev->hw.mac;
24492450 int ret;
24502451
24512452 duplex = hclge_check_speed_dup(duplex, speed);
2452− if (hdev->hw.mac.speed == speed && hdev->hw.mac.duplex == duplex)
2453+ if (!mac->support_autoneg && mac->speed == speed &&
2454+ mac->duplex == duplex)
24532455 return 0;
24542456
24552457 ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);
@@ -7743,16 +7745,27 @@ static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, · 5287 unmodified lines
77437745 struct hclge_desc desc;
77447746 int ret;
77457747
7746− hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, false);
7747−
7748+ /* read current vlan filter parameter */
7749+ hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, true);
77487750 req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data;
77497751 req->vlan_type = vlan_type;
7750− req->vlan_fe = filter_en ? fe_type : 0;
77517752 req->vf_id = vf_id;
77527753
7754+ ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7755+ if (ret) {
7756+ dev_err(&hdev->pdev->dev,
7757+ "failed to get vlan filter config, ret = %d.\n", ret);
7758+ return ret;
7759+ }
7760+
7761+ /* modify and write new config parameter */
7762+ hclge_cmd_reuse_desc(&desc, false);
7763+ req->vlan_fe = filter_en ?
7764+ (req->vlan_fe | fe_type) : (req->vlan_fe & ~fe_type);
7765+
77537766 ret = hclge_cmd_send(&hdev->hw, &desc, 1);
77547767 if (ret)
7755− dev_err(&hdev->pdev->dev, "set vlan filter fail, ret =%d.\n",
7768+ dev_err(&hdev->pdev->dev, "failed to set vlan filter, ret = %d.\n",
77567769 ret);
77577770
77587771 return ret;
@@ -8270,6 +8283,7 @@ void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list) · 511 unmodified lines
82708283 kfree(vlan);
82718284 }
82728285 }
8286+ clear_bit(vport->vport_id, hdev->vf_vlan_full);
82738287 }
82748288
82758289 void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev)
@@ -8486,6 +8500,28 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid, · 210 unmodified lines
84868500 }
84878501 }
84888502
8503+static void hclge_clear_vf_vlan(struct hclge_dev *hdev)
8504+{
8505+ struct hclge_vlan_info *vlan_info;
8506+ struct hclge_vport *vport;
8507+ int ret;
8508+ int vf;
8509+
8510+ /* clear port base vlan for all vf */
8511+ for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
8512+ vport = &hdev->vport[vf];
8513+ vlan_info = &vport->port_base_vlan_cfg.vlan_info;
8514+
8515+ ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
8516+ vport->vport_id,
8517+ vlan_info->vlan_tag, true);
8518+ if (ret)
8519+ dev_err(&hdev->pdev->dev,
8520+ "failed to clear vf vlan for vf%d, ret = %d\n",
8521+ vf - HCLGE_VF_VPORT_START_NUM, ret);
8522+ }
8523+}
8524+
84898525 int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
84908526 u16 vlan_id, bool is_kill)
84918527 {
@@ -9895,6 +9931,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev) · 1403 unmodified lines
98959931 struct hclge_mac *mac = &hdev->hw.mac;
98969932
98979933 hclge_reset_vf_rate(hdev);
9934+ hclge_clear_vf_vlan(hdev);
98989935 hclge_misc_affinity_teardown(hdev);
98999936 hclge_state_uninit(hdev);
99009937
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c+1−0
@@ -799,6 +799,7 @@ void hclge_mbx_handler(struct hclge_dev *hdev) · 798 unmodified lines
799799 hclge_get_link_mode(vport, req);
800800 break;
801801 case HCLGE_MBX_GET_VF_FLR_STATUS:
802+ case HCLGE_MBX_VF_UNINIT:
802803 hclge_rm_vport_all_mac_table(vport, true,
803804 HCLGE_MAC_ADDR_UC);
804805 hclge_rm_vport_all_mac_table(vport, true,
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c+3−0
@@ -2803,6 +2803,9 @@ static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev) · 2802 unmodified lines
28032803 {
28042804 hclgevf_state_uninit(hdev);
28052805
2806+ hclgevf_send_mbx_msg(hdev, HCLGE_MBX_VF_UNINIT, 0, NULL, 0,
2807+ false, NULL, 0);
2808+
28062809 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) {
28072810 hclgevf_misc_irq_uninit(hdev);
28082811 hclgevf_uninit_msi(hdev);
drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c+4−1
@@ -389,7 +389,8 @@ static int cmdq_sync_cmd_direct_resp(struct hinic_cmdq *cmdq, · 388 unmodified lines
389389
390390 spin_unlock_bh(&cmdq->cmdq_lock);
391391
392− if (!wait_for_completion_timeout(&done, CMDQ_TIMEOUT)) {
392+ if (!wait_for_completion_timeout(&done,
393+ msecs_to_jiffies(CMDQ_TIMEOUT))) {
393394 spin_lock_bh(&cmdq->cmdq_lock);
394395
395396 if (cmdq->errcode[curr_prod_idx] == &errcode)
@@ -623,6 +624,8 @@ static int cmdq_cmd_ceq_handler(struct hinic_cmdq *cmdq, u16 ci, · 227 unmodified lines
623624 if (!CMDQ_WQE_COMPLETED(be32_to_cpu(ctrl->ctrl_info)))
624625 return -EBUSY;
625626
627+ dma_rmb();
628+
626629 errcode = CMDQ_WQE_ERRCODE_GET(be32_to_cpu(status->status_info), VAL);
627630
628631 cmdq_sync_cmd_handler(cmdq, ci, errcode);
drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c+2−49
@@ -360,50 +360,6 @@ static int wait_for_db_state(struct hinic_hwdev *hwdev) · 359 unmodified lines
360360 return -EFAULT;
361361 }
362362
363−static int wait_for_io_stopped(struct hinic_hwdev *hwdev)
364−{
365− struct hinic_cmd_io_status cmd_io_status;
366− struct hinic_hwif *hwif = hwdev->hwif;
367− struct pci_dev *pdev = hwif->pdev;
368− struct hinic_pfhwdev *pfhwdev;
369− unsigned long end;
370− u16 out_size;
371− int err;
372−
373− if (!HINIC_IS_PF(hwif) && !HINIC_IS_PPF(hwif)) {
374− dev_err(&pdev->dev, "Unsupported PCI Function type\n");
375− return -EINVAL;
376− }
377−
378− pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev);
379−
380− cmd_io_status.func_idx = HINIC_HWIF_FUNC_IDX(hwif);
381−
382− end = jiffies + msecs_to_jiffies(IO_STATUS_TIMEOUT);
383− do {
384− err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_COMM,
385− HINIC_COMM_CMD_IO_STATUS_GET,
386− &cmd_io_status, sizeof(cmd_io_status),
387− &cmd_io_status, &out_size,
388− HINIC_MGMT_MSG_SYNC);
389− if ((err) || (out_size != sizeof(cmd_io_status))) {
390− dev_err(&pdev->dev, "Failed to get IO status, ret = %d\n",
391− err);
392− return err;
393− }
394−
395− if (cmd_io_status.status == IO_STOPPED) {
396− dev_info(&pdev->dev, "IO stopped\n");
397− return 0;
398− }
399−
400− msleep(20);
401− } while (time_before(jiffies, end));
402−
403− dev_err(&pdev->dev, "Wait for IO stopped - Timeout\n");
404− return -ETIMEDOUT;
405−}
406−
407363 /**
408364 * clear_io_resource - set the IO resources as not active in the NIC
409365 * @hwdev: the NIC HW device
@@ -423,11 +379,8 @@ static int clear_io_resources(struct hinic_hwdev *hwdev) · 13 unmodified lines
423379 return -EINVAL;
424380 }
425381
426− err = wait_for_io_stopped(hwdev);
427− if (err) {
428− dev_err(&pdev->dev, "IO has not stopped yet\n");
429− return err;
430− }
382+ /* sleep 100ms to wait for firmware stopping I/O */
383+ msleep(100);
431384
432385 cmd_clear_io_res.func_idx = HINIC_HWIF_FUNC_IDX(hwif);
433386
drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c+19−7
@@ -188,7 +188,7 @@ static u8 eq_cons_idx_checksum_set(u32 val) · 187 unmodified lines
188188 * eq_update_ci - update the HW cons idx of event queue
189189 * @eq: the event queue to update the cons idx for
190190 **/
191−static void eq_update_ci(struct hinic_eq *eq)
191+static void eq_update_ci(struct hinic_eq *eq, u32 arm_state)
192192 {
193193 u32 val, addr = EQ_CONS_IDX_REG_ADDR(eq);
194194
@@ -202,7 +202,7 @@ static void eq_update_ci(struct hinic_eq *eq) · 7 unmodified lines
202202
203203 val |= HINIC_EQ_CI_SET(eq->cons_idx, IDX) |
204204 HINIC_EQ_CI_SET(eq->wrapped, WRAPPED) |
205− HINIC_EQ_CI_SET(EQ_ARMED, INT_ARMED);
205+ HINIC_EQ_CI_SET(arm_state, INT_ARMED);
206206
207207 val |= HINIC_EQ_CI_SET(eq_cons_idx_checksum_set(val), XOR_CHKSUM);
208208
@@ -235,6 +235,8 @@ static void aeq_irq_handler(struct hinic_eq *eq) · 26 unmodified lines
235235 if (HINIC_EQ_ELEM_DESC_GET(aeqe_desc, WRAPPED) == eq->wrapped)
236236 break;
237237
238+ dma_rmb();
239+
238240 event = HINIC_EQ_ELEM_DESC_GET(aeqe_desc, TYPE);
239241 if (event >= HINIC_MAX_AEQ_EVENTS) {
240242 dev_err(&pdev->dev, "Unknown AEQ Event %d\n", event);
@@ -347,7 +349,7 @@ static void eq_irq_handler(void *data) · 106 unmodified lines
347349 else if (eq->type == HINIC_CEQ)
348350 ceq_irq_handler(eq);
349351
350− eq_update_ci(eq);
352+ eq_update_ci(eq, EQ_ARMED);
351353 }
352354
353355 /**
@@ -702,7 +704,7 @@ static int init_eq(struct hinic_eq *eq, struct hinic_hwif *hwif, · 348 unmodified lines
702704 }
703705
704706 set_eq_ctrls(eq);
705− eq_update_ci(eq);
707+ eq_update_ci(eq, EQ_ARMED);
706708
707709 err = alloc_eq_pages(eq);
708710 if (err) {
@@ -752,18 +754,28 @@ err_req_irq: · 43 unmodified lines
752754 **/
753755 static void remove_eq(struct hinic_eq *eq)
754756 {
755− struct msix_entry *entry = &eq->msix_entry;
756−
757− free_irq(entry->vector, eq);
757+ hinic_set_msix_state(eq->hwif, eq->msix_entry.entry,
758+ HINIC_MSIX_DISABLE);
759+ free_irq(eq->msix_entry.vector, eq);
758760
759761 if (eq->type == HINIC_AEQ) {
760762 struct hinic_eq_work *aeq_work = &eq->aeq_work;
761763
762764 cancel_work_sync(&aeq_work->work);
765+ /* clear aeq_len to avoid hw access host memory */
766+ hinic_hwif_write_reg(eq->hwif,
767+ HINIC_CSR_AEQ_CTRL_1_ADDR(eq->q_id), 0);
763768 } else if (eq->type == HINIC_CEQ) {
764769 tasklet_kill(&eq->ceq_tasklet);
770+ /* clear ceq_len to avoid hw access host memory */
771+ hinic_hwif_write_reg(eq->hwif,
772+ HINIC_CSR_CEQ_CTRL_1_ADDR(eq->q_id), 0);
765773 }
766774
775+ /* update cons_idx to avoid invalid interrupt */
776+ eq->cons_idx = hinic_hwif_read_reg(eq->hwif, EQ_PROD_IDX_REG_ADDR(eq));
777+ eq_update_ci(eq, EQ_NOT_ARMED);
778+
767779 free_eq_pages(eq);
768780 }
769781
drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c+3−2
@@ -43,7 +43,7 @@ · 42 unmodified lines
4343
4444 #define MSG_NOT_RESP 0xFFFF
4545
46−#define MGMT_MSG_TIMEOUT 1000
46+#define MGMT_MSG_TIMEOUT 5000
4747
4848 #define mgmt_to_pfhwdev(pf_mgmt) \
4949 container_of(pf_mgmt, struct hinic_pfhwdev, pf_to_mgmt)
@@ -267,7 +267,8 @@ static int msg_to_mgmt_sync(struct hinic_pf_to_mgmt *pf_to_mgmt, · 217 unmodified lines
267267 goto unlock_sync_msg;
268268 }
269269
270− if (!wait_for_completion_timeout(recv_done, MGMT_MSG_TIMEOUT)) {
270+ if (!wait_for_completion_timeout(recv_done,
271+ msecs_to_jiffies(MGMT_MSG_TIMEOUT))) {
271272 dev_err(&pdev->dev, "MGMT timeout, MSG id = %d\n", msg_id);
272273 err = -ETIMEDOUT;
273274 goto unlock_sync_msg;
drivers/net/ethernet/huawei/hinic/hinic_rx.c+3−0
@@ -350,6 +350,9 @@ static int rxq_recv(struct hinic_rxq *rxq, int budget) · 349 unmodified lines
350350 if (!rq_wqe)
351351 break;
352352
353+ /* make sure we read rx_done before packet length */
354+ dma_rmb();
355+
353356 cqe = rq->cqe[ci];
354357 status = be32_to_cpu(cqe->status);
355358 hinic_rq_get_sge(rxq->rq, rq_wqe, ci, &sge);
drivers/net/ethernet/huawei/hinic/hinic_tx.c+3−1
@@ -45,7 +45,7 @@ · 44 unmodified lines
4545
4646 #define HW_CONS_IDX(sq) be16_to_cpu(*(u16 *)((sq)->hw_ci_addr))
4747
48−#define MIN_SKB_LEN 17
48+#define MIN_SKB_LEN 32
4949
5050 #define MAX_PAYLOAD_OFFSET 221
5151 #define TRANSPORT_OFFSET(l4_hdr, skb) ((u32)((l4_hdr) - (skb)->data))
@@ -622,6 +622,8 @@ static int free_tx_poll(struct napi_struct *napi, int budget) · 570 unmodified lines
622622 do {
623623 hw_ci = HW_CONS_IDX(sq) & wq->mask;
624624
625+ dma_rmb();
626+
625627 /* Reading a WQEBB to get real WQE size and consumer index. */
626628 sq_wqe = hinic_sq_read_wqebb(sq, &skb, &wqe_size, &sw_ci);
627629 if ((!sq_wqe) ||
drivers/net/ethernet/ibm/ibmvnic.c+22−2
@@ -2142,6 +2142,8 @@ static void __ibmvnic_reset(struct work_struct *work) · 2141 unmodified lines
21422142 {
21432143 struct ibmvnic_rwi *rwi;
21442144 struct ibmvnic_adapter *adapter;
2145+ bool saved_state = false;
2146+ unsigned long flags;
21452147 u32 reset_state;
21462148 int rc = 0;
21472149
@@ -2153,17 +2155,25 @@ static void __ibmvnic_reset(struct work_struct *work) · 5 unmodified lines
21532155 return;
21542156 }
21552157
2156− reset_state = adapter->state;
2157−
21582158 rwi = get_next_rwi(adapter);
21592159 while (rwi) {
2160+ spin_lock_irqsave(&adapter->state_lock, flags);
2161+
21602162 if (adapter->state == VNIC_REMOVING ||
21612163 adapter->state == VNIC_REMOVED) {
2164+ spin_unlock_irqrestore(&adapter->state_lock, flags);
21622165 kfree(rwi);
21632166 rc = EBUSY;
21642167 break;
21652168 }
21662169
2170+ if (!saved_state) {
2171+ reset_state = adapter->state;
2172+ adapter->state = VNIC_RESETTING;
2173+ saved_state = true;
2174+ }
2175+ spin_unlock_irqrestore(&adapter->state_lock, flags);
2176+
21672177 if (rwi->reset_reason == VNIC_RESET_CHANGE_PARAM) {
21682178 /* CHANGE_PARAM requestor holds rtnl_lock */
21692179 rc = do_change_param_reset(adapter, rwi, reset_state);
@@ -5091,6 +5101,7 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) · 2921 unmodified lines
50915101 __ibmvnic_delayed_reset);
50925102 INIT_LIST_HEAD(&adapter->rwi_list);
50935103 spin_lock_init(&adapter->rwi_lock);
5104+ spin_lock_init(&adapter->state_lock);
50945105 mutex_init(&adapter->fw_lock);
50955106 init_completion(&adapter->init_done);
50965107 init_completion(&adapter->fw_done);
@@ -5163,8 +5174,17 @@ static int ibmvnic_remove(struct vio_dev *dev) · 66 unmodified lines
51635174 {
51645175 struct net_device *netdev = dev_get_drvdata(&dev->dev);
51655176 struct ibmvnic_adapter *adapter = netdev_priv(netdev);
5177+ unsigned long flags;
5178+
5179+ spin_lock_irqsave(&adapter->state_lock, flags);
5180+ if (adapter->state == VNIC_RESETTING) {
5181+ spin_unlock_irqrestore(&adapter->state_lock, flags);
5182+ return -EBUSY;
5183+ }
51665184
51675185 adapter->state = VNIC_REMOVING;
5186+ spin_unlock_irqrestore(&adapter->state_lock, flags);
5187+
51685188 rtnl_lock();
51695189 unregister_netdevice(netdev);
51705190
drivers/net/ethernet/ibm/ibmvnic.h+5−1
@@ -941,7 +941,8 @@ enum vnic_state {VNIC_PROBING = 1, · 940 unmodified lines
941941 VNIC_CLOSING,
942942 VNIC_CLOSED,
943943 VNIC_REMOVING,
944− VNIC_REMOVED};
944+ VNIC_REMOVED,
945+ VNIC_RESETTING};
945946
946947 enum ibmvnic_reset_reason {VNIC_RESET_FAILOVER = 1,
947948 VNIC_RESET_MOBILITY,
@@ -1090,4 +1091,7 @@ struct ibmvnic_adapter { · 142 unmodified lines
10901091
10911092 struct ibmvnic_tunables desired;
10921093 struct ibmvnic_tunables fallback;
1094+
1095+ /* Used for serializatin of state field */
1096+ spinlock_t state_lock;
10931097 };
drivers/net/ethernet/marvell/mvmdio.c+1−1
@@ -347,7 +347,7 @@ static int orion_mdio_probe(struct platform_device *pdev) · 346 unmodified lines
347347 }
348348
349349
350− dev->err_interrupt = platform_get_irq(pdev, 0);
350+ dev->err_interrupt = platform_get_irq_optional(pdev, 0);
351351 if (dev->err_interrupt > 0 &&
352352 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
353353 dev_err(&pdev->dev,
drivers/net/ethernet/marvell/mvneta.c+1−2
@@ -3036,11 +3036,10 @@ static int mvneta_poll(struct napi_struct *napi, int budget) · 3035 unmodified lines
30363036 /* For the case where the last mvneta_poll did not process all
30373037 * RX packets
30383038 */
3039− rx_queue = fls(((cause_rx_tx >> 8) & 0xff));
3040−
30413039 cause_rx_tx |= pp->neta_armada3700 ? pp->cause_rx_tx :
30423040 port->cause_rx_tx;
30433041
3042+ rx_queue = fls(((cause_rx_tx >> 8) & 0xff));
30443043 if (rx_queue) {
30453044 rx_queue = rx_queue - 1;
30463045 if (pp->bm_priv)
drivers/net/ethernet/mellanox/mlx4/mcg.c+31−31
@@ -906,59 +906,59 @@ static void mlx4_err_rule(struct mlx4_dev *dev, char *str, · 905 unmodified lines
906906 int len = 0;
907907
908908 mlx4_err(dev, "%s", str);
909− len += snprintf(buf + len, BUF_SIZE - len,
910− "port = %d prio = 0x%x qp = 0x%x ",
911− rule->port, rule->priority, rule->qpn);
909+ len += scnprintf(buf + len, BUF_SIZE - len,
910+ "port = %d prio = 0x%x qp = 0x%x ",
911+ rule->port, rule->priority, rule->qpn);
912912
913913 list_for_each_entry(cur, &rule->list, list) {
914914 switch (cur->id) {
915915 case MLX4_NET_TRANS_RULE_ID_ETH:
916− len += snprintf(buf + len, BUF_SIZE - len,
917− "dmac = %pM ", &cur->eth.dst_mac);
916+ len += scnprintf(buf + len, BUF_SIZE - len,
917+ "dmac = %pM ", &cur->eth.dst_mac);
918918 if (cur->eth.ether_type)
919− len += snprintf(buf + len, BUF_SIZE - len,
920− "ethertype = 0x%x ",
921− be16_to_cpu(cur->eth.ether_type));
919+ len += scnprintf(buf + len, BUF_SIZE - len,
920+ "ethertype = 0x%x ",
921+ be16_to_cpu(cur->eth.ether_type));
922922 if (cur->eth.vlan_id)
923− len += snprintf(buf + len, BUF_SIZE - len,
924− "vlan-id = %d ",
925− be16_to_cpu(cur->eth.vlan_id));
923+ len += scnprintf(buf + len, BUF_SIZE - len,
924+ "vlan-id = %d ",
925+ be16_to_cpu(cur->eth.vlan_id));
926926 break;
927927
928928 case MLX4_NET_TRANS_RULE_ID_IPV4:
929929 if (cur->ipv4.src_ip)
930− len += snprintf(buf + len, BUF_SIZE - len,
931− "src-ip = %pI4 ",
932− &cur->ipv4.src_ip);
930+ len += scnprintf(buf + len, BUF_SIZE - len,
931+ "src-ip = %pI4 ",
932+ &cur->ipv4.src_ip);
933933 if (cur->ipv4.dst_ip)
934− len += snprintf(buf + len, BUF_SIZE - len,
935− "dst-ip = %pI4 ",
936− &cur->ipv4.dst_ip);
934+ len += scnprintf(buf + len, BUF_SIZE - len,
935+ "dst-ip = %pI4 ",
936+ &cur->ipv4.dst_ip);
937937 break;
938938
939939 case MLX4_NET_TRANS_RULE_ID_TCP:
940940 case MLX4_NET_TRANS_RULE_ID_UDP:
941941 if (cur->tcp_udp.src_port)
942− len += snprintf(buf + len, BUF_SIZE - len,
943− "src-port = %d ",
944− be16_to_cpu(cur->tcp_udp.src_port));
942+ len += scnprintf(buf + len, BUF_SIZE - len,
943+ "src-port = %d ",
944+ be16_to_cpu(cur->tcp_udp.src_port));
945945 if (cur->tcp_udp.dst_port)
946− len += snprintf(buf + len, BUF_SIZE - len,
947− "dst-port = %d ",
948− be16_to_cpu(cur->tcp_udp.dst_port));
946+ len += scnprintf(buf + len, BUF_SIZE - len,
947+ "dst-port = %d ",
948+ be16_to_cpu(cur->tcp_udp.dst_port));
949949 break;
950950
951951 case MLX4_NET_TRANS_RULE_ID_IB:
952− len += snprintf(buf + len, BUF_SIZE - len,
953− "dst-gid = %pI6\n", cur->ib.dst_gid);
954− len += snprintf(buf + len, BUF_SIZE - len,
955− "dst-gid-mask = %pI6\n",
956− cur->ib.dst_gid_msk);
952+ len += scnprintf(buf + len, BUF_SIZE - len,
953+ "dst-gid = %pI6\n", cur->ib.dst_gid);
954+ len += scnprintf(buf + len, BUF_SIZE - len,
955+ "dst-gid-mask = %pI6\n",
956+ cur->ib.dst_gid_msk);
957957 break;
958958
959959 case MLX4_NET_TRANS_RULE_ID_VXLAN:
960− len += snprintf(buf + len, BUF_SIZE - len,
961− "VNID = %d ", be32_to_cpu(cur->vxlan.vni));
960+ len += scnprintf(buf + len, BUF_SIZE - len,
961+ "VNID = %d ", be32_to_cpu(cur->vxlan.vni));
962962 break;
963963 case MLX4_NET_TRANS_RULE_ID_IPV6:
964964 break;
@@ -967,7 +967,7 @@ static void mlx4_err_rule(struct mlx4_dev *dev, char *str, · 2 unmodified lines
967967 break;
968968 }
969969 }
970− len += snprintf(buf + len, BUF_SIZE - len, "\n");
970+ len += scnprintf(buf + len, BUF_SIZE - len, "\n");
971971 mlx4_err(dev, "%s", buf);
972972
973973 if (len >= BUF_SIZE)
drivers/net/ethernet/mellanox/mlx5/core/en.h+2−0
@@ -371,6 +371,7 @@ enum { · 370 unmodified lines
371371
372372 struct mlx5e_sq_wqe_info {
373373 u8 opcode;
374+ u8 num_wqebbs;
374375
375376 /* Auxiliary data for different opcodes. */
376377 union {
@@ -1059,6 +1060,7 @@ int mlx5e_modify_rq_state(struct mlx5e_rq *rq, int curr_state, int next_state); · 682 unmodified lines
10591060 void mlx5e_activate_rq(struct mlx5e_rq *rq);
10601061 void mlx5e_deactivate_rq(struct mlx5e_rq *rq);
10611062 void mlx5e_free_rx_descs(struct mlx5e_rq *rq);
1063+void mlx5e_free_rx_in_progress_descs(struct mlx5e_rq *rq);
10621064 void mlx5e_activate_icosq(struct mlx5e_icosq *icosq);
10631065 void mlx5e_deactivate_icosq(struct mlx5e_icosq *icosq);
10641066
drivers/net/ethernet/mellanox/mlx5/core/en/health.h+1−2
@@ -10,8 +10,7 @@ · 9 unmodified lines
1010
1111 static inline bool cqe_syndrome_needs_recover(u8 syndrome)
1212 {
13− return syndrome == MLX5_CQE_SYNDROME_LOCAL_LENGTH_ERR ||
14− syndrome == MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR ||
13+ return syndrome == MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR ||
1514 syndrome == MLX5_CQE_SYNDROME_LOCAL_PROT_ERR ||
1615 syndrome == MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
1716 }
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c+1−1
@@ -90,7 +90,7 @@ static int mlx5e_rx_reporter_err_icosq_cqe_recover(void *ctx) · 89 unmodified lines
9090 goto out;
9191
9292 mlx5e_reset_icosq_cc_pc(icosq);
93− mlx5e_free_rx_descs(rq);
93+ mlx5e_free_rx_in_progress_descs(rq);
9494 clear_bit(MLX5E_SQ_STATE_RECOVERING, &icosq->state);
9595 mlx5e_activate_icosq(icosq);
9696 mlx5e_activate_rq(rq);
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h+4−2
@@ -181,10 +181,12 @@ mlx5e_tx_dma_unmap(struct device *pdev, struct mlx5e_sq_dma *dma) · 180 unmodified lines
181181
182182 static inline void mlx5e_rqwq_reset(struct mlx5e_rq *rq)
183183 {
184− if (rq->wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ)
184+ if (rq->wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ) {
185185 mlx5_wq_ll_reset(&rq->mpwqe.wq);
186− else
186+ rq->mpwqe.actual_wq_head = 0;
187+ } else {
187188 mlx5_wq_cyc_reset(&rq->wqe.wq);
189+ }
188190 }
189191
190192 /* SW parser related functions */
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h+2−2
@@ -38,8 +38,8 @@ enum { · 37 unmodified lines
3838
3939 enum {
4040 MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_START = 0,
41− MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 1,
42− MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 2,
41+ MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 1,
42+ MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 2,
4343 };
4444
4545 struct mlx5e_ktls_offload_context_tx {
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c+1−1
@@ -218,7 +218,7 @@ tx_sync_info_get(struct mlx5e_ktls_offload_context_tx *priv_tx, · 217 unmodified lines
218218 * this packet was already acknowledged and its record info
219219 * was released.
220220 */
221− ends_before = before(tcp_seq + datalen, tls_record_start_seq(record));
221+ ends_before = before(tcp_seq + datalen - 1, tls_record_start_seq(record));
222222
223223 if (unlikely(tls_record_is_start_marker(record))) {
224224 ret = ends_before ? MLX5E_KTLS_SYNC_SKIP_NO_DATA : MLX5E_KTLS_SYNC_FAIL;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+24−7
@@ -813,6 +813,29 @@ int mlx5e_wait_for_min_rx_wqes(struct mlx5e_rq *rq, int wait_time) · 812 unmodified lines
813813 return -ETIMEDOUT;
814814 }
815815
816+void mlx5e_free_rx_in_progress_descs(struct mlx5e_rq *rq)
817+{
818+ struct mlx5_wq_ll *wq;
819+ u16 head;
820+ int i;
821+
822+ if (rq->wq_type != MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ)
823+ return;
824+
825+ wq = &rq->mpwqe.wq;
826+ head = wq->head;
827+
828+ /* Outstanding UMR WQEs (in progress) start at wq->head */
829+ for (i = 0; i < rq->mpwqe.umr_in_progress; i++) {
830+ rq->dealloc_wqe(rq, head);
831+ head = mlx5_wq_ll_get_wqe_next_ix(wq, head);
832+ }
833+
834+ rq->mpwqe.actual_wq_head = wq->head;
835+ rq->mpwqe.umr_in_progress = 0;
836+ rq->mpwqe.umr_completed = 0;
837+}
838+
816839 void mlx5e_free_rx_descs(struct mlx5e_rq *rq)
817840 {
818841 __be16 wqe_ix_be;
@@ -820,14 +843,8 @@ void mlx5e_free_rx_descs(struct mlx5e_rq *rq) · 1 unmodified line
820843
821844 if (rq->wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ) {
822845 struct mlx5_wq_ll *wq = &rq->mpwqe.wq;
823− u16 head = wq->head;
824− int i;
825846
826− /* Outstanding UMR WQEs (in progress) start at wq->head */
827− for (i = 0; i < rq->mpwqe.umr_in_progress; i++) {
828− rq->dealloc_wqe(rq, head);
829− head = mlx5_wq_ll_get_wqe_next_ix(wq, head);
830− }
847+ mlx5e_free_rx_in_progress_descs(rq);
831848
832849 while (!mlx5_wq_ll_is_empty(wq)) {
833850 struct mlx5e_rx_wqe_ll *wqe;
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+5−6
@@ -477,6 +477,7 @@ static inline void mlx5e_fill_icosq_frag_edge(struct mlx5e_icosq *sq, · 476 unmodified lines
477477 /* fill sq frag edge with nops to avoid wqe wrapping two pages */
478478 for (; wi < edge_wi; wi++) {
479479 wi->opcode = MLX5_OPCODE_NOP;
480+ wi->num_wqebbs = 1;
480481 mlx5e_post_nop(wq, sq->sqn, &sq->pc);
481482 }
482483 }
@@ -525,6 +526,7 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix) · 42 unmodified lines
525526 umr_wqe->uctrl.xlt_offset = cpu_to_be16(xlt_offset);
526527
527528 sq->db.ico_wqe[pi].opcode = MLX5_OPCODE_UMR;
529+ sq->db.ico_wqe[pi].num_wqebbs = MLX5E_UMR_WQEBBS;
528530 sq->db.ico_wqe[pi].umr.rq = rq;
529531 sq->pc += MLX5E_UMR_WQEBBS;
530532
@@ -621,6 +623,7 @@ void mlx5e_poll_ico_cq(struct mlx5e_cq *cq) · 90 unmodified lines
621623
622624 ci = mlx5_wq_cyc_ctr2ix(&sq->wq, sqcc);
623625 wi = &sq->db.ico_wqe[ci];
626+ sqcc += wi->num_wqebbs;
624627
625628 if (last_wqe && unlikely(get_cqe_opcode(cqe) != MLX5_CQE_REQ)) {
626629 netdev_WARN_ONCE(cq->channel->netdev,
@@ -631,16 +634,12 @@ void mlx5e_poll_ico_cq(struct mlx5e_cq *cq) · 4 unmodified lines
631634 break;
632635 }
633636
634− if (likely(wi->opcode == MLX5_OPCODE_UMR)) {
635− sqcc += MLX5E_UMR_WQEBBS;
637+ if (likely(wi->opcode == MLX5_OPCODE_UMR))
636638 wi->umr.rq->mpwqe.umr_completed++;
637− } else if (likely(wi->opcode == MLX5_OPCODE_NOP)) {
638− sqcc++;
639− } else {
639+ else if (unlikely(wi->opcode != MLX5_OPCODE_NOP))
640640 netdev_WARN_ONCE(cq->channel->netdev,
641641 "Bad OPCODE in ICOSQ WQE info: 0x%x\n",
642642 wi->opcode);
643− }
644643
645644 } while (!last_wqe);
646645
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+3−2
@@ -2476,10 +2476,11 @@ static int offload_pedit_fields(struct pedit_headers_action *hdrs, · 2475 unmodified lines
24762476 continue;
24772477
24782478 if (f->field_bsize == 32) {
2479− mask_be32 = *(__be32 *)&mask;
2479+ mask_be32 = (__be32)mask;
24802480 mask = (__force unsigned long)cpu_to_le32(be32_to_cpu(mask_be32));
24812481 } else if (f->field_bsize == 16) {
2482− mask_be16 = *(__be16 *)&mask;
2482+ mask_be32 = (__be32)mask;
2483+ mask_be16 = *(__be16 *)&mask_be32;
24832484 mask = (__force unsigned long)cpu_to_le16(be16_to_cpu(mask_be16));
24842485 }
24852486
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c+1−0
@@ -78,6 +78,7 @@ void mlx5e_trigger_irq(struct mlx5e_icosq *sq) · 77 unmodified lines
7878 u16 pi = mlx5_wq_cyc_ctr2ix(wq, sq->pc);
7979
8080 sq->db.ico_wqe[pi].opcode = MLX5_OPCODE_NOP;
81+ sq->db.ico_wqe[pi].num_wqebbs = 1;
8182 nopwqe = mlx5e_post_nop(wq, sq->sqn, &sq->pc);
8283 mlx5e_notify_hw(wq, sq->pc, sq->uar_map, &nopwqe->ctrl);
8384 }
drivers/net/ethernet/mellanox/mlx5/core/lag.c+3−1
@@ -615,8 +615,10 @@ void mlx5_lag_remove(struct mlx5_core_dev *dev) · 614 unmodified lines
615615 break;
616616
617617 if (i == MLX5_MAX_PORTS) {
618− if (ldev->nb.notifier_call)
618+ if (ldev->nb.notifier_call) {
619619 unregister_netdevice_notifier_net(&init_net, &ldev->nb);
620+ ldev->nb.notifier_call = NULL;
621+ }
620622 mlx5_lag_mp_cleanup(ldev);
621623 cancel_delayed_work_sync(&ldev->bond_work);
622624 mlx5_lag_dev_free(ldev);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c+0−1
@@ -933,7 +933,6 @@ static int dr_actions_l2_rewrite(struct mlx5dr_domain *dmn, · 932 unmodified lines
933933
934934 action->rewrite.data = (void *)ops;
935935 action->rewrite.num_of_actions = i;
936− action->rewrite.chunk->byte_size = i * sizeof(*ops);
937936
938937 ret = mlx5dr_send_postsend_action(dmn, action);
939938 if (ret) {
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c+2−1
@@ -558,7 +558,8 @@ int mlx5dr_send_postsend_action(struct mlx5dr_domain *dmn, · 557 unmodified lines
558558 int ret;
559559
560560 send_info.write.addr = (uintptr_t)action->rewrite.data;
561− send_info.write.length = action->rewrite.chunk->byte_size;
561+ send_info.write.length = action->rewrite.num_of_actions *
562+ DR_MODIFY_ACTION_SIZE;
562563 send_info.write.lkey = 0;
563564 send_info.remote_addr = action->rewrite.chunk->mr_addr;
564565 send_info.rkey = action->rewrite.chunk->rkey;
drivers/net/ethernet/mellanox/mlx5/core/vport.c+3−0
@@ -1071,6 +1071,9 @@ int mlx5_core_modify_hca_vport_context(struct mlx5_core_dev *dev, · 1070 unmodified lines
10711071 MLX5_SET64(hca_vport_context, ctx, port_guid, req->port_guid);
10721072 if (req->field_select & MLX5_HCA_VPORT_SEL_NODE_GUID)
10731073 MLX5_SET64(hca_vport_context, ctx, node_guid, req->node_guid);
1074+ MLX5_SET(hca_vport_context, ctx, cap_mask1, req->cap_mask1);
1075+ MLX5_SET(hca_vport_context, ctx, cap_mask1_field_select,
1076+ req->cap_mask1_perm);
10741077 err = mlx5_cmd_exec(dev, in, in_sz, out, sizeof(out));
10751078 ex:
10761079 kfree(in);
drivers/net/ethernet/mellanox/mlxsw/pci.c+39−11
@@ -1322,36 +1322,64 @@ static void mlxsw_pci_mbox_free(struct mlxsw_pci *mlxsw_pci, · 1321 unmodified lines
13221322 mbox->mapaddr);
13231323 }
13241324
1325−static int mlxsw_pci_sw_reset(struct mlxsw_pci *mlxsw_pci,
1326− const struct pci_device_id *id)
1325+static int mlxsw_pci_sys_ready_wait(struct mlxsw_pci *mlxsw_pci,
1326+ const struct pci_device_id *id,
1327+ u32 *p_sys_status)
13271328 {
13281329 unsigned long end;
1329− char mrsr_pl[MLXSW_REG_MRSR_LEN];
1330− int err;
1330+ u32 val;
13311331
1332− mlxsw_reg_mrsr_pack(mrsr_pl);
1333− err = mlxsw_reg_write(mlxsw_pci->core, MLXSW_REG(mrsr), mrsr_pl);
1334− if (err)
1335− return err;
13361332 if (id->device == PCI_DEVICE_ID_MELLANOX_SWITCHX2) {
13371333 msleep(MLXSW_PCI_SW_RESET_TIMEOUT_MSECS);
13381334 return 0;
13391335 }
13401336
1341− /* We must wait for the HW to become responsive once again. */
1337+ /* We must wait for the HW to become responsive. */
13421338 msleep(MLXSW_PCI_SW_RESET_WAIT_MSECS);
13431339
13441340 end = jiffies + msecs_to_jiffies(MLXSW_PCI_SW_RESET_TIMEOUT_MSECS);
13451341 do {
1346− u32 val = mlxsw_pci_read32(mlxsw_pci, FW_READY);
1347−
1342+ val = mlxsw_pci_read32(mlxsw_pci, FW_READY);
13481343 if ((val & MLXSW_PCI_FW_READY_MASK) == MLXSW_PCI_FW_READY_MAGIC)
13491344 return 0;
13501345 cond_resched();
13511346 } while (time_before(jiffies, end));
1347+
1348+ *p_sys_status = val & MLXSW_PCI_FW_READY_MASK;
1349+
13521350 return -EBUSY;
13531351 }
13541352
1353+static int mlxsw_pci_sw_reset(struct mlxsw_pci *mlxsw_pci,
1354+ const struct pci_device_id *id)
1355+{
1356+ struct pci_dev *pdev = mlxsw_pci->pdev;
1357+ char mrsr_pl[MLXSW_REG_MRSR_LEN];
1358+ u32 sys_status;
1359+ int err;
1360+
1361+ err = mlxsw_pci_sys_ready_wait(mlxsw_pci, id, &sys_status);
1362+ if (err) {
1363+ dev_err(&pdev->dev, "Failed to reach system ready status before reset. Status is 0x%x\n",
1364+ sys_status);
1365+ return err;
1366+ }
1367+
1368+ mlxsw_reg_mrsr_pack(mrsr_pl);
1369+ err = mlxsw_reg_write(mlxsw_pci->core, MLXSW_REG(mrsr), mrsr_pl);
1370+ if (err)
1371+ return err;
1372+
1373+ err = mlxsw_pci_sys_ready_wait(mlxsw_pci, id, &sys_status);
1374+ if (err) {
1375+ dev_err(&pdev->dev, "Failed to reach system ready status after reset. Status is 0x%x\n",
1376+ sys_status);
1377+ return err;
1378+ }
1379+
1380+ return 0;
1381+}
1382+
13551383 static int mlxsw_pci_alloc_irq_vectors(struct mlxsw_pci *mlxsw_pci)
13561384 {
13571385 int err;
drivers/net/ethernet/mellanox/mlxsw/reg.h+1−1
@@ -3572,7 +3572,7 @@ MLXSW_ITEM32(reg, qeec, mase, 0x10, 31, 1); · 3571 unmodified lines
35723572 * When in bytes mode, value is specified in units of 1000bps.
35733573 * Access: RW
35743574 */
3575−MLXSW_ITEM32(reg, qeec, max_shaper_rate, 0x10, 0, 28);
3575+MLXSW_ITEM32(reg, qeec, max_shaper_rate, 0x10, 0, 31);
35763576
35773577 /* reg_qeec_de
35783578 * DWRR configuration enable. Enables configuration of the dwrr and
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c+4−4
@@ -637,12 +637,12 @@ static int mlxsw_sp_mr_vif_resolve(struct mlxsw_sp_mr_table *mr_table, · 636 unmodified lines
637637 return 0;
638638
639639 err_erif_unresolve:
640− list_for_each_entry_from_reverse(erve, &mr_vif->route_evif_list,
641− vif_node)
640+ list_for_each_entry_continue_reverse(erve, &mr_vif->route_evif_list,
641+ vif_node)
642642 mlxsw_sp_mr_route_evif_unresolve(mr_table, erve);
643643 err_irif_unresolve:
644− list_for_each_entry_from_reverse(irve, &mr_vif->route_ivif_list,
645− vif_node)
644+ list_for_each_entry_continue_reverse(irve, &mr_vif->route_ivif_list,
645+ vif_node)
646646 mlxsw_sp_mr_route_ivif_unresolve(mr_table, irve);
647647 mr_vif->rif = NULL;
648648 return err;
drivers/net/ethernet/micrel/ks8851_mll.c+52−4
@@ -156,6 +156,50 @@ static int msg_enable; · 155 unmodified lines
156156 * chip is busy transferring packet data (RX/TX FIFO accesses).
157157 */
158158
159+/**
160+ * ks_check_endian - Check whether endianness of the bus is correct
161+ * @ks : The chip information
162+ *
163+ * The KS8851-16MLL EESK pin allows selecting the endianness of the 16bit
164+ * bus. To maintain optimum performance, the bus endianness should be set
165+ * such that it matches the endianness of the CPU.
166+ */
167+
168+static int ks_check_endian(struct ks_net *ks)
169+{
170+ u16 cider;
171+
172+ /*
173+ * Read CIDER register first, however read it the "wrong" way around.
174+ * If the endian strap on the KS8851-16MLL in incorrect and the chip
175+ * is operating in different endianness than the CPU, then the meaning
176+ * of BE[3:0] byte-enable bits is also swapped such that:
177+ * BE[3,2,1,0] becomes BE[1,0,3,2]
178+ *
179+ * Luckily for us, the byte-enable bits are the top four MSbits of
180+ * the address register and the CIDER register is at offset 0xc0.
181+ * Hence, by reading address 0xc0c0, which is not impacted by endian
182+ * swapping, we assert either BE[3:2] or BE[1:0] while reading the
183+ * CIDER register.
184+ *
185+ * If the bus configuration is correct, reading 0xc0c0 asserts
186+ * BE[3:2] and this read returns 0x0000, because to read register
187+ * with bottom two LSbits of address set to 0, BE[1:0] must be
188+ * asserted.
189+ *
190+ * If the bus configuration is NOT correct, reading 0xc0c0 asserts
191+ * BE[1:0] and this read returns non-zero 0x8872 value.
192+ */
193+ iowrite16(BE3 | BE2 | KS_CIDER, ks->hw_addr_cmd);
194+ cider = ioread16(ks->hw_addr);
195+ if (!cider)
196+ return 0;
197+
198+ netdev_err(ks->netdev, "incorrect EESK endian strap setting\n");
199+
200+ return -EINVAL;
201+}
202+
159203 /**
160204 * ks_rdreg16 - read 16 bit register from device
161205 * @ks : The chip information
@@ -166,7 +210,7 @@ static int msg_enable; · 4 unmodified lines
166210
167211 static u16 ks_rdreg16(struct ks_net *ks, int offset)
168212 {
169− ks->cmd_reg_cache = (u16)offset | ((BE3 | BE2) >> (offset & 0x02));
213+ ks->cmd_reg_cache = (u16)offset | ((BE1 | BE0) << (offset & 0x02));
170214 iowrite16(ks->cmd_reg_cache, ks->hw_addr_cmd);
171215 return ioread16(ks->hw_addr);
172216 }
@@ -181,7 +225,7 @@ static u16 ks_rdreg16(struct ks_net *ks, int offset) · 8 unmodified lines
181225
182226 static void ks_wrreg16(struct ks_net *ks, int offset, u16 value)
183227 {
184− ks->cmd_reg_cache = (u16)offset | ((BE3 | BE2) >> (offset & 0x02));
228+ ks->cmd_reg_cache = (u16)offset | ((BE1 | BE0) << (offset & 0x02));
185229 iowrite16(ks->cmd_reg_cache, ks->hw_addr_cmd);
186230 iowrite16(value, ks->hw_addr);
187231 }
@@ -197,7 +241,7 @@ static inline void ks_inblk(struct ks_net *ks, u16 *wptr, u32 len) · 9 unmodified lines
197241 {
198242 len >>= 1;
199243 while (len--)
200− *wptr++ = be16_to_cpu(ioread16(ks->hw_addr));
244+ *wptr++ = (u16)ioread16(ks->hw_addr);
201245 }
202246
203247 /**
@@ -211,7 +255,7 @@ static inline void ks_outblk(struct ks_net *ks, u16 *wptr, u32 len) · 7 unmodified lines
211255 {
212256 len >>= 1;
213257 while (len--)
214− iowrite16(cpu_to_be16(*wptr++), ks->hw_addr);
258+ iowrite16(*wptr++, ks->hw_addr);
215259 }
216260
217261 static void ks_disable_int(struct ks_net *ks)
@@ -1218,6 +1262,10 @@ static int ks8851_probe(struct platform_device *pdev) · 1000 unmodified lines
12181262 goto err_free;
12191263 }
12201264
1265+ err = ks_check_endian(ks);
1266+ if (err)
1267+ goto err_free;
1268+
12211269 netdev->irq = platform_get_irq(pdev, 0);
12221270
12231271 if ((int)netdev->irq < 0) {
drivers/net/ethernet/mscc/ocelot.c+17−11
@@ -2176,24 +2176,29 @@ static int ocelot_init_timestamp(struct ocelot *ocelot) · 2175 unmodified lines
21762176 return 0;
21772177 }
21782178
2179−static void ocelot_port_set_mtu(struct ocelot *ocelot, int port, size_t mtu)
2179+/* Configure the maximum SDU (L2 payload) on RX to the value specified in @sdu.
2180+ * The length of VLAN tags is accounted for automatically via DEV_MAC_TAGS_CFG.
2181+ */
2182+static void ocelot_port_set_maxlen(struct ocelot *ocelot, int port, size_t sdu)
21802183 {
21812184 struct ocelot_port *ocelot_port = ocelot->ports[port];
2185+ int maxlen = sdu + ETH_HLEN + ETH_FCS_LEN;
21822186 int atop_wm;
21832187
2184− ocelot_port_writel(ocelot_port, mtu, DEV_MAC_MAXLEN_CFG);
2188+ ocelot_port_writel(ocelot_port, maxlen, DEV_MAC_MAXLEN_CFG);
21852189
21862190 /* Set Pause WM hysteresis
2187− * 152 = 6 * mtu / OCELOT_BUFFER_CELL_SZ
2188− * 101 = 4 * mtu / OCELOT_BUFFER_CELL_SZ
2191+ * 152 = 6 * maxlen / OCELOT_BUFFER_CELL_SZ
2192+ * 101 = 4 * maxlen / OCELOT_BUFFER_CELL_SZ
21892193 */
21902194 ocelot_write_rix(ocelot, SYS_PAUSE_CFG_PAUSE_ENA |
21912195 SYS_PAUSE_CFG_PAUSE_STOP(101) |
21922196 SYS_PAUSE_CFG_PAUSE_START(152), SYS_PAUSE_CFG, port);
21932197
21942198 /* Tail dropping watermark */
2195− atop_wm = (ocelot->shared_queue_sz - 9 * mtu) / OCELOT_BUFFER_CELL_SZ;
2196− ocelot_write_rix(ocelot, ocelot_wm_enc(9 * mtu),
2199+ atop_wm = (ocelot->shared_queue_sz - 9 * maxlen) /
2200+ OCELOT_BUFFER_CELL_SZ;
2201+ ocelot_write_rix(ocelot, ocelot_wm_enc(9 * maxlen),
21972202 SYS_ATOP, port);
21982203 ocelot_write(ocelot, ocelot_wm_enc(atop_wm), SYS_ATOP_TOT_CFG);
21992204 }
@@ -2222,9 +2227,10 @@ void ocelot_init_port(struct ocelot *ocelot, int port) · 22 unmodified lines
22222227 DEV_MAC_HDX_CFG);
22232228
22242229 /* Set Max Length and maximum tags allowed */
2225− ocelot_port_set_mtu(ocelot, port, VLAN_ETH_FRAME_LEN);
2230+ ocelot_port_set_maxlen(ocelot, port, ETH_DATA_LEN);
22262231 ocelot_port_writel(ocelot_port, DEV_MAC_TAGS_CFG_TAG_ID(ETH_P_8021AD) |
22272232 DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |
2233+ DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA |
22282234 DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA,
22292235 DEV_MAC_TAGS_CFG);
22302236
@@ -2310,18 +2316,18 @@ void ocelot_set_cpu_port(struct ocelot *ocelot, int cpu, · 79 unmodified lines
23102316 * Only one port can be an NPI at the same time.
23112317 */
23122318 if (cpu < ocelot->num_phys_ports) {
2313− int mtu = VLAN_ETH_FRAME_LEN + OCELOT_TAG_LEN;
2319+ int sdu = ETH_DATA_LEN + OCELOT_TAG_LEN;
23142320
23152321 ocelot_write(ocelot, QSYS_EXT_CPU_CFG_EXT_CPUQ_MSK_M |
23162322 QSYS_EXT_CPU_CFG_EXT_CPU_PORT(cpu),
23172323 QSYS_EXT_CPU_CFG);
23182324
23192325 if (injection == OCELOT_TAG_PREFIX_SHORT)
2320− mtu += OCELOT_SHORT_PREFIX_LEN;
2326+ sdu += OCELOT_SHORT_PREFIX_LEN;
23212327 else if (injection == OCELOT_TAG_PREFIX_LONG)
2322− mtu += OCELOT_LONG_PREFIX_LEN;
2328+ sdu += OCELOT_LONG_PREFIX_LEN;
23232329
2324− ocelot_port_set_mtu(ocelot, cpu, mtu);
2330+ ocelot_port_set_maxlen(ocelot, cpu, sdu);
23252331 }
23262332
23272333 /* CPU port Injection/Extraction configuration */
drivers/net/ethernet/neterion/vxge/vxge-config.h+1−1
@@ -2045,7 +2045,7 @@ vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask); · 2044 unmodified lines
20452045 if ((level >= VXGE_ERR && VXGE_COMPONENT_LL & VXGE_DEBUG_ERR_MASK) || \
20462046 (level >= VXGE_TRACE && VXGE_COMPONENT_LL & VXGE_DEBUG_TRACE_MASK))\
20472047 if ((mask & VXGE_DEBUG_MASK) == mask) \
2048− printk(fmt "\n", __VA_ARGS__); \
2048+ printk(fmt "\n", ##__VA_ARGS__); \
20492049 } while (0)
20502050 #else
20512051 #define vxge_debug_ll(level, mask, fmt, ...)
drivers/net/ethernet/neterion/vxge/vxge-main.h+7−7
@@ -452,49 +452,49 @@ int vxge_fw_upgrade(struct vxgedev *vdev, char *fw_name, int override); · 451 unmodified lines
452452
453453 #if (VXGE_DEBUG_LL_CONFIG & VXGE_DEBUG_MASK)
454454 #define vxge_debug_ll_config(level, fmt, ...) \
455− vxge_debug_ll(level, VXGE_DEBUG_LL_CONFIG, fmt, __VA_ARGS__)
455+ vxge_debug_ll(level, VXGE_DEBUG_LL_CONFIG, fmt, ##__VA_ARGS__)
456456 #else
457457 #define vxge_debug_ll_config(level, fmt, ...)
458458 #endif
459459
460460 #if (VXGE_DEBUG_INIT & VXGE_DEBUG_MASK)
461461 #define vxge_debug_init(level, fmt, ...) \
462− vxge_debug_ll(level, VXGE_DEBUG_INIT, fmt, __VA_ARGS__)
462+ vxge_debug_ll(level, VXGE_DEBUG_INIT, fmt, ##__VA_ARGS__)
463463 #else
464464 #define vxge_debug_init(level, fmt, ...)
465465 #endif
466466
467467 #if (VXGE_DEBUG_TX & VXGE_DEBUG_MASK)
468468 #define vxge_debug_tx(level, fmt, ...) \
469− vxge_debug_ll(level, VXGE_DEBUG_TX, fmt, __VA_ARGS__)
469+ vxge_debug_ll(level, VXGE_DEBUG_TX, fmt, ##__VA_ARGS__)
470470 #else
471471 #define vxge_debug_tx(level, fmt, ...)
472472 #endif
473473
474474 #if (VXGE_DEBUG_RX & VXGE_DEBUG_MASK)
475475 #define vxge_debug_rx(level, fmt, ...) \
476− vxge_debug_ll(level, VXGE_DEBUG_RX, fmt, __VA_ARGS__)
476+ vxge_debug_ll(level, VXGE_DEBUG_RX, fmt, ##__VA_ARGS__)
477477 #else
478478 #define vxge_debug_rx(level, fmt, ...)
479479 #endif
480480
481481 #if (VXGE_DEBUG_MEM & VXGE_DEBUG_MASK)
482482 #define vxge_debug_mem(level, fmt, ...) \
483− vxge_debug_ll(level, VXGE_DEBUG_MEM, fmt, __VA_ARGS__)
483+ vxge_debug_ll(level, VXGE_DEBUG_MEM, fmt, ##__VA_ARGS__)
484484 #else
485485 #define vxge_debug_mem(level, fmt, ...)
486486 #endif
487487
488488 #if (VXGE_DEBUG_ENTRYEXIT & VXGE_DEBUG_MASK)
489489 #define vxge_debug_entryexit(level, fmt, ...) \
490− vxge_debug_ll(level, VXGE_DEBUG_ENTRYEXIT, fmt, __VA_ARGS__)
490+ vxge_debug_ll(level, VXGE_DEBUG_ENTRYEXIT, fmt, ##__VA_ARGS__)
491491 #else
492492 #define vxge_debug_entryexit(level, fmt, ...)
493493 #endif
494494
495495 #if (VXGE_DEBUG_INTR & VXGE_DEBUG_MASK)
496496 #define vxge_debug_intr(level, fmt, ...) \
497− vxge_debug_ll(level, VXGE_DEBUG_INTR, fmt, __VA_ARGS__)
497+ vxge_debug_ll(level, VXGE_DEBUG_INTR, fmt, ##__VA_ARGS__)
498498 #else
499499 #define vxge_debug_intr(level, fmt, ...)
500500 #endif
drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c+4−4
@@ -616,7 +616,7 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface) · 615 unmodified lines
616616 if (bar->iomem) {
617617 int pf;
618618
619− msg += snprintf(msg, end - msg, "0.0: General/MSI-X SRAM, ");
619+ msg += scnprintf(msg, end - msg, "0.0: General/MSI-X SRAM, ");
620620 atomic_inc(&bar->refcnt);
621621 bars_free--;
622622
@@ -661,7 +661,7 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface) · 38 unmodified lines
661661
662662 /* Configure, and lock, BAR0.1 for PCIe XPB (MSI-X PBA) */
663663 bar = &nfp->bar[1];
664− msg += snprintf(msg, end - msg, "0.1: PCIe XPB/MSI-X PBA, ");
664+ msg += scnprintf(msg, end - msg, "0.1: PCIe XPB/MSI-X PBA, ");
665665 atomic_inc(&bar->refcnt);
666666 bars_free--;
667667
@@ -680,8 +680,8 @@ static int enable_bars(struct nfp6000_pcie *nfp, u16 interface) · 12 unmodified lines
680680 bar->iomem = ioremap(nfp_bar_resource_start(bar),
681681 nfp_bar_resource_len(bar));
682682 if (bar->iomem) {
683− msg += snprintf(msg, end - msg,
684− "0.%d: Explicit%d, ", 4 + i, i);
683+ msg += scnprintf(msg, end - msg,
684+ "0.%d: Explicit%d, ", 4 + i, i);
685685 atomic_inc(&bar->refcnt);
686686 bars_free--;
687687
drivers/net/ethernet/pensando/ionic/ionic_if.h+1−1
@@ -1,4 +1,4 @@
1−/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB OR BSD-2-Clause */
1+/* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) OR BSD-2-Clause */
22 /* Copyright (c) 2017-2019 Pensando Systems, Inc. All rights reserved. */
33
44 #ifndef _IONIC_IF_H_
drivers/net/ethernet/pensando/ionic/ionic_lif.c+11−11
@@ -948,18 +948,18 @@ static void ionic_lif_rx_mode(struct ionic_lif *lif, unsigned int rx_mode) · 947 unmodified lines
948948 int i;
949949 #define REMAIN(__x) (sizeof(buf) - (__x))
950950
951− i = snprintf(buf, sizeof(buf), "rx_mode 0x%04x -> 0x%04x:",
952− lif->rx_mode, rx_mode);
951+ i = scnprintf(buf, sizeof(buf), "rx_mode 0x%04x -> 0x%04x:",
952+ lif->rx_mode, rx_mode);
953953 if (rx_mode & IONIC_RX_MODE_F_UNICAST)
954− i += snprintf(&buf[i], REMAIN(i), " RX_MODE_F_UNICAST");
954+ i += scnprintf(&buf[i], REMAIN(i), " RX_MODE_F_UNICAST");
955955 if (rx_mode & IONIC_RX_MODE_F_MULTICAST)
956− i += snprintf(&buf[i], REMAIN(i), " RX_MODE_F_MULTICAST");
956+ i += scnprintf(&buf[i], REMAIN(i), " RX_MODE_F_MULTICAST");
957957 if (rx_mode & IONIC_RX_MODE_F_BROADCAST)
958− i += snprintf(&buf[i], REMAIN(i), " RX_MODE_F_BROADCAST");
958+ i += scnprintf(&buf[i], REMAIN(i), " RX_MODE_F_BROADCAST");
959959 if (rx_mode & IONIC_RX_MODE_F_PROMISC)
960− i += snprintf(&buf[i], REMAIN(i), " RX_MODE_F_PROMISC");
960+ i += scnprintf(&buf[i], REMAIN(i), " RX_MODE_F_PROMISC");
961961 if (rx_mode & IONIC_RX_MODE_F_ALLMULTI)
962− i += snprintf(&buf[i], REMAIN(i), " RX_MODE_F_ALLMULTI");
962+ i += scnprintf(&buf[i], REMAIN(i), " RX_MODE_F_ALLMULTI");
963963 netdev_dbg(lif->netdev, "lif%d %s\n", lif->index, buf);
964964
965965 err = ionic_adminq_post_wait(lif, &ctx);
@@ -1688,7 +1688,7 @@ static int ionic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) · 722 unmodified lines
16881688 if (!(is_zero_ether_addr(mac) || is_valid_ether_addr(mac)))
16891689 return -EINVAL;
16901690
1691− down_read(&ionic->vf_op_lock);
1691+ down_write(&ionic->vf_op_lock);
16921692
16931693 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
16941694 ret = -EINVAL;
@@ -1698,7 +1698,7 @@ static int ionic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) · 3 unmodified lines
16981698 ether_addr_copy(ionic->vfs[vf].macaddr, mac);
16991699 }
17001700
1701− up_read(&ionic->vf_op_lock);
1701+ up_write(&ionic->vf_op_lock);
17021702 return ret;
17031703 }
17041704
@@ -1719,7 +1719,7 @@ static int ionic_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, · 14 unmodified lines
17191719 if (proto != htons(ETH_P_8021Q))
17201720 return -EPROTONOSUPPORT;
17211721
1722− down_read(&ionic->vf_op_lock);
1722+ down_write(&ionic->vf_op_lock);
17231723
17241724 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
17251725 ret = -EINVAL;
@@ -1730,7 +1730,7 @@ static int ionic_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, · 4 unmodified lines
17301730 ionic->vfs[vf].vlanid = vlan;
17311731 }
17321732
1733− up_read(&ionic->vf_op_lock);
1733+ up_write(&ionic->vf_op_lock);
17341734 return ret;
17351735 }
17361736
drivers/net/ethernet/pensando/ionic/ionic_regs.h+1−1
@@ -1,4 +1,4 @@
1−/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB OR BSD-2-Clause */
1+/* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) OR BSD-2-Clause */
22 /* Copyright (c) 2018-2019 Pensando Systems, Inc. All rights reserved. */
33
44 #ifndef IONIC_REGS_H
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c+1−1
@@ -1720,7 +1720,7 @@ static int qlcnic_83xx_get_reset_instruction_template(struct qlcnic_adapter *p_d · 1719 unmodified lines
17201720
17211721 ahw->reset.seq_error = 0;
17221722 ahw->reset.buff = kzalloc(QLC_83XX_RESTART_TEMPLATE_SIZE, GFP_KERNEL);
1723− if (p_dev->ahw->reset.buff == NULL)
1723+ if (ahw->reset.buff == NULL)
17241724 return -ENOMEM;
17251725
17261726 p_buff = p_dev->ahw->reset.buff;
drivers/net/ethernet/realtek/r8169_main.c+8−10
@@ -5194,7 +5194,7 @@ static int rtl_alloc_irq(struct rtl8169_private *tp) · 5193 unmodified lines
51945194 RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~MSIEnable);
51955195 rtl_lock_config_regs(tp);
51965196 /* fall through */
5197− case RTL_GIGA_MAC_VER_07 ... RTL_GIGA_MAC_VER_24:
5197+ case RTL_GIGA_MAC_VER_07 ... RTL_GIGA_MAC_VER_17:
51985198 flags = PCI_IRQ_LEGACY;
51995199 break;
52005200 default:
@@ -5285,6 +5285,13 @@ static int r8169_mdio_register(struct rtl8169_private *tp) · 84 unmodified lines
52855285 if (!tp->phydev) {
52865286 mdiobus_unregister(new_bus);
52875287 return -ENODEV;
5288+ } else if (!tp->phydev->drv) {
5289+ /* Most chip versions fail with the genphy driver.
5290+ * Therefore ensure that the dedicated PHY driver is loaded.
5291+ */
5292+ dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n");
5293+ mdiobus_unregister(new_bus);
5294+ return -EUNATCH;
52885295 }
52895296
52905297 /* PHY will be woken up in rtl_open() */
@@ -5446,15 +5453,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 155 unmodified lines
54465453 int chipset, region;
54475454 int jumbo_max, rc;
54485455
5449− /* Some tools for creating an initramfs don't consider softdeps, then
5450− * r8169.ko may be in initramfs, but realtek.ko not. Then the generic
5451− * PHY driver is used that doesn't work with most chip versions.
5452− */
5453− if (!driver_find("RTL8201CP Ethernet", &mdio_bus_type)) {
5454− dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n");
5455− return -ENOENT;
5456− }
5457−
54585456 dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
54595457 if (!dev)
54605458 return -ENOMEM;
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c+1−1
@@ -2277,7 +2277,7 @@ static int __init sxgbe_cmdline_opt(char *str) · 2276 unmodified lines
22772277 if (!str || !*str)
22782278 return -EINVAL;
22792279 while ((opt = strsep(&str, ",")) != NULL) {
2280− if (!strncmp(opt, "eee_timer:", 6)) {
2280+ if (!strncmp(opt, "eee_timer:", 10)) {
22812281 if (kstrtoint(opt + 10, 0, &eee_timer))
22822282 goto err;
22832283 }
drivers/net/ethernet/sfc/ef10.c+17−15
@@ -2853,11 +2853,24 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 2852 unmodified lines
28532853 }
28542854
28552855 /* Transmit timestamps are only available for 8XXX series. They result
2856− * in three events per packet. These occur in order, and are:
2857− * - the normal completion event
2856+ * in up to three events per packet. These occur in order, and are:
2857+ * - the normal completion event (may be omitted)
28582858 * - the low part of the timestamp
28592859 * - the high part of the timestamp
28602860 *
2861+ * It's possible for multiple completion events to appear before the
2862+ * corresponding timestamps. So we can for example get:
2863+ * COMP N
2864+ * COMP N+1
2865+ * TS_LO N
2866+ * TS_HI N
2867+ * TS_LO N+1
2868+ * TS_HI N+1
2869+ *
2870+ * In addition it's also possible for the adjacent completions to be
2871+ * merged, so we may not see COMP N above. As such, the completion
2872+ * events are not very useful here.
2873+ *
28612874 * Each part of the timestamp is itself split across two 16 bit
28622875 * fields in the event.
28632876 */
@@ -2865,17 +2878,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 1 unmodified line
28652878
28662879 switch (tx_ev_type) {
28672880 case TX_TIMESTAMP_EVENT_TX_EV_COMPLETION:
2868− /* In case of Queue flush or FLR, we might have received
2869− * the previous TX completion event but not the Timestamp
2870− * events.
2871− */
2872− if (tx_queue->completed_desc_ptr != tx_queue->ptr_mask)
2873− efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr);
2874−
2875− tx_ev_desc_ptr = EFX_QWORD_FIELD(*event,
2876− ESF_DZ_TX_DESCR_INDX);
2877− tx_queue->completed_desc_ptr =
2878− tx_ev_desc_ptr & tx_queue->ptr_mask;
2881+ /* Ignore this event - see above. */
28792882 break;
28802883
28812884 case TX_TIMESTAMP_EVENT_TX_EV_TSTAMP_LO:
@@ -2887,8 +2890,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 5 unmodified lines
28872890 ts_part = efx_ef10_extract_event_ts(event);
28882891 tx_queue->completed_timestamp_major = ts_part;
28892892
2890− efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr);
2891− tx_queue->completed_desc_ptr = tx_queue->ptr_mask;
2893+ efx_xmit_done_single(tx_queue);
28922894 break;
28932895
28942896 default:
drivers/net/ethernet/sfc/efx.h+1−0
@@ -20,6 +20,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb, · 19 unmodified lines
2020 struct net_device *net_dev);
2121 netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
2222 void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
23+void efx_xmit_done_single(struct efx_tx_queue *tx_queue);
2324 int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
2425 void *type_data);
2526 extern unsigned int efx_piobuf_size;
drivers/net/ethernet/sfc/efx_channels.c+1−0
@@ -583,6 +583,7 @@ struct efx_channel *efx_copy_channel(const struct efx_channel *old_channel) · 582 unmodified lines
583583 if (tx_queue->channel)
584584 tx_queue->channel = channel;
585585 tx_queue->buffer = NULL;
586+ tx_queue->cb_page = NULL;
586587 memset(&tx_queue->txd, 0, sizeof(tx_queue->txd));
587588 }
588589
drivers/net/ethernet/sfc/mcdi.c+18−14
@@ -212,12 +212,14 @@ static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd, · 211 unmodified lines
212212 * progress on a NIC at any one time. So no need for locking.
213213 */
214214 for (i = 0; i < hdr_len / 4 && bytes < PAGE_SIZE; i++)
215− bytes += snprintf(buf + bytes, PAGE_SIZE - bytes,
216− " %08x", le32_to_cpu(hdr[i].u32[0]));
215+ bytes += scnprintf(buf + bytes, PAGE_SIZE - bytes,
216+ " %08x",
217+ le32_to_cpu(hdr[i].u32[0]));
217218
218219 for (i = 0; i < inlen / 4 && bytes < PAGE_SIZE; i++)
219− bytes += snprintf(buf + bytes, PAGE_SIZE - bytes,
220− " %08x", le32_to_cpu(inbuf[i].u32[0]));
220+ bytes += scnprintf(buf + bytes, PAGE_SIZE - bytes,
221+ " %08x",
222+ le32_to_cpu(inbuf[i].u32[0]));
221223
222224 netif_info(efx, hw, efx->net_dev, "MCDI RPC REQ:%s\n", buf);
223225 }
@@ -302,15 +304,15 @@ static void efx_mcdi_read_response_header(struct efx_nic *efx) · 78 unmodified lines
302304 */
303305 for (i = 0; i < hdr_len && bytes < PAGE_SIZE; i++) {
304306 efx->type->mcdi_read_response(efx, &hdr, (i * 4), 4);
305− bytes += snprintf(buf + bytes, PAGE_SIZE - bytes,
306− " %08x", le32_to_cpu(hdr.u32[0]));
307+ bytes += scnprintf(buf + bytes, PAGE_SIZE - bytes,
308+ " %08x", le32_to_cpu(hdr.u32[0]));
307309 }
308310
309311 for (i = 0; i < data_len && bytes < PAGE_SIZE; i++) {
310312 efx->type->mcdi_read_response(efx, &hdr,
311313 mcdi->resp_hdr_len + (i * 4), 4);
312− bytes += snprintf(buf + bytes, PAGE_SIZE - bytes,
313− " %08x", le32_to_cpu(hdr.u32[0]));
314+ bytes += scnprintf(buf + bytes, PAGE_SIZE - bytes,
315+ " %08x", le32_to_cpu(hdr.u32[0]));
314316 }
315317
316318 netif_info(efx, hw, efx->net_dev, "MCDI RPC RESP:%s\n", buf);
@@ -1417,9 +1419,11 @@ void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len) · 1100 unmodified lines
14171419 }
14181420
14191421 ver_words = (__le16 *)MCDI_PTR(outbuf, GET_VERSION_OUT_VERSION);
1420− offset = snprintf(buf, len, "%u.%u.%u.%u",
1421− le16_to_cpu(ver_words[0]), le16_to_cpu(ver_words[1]),
1422− le16_to_cpu(ver_words[2]), le16_to_cpu(ver_words[3]));
1422+ offset = scnprintf(buf, len, "%u.%u.%u.%u",
1423+ le16_to_cpu(ver_words[0]),
1424+ le16_to_cpu(ver_words[1]),
1425+ le16_to_cpu(ver_words[2]),
1426+ le16_to_cpu(ver_words[3]));
14231427
14241428 /* EF10 may have multiple datapath firmware variants within a
14251429 * single version. Report which variants are running.
@@ -1427,9 +1431,9 @@ void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len) · 1 unmodified line
14271431 if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0) {
14281432 struct efx_ef10_nic_data *nic_data = efx->nic_data;
14291433
1430− offset += snprintf(buf + offset, len - offset, " rx%x tx%x",
1431− nic_data->rx_dpcpu_fw_id,
1432− nic_data->tx_dpcpu_fw_id);
1434+ offset += scnprintf(buf + offset, len - offset, " rx%x tx%x",
1435+ nic_data->rx_dpcpu_fw_id,
1436+ nic_data->tx_dpcpu_fw_id);
14331437
14341438 /* It's theoretically possible for the string to exceed 31
14351439 * characters, though in practice the first three version
drivers/net/ethernet/sfc/net_driver.h+0−3
@@ -208,8 +208,6 @@ struct efx_tx_buffer { · 207 unmodified lines
208208 * avoid cache-line ping-pong between the xmit path and the
209209 * completion path.
210210 * @merge_events: Number of TX merged completion events
211− * @completed_desc_ptr: Most recent completed pointer - only used with
212− * timestamping.
213211 * @completed_timestamp_major: Top part of the most recent tx timestamp.
214212 * @completed_timestamp_minor: Low part of the most recent tx timestamp.
215213 * @insert_count: Current insert pointer
@@ -269,7 +267,6 @@ struct efx_tx_queue { · 53 unmodified lines
269267 unsigned int merge_events;
270268 unsigned int bytes_compl;
271269 unsigned int pkts_compl;
272− unsigned int completed_desc_ptr;
273270 u32 completed_timestamp_major;
274271 u32 completed_timestamp_minor;
275272
drivers/net/ethernet/sfc/tx.c+38−0
@@ -535,6 +535,44 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb, · 534 unmodified lines
535535 return efx_enqueue_skb(tx_queue, skb);
536536 }
537537
538+void efx_xmit_done_single(struct efx_tx_queue *tx_queue)
539+{
540+ unsigned int pkts_compl = 0, bytes_compl = 0;
541+ unsigned int read_ptr;
542+ bool finished = false;
543+
544+ read_ptr = tx_queue->read_count & tx_queue->ptr_mask;
545+
546+ while (!finished) {
547+ struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr];
548+
549+ if (!efx_tx_buffer_in_use(buffer)) {
550+ struct efx_nic *efx = tx_queue->efx;
551+
552+ netif_err(efx, hw, efx->net_dev,
553+ "TX queue %d spurious single TX completion\n",
554+ tx_queue->queue);
555+ efx_schedule_reset(efx, RESET_TYPE_TX_SKIP);
556+ return;
557+ }
558+
559+ /* Need to check the flag before dequeueing. */
560+ if (buffer->flags & EFX_TX_BUF_SKB)
561+ finished = true;
562+ efx_dequeue_buffer(tx_queue, buffer, &pkts_compl, &bytes_compl);
563+
564+ ++tx_queue->read_count;
565+ read_ptr = tx_queue->read_count & tx_queue->ptr_mask;
566+ }
567+
568+ tx_queue->pkts_compl += pkts_compl;
569+ tx_queue->bytes_compl += bytes_compl;
570+
571+ EFX_WARN_ON_PARANOID(pkts_compl != 1);
572+
573+ efx_xmit_done_check_empty(tx_queue);
574+}
575+
538576 void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue)
539577 {
540578 struct efx_nic *efx = tx_queue->efx;
drivers/net/ethernet/sfc/tx_common.c+16−13
@@ -80,7 +80,6 @@ void efx_init_tx_queue(struct efx_tx_queue *tx_queue) · 79 unmodified lines
8080 tx_queue->xmit_more_available = false;
8181 tx_queue->timestamping = (efx_ptp_use_mac_tx_timestamps(efx) &&
8282 tx_queue->channel == efx_ptp_channel(efx));
83− tx_queue->completed_desc_ptr = tx_queue->ptr_mask;
8483 tx_queue->completed_timestamp_major = 0;
8584 tx_queue->completed_timestamp_minor = 0;
8685
@@ -210,10 +209,9 @@ static void efx_dequeue_buffers(struct efx_tx_queue *tx_queue, · 123 unmodified lines
210209 while (read_ptr != stop_index) {
211210 struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr];
212211
213− if (!(buffer->flags & EFX_TX_BUF_OPTION) &&
214− unlikely(buffer->len == 0)) {
212+ if (!efx_tx_buffer_in_use(buffer)) {
215213 netif_err(efx, tx_err, efx->net_dev,
216− "TX queue %d spurious TX completion id %x\n",
214+ "TX queue %d spurious TX completion id %d\n",
217215 tx_queue->queue, read_ptr);
218216 efx_schedule_reset(efx, RESET_TYPE_TX_SKIP);
219217 return;
@@ -226,6 +224,19 @@ static void efx_dequeue_buffers(struct efx_tx_queue *tx_queue, · 6 unmodified lines
226224 }
227225 }
228226
227+void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue)
228+{
229+ if ((int)(tx_queue->read_count - tx_queue->old_write_count) >= 0) {
230+ tx_queue->old_write_count = READ_ONCE(tx_queue->write_count);
231+ if (tx_queue->read_count == tx_queue->old_write_count) {
232+ /* Ensure that read_count is flushed. */
233+ smp_mb();
234+ tx_queue->empty_read_count =
235+ tx_queue->read_count | EFX_EMPTY_COUNT_VALID;
236+ }
237+ }
238+}
239+
229240 void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
230241 {
231242 unsigned int fill_level, pkts_compl = 0, bytes_compl = 0;
@@ -256,15 +267,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) · 24 unmodified lines
256267 netif_tx_wake_queue(tx_queue->core_txq);
257268 }
258269
259− /* Check whether the hardware queue is now empty */
260− if ((int)(tx_queue->read_count - tx_queue->old_write_count) >= 0) {
261− tx_queue->old_write_count = READ_ONCE(tx_queue->write_count);
262− if (tx_queue->read_count == tx_queue->old_write_count) {
263− smp_mb();
264− tx_queue->empty_read_count =
265− tx_queue->read_count | EFX_EMPTY_COUNT_VALID;
266− }
267− }
270+ efx_xmit_done_check_empty(tx_queue);
268271 }
269272
270273 /* Remove buffers put into a tx_queue for the current packet.
drivers/net/ethernet/sfc/tx_common.h+6−0
@@ -21,6 +21,12 @@ void efx_dequeue_buffer(struct efx_tx_queue *tx_queue, · 20 unmodified lines
2121 unsigned int *pkts_compl,
2222 unsigned int *bytes_compl);
2323
24+static inline bool efx_tx_buffer_in_use(struct efx_tx_buffer *buffer)
25+{
26+ return buffer->len || (buffer->flags & EFX_TX_BUF_OPTION);
27+}
28+
29+void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue);
2430 void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
2531
2632 void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c+1−1
@@ -1411,7 +1411,7 @@ static int rk_gmac_probe(struct platform_device *pdev) · 1410 unmodified lines
14111411
14121412 ret = rk_gmac_clk_init(plat_dat);
14131413 if (ret)
1414− return ret;
1414+ goto err_remove_config_dt;
14151415
14161416 ret = rk_gmac_powerup(plat_dat->bsp_priv);
14171417 if (ret)
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c+2−1
@@ -24,6 +24,7 @@ · 23 unmodified lines
2424 static void dwmac1000_core_init(struct mac_device_info *hw,
2525 struct net_device *dev)
2626 {
27+ struct stmmac_priv *priv = netdev_priv(dev);
2728 void __iomem *ioaddr = hw->pcsr;
2829 u32 value = readl(ioaddr + GMAC_CONTROL);
2930 int mtu = dev->mtu;
@@ -35,7 +36,7 @@ static void dwmac1000_core_init(struct mac_device_info *hw, · 5 unmodified lines
3536 * Broadcom tags can look like invalid LLC/SNAP packets and cause the
3637 * hardware to truncate packets on reception.
3738 */
38− if (netdev_uses_dsa(dev))
39+ if (netdev_uses_dsa(dev) || !priv->plat->enh_desc)
3940 value &= ~GMAC_CONTROL_ACS;
4041
4142 if (mtu > 1500)
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c+10−4
@@ -663,16 +663,22 @@ int stmmac_get_platform_resources(struct platform_device *pdev, · 662 unmodified lines
663663 * In case the wake up interrupt is not passed from the platform
664664 * so the driver will continue to use the mac irq (ndev->irq)
665665 */
666− stmmac_res->wol_irq = platform_get_irq_byname(pdev, "eth_wake_irq");
666+ stmmac_res->wol_irq =
667+ platform_get_irq_byname_optional(pdev, "eth_wake_irq");
667668 if (stmmac_res->wol_irq < 0) {
668669 if (stmmac_res->wol_irq == -EPROBE_DEFER)
669670 return -EPROBE_DEFER;
671+ dev_info(&pdev->dev, "IRQ eth_wake_irq not found\n");
670672 stmmac_res->wol_irq = stmmac_res->irq;
671673 }
672674
673− stmmac_res->lpi_irq = platform_get_irq_byname(pdev, "eth_lpi");
674− if (stmmac_res->lpi_irq == -EPROBE_DEFER)
675− return -EPROBE_DEFER;
675+ stmmac_res->lpi_irq =
676+ platform_get_irq_byname_optional(pdev, "eth_lpi");
677+ if (stmmac_res->lpi_irq < 0) {
678+ if (stmmac_res->lpi_irq == -EPROBE_DEFER)
679+ return -EPROBE_DEFER;
680+ dev_info(&pdev->dev, "IRQ eth_lpi not found\n");
681+ }
676682
677683 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
678684 stmmac_res->addr = devm_ioremap_resource(&pdev->dev, res);
drivers/net/geneve.c+6−2
@@ -1845,8 +1845,6 @@ static void geneve_destroy_tunnels(struct net *net, struct list_head *head) · 1844 unmodified lines
18451845 if (!net_eq(dev_net(geneve->dev), net))
18461846 unregister_netdevice_queue(geneve->dev, head);
18471847 }
1848−
1849− WARN_ON_ONCE(!list_empty(&gn->sock_list));
18501848 }
18511849
18521850 static void __net_exit geneve_exit_batch_net(struct list_head *net_list)
@@ -1861,6 +1859,12 @@ static void __net_exit geneve_exit_batch_net(struct list_head *net_list) · 8 unmodified lines
18611859 /* unregister the devices gathered above */
18621860 unregister_netdevice_many(&list);
18631861 rtnl_unlock();
1862+
1863+ list_for_each_entry(net, net_list, exit_list) {
1864+ const struct geneve_net *gn = net_generic(net, geneve_net_id);
1865+
1866+ WARN_ON_ONCE(!list_empty(&gn->sock_list));
1867+ }
18641868 }
18651869
18661870 static struct pernet_operations geneve_net_ops = {
drivers/net/ifb.c+3−3
@@ -75,7 +75,7 @@ static void ifb_ri_tasklet(unsigned long _txp) · 74 unmodified lines
7575 }
7676
7777 while ((skb = __skb_dequeue(&txp->tq)) != NULL) {
78− skb->tc_redirected = 0;
78+ skb->redirected = 0;
7979 skb->tc_skip_classify = 1;
8080
8181 u64_stats_update_begin(&txp->tsync);
@@ -96,7 +96,7 @@ static void ifb_ri_tasklet(unsigned long _txp) · 14 unmodified lines
9696 rcu_read_unlock();
9797 skb->skb_iif = txp->dev->ifindex;
9898
99− if (!skb->tc_from_ingress) {
99+ if (!skb->from_ingress) {
100100 dev_queue_xmit(skb);
101101 } else {
102102 skb_pull_rcsum(skb, skb->mac_len);
@@ -243,7 +243,7 @@ static netdev_tx_t ifb_xmit(struct sk_buff *skb, struct net_device *dev) · 140 unmodified lines
243243 txp->rx_bytes += skb->len;
244244 u64_stats_update_end(&txp->rsync);
245245
246− if (!skb->tc_redirected || !skb->skb_iif) {
246+ if (!skb->redirected || !skb->skb_iif) {
247247 dev_kfree_skb(skb);
248248 dev->stats.rx_dropped++;
249249 return NETDEV_TX_OK;
drivers/net/ipvlan/ipvlan_core.c+11−8
@@ -293,6 +293,7 @@ void ipvlan_process_multicast(struct work_struct *work) · 292 unmodified lines
293293 }
294294 if (dev)
295295 dev_put(dev);
296+ cond_resched();
296297 }
297298 }
298299
@@ -498,19 +499,21 @@ static int ipvlan_process_outbound(struct sk_buff *skb) · 199 unmodified lines
498499 struct ethhdr *ethh = eth_hdr(skb);
499500 int ret = NET_XMIT_DROP;
500501
501− /* In this mode we dont care about multicast and broadcast traffic */
502− if (is_multicast_ether_addr(ethh->h_dest)) {
503− pr_debug_ratelimited("Dropped {multi|broad}cast of type=[%x]\n",
504− ntohs(skb->protocol));
505− kfree_skb(skb);
506− goto out;
507− }
508−
509502 /* The ipvlan is a pseudo-L2 device, so the packets that we receive
510503 * will have L2; which need to discarded and processed further
511504 * in the net-ns of the main-device.
512505 */
513506 if (skb_mac_header_was_set(skb)) {
507+ /* In this mode we dont care about
508+ * multicast and broadcast traffic */
509+ if (is_multicast_ether_addr(ethh->h_dest)) {
510+ pr_debug_ratelimited(
511+ "Dropped {multi|broad}cast of type=[%x]\n",
512+ ntohs(skb->protocol));
513+ kfree_skb(skb);
514+ goto out;
515+ }
516+
514517 skb_pull(skb, sizeof(*ethh));
515518 skb->mac_header = (typeof(skb->mac_header))~0U;
516519 skb_reset_network_header(skb);
drivers/net/ipvlan/ipvlan_main.c+1−4
@@ -164,7 +164,6 @@ static void ipvlan_uninit(struct net_device *dev) · 163 unmodified lines
164164 static int ipvlan_open(struct net_device *dev)
165165 {
166166 struct ipvl_dev *ipvlan = netdev_priv(dev);
167− struct net_device *phy_dev = ipvlan->phy_dev;
168167 struct ipvl_addr *addr;
169168
170169 if (ipvlan->port->mode == IPVLAN_MODE_L3 ||
@@ -178,7 +177,7 @@ static int ipvlan_open(struct net_device *dev) · 7 unmodified lines
178177 ipvlan_ht_addr_add(ipvlan, addr);
179178 rcu_read_unlock();
180179
181− return dev_uc_add(phy_dev, phy_dev->dev_addr);
180+ return 0;
182181 }
183182
184183 static int ipvlan_stop(struct net_device *dev)
@@ -190,8 +189,6 @@ static int ipvlan_stop(struct net_device *dev) · 5 unmodified lines
190189 dev_uc_unsync(phy_dev, dev);
191190 dev_mc_unsync(phy_dev, dev);
192191
193− dev_uc_del(phy_dev, phy_dev->dev_addr);
194−
195192 rcu_read_lock();
196193 list_for_each_entry_rcu(addr, &ipvlan->addrs, anode)
197194 ipvlan_ht_addr_del(addr);
drivers/net/macsec.c+23−5
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include <net/gro_cells.h>
2020 #include <net/macsec.h>
2121 #include <linux/phy.h>
22+#include <linux/if_arp.h>
2223
2324 #include <uapi/linux/if_macsec.h>
2425
@@ -424,6 +425,11 @@ static struct macsec_eth_header *macsec_ethhdr(struct sk_buff *skb) · 399 unmodified lines
424425 return (struct macsec_eth_header *)skb_mac_header(skb);
425426 }
426427
428+static sci_t dev_to_sci(struct net_device *dev, __be16 port)
429+{
430+ return make_sci(dev->dev_addr, port);
431+}
432+
427433 static void __macsec_pn_wrapped(struct macsec_secy *secy,
428434 struct macsec_tx_sa *tx_sa)
429435 {
@@ -3268,6 +3274,20 @@ static int macsec_set_mac_address(struct net_device *dev, void *p) · 2838 unmodified lines
32683274
32693275 out:
32703276 ether_addr_copy(dev->dev_addr, addr->sa_data);
3277+ macsec->secy.sci = dev_to_sci(dev, MACSEC_PORT_ES);
3278+
3279+ /* If h/w offloading is available, propagate to the device */
3280+ if (macsec_is_offloaded(macsec)) {
3281+ const struct macsec_ops *ops;
3282+ struct macsec_context ctx;
3283+
3284+ ops = macsec_get_ops(macsec, &ctx);
3285+ if (ops) {
3286+ ctx.secy = &macsec->secy;
3287+ macsec_offload(ops->mdo_upd_secy, &ctx);
3288+ }
3289+ }
3290+
32713291 return 0;
32723292 }
32733293
@@ -3342,6 +3362,7 @@ static const struct device_type macsec_type = { · 68 unmodified lines
33423362
33433363 static const struct nla_policy macsec_rtnl_policy[IFLA_MACSEC_MAX + 1] = {
33443364 [IFLA_MACSEC_SCI] = { .type = NLA_U64 },
3365+ [IFLA_MACSEC_PORT] = { .type = NLA_U16 },
33453366 [IFLA_MACSEC_ICV_LEN] = { .type = NLA_U8 },
33463367 [IFLA_MACSEC_CIPHER_SUITE] = { .type = NLA_U64 },
33473368 [IFLA_MACSEC_WINDOW] = { .type = NLA_U32 },
@@ -3592,11 +3613,6 @@ static bool sci_exists(struct net_device *dev, sci_t sci) · 244 unmodified lines
35923613 return false;
35933614 }
35943615
3595−static sci_t dev_to_sci(struct net_device *dev, __be16 port)
3596−{
3597− return make_sci(dev->dev_addr, port);
3598−}
3599−
36003616 static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
36013617 {
36023618 struct macsec_dev *macsec = macsec_priv(dev);
@@ -3650,6 +3666,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev, · 47 unmodified lines
36503666 real_dev = __dev_get_by_index(net, nla_get_u32(tb[IFLA_LINK]));
36513667 if (!real_dev)
36523668 return -ENODEV;
3669+ if (real_dev->type != ARPHRD_ETHER)
3670+ return -EINVAL;
36533671
36543672 dev->priv_flags |= IFF_MACSEC;
36553673
drivers/net/macvlan.c+2−0
@@ -334,6 +334,8 @@ static void macvlan_process_broadcast(struct work_struct *w) · 333 unmodified lines
334334 if (src)
335335 dev_put(src->dev);
336336 consume_skb(skb);
337+
338+ cond_resched();
337339 }
338340 }
339341
drivers/net/netdevsim/ipsec.c+15−15
@@ -29,9 +29,9 @@ static ssize_t nsim_dbg_netdev_ops_read(struct file *filp, · 28 unmodified lines
2929 return -ENOMEM;
3030
3131 p = buf;
32− p += snprintf(p, bufsize - (p - buf),
33− "SA count=%u tx=%u\n",
34− ipsec->count, ipsec->tx);
32+ p += scnprintf(p, bufsize - (p - buf),
33+ "SA count=%u tx=%u\n",
34+ ipsec->count, ipsec->tx);
3535
3636 for (i = 0; i < NSIM_IPSEC_MAX_SA_COUNT; i++) {
3737 struct nsim_sa *sap = &ipsec->sa[i];
@@ -39,18 +39,18 @@ static ssize_t nsim_dbg_netdev_ops_read(struct file *filp, · 1 unmodified line
3939 if (!sap->used)
4040 continue;
4141
42− p += snprintf(p, bufsize - (p - buf),
43− "sa[%i] %cx ipaddr=0x%08x %08x %08x %08x\n",
44− i, (sap->rx ? 'r' : 't'), sap->ipaddr[0],
45− sap->ipaddr[1], sap->ipaddr[2], sap->ipaddr[3]);
46− p += snprintf(p, bufsize - (p - buf),
47− "sa[%i] spi=0x%08x proto=0x%x salt=0x%08x crypt=%d\n",
48− i, be32_to_cpu(sap->xs->id.spi),
49− sap->xs->id.proto, sap->salt, sap->crypt);
50− p += snprintf(p, bufsize - (p - buf),
51− "sa[%i] key=0x%08x %08x %08x %08x\n",
52− i, sap->key[0], sap->key[1],
53− sap->key[2], sap->key[3]);
42+ p += scnprintf(p, bufsize - (p - buf),
43+ "sa[%i] %cx ipaddr=0x%08x %08x %08x %08x\n",
44+ i, (sap->rx ? 'r' : 't'), sap->ipaddr[0],
45+ sap->ipaddr[1], sap->ipaddr[2], sap->ipaddr[3]);
46+ p += scnprintf(p, bufsize - (p - buf),
47+ "sa[%i] spi=0x%08x proto=0x%x salt=0x%08x crypt=%d\n",
48+ i, be32_to_cpu(sap->xs->id.spi),
49+ sap->xs->id.proto, sap->salt, sap->crypt);
50+ p += scnprintf(p, bufsize - (p - buf),
51+ "sa[%i] key=0x%08x %08x %08x %08x\n",
52+ i, sap->key[0], sap->key[1],
53+ sap->key[2], sap->key[3]);
5454 }
5555
5656 len = simple_read_from_buffer(buffer, count, ppos, buf, p - buf);
drivers/net/phy/bcm63xx.c+1−0
@@ -73,6 +73,7 @@ static struct phy_driver bcm63xx_driver[] = { · 72 unmodified lines
7373 /* same phy as above, with just a different OUI */
7474 .phy_id = 0x002bdc00,
7575 .phy_id_mask = 0xfffffc00,
76+ .name = "Broadcom BCM63XX (2)",
7677 /* PHY_BASIC_FEATURES */
7778 .flags = PHY_IS_INTERNAL,
7879 .config_init = bcm63xx_config_init,
drivers/net/phy/dp83867.c+20−1
@@ -28,7 +28,8 @@ · 27 unmodified lines
2828 #define DP83867_CTRL 0x1f
2929
3030 /* Extended Registers */
31−#define DP83867_CFG4 0x0031
31+#define DP83867_FLD_THR_CFG 0x002e
32+#define DP83867_CFG4 0x0031
3233 #define DP83867_CFG4_SGMII_ANEG_MASK (BIT(5) | BIT(6))
3334 #define DP83867_CFG4_SGMII_ANEG_TIMER_11MS (3 << 5)
3435 #define DP83867_CFG4_SGMII_ANEG_TIMER_800US (2 << 5)
@@ -91,6 +92,7 @@ · 56 unmodified lines
9192 #define DP83867_STRAP_STS2_CLK_SKEW_RX_MASK GENMASK(2, 0)
9293 #define DP83867_STRAP_STS2_CLK_SKEW_RX_SHIFT 0
9394 #define DP83867_STRAP_STS2_CLK_SKEW_NONE BIT(2)
95+#define DP83867_STRAP_STS2_STRAP_FLD BIT(10)
9496
9597 /* PHY CTRL bits */
9698 #define DP83867_PHYCR_TX_FIFO_DEPTH_SHIFT 14
@@ -125,6 +127,9 @@ · 28 unmodified lines
125127 /* CFG4 bits */
126128 #define DP83867_CFG4_PORT_MIRROR_EN BIT(0)
127129
130+/* FLD_THR_CFG */
131+#define DP83867_FLD_THR_CFG_ENERGY_LOST_THR_MASK 0x7
132+
128133 enum {
129134 DP83867_PORT_MIRROING_KEEP,
130135 DP83867_PORT_MIRROING_EN,
@@ -476,6 +481,20 @@ static int dp83867_config_init(struct phy_device *phydev) · 345 unmodified lines
476481 phy_clear_bits_mmd(phydev, DP83867_DEVADDR, DP83867_CFG4,
477482 BIT(7));
478483
484+ bs = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_STRAP_STS2);
485+ if (bs & DP83867_STRAP_STS2_STRAP_FLD) {
486+ /* When using strap to enable FLD, the ENERGY_LOST_FLD_THR will
487+ * be set to 0x2. This may causes the PHY link to be unstable -
488+ * the default value 0x1 need to be restored.
489+ */
490+ ret = phy_modify_mmd(phydev, DP83867_DEVADDR,
491+ DP83867_FLD_THR_CFG,
492+ DP83867_FLD_THR_CFG_ENERGY_LOST_THR_MASK,
493+ 0x1);
494+ if (ret)
495+ return ret;
496+ }
497+
479498 if (phy_interface_is_rgmii(phydev) ||
480499 phydev->interface == PHY_INTERFACE_MODE_SGMII) {
481500 val = phy_read(phydev, MII_DP83867_PHYCTRL);
drivers/net/phy/mdio-bcm-unimac.c+2−4
@@ -242,11 +242,9 @@ static int unimac_mdio_probe(struct platform_device *pdev) · 241 unmodified lines
242242 return -ENOMEM;
243243 }
244244
245− priv->clk = devm_clk_get(&pdev->dev, NULL);
246− if (PTR_ERR(priv->clk) == -EPROBE_DEFER)
245+ priv->clk = devm_clk_get_optional(&pdev->dev, NULL);
246+ if (IS_ERR(priv->clk))
247247 return PTR_ERR(priv->clk);
248− else
249− priv->clk = NULL;
250248
251249 ret = clk_prepare_enable(priv->clk);
252250 if (ret)
drivers/net/phy/mdio-mux-bcm-iproc.c+6−1
@@ -288,8 +288,13 @@ static int mdio_mux_iproc_suspend(struct device *dev) · 287 unmodified lines
288288 static int mdio_mux_iproc_resume(struct device *dev)
289289 {
290290 struct iproc_mdiomux_desc *md = dev_get_drvdata(dev);
291+ int rc;
291292
292− clk_prepare_enable(md->core_clk);
293+ rc = clk_prepare_enable(md->core_clk);
294+ if (rc) {
295+ dev_err(md->dev, "failed to enable core clk\n");
296+ return rc;
297+ }
293298 mdio_mux_iproc_config(md);
294299
295300 return 0;
drivers/net/phy/phy.c+2−1
@@ -727,7 +727,8 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat) · 726 unmodified lines
727727 phy_trigger_machine(phydev);
728728 }
729729
730− if (phy_clear_interrupt(phydev))
730+ /* did_interrupt() may have cleared the interrupt already */
731+ if (!phydev->drv->did_interrupt && phy_clear_interrupt(phydev))
731732 goto phy_err;
732733 return IRQ_HANDLED;
733734
drivers/net/phy/phy_device.c+5−1
@@ -286,6 +286,8 @@ static int mdio_bus_phy_suspend(struct device *dev) · 285 unmodified lines
286286 if (!mdio_bus_phy_may_suspend(phydev))
287287 return 0;
288288
289+ phydev->suspended_by_mdio_bus = 1;
290+
289291 return phy_suspend(phydev);
290292 }
291293
@@ -294,9 +296,11 @@ static int mdio_bus_phy_resume(struct device *dev) · 2 unmodified lines
294296 struct phy_device *phydev = to_phy_device(dev);
295297 int ret;
296298
297− if (!mdio_bus_phy_may_suspend(phydev))
299+ if (!phydev->suspended_by_mdio_bus)
298300 goto no_resume;
299301
302+ phydev->suspended_by_mdio_bus = 0;
303+
300304 ret = phy_resume(phydev);
301305 if (ret < 0)
302306 return ret;
drivers/net/phy/phylink.c+7−1
@@ -761,8 +761,14 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy, · 760 unmodified lines
761761 config.interface = interface;
762762
763763 ret = phylink_validate(pl, supported, &config);
764− if (ret)
764+ if (ret) {
765+ phylink_warn(pl, "validation of %s with support %*pb and advertisement %*pb failed: %d\n",
766+ phy_modes(config.interface),
767+ __ETHTOOL_LINK_MODE_MASK_NBITS, phy->supported,
768+ __ETHTOOL_LINK_MODE_MASK_NBITS, config.advertising,
769+ ret);
765770 return ret;
771+ }
766772
767773 phy->phylink = pl;
768774 phy->phy_link_change = phylink_phy_change;
drivers/net/phy/sfp-bus.c+18−14
@@ -572,13 +572,15 @@ static void sfp_upstream_clear(struct sfp_bus *bus) · 571 unmodified lines
572572 * the sfp_bus structure, incrementing its reference count. This must
573573 * be put via sfp_bus_put() when done.
574574 *
575− * Returns: on success, a pointer to the sfp_bus structure,
576− * %NULL if no SFP is specified,
577− * on failure, an error pointer value:
578− * corresponding to the errors detailed for
579− * fwnode_property_get_reference_args().
580− * %-ENOMEM if we failed to allocate the bus.
581− * an error from the upstream's connect_phy() method.
575+ * Returns:
576+ * - on success, a pointer to the sfp_bus structure,
577+ * - %NULL if no SFP is specified,
578+ * - on failure, an error pointer value:
579+ *
580+ * - corresponding to the errors detailed for
581+ * fwnode_property_get_reference_args().
582+ * - %-ENOMEM if we failed to allocate the bus.
583+ * - an error from the upstream's connect_phy() method.
582584 */
583585 struct sfp_bus *sfp_bus_find_fwnode(struct fwnode_handle *fwnode)
584586 {
@@ -612,13 +614,15 @@ EXPORT_SYMBOL_GPL(sfp_bus_find_fwnode); · 27 unmodified lines
612614 * the SFP bus using sfp_register_upstream(). This takes a reference on the
613615 * bus, so it is safe to put the bus after this call.
614616 *
615− * Returns: on success, a pointer to the sfp_bus structure,
616− * %NULL if no SFP is specified,
617− * on failure, an error pointer value:
618− * corresponding to the errors detailed for
619− * fwnode_property_get_reference_args().
620− * %-ENOMEM if we failed to allocate the bus.
621− * an error from the upstream's connect_phy() method.
617+ * Returns:
618+ * - on success, a pointer to the sfp_bus structure,
619+ * - %NULL if no SFP is specified,
620+ * - on failure, an error pointer value:
621+ *
622+ * - corresponding to the errors detailed for
623+ * fwnode_property_get_reference_args().
624+ * - %-ENOMEM if we failed to allocate the bus.
625+ * - an error from the upstream's connect_phy() method.
622626 */
623627 int sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream,
624628 const struct sfp_upstream_ops *ops)
drivers/net/slip/slhc.c+10−4
@@ -232,7 +232,7 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 231 unmodified lines
232232 struct cstate *cs = lcs->next;
233233 unsigned long deltaS, deltaA;
234234 short changes = 0;
235− int hlen;
235+ int nlen, hlen;
236236 unsigned char new_seq[16];
237237 unsigned char *cp = new_seq;
238238 struct iphdr *ip;
@@ -248,6 +248,8 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 9 unmodified lines
248248 return isize;
249249
250250 ip = (struct iphdr *) icp;
251+ if (ip->version != 4 || ip->ihl < 5)
252+ return isize;
251253
252254 /* Bail if this packet isn't TCP, or is an IP fragment */
253255 if (ip->protocol != IPPROTO_TCP || (ntohs(ip->frag_off) & 0x3fff)) {
@@ -258,10 +260,14 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 4 unmodified lines
258260 comp->sls_o_tcp++;
259261 return isize;
260262 }
261− /* Extract TCP header */
263+ nlen = ip->ihl * 4;
264+ if (isize < nlen + sizeof(*th))
265+ return isize;
262266
263− th = (struct tcphdr *)(((unsigned char *)ip) + ip->ihl*4);
264− hlen = ip->ihl*4 + th->doff*4;
267+ th = (struct tcphdr *)(icp + nlen);
268+ if (th->doff < sizeof(struct tcphdr) / 4)
269+ return isize;
270+ hlen = nlen + th->doff * 4;
265271
266272 /* Bail if the TCP packet isn't `compressible' (i.e., ACK isn't set or
267273 * some other control bit is set). Also uncompressible if
drivers/net/team/team.c+2−0
@@ -2240,6 +2240,8 @@ team_nl_option_policy[TEAM_ATTR_OPTION_MAX + 1] = { · 2239 unmodified lines
22402240 [TEAM_ATTR_OPTION_CHANGED] = { .type = NLA_FLAG },
22412241 [TEAM_ATTR_OPTION_TYPE] = { .type = NLA_U8 },
22422242 [TEAM_ATTR_OPTION_DATA] = { .type = NLA_BINARY },
2243+ [TEAM_ATTR_OPTION_PORT_IFINDEX] = { .type = NLA_U32 },
2244+ [TEAM_ATTR_OPTION_ARRAY_INDEX] = { .type = NLA_U32 },
22432245 };
22442246
22452247 static int team_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
drivers/net/usb/qmi_wwan.c+1−0
@@ -1210,6 +1210,7 @@ static const struct usb_device_id products[] = { · 1209 unmodified lines
12101210 {QMI_FIXED_INTF(0x1435, 0xd182, 5)}, /* Wistron NeWeb D18 */
12111211 {QMI_FIXED_INTF(0x1435, 0xd191, 4)}, /* Wistron NeWeb D19Q1 */
12121212 {QMI_QUIRK_SET_DTR(0x1508, 0x1001, 4)}, /* Fibocom NL668 series */
1213+ {QMI_FIXED_INTF(0x1690, 0x7588, 4)}, /* ASKEY WWHC050 */
12131214 {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */
12141215 {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
12151216 {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
drivers/net/usb/r8152.c+8−0
@@ -3221,6 +3221,8 @@ static u16 r8153_phy_status(struct r8152 *tp, u16 desired) · 3220 unmodified lines
32213221 }
32223222
32233223 msleep(20);
3224+ if (test_bit(RTL8152_UNPLUG, &tp->flags))
3225+ break;
32243226 }
32253227
32263228 return data;
@@ -5402,7 +5404,10 @@ static void r8153_init(struct r8152 *tp) · 2175 unmodified lines
54025404 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
54035405 AUTOLOAD_DONE)
54045406 break;
5407+
54055408 msleep(20);
5409+ if (test_bit(RTL8152_UNPLUG, &tp->flags))
5410+ break;
54065411 }
54075412
54085413 data = r8153_phy_status(tp, 0);
@@ -5539,7 +5544,10 @@ static void r8153b_init(struct r8152 *tp) · 130 unmodified lines
55395544 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
55405545 AUTOLOAD_DONE)
55415546 break;
5547+
55425548 msleep(20);
5549+ if (test_bit(RTL8152_UNPLUG, &tp->flags))
5550+ break;
55435551 }
55445552
55455553 data = r8153_phy_status(tp, 0);
drivers/net/veth.c+1−1
@@ -328,7 +328,7 @@ static void veth_get_stats64(struct net_device *dev, · 327 unmodified lines
328328 rcu_read_lock();
329329 peer = rcu_dereference(priv->peer);
330330 if (peer) {
331− tot->rx_dropped += veth_stats_tx(peer, &packets, &bytes);
331+ veth_stats_tx(peer, &packets, &bytes);
332332 tot->rx_bytes += bytes;
333333 tot->rx_packets += packets;
334334
drivers/net/vxlan.c+9−2
@@ -2779,10 +2779,19 @@ static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan, · 2778 unmodified lines
27792779 /* Setup stats when device is created */
27802780 static int vxlan_init(struct net_device *dev)
27812781 {
2782+ struct vxlan_dev *vxlan = netdev_priv(dev);
2783+ int err;
2784+
27822785 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
27832786 if (!dev->tstats)
27842787 return -ENOMEM;
27852788
2789+ err = gro_cells_init(&vxlan->gro_cells, dev);
2790+ if (err) {
2791+ free_percpu(dev->tstats);
2792+ return err;
2793+ }
2794+
27862795 return 0;
27872796 }
27882797
@@ -3043,8 +3052,6 @@ static void vxlan_setup(struct net_device *dev) · 254 unmodified lines
30433052
30443053 vxlan->dev = dev;
30453054
3046− gro_cells_init(&vxlan->gro_cells, dev);
3047−
30483055 for (h = 0; h < FDB_HASH_SIZE; ++h) {
30493056 spin_lock_init(&vxlan->hash_lock[h]);
30503057 INIT_HLIST_HEAD(&vxlan->fdb_head[h]);
drivers/net/wireguard/device.c+1−1
@@ -122,7 +122,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev) · 121 unmodified lines
122122 u32 mtu;
123123 int ret;
124124
125− if (unlikely(wg_skb_examine_untrusted_ip_hdr(skb) != skb->protocol)) {
125+ if (unlikely(!wg_check_packet_protocol(skb))) {
126126 ret = -EPROTONOSUPPORT;
127127 net_dbg_ratelimited("%s: Invalid IP packet\n", dev->name);
128128 goto err;
drivers/net/wireguard/netlink.c+2−6
@@ -411,11 +411,7 @@ static int set_peer(struct wg_device *wg, struct nlattr **attrs) · 410 unmodified lines
411411
412412 peer = wg_peer_create(wg, public_key, preshared_key);
413413 if (IS_ERR(peer)) {
414− /* Similar to the above, if the key is invalid, we skip
415− * it without fanfare, so that services don't need to
416− * worry about doing key validation themselves.
417− */
418− ret = PTR_ERR(peer) == -EKEYREJECTED ? 0 : PTR_ERR(peer);
414+ ret = PTR_ERR(peer);
419415 peer = NULL;
420416 goto out;
421417 }
@@ -569,7 +565,7 @@ static int wg_set_device(struct sk_buff *skb, struct genl_info *info) · 147 unmodified lines
569565 private_key);
570566 list_for_each_entry_safe(peer, temp, &wg->peer_list,
571567 peer_list) {
572− BUG_ON(!wg_noise_precompute_static_static(peer));
568+ wg_noise_precompute_static_static(peer);
573569 wg_noise_expire_current_peer_keypairs(peer);
574570 }
575571 wg_cookie_checker_precompute_device_keys(&wg->cookie_checker);
drivers/net/wireguard/noise.c+29−26
@@ -44,32 +44,23 @@ void __init wg_noise_init(void) · 43 unmodified lines
4444 }
4545
4646 /* Must hold peer->handshake.static_identity->lock */
47−bool wg_noise_precompute_static_static(struct wg_peer *peer)
47+void wg_noise_precompute_static_static(struct wg_peer *peer)
4848 {
49− bool ret;
50−
5149 down_write(&peer->handshake.lock);
52− if (peer->handshake.static_identity->has_identity) {
53− ret = curve25519(
54− peer->handshake.precomputed_static_static,
50+ if (!peer->handshake.static_identity->has_identity ||
51+ !curve25519(peer->handshake.precomputed_static_static,
5552 peer->handshake.static_identity->static_private,
56− peer->handshake.remote_static);
57− } else {
58− u8 empty[NOISE_PUBLIC_KEY_LEN] = { 0 };
59−
60− ret = curve25519(empty, empty, peer->handshake.remote_static);
53+ peer->handshake.remote_static))
6154 memset(peer->handshake.precomputed_static_static, 0,
6255 NOISE_PUBLIC_KEY_LEN);
63− }
6456 up_write(&peer->handshake.lock);
65− return ret;
6657 }
6758
68−bool wg_noise_handshake_init(struct noise_handshake *handshake,
69− struct noise_static_identity *static_identity,
70− const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
71− const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
72− struct wg_peer *peer)
59+void wg_noise_handshake_init(struct noise_handshake *handshake,
60+ struct noise_static_identity *static_identity,
61+ const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
62+ const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
63+ struct wg_peer *peer)
7364 {
7465 memset(handshake, 0, sizeof(*handshake));
7566 init_rwsem(&handshake->lock);
@@ -81,7 +72,7 @@ bool wg_noise_handshake_init(struct noise_handshake *handshake, · 5 unmodified lines
8172 NOISE_SYMMETRIC_KEY_LEN);
8273 handshake->static_identity = static_identity;
8374 handshake->state = HANDSHAKE_ZEROED;
84− return wg_noise_precompute_static_static(peer);
75+ wg_noise_precompute_static_static(peer);
8576 }
8677
8778 static void handshake_zero(struct noise_handshake *handshake)
@@ -403,6 +394,19 @@ static bool __must_check mix_dh(u8 chaining_key[NOISE_HASH_LEN], · 315 unmodified lines
403394 return true;
404395 }
405396
397+static bool __must_check mix_precomputed_dh(u8 chaining_key[NOISE_HASH_LEN],
398+ u8 key[NOISE_SYMMETRIC_KEY_LEN],
399+ const u8 precomputed[NOISE_PUBLIC_KEY_LEN])
400+{
401+ static u8 zero_point[NOISE_PUBLIC_KEY_LEN];
402+ if (unlikely(!crypto_memneq(precomputed, zero_point, NOISE_PUBLIC_KEY_LEN)))
403+ return false;
404+ kdf(chaining_key, key, NULL, precomputed, NOISE_HASH_LEN,
405+ NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,
406+ chaining_key);
407+ return true;
408+}
409+
406410 static void mix_hash(u8 hash[NOISE_HASH_LEN], const u8 *src, size_t src_len)
407411 {
408412 struct blake2s_state blake;
@@ -531,10 +535,9 @@ wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst, · 122 unmodified lines
531535 NOISE_PUBLIC_KEY_LEN, key, handshake->hash);
532536
533537 /* ss */
534− kdf(handshake->chaining_key, key, NULL,
535− handshake->precomputed_static_static, NOISE_HASH_LEN,
536− NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,
537− handshake->chaining_key);
538+ if (!mix_precomputed_dh(handshake->chaining_key, key,
539+ handshake->precomputed_static_static))
540+ goto out;
538541
539542 /* {t} */
540543 tai64n_now(timestamp);
@@ -595,9 +598,9 @@ wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src, · 54 unmodified lines
595598 handshake = &peer->handshake;
596599
597600 /* ss */
598− kdf(chaining_key, key, NULL, handshake->precomputed_static_static,
599− NOISE_HASH_LEN, NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,
600− chaining_key);
601+ if (!mix_precomputed_dh(chaining_key, key,
602+ handshake->precomputed_static_static))
603+ goto out;
601604
602605 /* {t} */
603606 if (!message_decrypt(t, src->encrypted_timestamp,
drivers/net/wireguard/noise.h+6−6
@@ -94,11 +94,11 @@ struct noise_handshake { · 93 unmodified lines
9494 struct wg_device;
9595
9696 void wg_noise_init(void);
97−bool wg_noise_handshake_init(struct noise_handshake *handshake,
98− struct noise_static_identity *static_identity,
99− const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
100− const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
101− struct wg_peer *peer);
97+void wg_noise_handshake_init(struct noise_handshake *handshake,
98+ struct noise_static_identity *static_identity,
99+ const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
100+ const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
101+ struct wg_peer *peer);
102102 void wg_noise_handshake_clear(struct noise_handshake *handshake);
103103 static inline void wg_noise_reset_last_sent_handshake(atomic64_t *handshake_ns)
104104 {
@@ -116,7 +116,7 @@ void wg_noise_expire_current_peer_keypairs(struct wg_peer *peer); · 11 unmodified lines
116116 void wg_noise_set_static_identity_private_key(
117117 struct noise_static_identity *static_identity,
118118 const u8 private_key[NOISE_PUBLIC_KEY_LEN]);
119−bool wg_noise_precompute_static_static(struct wg_peer *peer);
119+void wg_noise_precompute_static_static(struct wg_peer *peer);
120120
121121 bool
122122 wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,
drivers/net/wireguard/peer.c+2−5
@@ -34,11 +34,8 @@ struct wg_peer *wg_peer_create(struct wg_device *wg, · 33 unmodified lines
3434 return ERR_PTR(ret);
3535 peer->device = wg;
3636
37− if (!wg_noise_handshake_init(&peer->handshake, &wg->static_identity,
38− public_key, preshared_key, peer)) {
39− ret = -EKEYREJECTED;
40− goto err_1;
41− }
37+ wg_noise_handshake_init(&peer->handshake, &wg->static_identity,
38+ public_key, preshared_key, peer);
4239 if (dst_cache_init(&peer->endpoint_cache, GFP_KERNEL))
4340 goto err_1;
4441 if (wg_packet_queue_init(&peer->tx_queue, wg_packet_tx_worker, false,
drivers/net/wireguard/queueing.h+8−2
@@ -66,7 +66,7 @@ struct packet_cb { · 65 unmodified lines
6666 #define PACKET_PEER(skb) (PACKET_CB(skb)->keypair->entry.peer)
6767
6868 /* Returns either the correct skb->protocol value, or 0 if invalid. */
69−static inline __be16 wg_skb_examine_untrusted_ip_hdr(struct sk_buff *skb)
69+static inline __be16 wg_examine_packet_protocol(struct sk_buff *skb)
7070 {
7171 if (skb_network_header(skb) >= skb->head &&
7272 (skb_network_header(skb) + sizeof(struct iphdr)) <=
@@ -81,6 +81,12 @@ static inline __be16 wg_skb_examine_untrusted_ip_hdr(struct sk_buff *skb) · 8 unmodified lines
8181 return 0;
8282 }
8383
84+static inline bool wg_check_packet_protocol(struct sk_buff *skb)
85+{
86+ __be16 real_protocol = wg_examine_packet_protocol(skb);
87+ return real_protocol && skb->protocol == real_protocol;
88+}
89+
8490 static inline void wg_reset_packet(struct sk_buff *skb)
8591 {
8692 skb_scrub_packet(skb, true);
@@ -94,8 +100,8 @@ static inline void wg_reset_packet(struct sk_buff *skb) · 7 unmodified lines
94100 skb->dev = NULL;
95101 #ifdef CONFIG_NET_SCHED
96102 skb->tc_index = 0;
97− skb_reset_tc(skb);
98103 #endif
104+ skb_reset_redirect(skb);
99105 skb->hdr_len = skb_headroom(skb);
100106 skb_reset_mac_header(skb);
101107 skb_reset_network_header(skb);
drivers/net/wireguard/receive.c+3−4
@@ -56,7 +56,7 @@ static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg) · 55 unmodified lines
5656 size_t data_offset, data_len, header_len;
5757 struct udphdr *udp;
5858
59− if (unlikely(wg_skb_examine_untrusted_ip_hdr(skb) != skb->protocol ||
59+ if (unlikely(!wg_check_packet_protocol(skb) ||
6060 skb_transport_header(skb) < skb->head ||
6161 (skb_transport_header(skb) + sizeof(struct udphdr)) >
6262 skb_tail_pointer(skb)))
@@ -388,7 +388,7 @@ static void wg_packet_consume_data_done(struct wg_peer *peer, · 325 unmodified lines
388388 */
389389 skb->ip_summed = CHECKSUM_UNNECESSARY;
390390 skb->csum_level = ~0; /* All levels */
391− skb->protocol = wg_skb_examine_untrusted_ip_hdr(skb);
391+ skb->protocol = wg_examine_packet_protocol(skb);
392392 if (skb->protocol == htons(ETH_P_IP)) {
393393 len = ntohs(ip_hdr(skb)->tot_len);
394394 if (unlikely(len < sizeof(struct iphdr)))
@@ -587,8 +587,7 @@ void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb) · 192 unmodified lines
587587 wg_packet_consume_data(wg, skb);
588588 break;
589589 default:
590− net_dbg_skb_ratelimited("%s: Invalid packet from %pISpfsc\n",
591− wg->dev->name, skb);
590+ WARN(1, "Non-exhaustive parsing of packet header lead to unknown packet type!\n");
592591 goto err;
593592 }
594593 return;
drivers/net/wireless/intel/iwlwifi/cfg/22000.c+2−0
@@ -283,6 +283,7 @@ const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = { · 282 unmodified lines
283283 * HT size; mac80211 would otherwise pick the HE max (256) by default.
284284 */
285285 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
286+ .tx_with_siso_diversity = true,
286287 .num_rbds = IWL_NUM_RBDS_22000_HE,
287288 };
288289
@@ -309,6 +310,7 @@ const struct iwl_cfg iwl_ax101_cfg_quz_hr = { · 20 unmodified lines
309310 * HT size; mac80211 would otherwise pick the HE max (256) by default.
310311 */
311312 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
313+ .tx_with_siso_diversity = true,
312314 .num_rbds = IWL_NUM_RBDS_22000_HE,
313315 };
314316
drivers/net/wireless/intel/iwlwifi/fw/acpi.c+8−6
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 * GPL LICENSE SUMMARY
77 *
88 * Copyright(c) 2017 Intel Deutschland GmbH
9− * Copyright (C) 2019 Intel Corporation
9+ * Copyright (C) 2019 - 2020 Intel Corporation
1010 *
1111 * This program is free software; you can redistribute it and/or modify
1212 * it under the terms of version 2 of the GNU General Public License as
@@ -27,7 +27,7 @@ · 14 unmodified lines
2727 * BSD LICENSE
2828 *
2929 * Copyright(c) 2017 Intel Deutschland GmbH
30− * Copyright (C) 2019 Intel Corporation
30+ * Copyright (C) 2019 - 2020 Intel Corporation
3131 * All rights reserved.
3232 *
3333 * Redistribution and use in source and binary forms, with or without
@@ -491,13 +491,13 @@ int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt, · 457 unmodified lines
491491 }
492492 IWL_EXPORT_SYMBOL(iwl_validate_sar_geo_profile);
493493
494−void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
495− struct iwl_per_chain_offset_group *table)
494+int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
495+ struct iwl_per_chain_offset_group *table)
496496 {
497497 int ret, i, j;
498498
499499 if (!iwl_sar_geo_support(fwrt))
500− return;
500+ return -EOPNOTSUPP;
501501
502502 ret = iwl_sar_get_wgds_table(fwrt);
503503 if (ret < 0) {
@@ -505,7 +505,7 @@ void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, · 1 unmodified line
505505 "Geo SAR BIOS table invalid or unavailable. (%d)\n",
506506 ret);
507507 /* we don't fail if the table is not available */
508− return;
508+ return -ENOENT;
509509 }
510510
511511 BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS *
@@ -530,5 +530,7 @@ void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, · 18 unmodified lines
530530 i, j, value[1], value[2], value[0]);
531531 }
532532 }
533+
534+ return 0;
533535 }
534536 IWL_EXPORT_SYMBOL(iwl_sar_geo_init);
drivers/net/wireless/intel/iwlwifi/fw/acpi.h+8−6
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 * GPL LICENSE SUMMARY
77 *
88 * Copyright(c) 2017 Intel Deutschland GmbH
9− * Copyright(c) 2018 - 2019 Intel Corporation
9+ * Copyright(c) 2018 - 2020 Intel Corporation
1010 *
1111 * This program is free software; you can redistribute it and/or modify
1212 * it under the terms of version 2 of the GNU General Public License as
@@ -27,7 +27,7 @@ · 14 unmodified lines
2727 * BSD LICENSE
2828 *
2929 * Copyright(c) 2017 Intel Deutschland GmbH
30− * Copyright(c) 2018 - 2019 Intel Corporation
30+ * Copyright(c) 2018 - 2020 Intel Corporation
3131 * All rights reserved.
3232 *
3333 * Redistribution and use in source and binary forms, with or without
@@ -171,8 +171,9 @@ bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt); · 137 unmodified lines
171171 int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt,
172172 struct iwl_host_cmd *cmd);
173173
174−void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
175− struct iwl_per_chain_offset_group *table);
174+int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
175+ struct iwl_per_chain_offset_group *table);
176+
176177 #else /* CONFIG_ACPI */
177178
178179 static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method)
@@ -243,9 +244,10 @@ static inline int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt, · 64 unmodified lines
243244 return -ENOENT;
244245 }
245246
246−static inline void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
247− struct iwl_per_chain_offset_group *table)
247+static inline int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
248+ struct iwl_per_chain_offset_group *table)
248249 {
250+ return -ENOENT;
249251 }
250252
251253 #endif /* CONFIG_ACPI */
drivers/net/wireless/intel/iwlwifi/fw/dbg.c+8−17
@@ -8,7 +8,7 @@ · 7 unmodified lines
88 * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved.
99 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
1010 * Copyright(c) 2015 - 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) 2005 - 2014 Intel Corporation. All rights reserved.
3232 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3333 * Copyright(c) 2015 - 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
@@ -1409,11 +1409,7 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt, · 1371 unmodified lines
14091409 goto out;
14101410 }
14111411
1412− /*
1413− * region register have absolute value so apply rxf offset after
1414− * reading the registers
1415− */
1416− offs += rxf_data.offset;
1412+ offs = rxf_data.offset;
14171413
14181414 /* Lock fence */
14191415 iwl_write_prph_no_grab(fwrt->trans, RXF_SET_FENCE_MODE + offs, 0x1);
@@ -2494,10 +2490,7 @@ static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx) · 1074 unmodified lines
24942490 goto out;
24952491 }
24962492
2497− if (iwl_fw_dbg_stop_restart_recording(fwrt, &params, true)) {
2498− IWL_ERR(fwrt, "Failed to stop DBGC recording, aborting dump\n");
2499− goto out;
2500− }
2493+ iwl_fw_dbg_stop_restart_recording(fwrt, &params, true);
25012494
25022495 IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection start\n");
25032496 if (iwl_trans_dbg_ini_valid(fwrt->trans))
@@ -2662,14 +2655,14 @@ static int iwl_fw_dbg_restart_recording(struct iwl_trans *trans, · 158 unmodified lines
26622655 return 0;
26632656 }
26642657
2665−int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
2666− struct iwl_fw_dbg_params *params,
2667− bool stop)
2658+void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
2659+ struct iwl_fw_dbg_params *params,
2660+ bool stop)
26682661 {
26692662 int ret = 0;
26702663
26712664 if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status))
2672− return 0;
2665+ return;
26732666
26742667 if (fw_has_capa(&fwrt->fw->ucode_capa,
26752668 IWL_UCODE_TLV_CAPA_DBG_SUSPEND_RESUME_CMD_SUPP))
@@ -2686,7 +2679,5 @@ int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, · 10 unmodified lines
26862679 iwl_fw_set_dbg_rec_on(fwrt);
26872680 }
26882681 #endif
2689−
2690− return ret;
26912682 }
26922683 IWL_EXPORT_SYMBOL(iwl_fw_dbg_stop_restart_recording);
drivers/net/wireless/intel/iwlwifi/fw/dbg.h+3−3
@@ -239,9 +239,9 @@ _iwl_fw_dbg_trigger_simple_stop(struct iwl_fw_runtime *fwrt, · 238 unmodified lines
239239 _iwl_fw_dbg_trigger_simple_stop((fwrt), (wdev), \
240240 iwl_fw_dbg_get_trigger((fwrt)->fw,\
241241 (trig)))
242−int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
243− struct iwl_fw_dbg_params *params,
244− bool stop);
242+void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
243+ struct iwl_fw_dbg_params *params,
244+ bool stop);
245245
246246 #ifdef CONFIG_IWLWIFI_DEBUGFS
247247 static inline void iwl_fw_set_dbg_rec_on(struct iwl_fw_runtime *fwrt)
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_len[i])
1470+ if (!pieces->dbg_conf_tlv[i])
14711471 goto out_free_fw;
14721472 }
14731473 }
drivers/net/wireless/intel/iwlwifi/mvm/fw.c+8−1
@@ -762,10 +762,17 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) · 761 unmodified lines
762762 u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT);
763763 union geo_tx_power_profiles_cmd cmd;
764764 u16 len;
765+ int ret;
765766
766767 cmd.geo_cmd.ops = cpu_to_le32(IWL_PER_CHAIN_OFFSET_SET_TABLES);
767768
768− iwl_sar_geo_init(&mvm->fwrt, cmd.geo_cmd.table);
769+ ret = iwl_sar_geo_init(&mvm->fwrt, cmd.geo_cmd.table);
770+ /*
771+ * It is a valid scenario to not support SAR, or miss wgds table,
772+ * but in that case there is no need to send the command.
773+ */
774+ if (ret)
775+ return 0;
769776
770777 cmd.geo_cmd.table_revision = cpu_to_le32(mvm->fwrt.geo_rev);
771778
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c+2−1
@@ -308,7 +308,8 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) · 307 unmodified lines
308308 }
309309
310310 /* PHY_SKU section is mandatory in B0 */
311− if (!mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU].data) {
311+ if (mvm->trans->cfg->nvm_type == IWL_NVM_EXT &&
312+ !mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU].data) {
312313 IWL_ERR(mvm,
313314 "Can't parse phy_sku in B0, empty sections\n");
314315 return NULL;
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c+26−9
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 * GPL LICENSE SUMMARY
77 *
88 * Copyright(c) 2017 Intel Deutschland GmbH
9− * Copyright(c) 2018 - 2019 Intel Corporation
9+ * Copyright(c) 2018 - 2020 Intel Corporation
1010 *
1111 * This program is free software; you can redistribute it and/or modify
1212 * it under the terms of version 2 of the GNU General Public License as
@@ -27,7 +27,7 @@ · 14 unmodified lines
2727 * BSD LICENSE
2828 *
2929 * Copyright(c) 2017 Intel Deutschland GmbH
30− * Copyright(c) 2018 - 2019 Intel Corporation
30+ * Copyright(c) 2018 - 2020 Intel Corporation
3131 * All rights reserved.
3232 *
3333 * Redistribution and use in source and binary forms, with or without
@@ -147,7 +147,11 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, · 113 unmodified lines
147147 (vht_ena && (vht_cap->cap & IEEE80211_VHT_CAP_RXLDPC))))
148148 flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK;
149149
150− /* consider our LDPC support in case of HE */
150+ /* consider LDPC support in case of HE */
151+ if (he_cap->has_he && (he_cap->he_cap_elem.phy_cap_info[1] &
152+ IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
153+ flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK;
154+
151155 if (sband->iftype_data && sband->iftype_data->he_cap.has_he &&
152156 !(sband->iftype_data->he_cap.he_cap_elem.phy_cap_info[1] &
153157 IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
@@ -191,11 +195,13 @@ rs_fw_vht_set_enabled_rates(const struct ieee80211_sta *sta, · 37 unmodified lines
191195 {
192196 u16 supp;
193197 int i, highest_mcs;
198+ u8 nss = sta->rx_nss;
194199
195− for (i = 0; i < sta->rx_nss; i++) {
196− if (i == IWL_TLC_NSS_MAX)
197− break;
200+ /* the station support only a single receive chain */
201+ if (sta->smps_mode == IEEE80211_SMPS_STATIC)
202+ nss = 1;
198203
204+ for (i = 0; i < nss && i < IWL_TLC_NSS_MAX; i++) {
199205 highest_mcs = rs_fw_vht_highest_rx_mcs_index(vht_cap, i + 1);
200206 if (!highest_mcs)
201207 continue;
@@ -241,8 +247,13 @@ rs_fw_he_set_enabled_rates(const struct ieee80211_sta *sta, · 39 unmodified lines
241247 u16 tx_mcs_160 =
242248 le16_to_cpu(sband->iftype_data->he_cap.he_mcs_nss_supp.tx_mcs_160);
243249 int i;
250+ u8 nss = sta->rx_nss;
251+
252+ /* the station support only a single receive chain */
253+ if (sta->smps_mode == IEEE80211_SMPS_STATIC)
254+ nss = 1;
244255
245− for (i = 0; i < sta->rx_nss && i < IWL_TLC_NSS_MAX; i++) {
256+ for (i = 0; i < nss && i < IWL_TLC_NSS_MAX; i++) {
246257 u16 _mcs_160 = (mcs_160 >> (2 * i)) & 0x3;
247258 u16 _mcs_80 = (mcs_80 >> (2 * i)) & 0x3;
248259 u16 _tx_mcs_160 = (tx_mcs_160 >> (2 * i)) & 0x3;
@@ -303,8 +314,14 @@ static void rs_fw_set_supp_rates(struct ieee80211_sta *sta, · 54 unmodified lines
303314 cmd->mode = IWL_TLC_MNG_MODE_HT;
304315 cmd->ht_rates[IWL_TLC_NSS_1][IWL_TLC_HT_BW_NONE_160] =
305316 cpu_to_le16(ht_cap->mcs.rx_mask[0]);
306− cmd->ht_rates[IWL_TLC_NSS_2][IWL_TLC_HT_BW_NONE_160] =
307− cpu_to_le16(ht_cap->mcs.rx_mask[1]);
317+
318+ /* the station support only a single receive chain */
319+ if (sta->smps_mode == IEEE80211_SMPS_STATIC)
320+ cmd->ht_rates[IWL_TLC_NSS_2][IWL_TLC_HT_BW_NONE_160] =
321+ 0;
322+ else
323+ cmd->ht_rates[IWL_TLC_NSS_2][IWL_TLC_HT_BW_NONE_160] =
324+ cpu_to_le16(ht_cap->mcs.rx_mask[1]);
308325 }
309326 }
310327
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c+4−0
@@ -785,7 +785,9 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm, · 784 unmodified lines
785785 if (!le32_to_cpu(notif->status)) {
786786 iwl_mvm_te_check_disconnect(mvm, vif,
787787 "Session protection failure");
788+ spin_lock_bh(&mvm->time_event_lock);
788789 iwl_mvm_te_clear_data(mvm, te_data);
790+ spin_unlock_bh(&mvm->time_event_lock);
789791 }
790792
791793 if (le32_to_cpu(notif->start)) {
@@ -801,7 +803,9 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm, · 9 unmodified lines
801803 */
802804 iwl_mvm_te_check_disconnect(mvm, vif,
803805 "No beacon heard and the session protection is over already...");
806+ spin_lock_bh(&mvm->time_event_lock);
804807 iwl_mvm_te_clear_data(mvm, te_data);
808+ spin_unlock_bh(&mvm->time_event_lock);
805809 }
806810
807811 goto out_unlock;
drivers/net/wireless/intel/iwlwifi/pcie/drv.c+3−0
@@ -981,6 +981,9 @@ static const struct iwl_dev_info iwl_dev_info_table[] = { · 980 unmodified lines
981981 IWL_DEV_INFO(0x2526, 0x0014, iwl9260_2ac_160_cfg, iwl9260_160_name),
982982 IWL_DEV_INFO(0x2526, 0x0018, iwl9260_2ac_160_cfg, iwl9260_160_name),
983983 IWL_DEV_INFO(0x2526, 0x001C, iwl9260_2ac_160_cfg, iwl9260_160_name),
984+ IWL_DEV_INFO(0x2526, 0x4010, iwl9260_2ac_160_cfg, iwl9260_160_name),
985+ IWL_DEV_INFO(0x2526, 0x4018, iwl9260_2ac_160_cfg, iwl9260_160_name),
986+ IWL_DEV_INFO(0x2526, 0x401C, iwl9260_2ac_160_cfg, iwl9260_160_name),
984987 IWL_DEV_INFO(0x2526, 0x6010, iwl9260_2ac_160_cfg, iwl9260_160_name),
985988 IWL_DEV_INFO(0x2526, 0x6014, iwl9260_2ac_160_cfg, iwl9260_160_name),
986989 IWL_DEV_INFO(0x2526, 0x8014, iwl9260_2ac_160_cfg, iwl9260_160_name),
drivers/net/wireless/mediatek/mt76/dma.c+6−3
@@ -447,10 +447,13 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data, · 446 unmodified lines
447447 struct page *page = virt_to_head_page(data);
448448 int offset = data - page_address(page);
449449 struct sk_buff *skb = q->rx_head;
450+ struct skb_shared_info *shinfo = skb_shinfo(skb);
450451
451− offset += q->buf_offset;
452− skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page, offset, len,
453− q->buf_size);
452+ if (shinfo->nr_frags < ARRAY_SIZE(shinfo->frags)) {
453+ offset += q->buf_offset;
454+ skb_add_rx_frag(skb, shinfo->nr_frags, page, offset, len,
455+ q->buf_size);
456+ }
454457
455458 if (more)
456459 return;
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h+1−0
@@ -561,6 +561,7 @@ static inline void clear_pci_tx_desc_content(__le32 *__pdesc, int _size) · 560 unmodified lines
561561 rxmcs == DESC92C_RATE11M)
562562
563563 struct phy_status_rpt {
564+ u8 padding[2];
564565 u8 ch_corr[2];
565566 u8 cck_sig_qual_ofdm_pwdb_all;
566567 u8 cck_agc_rpt_ofdm_cfosho_a;
drivers/net/wireless/ti/wlcore/main.c+1−1
@@ -6274,7 +6274,7 @@ static int wl1271_init_ieee80211(struct wl1271 *wl) · 6273 unmodified lines
62746274 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD |
62756275 WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL |
62766276 WIPHY_FLAG_HAS_CHANNEL_SWITCH |
6277−+ WIPHY_FLAG_IBSS_RSN;
6277+ WIPHY_FLAG_IBSS_RSN;
62786278
62796279 wl->hw->wiphy->features |= NL80211_FEATURE_AP_SCAN;
62806280
drivers/nfc/fdp/fdp.c+2−3
@@ -184,7 +184,7 @@ static int fdp_nci_send_patch(struct nci_dev *ndev, u8 conn_id, u8 type) · 183 unmodified lines
184184 const struct firmware *fw;
185185 struct sk_buff *skb;
186186 unsigned long len;
187− u8 max_size, payload_size;
187+ int max_size, payload_size;
188188 int rc = 0;
189189
190190 if ((type == NCI_PATCH_TYPE_OTP && !info->otp_patch) ||
@@ -207,8 +207,7 @@ static int fdp_nci_send_patch(struct nci_dev *ndev, u8 conn_id, u8 type) · 16 unmodified lines
207207
208208 while (len) {
209209
210− payload_size = min_t(unsigned long, (unsigned long) max_size,
211− len);
210+ payload_size = min_t(unsigned long, max_size, len);
212211
213212 skb = nci_skb_alloc(ndev, (NCI_CTRL_HDR_SIZE + payload_size),
214213 GFP_KERNEL);
drivers/nvme/host/rdma.c+5−3
@@ -850,9 +850,11 @@ out_free_tagset: · 849 unmodified lines
850850 if (new)
851851 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset);
852852 out_free_async_qe:
853− nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
854− sizeof(struct nvme_command), DMA_TO_DEVICE);
855− ctrl->async_event_sqe.data = NULL;
853+ if (ctrl->async_event_sqe.data) {
854+ nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
855+ sizeof(struct nvme_command), DMA_TO_DEVICE);
856+ ctrl->async_event_sqe.data = NULL;
857+ }
856858 out_free_queue:
857859 nvme_rdma_free_queue(&ctrl->queues[0]);
858860 return error;
drivers/nvme/target/tcp.c+9−3
@@ -515,7 +515,7 @@ static int nvmet_try_send_data_pdu(struct nvmet_tcp_cmd *cmd) · 514 unmodified lines
515515 return 1;
516516 }
517517
518−static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd)
518+static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd, bool last_in_batch)
519519 {
520520 struct nvmet_tcp_queue *queue = cmd->queue;
521521 int ret;
@@ -523,9 +523,15 @@ static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd) · 1 unmodified line
523523 while (cmd->cur_sg) {
524524 struct page *page = sg_page(cmd->cur_sg);
525525 u32 left = cmd->cur_sg->length - cmd->offset;
526+ int flags = MSG_DONTWAIT;
527+
528+ if ((!last_in_batch && cmd->queue->send_list_len) ||
529+ cmd->wbytes_done + left < cmd->req.transfer_len ||
530+ queue->data_digest || !queue->nvme_sq.sqhd_disabled)
531+ flags |= MSG_MORE;
526532
527533 ret = kernel_sendpage(cmd->queue->sock, page, cmd->offset,
528− left, MSG_DONTWAIT | MSG_MORE);
534+ left, flags);
529535 if (ret <= 0)
530536 return ret;
531537
@@ -660,7 +666,7 @@ static int nvmet_tcp_try_send_one(struct nvmet_tcp_queue *queue, · 128 unmodified lines
660666 }
661667
662668 if (cmd->state == NVMET_TCP_SEND_DATA) {
663− ret = nvmet_try_send_data(cmd);
669+ ret = nvmet_try_send_data(cmd, last_in_batch);
664670 if (ret <= 0)
665671 goto done_send;
666672 }
drivers/of/of_mdio.c+1−0
@@ -306,6 +306,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) · 305 unmodified lines
306306 rc = of_mdiobus_register_phy(mdio, child, addr);
307307 if (rc && rc != -ENODEV)
308308 goto unregister;
309+ break;
309310 }
310311 }
311312 }
drivers/pinctrl/cirrus/pinctrl-madera-core.c+13−0
@@ -1073,13 +1073,26 @@ static int madera_pin_probe(struct platform_device *pdev) · 1072 unmodified lines
10731073 return ret;
10741074 }
10751075
1076+ platform_set_drvdata(pdev, priv);
1077+
10761078 dev_dbg(priv->dev, "pinctrl probed ok\n");
10771079
10781080 return 0;
10791081 }
10801082
1083+static int madera_pin_remove(struct platform_device *pdev)
1084+{
1085+ struct madera_pin_private *priv = platform_get_drvdata(pdev);
1086+
1087+ if (priv->madera->pdata.gpio_configs)
1088+ pinctrl_unregister_mappings(priv->madera->pdata.gpio_configs);
1089+
1090+ return 0;
1091+}
1092+
10811093 static struct platform_driver madera_pin_driver = {
10821094 .probe = madera_pin_probe,
1095+ .remove = madera_pin_remove,
10831096 .driver = {
10841097 .name = "madera-pinctrl",
10851098 },
drivers/pinctrl/core.c+0−1
@@ -2021,7 +2021,6 @@ static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev) · 2020 unmodified lines
20212021 return PTR_ERR(pctldev->p);
20222022 }
20232023
2024− kref_get(&pctldev->p->users);
20252024 pctldev->hog_default =
20262025 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
20272026 if (IS_ERR(pctldev->hog_default)) {
drivers/pinctrl/freescale/pinctrl-scu.c+2−2
@@ -23,12 +23,12 @@ struct imx_sc_msg_req_pad_set { · 22 unmodified lines
2323 struct imx_sc_rpc_msg hdr;
2424 u32 val;
2525 u16 pad;
26−} __packed;
26+} __packed __aligned(4);
2727
2828 struct imx_sc_msg_req_pad_get {
2929 struct imx_sc_rpc_msg hdr;
3030 u16 pad;
31−} __packed;
31+} __packed __aligned(4);
3232
3333 struct imx_sc_msg_resp_pad_get {
3434 struct imx_sc_rpc_msg hdr;
drivers/pinctrl/meson/pinctrl-meson-gxl.c+2−2
@@ -147,8 +147,8 @@ static const unsigned int sdio_d0_pins[] = { GPIOX_0 }; · 146 unmodified lines
147147 static const unsigned int sdio_d1_pins[] = { GPIOX_1 };
148148 static const unsigned int sdio_d2_pins[] = { GPIOX_2 };
149149 static const unsigned int sdio_d3_pins[] = { GPIOX_3 };
150−static const unsigned int sdio_cmd_pins[] = { GPIOX_4 };
151−static const unsigned int sdio_clk_pins[] = { GPIOX_5 };
150+static const unsigned int sdio_clk_pins[] = { GPIOX_4 };
151+static const unsigned int sdio_cmd_pins[] = { GPIOX_5 };
152152 static const unsigned int sdio_irq_pins[] = { GPIOX_7 };
153153
154154 static const unsigned int nand_ce0_pins[] = { BOOT_8 };
drivers/pinctrl/pinctrl-falcon.c+1−1
@@ -451,7 +451,7 @@ static int pinctrl_falcon_probe(struct platform_device *pdev) · 450 unmodified lines
451451 falcon_info.clk[*bank] = clk_get(&ppdev->dev, NULL);
452452 if (IS_ERR(falcon_info.clk[*bank])) {
453453 dev_err(&ppdev->dev, "failed to get clock\n");
454− of_node_put(np)
454+ of_node_put(np);
455455 return PTR_ERR(falcon_info.clk[*bank]);
456456 }
457457 falcon_info.membase[*bank] = devm_ioremap_resource(&pdev->dev,
drivers/pinctrl/qcom/pinctrl-msm.c+1−2
@@ -1104,7 +1104,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) · 1103 unmodified lines
11041104 pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
11051105 pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
11061106 pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
1107− pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
11081107 pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
11091108 pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
11101109 pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
@@ -1118,7 +1117,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) · 7 unmodified lines
11181117 if (!chip->irq.parent_domain)
11191118 return -EPROBE_DEFER;
11201119 chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
1121−
1120+ pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
11221121 /*
11231122 * Let's skip handling the GPIOs, if the parent irqchip
11241123 * is handling the direct connect IRQ of the GPIO.
drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c+1−1
@@ -794,7 +794,7 @@ static int pm8xxx_gpio_probe(struct platform_device *pdev) · 793 unmodified lines
794794 girq->fwnode = of_node_to_fwnode(pctrl->dev->of_node);
795795 girq->parent_domain = parent_domain;
796796 girq->child_to_parent_hwirq = pm8xxx_child_to_parent_hwirq;
797− girq->populate_parent_alloc_arg = gpiochip_populate_parent_fwspec_fourcell;
797+ girq->populate_parent_alloc_arg = gpiochip_populate_parent_fwspec_twocell;
798798 girq->child_offset_to_irq = pm8xxx_child_offset_to_irq;
799799 girq->child_irq_domain_ops.translate = pm8xxx_domain_translate;
800800
drivers/rtc/Kconfig+1−0
@@ -327,6 +327,7 @@ config RTC_DRV_MAX6900 · 326 unmodified lines
327327 config RTC_DRV_MAX8907
328328 tristate "Maxim MAX8907"
329329 depends on MFD_MAX8907 || COMPILE_TEST
330+ select REGMAP_IRQ
330331 help
331332 If you say yes here you will get support for the
332333 RTC of Maxim MAX8907 PMIC.
drivers/s390/block/dasd.c+24−3
@@ -178,6 +178,8 @@ struct dasd_block *dasd_alloc_block(void) · 177 unmodified lines
178178 (unsigned long) block);
179179 INIT_LIST_HEAD(&block->ccw_queue);
180180 spin_lock_init(&block->queue_lock);
181+ INIT_LIST_HEAD(&block->format_list);
182+ spin_lock_init(&block->format_lock);
181183 timer_setup(&block->timer, dasd_block_timeout, 0);
182184 spin_lock_init(&block->profile.lock);
183185
@@ -1779,20 +1781,26 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm, · 1595 unmodified lines
17791781
17801782 if (dasd_ese_needs_format(cqr->block, irb)) {
17811783 if (rq_data_dir((struct request *)cqr->callback_data) == READ) {
1782− device->discipline->ese_read(cqr);
1784+ device->discipline->ese_read(cqr, irb);
17831785 cqr->status = DASD_CQR_SUCCESS;
17841786 cqr->stopclk = now;
17851787 dasd_device_clear_timer(device);
17861788 dasd_schedule_device_bh(device);
17871789 return;
17881790 }
1789− fcqr = device->discipline->ese_format(device, cqr);
1791+ fcqr = device->discipline->ese_format(device, cqr, irb);
17901792 if (IS_ERR(fcqr)) {
1793+ if (PTR_ERR(fcqr) == -EINVAL) {
1794+ cqr->status = DASD_CQR_ERROR;
1795+ return;
1796+ }
17911797 /*
17921798 * If we can't format now, let the request go
17931799 * one extra round. Maybe we can format later.
17941800 */
17951801 cqr->status = DASD_CQR_QUEUED;
1802+ dasd_schedule_device_bh(device);
1803+ return;
17961804 } else {
17971805 fcqr->status = DASD_CQR_QUEUED;
17981806 cqr->status = DASD_CQR_QUEUED;
@@ -2748,11 +2756,13 @@ static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr) · 949 unmodified lines
27482756 {
27492757 struct request *req;
27502758 blk_status_t error = BLK_STS_OK;
2759+ unsigned int proc_bytes;
27512760 int status;
27522761
27532762 req = (struct request *) cqr->callback_data;
27542763 dasd_profile_end(cqr->block, cqr, req);
27552764
2765+ proc_bytes = cqr->proc_bytes;
27562766 status = cqr->block->base->discipline->free_cp(cqr, req);
27572767 if (status < 0)
27582768 error = errno_to_blk_status(status);
@@ -2783,7 +2793,18 @@ static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr) · 24 unmodified lines
27832793 blk_mq_end_request(req, error);
27842794 blk_mq_run_hw_queues(req->q, true);
27852795 } else {
2786− blk_mq_complete_request(req);
2796+ /*
2797+ * Partial completed requests can happen with ESE devices.
2798+ * During read we might have gotten a NRF error and have to
2799+ * complete a request partially.
2800+ */
2801+ if (proc_bytes) {
2802+ blk_update_request(req, BLK_STS_OK,
2803+ blk_rq_bytes(req) - proc_bytes);
2804+ blk_mq_requeue_request(req, true);
2805+ } else {
2806+ blk_mq_complete_request(req);
2807+ }
27872808 }
27882809 }
27892810
drivers/s390/block/dasd_eckd.c+156−7
@@ -207,6 +207,45 @@ static void set_ch_t(struct ch_t *geo, __u32 cyl, __u8 head) · 206 unmodified lines
207207 geo->head |= head;
208208 }
209209
210+/*
211+ * calculate failing track from sense data depending if
212+ * it is an EAV device or not
213+ */
214+static int dasd_eckd_track_from_irb(struct irb *irb, struct dasd_device *device,
215+ sector_t *track)
216+{
217+ struct dasd_eckd_private *private = device->private;
218+ u8 *sense = NULL;
219+ u32 cyl;
220+ u8 head;
221+
222+ sense = dasd_get_sense(irb);
223+ if (!sense) {
224+ DBF_DEV_EVENT(DBF_WARNING, device, "%s",
225+ "ESE error no sense data\n");
226+ return -EINVAL;
227+ }
228+ if (!(sense[27] & DASD_SENSE_BIT_2)) {
229+ DBF_DEV_EVENT(DBF_WARNING, device, "%s",
230+ "ESE error no valid track data\n");
231+ return -EINVAL;
232+ }
233+
234+ if (sense[27] & DASD_SENSE_BIT_3) {
235+ /* enhanced addressing */
236+ cyl = sense[30] << 20;
237+ cyl |= (sense[31] & 0xF0) << 12;
238+ cyl |= sense[28] << 8;
239+ cyl |= sense[29];
240+ } else {
241+ cyl = sense[29] << 8;
242+ cyl |= sense[30];
243+ }
244+ head = sense[31] & 0x0F;
245+ *track = cyl * private->rdc_data.trk_per_cyl + head;
246+ return 0;
247+}
248+
210249 static int set_timestamp(struct ccw1 *ccw, struct DE_eckd_data *data,
211250 struct dasd_device *device)
212251 {
@@ -2986,6 +3025,37 @@ static int dasd_eckd_format_device(struct dasd_device *base, · 2773 unmodified lines
29863025 0, NULL);
29873026 }
29883027
3028+static bool test_and_set_format_track(struct dasd_format_entry *to_format,
3029+ struct dasd_block *block)
3030+{
3031+ struct dasd_format_entry *format;
3032+ unsigned long flags;
3033+ bool rc = false;
3034+
3035+ spin_lock_irqsave(&block->format_lock, flags);
3036+ list_for_each_entry(format, &block->format_list, list) {
3037+ if (format->track == to_format->track) {
3038+ rc = true;
3039+ goto out;
3040+ }
3041+ }
3042+ list_add_tail(&to_format->list, &block->format_list);
3043+
3044+out:
3045+ spin_unlock_irqrestore(&block->format_lock, flags);
3046+ return rc;
3047+}
3048+
3049+static void clear_format_track(struct dasd_format_entry *format,
3050+ struct dasd_block *block)
3051+{
3052+ unsigned long flags;
3053+
3054+ spin_lock_irqsave(&block->format_lock, flags);
3055+ list_del_init(&format->list);
3056+ spin_unlock_irqrestore(&block->format_lock, flags);
3057+}
3058+
29893059 /*
29903060 * Callback function to free ESE format requests.
29913061 */
@@ -2993,15 +3063,19 @@ static void dasd_eckd_ese_format_cb(struct dasd_ccw_req *cqr, void *data) · 1 unmodified line
29933063 {
29943064 struct dasd_device *device = cqr->startdev;
29953065 struct dasd_eckd_private *private = device->private;
3066+ struct dasd_format_entry *format = data;
29963067
3068+ clear_format_track(format, cqr->basedev->block);
29973069 private->count--;
29983070 dasd_ffree_request(cqr, device);
29993071 }
30003072
30013073 static struct dasd_ccw_req *
3002−dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr)
3074+dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr,
3075+ struct irb *irb)
30033076 {
30043077 struct dasd_eckd_private *private;
3078+ struct dasd_format_entry *format;
30053079 struct format_data_t fdata;
30063080 unsigned int recs_per_trk;
30073081 struct dasd_ccw_req *fcqr;
@@ -3011,23 +3085,39 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 3 unmodified lines
30113085 struct request *req;
30123086 sector_t first_trk;
30133087 sector_t last_trk;
3088+ sector_t curr_trk;
30143089 int rc;
30153090
30163091 req = cqr->callback_data;
3017− base = cqr->block->base;
3092+ block = cqr->block;
3093+ base = block->base;
30183094 private = base->private;
3019− block = base->block;
30203095 blksize = block->bp_block;
30213096 recs_per_trk = recs_per_track(&private->rdc_data, 0, blksize);
3097+ format = &startdev->format_entry;
30223098
30233099 first_trk = blk_rq_pos(req) >> block->s2b_shift;
30243100 sector_div(first_trk, recs_per_trk);
30253101 last_trk =
30263102 (blk_rq_pos(req) + blk_rq_sectors(req) - 1) >> block->s2b_shift;
30273103 sector_div(last_trk, recs_per_trk);
3104+ rc = dasd_eckd_track_from_irb(irb, base, &curr_trk);
3105+ if (rc)
3106+ return ERR_PTR(rc);
30283107
3029− fdata.start_unit = first_trk;
3030− fdata.stop_unit = last_trk;
3108+ if (curr_trk < first_trk || curr_trk > last_trk) {
3109+ DBF_DEV_EVENT(DBF_WARNING, startdev,
3110+ "ESE error track %llu not within range %llu - %llu\n",
3111+ curr_trk, first_trk, last_trk);
3112+ return ERR_PTR(-EINVAL);
3113+ }
3114+ format->track = curr_trk;
3115+ /* test if track is already in formatting by another thread */
3116+ if (test_and_set_format_track(format, block))
3117+ return ERR_PTR(-EEXIST);
3118+
3119+ fdata.start_unit = curr_trk;
3120+ fdata.stop_unit = curr_trk;
30313121 fdata.blksize = blksize;
30323122 fdata.intensity = private->uses_cdl ? DASD_FMT_INT_COMPAT : 0;
30333123
@@ -3044,6 +3134,7 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 10 unmodified lines
30443134 return fcqr;
30453135
30463136 fcqr->callback = dasd_eckd_ese_format_cb;
3137+ fcqr->callback_data = (void *) format;
30473138
30483139 return fcqr;
30493140 }
@@ -3051,29 +3142,87 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 1 unmodified line
30513142 /*
30523143 * When data is read from an unformatted area of an ESE volume, this function
30533144 * returns zeroed data and thereby mimics a read of zero data.
3145+ *
3146+ * The first unformatted track is the one that got the NRF error, the address is
3147+ * encoded in the sense data.
3148+ *
3149+ * All tracks before have returned valid data and should not be touched.
3150+ * All tracks after the unformatted track might be formatted or not. This is
3151+ * currently not known, remember the processed data and return the remainder of
3152+ * the request to the blocklayer in __dasd_cleanup_cqr().
30543153 */
3055−static void dasd_eckd_ese_read(struct dasd_ccw_req *cqr)
3154+static int dasd_eckd_ese_read(struct dasd_ccw_req *cqr, struct irb *irb)
30563155 {
3156+ struct dasd_eckd_private *private;
3157+ sector_t first_trk, last_trk;
3158+ sector_t first_blk, last_blk;
30573159 unsigned int blksize, off;
3160+ unsigned int recs_per_trk;
30583161 struct dasd_device *base;
30593162 struct req_iterator iter;
3163+ struct dasd_block *block;
3164+ unsigned int skip_block;
3165+ unsigned int blk_count;
30603166 struct request *req;
30613167 struct bio_vec bv;
3168+ sector_t curr_trk;
3169+ sector_t end_blk;
30623170 char *dst;
3171+ int rc;
30633172
30643173 req = (struct request *) cqr->callback_data;
30653174 base = cqr->block->base;
30663175 blksize = base->block->bp_block;
3176+ block = cqr->block;
3177+ private = base->private;
3178+ skip_block = 0;
3179+ blk_count = 0;
3180+
3181+ recs_per_trk = recs_per_track(&private->rdc_data, 0, blksize);
3182+ first_trk = first_blk = blk_rq_pos(req) >> block->s2b_shift;
3183+ sector_div(first_trk, recs_per_trk);
3184+ last_trk = last_blk =
3185+ (blk_rq_pos(req) + blk_rq_sectors(req) - 1) >> block->s2b_shift;
3186+ sector_div(last_trk, recs_per_trk);
3187+ rc = dasd_eckd_track_from_irb(irb, base, &curr_trk);
3188+ if (rc)
3189+ return rc;
3190+
3191+ /* sanity check if the current track from sense data is valid */
3192+ if (curr_trk < first_trk || curr_trk > last_trk) {
3193+ DBF_DEV_EVENT(DBF_WARNING, base,
3194+ "ESE error track %llu not within range %llu - %llu\n",
3195+ curr_trk, first_trk, last_trk);
3196+ return -EINVAL;
3197+ }
3198+
3199+ /*
3200+ * if not the first track got the NRF error we have to skip over valid
3201+ * blocks
3202+ */
3203+ if (curr_trk != first_trk)
3204+ skip_block = curr_trk * recs_per_trk - first_blk;
3205+
3206+ /* we have no information beyond the current track */
3207+ end_blk = (curr_trk + 1) * recs_per_trk;
30673208
30683209 rq_for_each_segment(bv, req, iter) {
30693210 dst = page_address(bv.bv_page) + bv.bv_offset;
30703211 for (off = 0; off < bv.bv_len; off += blksize) {
3071− if (dst && rq_data_dir(req) == READ) {
3212+ if (first_blk + blk_count >= end_blk) {
3213+ cqr->proc_bytes = blk_count * blksize;
3214+ return 0;
3215+ }
3216+ if (dst && !skip_block) {
30723217 dst += off;
30733218 memset(dst, 0, blksize);
3219+ } else {
3220+ skip_block--;
30743221 }
3222+ blk_count++;
30753223 }
30763224 }
3225+ return 0;
30773226 }
30783227
30793228 /*
drivers/s390/block/dasd_int.h+13−2
@@ -187,6 +187,7 @@ struct dasd_ccw_req { · 186 unmodified lines
187187
188188 void (*callback)(struct dasd_ccw_req *, void *data);
189189 void *callback_data;
190+ unsigned int proc_bytes; /* bytes for partial completion */
190191 };
191192
192193 /*
@@ -387,8 +388,9 @@ struct dasd_discipline { · 194 unmodified lines
387388 int (*ext_pool_warn_thrshld)(struct dasd_device *);
388389 int (*ext_pool_oos)(struct dasd_device *);
389390 int (*ext_pool_exhaust)(struct dasd_device *, struct dasd_ccw_req *);
390− struct dasd_ccw_req *(*ese_format)(struct dasd_device *, struct dasd_ccw_req *);
391− void (*ese_read)(struct dasd_ccw_req *);
391+ struct dasd_ccw_req *(*ese_format)(struct dasd_device *,
392+ struct dasd_ccw_req *, struct irb *);
393+ int (*ese_read)(struct dasd_ccw_req *, struct irb *);
392394 };
393395
394396 extern struct dasd_discipline *dasd_diag_discipline_pointer;
@@ -474,6 +476,11 @@ struct dasd_profile { · 79 unmodified lines
474476 spinlock_t lock;
475477 };
476478
479+struct dasd_format_entry {
480+ struct list_head list;
481+ sector_t track;
482+};
483+
477484 struct dasd_device {
478485 /* Block device stuff. */
479486 struct dasd_block *block;
@@ -539,6 +546,7 @@ struct dasd_device { · 59 unmodified lines
539546 struct dentry *debugfs_dentry;
540547 struct dentry *hosts_dentry;
541548 struct dasd_profile profile;
549+ struct dasd_format_entry format_entry;
542550 };
543551
544552 struct dasd_block {
@@ -564,6 +572,9 @@ struct dasd_block { · 19 unmodified lines
564572
565573 struct dentry *debugfs_dentry;
566574 struct dasd_profile profile;
575+
576+ struct list_head format_list;
577+ spinlock_t format_lock;
567578 };
568579
569580 struct dasd_attention_data {
drivers/s390/net/qeth_core.h+2−2
@@ -369,7 +369,7 @@ enum qeth_qdio_info_states { · 368 unmodified lines
369369 struct qeth_buffer_pool_entry {
370370 struct list_head list;
371371 struct list_head init_list;
372− void *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
372+ struct page *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
373373 };
374374
375375 struct qeth_qdio_buffer_pool {
@@ -983,7 +983,7 @@ extern const struct attribute_group qeth_device_blkt_group; · 607 unmodified lines
983983 extern const struct device_type qeth_generic_devtype;
984984
985985 const char *qeth_get_cardname_short(struct qeth_card *);
986−int qeth_realloc_buffer_pool(struct qeth_card *, int);
986+int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count);
987987 int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id);
988988 void qeth_core_free_discipline(struct qeth_card *);
989989
drivers/s390/net/qeth_core_main.c+118−58
@@ -65,7 +65,6 @@ static struct lock_class_key qdio_out_skb_queue_key; · 64 unmodified lines
6565 static void qeth_issue_next_read_cb(struct qeth_card *card,
6666 struct qeth_cmd_buffer *iob,
6767 unsigned int data_length);
68−static void qeth_free_buffer_pool(struct qeth_card *);
6968 static int qeth_qdio_establish(struct qeth_card *);
7069 static void qeth_free_qdio_queues(struct qeth_card *card);
7170 static void qeth_notify_skbs(struct qeth_qdio_out_q *queue,
@@ -212,49 +211,121 @@ void qeth_clear_working_pool_list(struct qeth_card *card) · 140 unmodified lines
212211 }
213212 EXPORT_SYMBOL_GPL(qeth_clear_working_pool_list);
214213
214+static void qeth_free_pool_entry(struct qeth_buffer_pool_entry *entry)
215+{
216+ unsigned int i;
217+
218+ for (i = 0; i < ARRAY_SIZE(entry->elements); i++) {
219+ if (entry->elements[i])
220+ __free_page(entry->elements[i]);
221+ }
222+
223+ kfree(entry);
224+}
225+
226+static void qeth_free_buffer_pool(struct qeth_card *card)
227+{
228+ struct qeth_buffer_pool_entry *entry, *tmp;
229+
230+ list_for_each_entry_safe(entry, tmp, &card->qdio.init_pool.entry_list,
231+ init_list) {
232+ list_del(&entry->init_list);
233+ qeth_free_pool_entry(entry);
234+ }
235+}
236+
237+static struct qeth_buffer_pool_entry *qeth_alloc_pool_entry(unsigned int pages)
238+{
239+ struct qeth_buffer_pool_entry *entry;
240+ unsigned int i;
241+
242+ entry = kzalloc(sizeof(*entry), GFP_KERNEL);
243+ if (!entry)
244+ return NULL;
245+
246+ for (i = 0; i < pages; i++) {
247+ entry->elements[i] = alloc_page(GFP_KERNEL);
248+
249+ if (!entry->elements[i]) {
250+ qeth_free_pool_entry(entry);
251+ return NULL;
252+ }
253+ }
254+
255+ return entry;
256+}
257+
215258 static int qeth_alloc_buffer_pool(struct qeth_card *card)
216259 {
217− struct qeth_buffer_pool_entry *pool_entry;
218− void *ptr;
219− int i, j;
260+ unsigned int buf_elements = QETH_MAX_BUFFER_ELEMENTS(card);
261+ unsigned int i;
220262
221263 QETH_CARD_TEXT(card, 5, "alocpool");
222264 for (i = 0; i < card->qdio.init_pool.buf_count; ++i) {
223− pool_entry = kzalloc(sizeof(*pool_entry), GFP_KERNEL);
224− if (!pool_entry) {
265+ struct qeth_buffer_pool_entry *entry;
266+
267+ entry = qeth_alloc_pool_entry(buf_elements);
268+ if (!entry) {
225269 qeth_free_buffer_pool(card);
226270 return -ENOMEM;
227271 }
228− for (j = 0; j < QETH_MAX_BUFFER_ELEMENTS(card); ++j) {
229− ptr = (void *) __get_free_page(GFP_KERNEL);
230− if (!ptr) {
231− while (j > 0)
232− free_page((unsigned long)
233− pool_entry->elements[--j]);
234− kfree(pool_entry);
235− qeth_free_buffer_pool(card);
236− return -ENOMEM;
237− }
238− pool_entry->elements[j] = ptr;
239− }
240− list_add(&pool_entry->init_list,
241− &card->qdio.init_pool.entry_list);
272+
273+ list_add(&entry->init_list, &card->qdio.init_pool.entry_list);
242274 }
243275 return 0;
244276 }
245277
246−int qeth_realloc_buffer_pool(struct qeth_card *card, int bufcnt)
278+int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count)
247279 {
280+ unsigned int buf_elements = QETH_MAX_BUFFER_ELEMENTS(card);
281+ struct qeth_qdio_buffer_pool *pool = &card->qdio.init_pool;
282+ struct qeth_buffer_pool_entry *entry, *tmp;
283+ int delta = count - pool->buf_count;
284+ LIST_HEAD(entries);
285+
248286 QETH_CARD_TEXT(card, 2, "realcbp");
249287
250− /* TODO: steel/add buffers from/to a running card's buffer pool (?) */
251− qeth_clear_working_pool_list(card);
252− qeth_free_buffer_pool(card);
253− card->qdio.in_buf_pool.buf_count = bufcnt;
254− card->qdio.init_pool.buf_count = bufcnt;
255− return qeth_alloc_buffer_pool(card);
288+ /* Defer until queue is allocated: */
289+ if (!card->qdio.in_q)
290+ goto out;
291+
292+ /* Remove entries from the pool: */
293+ while (delta < 0) {
294+ entry = list_first_entry(&pool->entry_list,
295+ struct qeth_buffer_pool_entry,
296+ init_list);
297+ list_del(&entry->init_list);
298+ qeth_free_pool_entry(entry);
299+
300+ delta++;
301+ }
302+
303+ /* Allocate additional entries: */
304+ while (delta > 0) {
305+ entry = qeth_alloc_pool_entry(buf_elements);
306+ if (!entry) {
307+ list_for_each_entry_safe(entry, tmp, &entries,
308+ init_list) {
309+ list_del(&entry->init_list);
310+ qeth_free_pool_entry(entry);
311+ }
312+
313+ return -ENOMEM;
314+ }
315+
316+ list_add(&entry->init_list, &entries);
317+
318+ delta--;
319+ }
320+
321+ list_splice(&entries, &pool->entry_list);
322+
323+out:
324+ card->qdio.in_buf_pool.buf_count = count;
325+ pool->buf_count = count;
326+ return 0;
256327 }
257−EXPORT_SYMBOL_GPL(qeth_realloc_buffer_pool);
328+EXPORT_SYMBOL_GPL(qeth_resize_buffer_pool);
258329
259330 static void qeth_free_qdio_queue(struct qeth_qdio_q *q)
260331 {
@@ -1170,19 +1241,6 @@ void qeth_drain_output_queues(struct qeth_card *card) · 909 unmodified lines
11701241 }
11711242 EXPORT_SYMBOL_GPL(qeth_drain_output_queues);
11721243
1173−static void qeth_free_buffer_pool(struct qeth_card *card)
1174−{
1175− struct qeth_buffer_pool_entry *pool_entry, *tmp;
1176− int i = 0;
1177− list_for_each_entry_safe(pool_entry, tmp,
1178− &card->qdio.init_pool.entry_list, init_list){
1179− for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i)
1180− free_page((unsigned long)pool_entry->elements[i]);
1181− list_del(&pool_entry->init_list);
1182− kfree(pool_entry);
1183− }
1184−}
1185−
11861244 static int qeth_osa_set_output_queues(struct qeth_card *card, bool single)
11871245 {
11881246 unsigned int count = single ? 1 : card->dev->num_tx_queues;
@@ -1204,7 +1262,6 @@ static int qeth_osa_set_output_queues(struct qeth_card *card, bool single) · 15 unmodified lines
12041262 if (count == 1)
12051263 dev_info(&card->gdev->dev, "Priority Queueing not supported\n");
12061264
1207− card->qdio.default_out_queue = single ? 0 : QETH_DEFAULT_QUEUE;
12081265 card->qdio.no_out_queues = count;
12091266 return 0;
12101267 }
@@ -2393,7 +2450,6 @@ static void qeth_free_qdio_queues(struct qeth_card *card) · 1182 unmodified lines
23932450 return;
23942451
23952452 qeth_free_cq(card);
2396− cancel_delayed_work_sync(&card->buffer_reclaim_work);
23972453 for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
23982454 if (card->qdio.in_q->bufs[j].rx_skb)
23992455 dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb);
@@ -2575,7 +2631,6 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 175 unmodified lines
25752631 struct list_head *plh;
25762632 struct qeth_buffer_pool_entry *entry;
25772633 int i, free;
2578− struct page *page;
25792634
25802635 if (list_empty(&card->qdio.in_buf_pool.entry_list))
25812636 return NULL;
@@ -2584,7 +2639,7 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 2 unmodified lines
25842639 entry = list_entry(plh, struct qeth_buffer_pool_entry, list);
25852640 free = 1;
25862641 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
2587− if (page_count(virt_to_page(entry->elements[i])) > 1) {
2642+ if (page_count(entry->elements[i]) > 1) {
25882643 free = 0;
25892644 break;
25902645 }
@@ -2599,15 +2654,15 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 8 unmodified lines
25992654 entry = list_entry(card->qdio.in_buf_pool.entry_list.next,
26002655 struct qeth_buffer_pool_entry, list);
26012656 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
2602− if (page_count(virt_to_page(entry->elements[i])) > 1) {
2603− page = alloc_page(GFP_ATOMIC);
2604− if (!page) {
2657+ if (page_count(entry->elements[i]) > 1) {
2658+ struct page *page = alloc_page(GFP_ATOMIC);
2659+
2660+ if (!page)
26052661 return NULL;
2606− } else {
2607− free_page((unsigned long)entry->elements[i]);
2608− entry->elements[i] = page_address(page);
2609− QETH_CARD_STAT_INC(card, rx_sg_alloc_page);
2610− }
2662+
2663+ __free_page(entry->elements[i]);
2664+ entry->elements[i] = page;
2665+ QETH_CARD_STAT_INC(card, rx_sg_alloc_page);
26112666 }
26122667 }
26132668 list_del_init(&entry->list);
@@ -2625,12 +2680,12 @@ static int qeth_init_input_buffer(struct qeth_card *card, · 11 unmodified lines
26252680 ETH_HLEN +
26262681 sizeof(struct ipv6hdr));
26272682 if (!buf->rx_skb)
2628− return 1;
2683+ return -ENOMEM;
26292684 }
26302685
26312686 pool_entry = qeth_find_free_buffer_pool_entry(card);
26322687 if (!pool_entry)
2633− return 1;
2688+ return -ENOBUFS;
26342689
26352690 /*
26362691 * since the buffer is accessed only from the input_tasklet
@@ -2643,7 +2698,7 @@ static int qeth_init_input_buffer(struct qeth_card *card, · 6 unmodified lines
26432698 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
26442699 buf->buffer->element[i].length = PAGE_SIZE;
26452700 buf->buffer->element[i].addr =
2646− virt_to_phys(pool_entry->elements[i]);
2701+ page_to_phys(pool_entry->elements[i]);
26472702 if (i == QETH_MAX_BUFFER_ELEMENTS(card) - 1)
26482703 buf->buffer->element[i].eflags = SBAL_EFLAGS_LAST_ENTRY;
26492704 else
@@ -2675,10 +2730,15 @@ static int qeth_init_qdio_queues(struct qeth_card *card) · 25 unmodified lines
26752730 /* inbound queue */
26762731 qdio_reset_buffers(card->qdio.in_q->qdio_bufs, QDIO_MAX_BUFFERS_PER_Q);
26772732 memset(&card->rx, 0, sizeof(struct qeth_rx));
2733+
26782734 qeth_initialize_working_pool_list(card);
26792735 /*give only as many buffers to hardware as we have buffer pool entries*/
2680− for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i)
2681− qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]);
2736+ for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; i++) {
2737+ rc = qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]);
2738+ if (rc)
2739+ return rc;
2740+ }
2741+
26822742 card->qdio.in_q->next_buf_to_init =
26832743 card->qdio.in_buf_pool.buf_count - 1;
26842744 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0,
drivers/s390/net/qeth_core_sys.c+4−5
@@ -247,8 +247,8 @@ static ssize_t qeth_dev_bufcnt_store(struct device *dev, · 246 unmodified lines
247247 struct device_attribute *attr, const char *buf, size_t count)
248248 {
249249 struct qeth_card *card = dev_get_drvdata(dev);
250+ unsigned int cnt;
250251 char *tmp;
251− int cnt, old_cnt;
252252 int rc = 0;
253253
254254 mutex_lock(&card->conf_mutex);
@@ -257,13 +257,12 @@ static ssize_t qeth_dev_bufcnt_store(struct device *dev, · 2 unmodified lines
257257 goto out;
258258 }
259259
260− old_cnt = card->qdio.in_buf_pool.buf_count;
261260 cnt = simple_strtoul(buf, &tmp, 10);
262261 cnt = (cnt < QETH_IN_BUF_COUNT_MIN) ? QETH_IN_BUF_COUNT_MIN :
263262 ((cnt > QETH_IN_BUF_COUNT_MAX) ? QETH_IN_BUF_COUNT_MAX : cnt);
264− if (old_cnt != cnt) {
265− rc = qeth_realloc_buffer_pool(card, cnt);
266− }
263+
264+ rc = qeth_resize_buffer_pool(card, cnt);
265+
267266 out:
268267 mutex_unlock(&card->conf_mutex);
269268 return rc ? rc : count;
drivers/s390/net/qeth_l2_main.c+1−0
@@ -284,6 +284,7 @@ static void qeth_l2_stop_card(struct qeth_card *card) · 283 unmodified lines
284284 if (card->state == CARD_STATE_SOFTSETUP) {
285285 qeth_clear_ipacmd_list(card);
286286 qeth_drain_output_queues(card);
287+ cancel_delayed_work_sync(&card->buffer_reclaim_work);
287288 card->state = CARD_STATE_DOWN;
288289 }
289290
drivers/s390/net/qeth_l3_main.c+1−0
@@ -1178,6 +1178,7 @@ static void qeth_l3_stop_card(struct qeth_card *card) · 1177 unmodified lines
11781178 qeth_l3_clear_ip_htable(card, 1);
11791179 qeth_clear_ipacmd_list(card);
11801180 qeth_drain_output_queues(card);
1181+ cancel_delayed_work_sync(&card->buffer_reclaim_work);
11811182 card->state = CARD_STATE_DOWN;
11821183 }
11831184
drivers/s390/net/qeth_l3_sys.c+4−5
@@ -206,12 +206,11 @@ static ssize_t qeth_l3_dev_sniffer_store(struct device *dev, · 205 unmodified lines
206206 qdio_get_ssqd_desc(CARD_DDEV(card), &card->ssqd);
207207 if (card->ssqd.qdioac2 & CHSC_AC2_SNIFFER_AVAILABLE) {
208208 card->options.sniffer = i;
209− if (card->qdio.init_pool.buf_count !=
210− QETH_IN_BUF_COUNT_MAX)
211− qeth_realloc_buffer_pool(card,
212− QETH_IN_BUF_COUNT_MAX);
213− } else
209+ qeth_resize_buffer_pool(card, QETH_IN_BUF_COUNT_MAX);
210+ } else {
214211 rc = -EPERM;
212+ }
213+
215214 break;
216215 default:
217216 rc = -EINVAL;
drivers/scsi/ipr.c+2−1
@@ -9950,6 +9950,7 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 9949 unmodified lines
99509950 ioa_cfg->max_devs_supported = ipr_max_devs;
99519951
99529952 if (ioa_cfg->sis64) {
9953+ host->max_channel = IPR_MAX_SIS64_BUSES;
99539954 host->max_id = IPR_MAX_SIS64_TARGETS_PER_BUS;
99549955 host->max_lun = IPR_MAX_SIS64_LUNS_PER_TARGET;
99559956 if (ipr_max_devs > IPR_MAX_SIS64_DEVS)
@@ -9958,6 +9959,7 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 2 unmodified lines
99589959 + ((sizeof(struct ipr_config_table_entry64)
99599960 * ioa_cfg->max_devs_supported)));
99609961 } else {
9962+ host->max_channel = IPR_VSET_BUS;
99619963 host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS;
99629964 host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET;
99639965 if (ipr_max_devs > IPR_MAX_PHYSICAL_DEVS)
@@ -9967,7 +9969,6 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 3 unmodified lines
99679969 * ioa_cfg->max_devs_supported)));
99689970 }
99699971
9970− host->max_channel = IPR_VSET_BUS;
99719972 host->unique_id = host->host_no;
99729973 host->max_cmd_len = IPR_MAX_CDB_LEN;
99739974 host->can_queue = ioa_cfg->max_cmds;
drivers/scsi/ipr.h+1−0
@@ -1300,6 +1300,7 @@ struct ipr_resource_entry { · 1299 unmodified lines
13001300 #define IPR_ARRAY_VIRTUAL_BUS 0x1
13011301 #define IPR_VSET_VIRTUAL_BUS 0x2
13021302 #define IPR_IOAFP_VIRTUAL_BUS 0x3
1303+#define IPR_MAX_SIS64_BUSES 0x4
13031304
13041305 #define IPR_GET_RES_PHYS_LOC(res) \
13051306 (((res)->bus << 24) | ((res)->target << 8) | (res)->lun)
drivers/scsi/qla2xxx/qla_os.c+2−2
@@ -864,7 +864,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) · 863 unmodified lines
864864 goto qc24_fail_command;
865865 }
866866
867− if (atomic_read(&fcport->state) != FCS_ONLINE) {
867+ if (atomic_read(&fcport->state) != FCS_ONLINE || fcport->deleted) {
868868 if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
869869 atomic_read(&base_vha->loop_state) == LOOP_DEAD) {
870870 ql_dbg(ql_dbg_io, vha, 0x3005,
@@ -946,7 +946,7 @@ qla2xxx_mqueuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd, · 75 unmodified lines
946946 goto qc24_fail_command;
947947 }
948948
949− if (atomic_read(&fcport->state) != FCS_ONLINE) {
949+ if (atomic_read(&fcport->state) != FCS_ONLINE || fcport->deleted) {
950950 if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
951951 atomic_read(&base_vha->loop_state) == LOOP_DEAD) {
952952 ql_dbg(ql_dbg_io, vha, 0x3077,
drivers/scsi/sd.c+3−1
@@ -3169,9 +3169,11 @@ static int sd_revalidate_disk(struct gendisk *disk) · 3168 unmodified lines
31693169 if (sd_validate_opt_xfer_size(sdkp, dev_max)) {
31703170 q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
31713171 rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
3172− } else
3172+ } else {
3173+ q->limits.io_opt = 0;
31733174 rw_max = min_not_zero(logical_to_sectors(sdp, dev_max),
31743175 (sector_t)BLK_DEF_MAX_SECTORS);
3176+ }
31753177
31763178 /* Do not exceed controller limit */
31773179 rw_max = min(rw_max, queue_max_hw_sectors(q));
drivers/scsi/ufs/ufshcd.c+14−7
@@ -3884,18 +3884,25 @@ EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit); · 3883 unmodified lines
38843884 void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
38853885 {
38863886 unsigned long flags;
3887+ bool update = false;
38873888
3888− if (!(hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT))
3889+ if (!ufshcd_is_auto_hibern8_supported(hba))
38893890 return;
38903891
38913892 spin_lock_irqsave(hba->host->host_lock, flags);
3892− if (hba->ahit == ahit)
3893− goto out_unlock;
3894− hba->ahit = ahit;
3895− if (!pm_runtime_suspended(hba->dev))
3896− ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER);
3897−out_unlock:
3893+ if (hba->ahit != ahit) {
3894+ hba->ahit = ahit;
3895+ update = true;
3896+ }
38983897 spin_unlock_irqrestore(hba->host->host_lock, flags);
3898+
3899+ if (update && !pm_runtime_suspended(hba->dev)) {
3900+ pm_runtime_get_sync(hba->dev);
3901+ ufshcd_hold(hba, false);
3902+ ufshcd_auto_hibern8_enable(hba);
3903+ ufshcd_release(hba);
3904+ pm_runtime_put(hba->dev);
3905+ }
38993906 }
39003907 EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
39013908
drivers/slimbus/qcom-ngd-ctrl.c+3−0
@@ -1320,6 +1320,9 @@ static const struct of_device_id qcom_slim_ngd_dt_match[] = { · 1319 unmodified lines
13201320 {
13211321 .compatible = "qcom,slim-ngd-v1.5.0",
13221322 .data = &ngd_v1_5_offset_info,
1323+ },{
1324+ .compatible = "qcom,slim-ngd-v2.1.0",
1325+ .data = &ngd_v1_5_offset_info,
13231326 },
13241327 {}
13251328 };
drivers/soc/fsl/dpio/dpio-driver.c+4−4
@@ -233,10 +233,6 @@ static int dpaa2_dpio_probe(struct fsl_mc_device *dpio_dev) · 232 unmodified lines
233233 goto err_allocate_irqs;
234234 }
235235
236− err = register_dpio_irq_handlers(dpio_dev, desc.cpu);
237− if (err)
238− goto err_register_dpio_irq;
239−
240236 priv->io = dpaa2_io_create(&desc, dev);
241237 if (!priv->io) {
242238 dev_err(dev, "dpaa2_io_create failed\n");
@@ -244,6 +240,10 @@ static int dpaa2_dpio_probe(struct fsl_mc_device *dpio_dev) · 1 unmodified line
244240 goto err_dpaa2_io_create;
245241 }
246242
243+ err = register_dpio_irq_handlers(dpio_dev, desc.cpu);
244+ if (err)
245+ goto err_register_dpio_irq;
246+
247247 dev_info(dev, "probed\n");
248248 dev_dbg(dev, " receives_notifications = %d\n",
249249 desc.receives_notifications);
drivers/soc/samsung/exynos-chipid.c+1−1
@@ -59,7 +59,7 @@ static int __init exynos_chipid_early_init(void) · 58 unmodified lines
5959 syscon = of_find_compatible_node(NULL, NULL,
6060 "samsung,exynos4210-chipid");
6161 if (!syscon)
62− return ENODEV;
62+ return -ENODEV;
6363
6464 regmap = device_node_to_regmap(syscon);
6565 of_node_put(syscon);
drivers/staging/greybus/tools/loopback_test.c+11−10
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include <signal.h>
2020
2121 #define MAX_NUM_DEVICES 10
22+#define MAX_SYSFS_PREFIX 0x80
2223 #define MAX_SYSFS_PATH 0x200
2324 #define CSV_MAX_LINE 0x1000
2425 #define SYSFS_MAX_INT 0x20
@@ -67,7 +68,7 @@ struct loopback_results { · 42 unmodified lines
6768 };
6869
6970 struct loopback_device {
70− char name[MAX_SYSFS_PATH];
71+ char name[MAX_STR_LEN];
7172 char sysfs_entry[MAX_SYSFS_PATH];
7273 char debugfs_entry[MAX_SYSFS_PATH];
7374 struct loopback_results results;
@@ -93,8 +94,8 @@ struct loopback_test { · 19 unmodified lines
9394 int stop_all;
9495 int poll_count;
9596 char test_name[MAX_STR_LEN];
96− char sysfs_prefix[MAX_SYSFS_PATH];
97− char debugfs_prefix[MAX_SYSFS_PATH];
97+ char sysfs_prefix[MAX_SYSFS_PREFIX];
98+ char debugfs_prefix[MAX_SYSFS_PREFIX];
9899 struct timespec poll_timeout;
99100 struct loopback_device devices[MAX_NUM_DEVICES];
100101 struct loopback_results aggregate_results;
@@ -637,7 +638,7 @@ baddir: · 536 unmodified lines
637638 static int open_poll_files(struct loopback_test *t)
638639 {
639640 struct loopback_device *dev;
640− char buf[MAX_STR_LEN];
641+ char buf[MAX_SYSFS_PATH + MAX_STR_LEN];
641642 char dummy;
642643 int fds_idx = 0;
643644 int i;
@@ -655,7 +656,7 @@ static int open_poll_files(struct loopback_test *t) · 11 unmodified lines
655656 goto err;
656657 }
657658 read(t->fds[fds_idx].fd, &dummy, 1);
658− t->fds[fds_idx].events = EPOLLERR|EPOLLPRI;
659+ t->fds[fds_idx].events = POLLERR | POLLPRI;
659660 t->fds[fds_idx].revents = 0;
660661 fds_idx++;
661662 }
@@ -748,7 +749,7 @@ static int wait_for_complete(struct loopback_test *t) · 86 unmodified lines
748749 }
749750
750751 for (i = 0; i < t->poll_count; i++) {
751− if (t->fds[i].revents & EPOLLPRI) {
752+ if (t->fds[i].revents & POLLPRI) {
752753 /* Dummy read to clear the event */
753754 read(t->fds[i].fd, &dummy, 1);
754755 number_of_events++;
@@ -907,10 +908,10 @@ int main(int argc, char *argv[]) · 152 unmodified lines
907908 t.iteration_max = atoi(optarg);
908909 break;
909910 case 'S':
910− snprintf(t.sysfs_prefix, MAX_SYSFS_PATH, "%s", optarg);
911+ snprintf(t.sysfs_prefix, MAX_SYSFS_PREFIX, "%s", optarg);
911912 break;
912913 case 'D':
913− snprintf(t.debugfs_prefix, MAX_SYSFS_PATH, "%s", optarg);
914+ snprintf(t.debugfs_prefix, MAX_SYSFS_PREFIX, "%s", optarg);
914915 break;
915916 case 'm':
916917 t.mask = atol(optarg);
@@ -961,10 +962,10 @@ int main(int argc, char *argv[]) · 44 unmodified lines
961962 }
962963
963964 if (!strcmp(t.sysfs_prefix, ""))
964− snprintf(t.sysfs_prefix, MAX_SYSFS_PATH, "%s", sysfs_prefix);
965+ snprintf(t.sysfs_prefix, MAX_SYSFS_PREFIX, "%s", sysfs_prefix);
965966
966967 if (!strcmp(t.debugfs_prefix, ""))
967− snprintf(t.debugfs_prefix, MAX_SYSFS_PATH, "%s", debugfs_prefix);
968+ snprintf(t.debugfs_prefix, MAX_SYSFS_PREFIX, "%s", debugfs_prefix);
968969
969970 ret = find_loopback_devices(&t);
970971 if (ret)
drivers/staging/rtl8188eu/os_dep/usb_intf.c+1−0
@@ -38,6 +38,7 @@ static const struct usb_device_id rtw_usb_id_tbl[] = { · 37 unmodified lines
3838 {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */
3939 {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */
4040 {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */
41+ {USB_DEVICE(0x2C4E, 0x0102)}, /* MERCUSYS MW150US v2 */
4142 {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */
4243 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill RNX-N150NUB */
4344 {} /* Terminating entry */
drivers/staging/speakup/main.c+1−1
@@ -561,7 +561,7 @@ static u_long get_word(struct vc_data *vc) · 560 unmodified lines
561561 return 0;
562562 } else if (tmpx < vc->vc_cols - 2 &&
563563 (ch == SPACE || ch == 0 || (ch < 0x100 && IS_WDLM(ch))) &&
564− get_char(vc, (u_short *)&tmp_pos + 1, &temp) > SPACE) {
564+ get_char(vc, (u_short *)tmp_pos + 1, &temp) > SPACE) {
565565 tmp_pos += 2;
566566 tmpx++;
567567 } else {
drivers/staging/wfx/hif_tx.c+8−7
@@ -140,6 +140,7 @@ int hif_shutdown(struct wfx_dev *wdev) · 139 unmodified lines
140140 else
141141 control_reg_write(wdev, 0);
142142 mutex_unlock(&wdev->hif_cmd.lock);
143+ mutex_unlock(&wdev->hif_cmd.key_renew_lock);
143144 kfree(hif);
144145 return ret;
145146 }
@@ -289,7 +290,7 @@ int hif_stop_scan(struct wfx_vif *wvif) · 143 unmodified lines
289290 }
290291
291292 int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,
292− const struct ieee80211_channel *channel, const u8 *ssidie)
293+ struct ieee80211_channel *channel, const u8 *ssid, int ssidlen)
293294 {
294295 int ret;
295296 struct hif_msg *hif;
@@ -307,9 +308,9 @@ int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf, · 11 unmodified lines
307308 body->basic_rate_set =
308309 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));
309310 memcpy(body->bssid, conf->bssid, sizeof(body->bssid));
310− if (!conf->ibss_joined && ssidie) {
311− body->ssid_length = cpu_to_le32(ssidie[1]);
312− memcpy(body->ssid, &ssidie[2], ssidie[1]);
311+ if (!conf->ibss_joined && ssid) {
312+ body->ssid_length = cpu_to_le32(ssidlen);
313+ memcpy(body->ssid, ssid, ssidlen);
313314 }
314315 wfx_fill_header(hif, wvif->id, HIF_REQ_ID_JOIN, sizeof(*body));
315316 ret = wfx_cmd_send(wvif->wdev, hif, NULL, 0, false);
@@ -427,9 +428,9 @@ int hif_start(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf, · 111 unmodified lines
427428 struct hif_msg *hif;
428429 struct hif_req_start *body = wfx_alloc_hif(sizeof(*body), &hif);
429430
430− body->dtim_period = conf->dtim_period,
431− body->short_preamble = conf->use_short_preamble,
432− body->channel_number = cpu_to_le16(channel->hw_value),
431+ body->dtim_period = conf->dtim_period;
432+ body->short_preamble = conf->use_short_preamble;
433+ body->channel_number = cpu_to_le16(channel->hw_value);
433434 body->beacon_interval = cpu_to_le32(conf->beacon_int);
434435 body->basic_rate_set =
435436 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));
drivers/staging/wfx/hif_tx.h+1−1
@@ -46,7 +46,7 @@ int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req80211, · 45 unmodified lines
4646 int chan_start, int chan_num);
4747 int hif_stop_scan(struct wfx_vif *wvif);
4848 int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,
49− const struct ieee80211_channel *channel, const u8 *ssidie);
49+ struct ieee80211_channel *channel, const u8 *ssid, int ssidlen);
5050 int hif_set_pm(struct wfx_vif *wvif, bool ps, int dynamic_ps_timeout);
5151 int hif_set_bss_params(struct wfx_vif *wvif,
5252 const struct hif_req_set_bss_params *arg);
drivers/staging/wfx/hif_tx_mib.h+10−5
@@ -191,10 +191,10 @@ static inline int hif_set_block_ack_policy(struct wfx_vif *wvif, · 190 unmodified lines
191191 }
192192
193193 static inline int hif_set_association_mode(struct wfx_vif *wvif,
194− struct ieee80211_bss_conf *info,
195− struct ieee80211_sta_ht_cap *ht_cap)
194+ struct ieee80211_bss_conf *info)
196195 {
197196 int basic_rates = wfx_rate_mask_to_hw(wvif->wdev, info->basic_rates);
197+ struct ieee80211_sta *sta = NULL;
198198 struct hif_mib_set_association_mode val = {
199199 .preambtype_use = 1,
200200 .mode = 1,
@@ -204,12 +204,17 @@ static inline int hif_set_association_mode(struct wfx_vif *wvif, · 3 unmodified lines
204204 .basic_rate_set = cpu_to_le32(basic_rates)
205205 };
206206
207+ rcu_read_lock(); // protect sta
208+ if (info->bssid && !info->ibss_joined)
209+ sta = ieee80211_find_sta(wvif->vif, info->bssid);
210+
207211 // FIXME: it is strange to not retrieve all information from bss_info
208− if (ht_cap && ht_cap->ht_supported) {
209− val.mpdu_start_spacing = ht_cap->ampdu_density;
212+ if (sta && sta->ht_cap.ht_supported) {
213+ val.mpdu_start_spacing = sta->ht_cap.ampdu_density;
210214 if (!(info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT))
211− val.greenfield = !!(ht_cap->cap & IEEE80211_HT_CAP_GRN_FLD);
215+ val.greenfield = !!(sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD);
212216 }
217+ rcu_read_unlock();
213218
214219 return hif_write_mib(wvif->wdev, wvif->id,
215220 HIF_MIB_ID_SET_ASSOCIATION_MODE, &val, sizeof(val));
drivers/staging/wfx/sta.c+15−10
@@ -491,9 +491,11 @@ static void wfx_set_mfp(struct wfx_vif *wvif, · 490 unmodified lines
491491 static void wfx_do_join(struct wfx_vif *wvif)
492492 {
493493 int ret;
494− const u8 *ssidie;
495494 struct ieee80211_bss_conf *conf = &wvif->vif->bss_conf;
496495 struct cfg80211_bss *bss = NULL;
496+ u8 ssid[IEEE80211_MAX_SSID_LEN];
497+ const u8 *ssidie = NULL;
498+ int ssidlen = 0;
497499
498500 wfx_tx_lock_flush(wvif->wdev);
499501
@@ -514,11 +516,14 @@ static void wfx_do_join(struct wfx_vif *wvif) · 14 unmodified lines
514516 if (!wvif->beacon_int)
515517 wvif->beacon_int = 1;
516518
517− rcu_read_lock();
519+ rcu_read_lock(); // protect ssidie
518520 if (!conf->ibss_joined)
519521 ssidie = ieee80211_bss_get_ie(bss, WLAN_EID_SSID);
520− else
521− ssidie = NULL;
522+ if (ssidie) {
523+ ssidlen = ssidie[1];
524+ memcpy(ssid, &ssidie[2], ssidie[1]);
525+ }
526+ rcu_read_unlock();
522527
523528 wfx_tx_flush(wvif->wdev);
524529
@@ -527,10 +532,8 @@ static void wfx_do_join(struct wfx_vif *wvif) · 2 unmodified lines
527532
528533 wfx_set_mfp(wvif, bss);
529534
530− /* Perform actual join */
531535 wvif->wdev->tx_burst_idx = -1;
532− ret = hif_join(wvif, conf, wvif->channel, ssidie);
533− rcu_read_unlock();
536+ ret = hif_join(wvif, conf, wvif->channel, ssid, ssidlen);
534537 if (ret) {
535538 ieee80211_connection_loss(wvif->vif);
536539 wvif->join_complete_status = -1;
@@ -605,7 +608,9 @@ int wfx_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, · 68 unmodified lines
605608 int i;
606609
607610 for (i = 0; i < ARRAY_SIZE(sta_priv->buffered); i++)
608− WARN(sta_priv->buffered[i], "release station while Tx is in progress");
611+ if (sta_priv->buffered[i])
612+ dev_warn(wvif->wdev->dev, "release station while %d pending frame on queue %d",
613+ sta_priv->buffered[i], i);
609614 // FIXME: see note in wfx_sta_add()
610615 if (vif->type == NL80211_IFTYPE_STATION)
611616 return 0;
@@ -689,6 +694,7 @@ static void wfx_join_finalize(struct wfx_vif *wvif, · 77 unmodified lines
689694 wfx_rate_mask_to_hw(wvif->wdev, sta->supp_rates[wvif->channel->band]);
690695 else
691696 wvif->bss_params.operational_rate_set = -1;
697+ rcu_read_unlock();
692698 if (sta &&
693699 info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT)
694700 hif_dual_cts_protection(wvif, true);
@@ -701,8 +707,7 @@ static void wfx_join_finalize(struct wfx_vif *wvif, · 6 unmodified lines
701707 wvif->bss_params.beacon_lost_count = 20;
702708 wvif->bss_params.aid = info->aid;
703709
704− hif_set_association_mode(wvif, info, sta ? &sta->ht_cap : NULL);
705− rcu_read_unlock();
710+ hif_set_association_mode(wvif, info);
706711
707712 if (!info->ibss_joined) {
708713 hif_keep_alive_period(wvif, 30 /* sec */);
drivers/tee/amdtee/core.c+3−0
@@ -139,6 +139,9 @@ static struct amdtee_session *find_session(struct amdtee_context_data *ctxdata, · 138 unmodified lines
139139 u32 index = get_session_index(session);
140140 struct amdtee_session *sess;
141141
142+ if (index >= TEE_NUM_SESSIONS)
143+ return NULL;
144+
142145 list_for_each_entry(sess, &ctxdata->sess_list, list_node)
143146 if (ta_handle == sess->ta_handle &&
144147 test_bit(index, sess->sess_mask))
drivers/thunderbolt/switch.c+1−1
@@ -954,7 +954,7 @@ static bool tb_port_is_width_supported(struct tb_port *port, int width) · 953 unmodified lines
954954 ret = tb_port_read(port, &phy, TB_CFG_PORT,
955955 port->cap_phy + LANE_ADP_CS_0, 1);
956956 if (ret)
957− return ret;
957+ return false;
958958
959959 widths = (phy & LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK) >>
960960 LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT;
drivers/tty/tty_io.c+6−8
@@ -1589,9 +1589,7 @@ void tty_kclose(struct tty_struct *tty) · 1588 unmodified lines
15891589 tty_debug_hangup(tty, "freeing structure\n");
15901590 /*
15911591 * The release_tty function takes care of the details of clearing
1592− * the slots and preserving the termios structure. The tty_unlock_pair
1593− * should be safe as we keep a kref while the tty is locked (so the
1594− * unlock never unlocks a freed tty).
1592+ * the slots and preserving the termios structure.
15951593 */
15961594 mutex_lock(&tty_mutex);
15971595 tty_port_set_kopened(tty->port, 0);
@@ -1621,9 +1619,7 @@ void tty_release_struct(struct tty_struct *tty, int idx) · 23 unmodified lines
16211619 tty_debug_hangup(tty, "freeing structure\n");
16221620 /*
16231621 * The release_tty function takes care of the details of clearing
1624− * the slots and preserving the termios structure. The tty_unlock_pair
1625− * should be safe as we keep a kref while the tty is locked (so the
1626− * unlock never unlocks a freed tty).
1622+ * the slots and preserving the termios structure.
16271623 */
16281624 mutex_lock(&tty_mutex);
16291625 release_tty(tty, idx);
@@ -2734,9 +2730,11 @@ static int compat_tty_tiocgserial(struct tty_struct *tty, · 1104 unmodified lines
27342730 struct serial_struct32 v32;
27352731 struct serial_struct v;
27362732 int err;
2737− memset(&v, 0, sizeof(struct serial_struct));
27382733
2739− if (!tty->ops->set_serial)
2734+ memset(&v, 0, sizeof(v));
2735+ memset(&v32, 0, sizeof(v32));
2736+
2737+ if (!tty->ops->get_serial)
27402738 return -ENOTTY;
27412739 err = tty->ops->get_serial(tty, &v);
27422740 if (!err) {
drivers/usb/chipidea/udc.c+4−3
@@ -1530,18 +1530,19 @@ static const struct usb_ep_ops usb_ep_ops = { · 1529 unmodified lines
15301530 static void ci_hdrc_gadget_connect(struct usb_gadget *_gadget, int is_active)
15311531 {
15321532 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget);
1533− unsigned long flags;
15341533
15351534 if (is_active) {
15361535 pm_runtime_get_sync(&_gadget->dev);
15371536 hw_device_reset(ci);
1538− spin_lock_irqsave(&ci->lock, flags);
1537+ spin_lock_irq(&ci->lock);
15391538 if (ci->driver) {
15401539 hw_device_state(ci, ci->ep0out->qh.dma);
15411540 usb_gadget_set_state(_gadget, USB_STATE_POWERED);
1541+ spin_unlock_irq(&ci->lock);
15421542 usb_udc_vbus_handler(_gadget, true);
1543+ } else {
1544+ spin_unlock_irq(&ci->lock);
15431545 }
1544− spin_unlock_irqrestore(&ci->lock, flags);
15451546 } else {
15461547 usb_udc_vbus_handler(_gadget, false);
15471548 if (ci->driver)
drivers/usb/class/cdc-acm.c+21−13
@@ -896,10 +896,10 @@ static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss) · 895 unmodified lines
896896
897897 ss->xmit_fifo_size = acm->writesize;
898898 ss->baud_base = le32_to_cpu(acm->line.dwDTERate);
899− ss->close_delay = acm->port.close_delay / 10;
899+ ss->close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
900900 ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
901901 ASYNC_CLOSING_WAIT_NONE :
902− acm->port.closing_wait / 10;
902+ jiffies_to_msecs(acm->port.closing_wait) / 10;
903903 return 0;
904904 }
905905
@@ -907,24 +907,32 @@ static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss) · 1 unmodified line
907907 {
908908 struct acm *acm = tty->driver_data;
909909 unsigned int closing_wait, close_delay;
910+ unsigned int old_closing_wait, old_close_delay;
910911 int retval = 0;
911912
912− close_delay = ss->close_delay * 10;
913+ close_delay = msecs_to_jiffies(ss->close_delay * 10);
913914 closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
914− ASYNC_CLOSING_WAIT_NONE : ss->closing_wait * 10;
915+ ASYNC_CLOSING_WAIT_NONE :
916+ msecs_to_jiffies(ss->closing_wait * 10);
917+
918+ /* we must redo the rounding here, so that the values match */
919+ old_close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
920+ old_closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
921+ ASYNC_CLOSING_WAIT_NONE :
922+ jiffies_to_msecs(acm->port.closing_wait) / 10;
915923
916924 mutex_lock(&acm->port.mutex);
917925
918− if (!capable(CAP_SYS_ADMIN)) {
919− if ((close_delay != acm->port.close_delay) ||
920− (closing_wait != acm->port.closing_wait))
926+ if ((ss->close_delay != old_close_delay) ||
927+ (ss->closing_wait != old_closing_wait)) {
928+ if (!capable(CAP_SYS_ADMIN))
921929 retval = -EPERM;
922− else
923− retval = -EOPNOTSUPP;
924− } else {
925− acm->port.close_delay = close_delay;
926− acm->port.closing_wait = closing_wait;
927− }
930+ else {
931+ acm->port.close_delay = close_delay;
932+ acm->port.closing_wait = closing_wait;
933+ }
934+ } else
935+ retval = -EOPNOTSUPP;
928936
929937 mutex_unlock(&acm->port.mutex);
930938 return retval;
drivers/usb/core/quirks.c+6−0
@@ -378,6 +378,12 @@ static const struct usb_device_id usb_quirk_list[] = { · 377 unmodified lines
378378 { USB_DEVICE(0x0b05, 0x17e0), .driver_info =
379379 USB_QUIRK_IGNORE_REMOTE_WAKEUP },
380380
381+ /* Realtek hub in Dell WD19 (Type-C) */
382+ { USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM },
383+
384+ /* Generic RTL8153 based ethernet adapters */
385+ { USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
386+
381387 /* Action Semiconductor flash disk */
382388 { USB_DEVICE(0x10d6, 0x2200), .driver_info =
383389 USB_QUIRK_STRING_FETCH_255 },
drivers/usb/host/xhci-pci.c+2−1
@@ -136,7 +136,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) · 135 unmodified lines
136136 xhci->quirks |= XHCI_AMD_PLL_FIX;
137137
138138 if (pdev->vendor == PCI_VENDOR_ID_AMD &&
139− (pdev->device == 0x15e0 ||
139+ (pdev->device == 0x145c ||
140+ pdev->device == 0x15e0 ||
140141 pdev->device == 0x15e1 ||
141142 pdev->device == 0x43bb))
142143 xhci->quirks |= XHCI_SUSPEND_DELAY;
drivers/usb/host/xhci-plat.c+1−0
@@ -445,6 +445,7 @@ MODULE_DEVICE_TABLE(acpi, usb_xhci_acpi_match); · 444 unmodified lines
445445 static struct platform_driver usb_xhci_driver = {
446446 .probe = xhci_plat_probe,
447447 .remove = xhci_plat_remove,
448+ .shutdown = usb_hcd_platform_shutdown,
448449 .driver = {
449450 .name = "xhci-hcd",
450451 .pm = &xhci_plat_pm_ops,
drivers/usb/host/xhci-trace.h+6−17
@@ -289,23 +289,12 @@ DECLARE_EVENT_CLASS(xhci_log_urb, · 288 unmodified lines
289289 ),
290290 TP_printk("ep%d%s-%s: urb %p pipe %u slot %d length %d/%d sgs %d/%d stream %d flags %08x",
291291 __entry->epnum, __entry->dir_in ? "in" : "out",
292− ({ char *s;
293− switch (__entry->type) {
294− case USB_ENDPOINT_XFER_INT:
295− s = "intr";
296− break;
297− case USB_ENDPOINT_XFER_CONTROL:
298− s = "control";
299− break;
300− case USB_ENDPOINT_XFER_BULK:
301− s = "bulk";
302− break;
303− case USB_ENDPOINT_XFER_ISOC:
304− s = "isoc";
305− break;
306− default:
307− s = "UNKNOWN";
308− } s; }), __entry->urb, __entry->pipe, __entry->slot_id,
292+ __print_symbolic(__entry->type,
293+ { USB_ENDPOINT_XFER_INT, "intr" },
294+ { USB_ENDPOINT_XFER_CONTROL, "control" },
295+ { USB_ENDPOINT_XFER_BULK, "bulk" },
296+ { USB_ENDPOINT_XFER_ISOC, "isoc" }),
297+ __entry->urb, __entry->pipe, __entry->slot_id,
309298 __entry->actual, __entry->length, __entry->num_mapped_sgs,
310299 __entry->num_sgs, __entry->stream, __entry->flags
311300 )
drivers/usb/serial/option.c+2−0
@@ -1183,6 +1183,8 @@ static const struct usb_device_id option_ids[] = { · 1182 unmodified lines
11831183 .driver_info = NCTRL(0) },
11841184 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110a, 0xff), /* Telit ME910G1 */
11851185 .driver_info = NCTRL(0) | RSVD(3) },
1186+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110b, 0xff), /* Telit ME910G1 (ECM) */
1187+ .driver_info = NCTRL(0) },
11861188 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
11871189 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
11881190 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
drivers/usb/serial/pl2303.c+1−0
@@ -99,6 +99,7 @@ static const struct usb_device_id id_table[] = { · 98 unmodified lines
9999 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
100100 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
101101 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
102+ { USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) },
102103 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
103104 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
104105 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
drivers/usb/serial/pl2303.h+1−0
@@ -130,6 +130,7 @@ · 129 unmodified lines
130130 #define HP_LM920_PRODUCT_ID 0x026b
131131 #define HP_TD620_PRODUCT_ID 0x0956
132132 #define HP_LD960_PRODUCT_ID 0x0b39
133+#define HP_LD381_PRODUCT_ID 0x0f7f
133134 #define HP_LCM220_PRODUCT_ID 0x3139
134135 #define HP_LCM960_PRODUCT_ID 0x3239
135136 #define HP_LD220_PRODUCT_ID 0x3524
drivers/usb/typec/ucsi/displayport.c+11−1
@@ -271,6 +271,9 @@ void ucsi_displayport_remove_partner(struct typec_altmode *alt) · 270 unmodified lines
271271 return;
272272
273273 dp = typec_altmode_get_drvdata(alt);
274+ if (!dp)
275+ return;
276+
274277 dp->data.conf = 0;
275278 dp->data.status = 0;
276279 dp->initialized = false;
@@ -285,6 +288,8 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 8 unmodified lines
285288 struct typec_altmode *alt;
286289 struct ucsi_dp *dp;
287290
291+ mutex_lock(&con->lock);
292+
288293 /* We can't rely on the firmware with the capabilities. */
289294 desc->vdo |= DP_CAP_DP_SIGNALING | DP_CAP_RECEPTACLE;
290295
@@ -293,12 +298,15 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 2 unmodified lines
293298 desc->vdo |= all_assignments << 16;
294299
295300 alt = typec_port_register_altmode(con->port, desc);
296− if (IS_ERR(alt))
301+ if (IS_ERR(alt)) {
302+ mutex_unlock(&con->lock);
297303 return alt;
304+ }
298305
299306 dp = devm_kzalloc(&alt->dev, sizeof(*dp), GFP_KERNEL);
300307 if (!dp) {
301308 typec_unregister_altmode(alt);
309+ mutex_unlock(&con->lock);
302310 return ERR_PTR(-ENOMEM);
303311 }
304312
@@ -311,5 +319,7 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 6 unmodified lines
311319 alt->ops = &ucsi_displayport_ops;
312320 typec_altmode_set_drvdata(alt, dp);
313321
322+ mutex_unlock(&con->lock);
323+
314324 return alt;
315325 }
drivers/virtio/virtio_balloon.c+1−1
@@ -959,8 +959,8 @@ out_iput: · 958 unmodified lines
959959 iput(vb->vb_dev_info.inode);
960960 out_kern_unmount:
961961 kern_unmount(balloon_mnt);
962−#endif
963962 out_del_vqs:
963+#endif
964964 vdev->config->del_vqs(vdev);
965965 out_free_vb:
966966 kfree(vb);
drivers/virtio/virtio_ring.c+2−2
@@ -2203,10 +2203,10 @@ void vring_del_virtqueue(struct virtqueue *_vq) · 2202 unmodified lines
22032203 vq->split.queue_size_in_bytes,
22042204 vq->split.vring.desc,
22052205 vq->split.queue_dma_addr);
2206−
2207− kfree(vq->split.desc_state);
22082206 }
22092207 }
2208+ if (!vq->packed_ring)
2209+ kfree(vq->split.desc_state);
22102210 list_del(&_vq->list);
22112211 kfree(vq);
22122212 }
drivers/watchdog/iTCO_vendor.h+2−0
@@ -1,10 +1,12 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 /* iTCO Vendor Specific Support hooks */
33 #ifdef CONFIG_ITCO_VENDOR_SUPPORT
4+extern int iTCO_vendorsupport;
45 extern void iTCO_vendor_pre_start(struct resource *, unsigned int);
56 extern void iTCO_vendor_pre_stop(struct resource *);
67 extern int iTCO_vendor_check_noreboot_on(void);
78 #else
9+#define iTCO_vendorsupport 0
810 #define iTCO_vendor_pre_start(acpibase, heartbeat) {}
911 #define iTCO_vendor_pre_stop(acpibase) {}
1012 #define iTCO_vendor_check_noreboot_on() 1
drivers/watchdog/iTCO_vendor_support.c+9−7
@@ -39,8 +39,10 @@ · 38 unmodified lines
3939 /* Broken BIOS */
4040 #define BROKEN_BIOS 911
4141
42−static int vendorsupport;
43−module_param(vendorsupport, int, 0);
42+int iTCO_vendorsupport;
43+EXPORT_SYMBOL(iTCO_vendorsupport);
44+
45+module_param_named(vendorsupport, iTCO_vendorsupport, int, 0);
4446 MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default="
4547 "0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS");
4648
@@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires) · 105 unmodified lines
152154 void iTCO_vendor_pre_start(struct resource *smires,
153155 unsigned int heartbeat)
154156 {
155− switch (vendorsupport) {
157+ switch (iTCO_vendorsupport) {
156158 case SUPERMICRO_OLD_BOARD:
157159 supermicro_old_pre_start(smires);
158160 break;
@@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start); · 6 unmodified lines
165167
166168 void iTCO_vendor_pre_stop(struct resource *smires)
167169 {
168− switch (vendorsupport) {
170+ switch (iTCO_vendorsupport) {
169171 case SUPERMICRO_OLD_BOARD:
170172 supermicro_old_pre_stop(smires);
171173 break;
@@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop); · 6 unmodified lines
178180
179181 int iTCO_vendor_check_noreboot_on(void)
180182 {
181− switch (vendorsupport) {
183+ switch (iTCO_vendorsupport) {
182184 case SUPERMICRO_OLD_BOARD:
183185 return 0;
184186 default:
@@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on); · 4 unmodified lines
189191
190192 static int __init iTCO_vendor_init_module(void)
191193 {
192− if (vendorsupport == SUPERMICRO_NEW_BOARD) {
194+ if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) {
193195 pr_warn("Option vendorsupport=%d is no longer supported, "
194196 "please use the w83627hf_wdt driver instead\n",
195197 SUPERMICRO_NEW_BOARD);
196198 return -EINVAL;
197199 }
198− pr_info("vendor-support=%d\n", vendorsupport);
200+ pr_info("vendor-support=%d\n", iTCO_vendorsupport);
199201 return 0;
200202 }
201203
drivers/watchdog/iTCO_wdt.c+16−12
@@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev) · 458 unmodified lines
459459 if (!p->tco_res)
460460 return -ENODEV;
461461
462− p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
463− if (!p->smi_res)
464− return -ENODEV;
465−
466462 p->iTCO_version = pdata->version;
467463 p->pci_dev = to_pci_dev(dev->parent);
468464
465+ p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
466+ if (p->smi_res) {
467+ /* The TCO logic uses the TCO_EN bit in the SMI_EN register */
468+ if (!devm_request_region(dev, p->smi_res->start,
469+ resource_size(p->smi_res),
470+ pdev->name)) {
471+ pr_err("I/O address 0x%04llx already in use, device disabled\n",
472+ (u64)SMI_EN(p));
473+ return -EBUSY;
474+ }
475+ } else if (iTCO_vendorsupport ||
476+ turn_SMI_watchdog_clear_off >= p->iTCO_version) {
477+ pr_err("SMI I/O resource is missing\n");
478+ return -ENODEV;
479+ }
480+
469481 iTCO_wdt_no_reboot_bit_setup(p, pdata);
470482
471483 /*
@@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev) · 20 unmodified lines
492504 /* Set the NO_REBOOT bit to prevent later reboots, just for sure */
493505 p->update_no_reboot_bit(p->no_reboot_priv, true);
494506
495− /* The TCO logic uses the TCO_EN bit in the SMI_EN register */
496− if (!devm_request_region(dev, p->smi_res->start,
497− resource_size(p->smi_res),
498− pdev->name)) {
499− pr_err("I/O address 0x%04llx already in use, device disabled\n",
500− (u64)SMI_EN(p));
501− return -EBUSY;
502− }
503507 if (turn_SMI_watchdog_clear_off >= p->iTCO_version) {
504508 /*
505509 * Bit 13: TCO_EN -> 0
fs/afs/addr_list.c+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
1919 void afs_put_addrlist(struct afs_addr_list *alist)
2020 {
2121 if (alist && refcount_dec_and_test(&alist->usage))
22− call_rcu(&alist->rcu, (rcu_callback_t)kfree);
22+ kfree_rcu(alist, rcu);
2323 }
2424
2525 /*
fs/afs/cmservice.c+12−2
@@ -243,6 +243,17 @@ static void afs_cm_destructor(struct afs_call *call) · 242 unmodified lines
243243 call->buffer = NULL;
244244 }
245245
246+/*
247+ * Abort a service call from within an action function.
248+ */
249+static void afs_abort_service_call(struct afs_call *call, u32 abort_code, int error,
250+ const char *why)
251+{
252+ rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
253+ abort_code, error, why);
254+ afs_set_call_complete(call, error, 0);
255+}
256+
246257 /*
247258 * The server supplied a list of callbacks that it wanted to break.
248259 */
@@ -510,8 +521,7 @@ static void SRXAFSCB_ProbeUuid(struct work_struct *work) · 261 unmodified lines
510521 if (memcmp(r, &call->net->uuid, sizeof(call->net->uuid)) == 0)
511522 afs_send_empty_reply(call);
512523 else
513− rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
514− 1, 1, "K-1");
524+ afs_abort_service_call(call, 1, 1, "K-1");
515525
516526 afs_put_call(call);
517527 _leave("");
fs/afs/fs_probe.c+2−0
@@ -145,6 +145,7 @@ static int afs_do_probe_fileserver(struct afs_net *net, · 144 unmodified lines
145145 read_lock(&server->fs_lock);
146146 ac.alist = rcu_dereference_protected(server->addresses,
147147 lockdep_is_held(&server->fs_lock));
148+ afs_get_addrlist(ac.alist);
148149 read_unlock(&server->fs_lock);
149150
150151 atomic_set(&server->probe_outstanding, ac.alist->nr_addrs);
@@ -163,6 +164,7 @@ static int afs_do_probe_fileserver(struct afs_net *net, · 12 unmodified lines
163164
164165 if (!in_progress)
165166 afs_fs_probe_done(server);
167+ afs_put_addrlist(ac.alist);
166168 return in_progress;
167169 }
168170
fs/afs/internal.h+11−3
@@ -81,7 +81,7 @@ enum afs_call_state { · 80 unmodified lines
8181 * List of server addresses.
8282 */
8383 struct afs_addr_list {
84− struct rcu_head rcu; /* Must be first */
84+ struct rcu_head rcu;
8585 refcount_t usage;
8686 u32 version; /* Version */
8787 unsigned char max_addrs;
@@ -154,7 +154,7 @@ struct afs_call { · 66 unmodified lines
154154 };
155155 unsigned char unmarshall; /* unmarshalling phase */
156156 unsigned char addr_ix; /* Address in ->alist */
157− bool incoming; /* T if incoming call */
157+ bool drop_ref; /* T if need to drop ref for incoming call */
158158 bool send_pages; /* T if data from mapping should be sent */
159159 bool need_attention; /* T if RxRPC poked us */
160160 bool async; /* T if asynchronous */
@@ -1209,8 +1209,16 @@ static inline void afs_set_call_complete(struct afs_call *call, · 1048 unmodified lines
12091209 ok = true;
12101210 }
12111211 spin_unlock_bh(&call->state_lock);
1212− if (ok)
1212+ if (ok) {
12131213 trace_afs_call_done(call);
1214+
1215+ /* Asynchronous calls have two refs to release - one from the alloc and
1216+ * one queued with the work item - and we can't just deallocate the
1217+ * call because the work item may be queued again.
1218+ */
1219+ if (call->drop_ref)
1220+ afs_put_call(call);
1221+ }
12141222 }
12151223
12161224 /*
fs/afs/rxrpc.c+10−64
@@ -18,7 +18,6 @@ struct workqueue_struct *afs_async_calls; · 17 unmodified lines
1818
1919 static void afs_wake_up_call_waiter(struct sock *, struct rxrpc_call *, unsigned long);
2020 static void afs_wake_up_async_call(struct sock *, struct rxrpc_call *, unsigned long);
21−static void afs_delete_async_call(struct work_struct *);
2221 static void afs_process_async_call(struct work_struct *);
2322 static void afs_rx_new_call(struct sock *, struct rxrpc_call *, unsigned long);
2423 static void afs_rx_discard_new_call(struct rxrpc_call *, unsigned long);
@@ -169,7 +168,7 @@ void afs_put_call(struct afs_call *call) · 144 unmodified lines
169168 int n = atomic_dec_return(&call->usage);
170169 int o = atomic_read(&net->nr_outstanding_calls);
171170
172− trace_afs_call(call, afs_call_trace_put, n + 1, o,
171+ trace_afs_call(call, afs_call_trace_put, n, o,
173172 __builtin_return_address(0));
174173
175174 ASSERTCMP(n, >=, 0);
@@ -402,8 +401,10 @@ void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp) · 226 unmodified lines
402401 /* If the call is going to be asynchronous, we need an extra ref for
403402 * the call to hold itself so the caller need not hang on to its ref.
404403 */
405− if (call->async)
404+ if (call->async) {
406405 afs_get_call(call, afs_call_trace_get);
406+ call->drop_ref = true;
407+ }
407408
408409 /* create a call */
409410 rxcall = rxrpc_kernel_begin_call(call->net->socket, srx, call->key,
@@ -413,7 +414,8 @@ void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp) · 3 unmodified lines
413414 afs_wake_up_async_call :
414415 afs_wake_up_call_waiter),
415416 call->upgrade,
416− call->intr,
417+ (call->intr ? RXRPC_PREINTERRUPTIBLE :
418+ RXRPC_UNINTERRUPTIBLE),
417419 call->debug_id);
418420 if (IS_ERR(rxcall)) {
419421 ret = PTR_ERR(rxcall);
@@ -584,8 +586,6 @@ static void afs_deliver_to_call(struct afs_call *call) · 164 unmodified lines
584586 done:
585587 if (call->type->done)
586588 call->type->done(call);
587− if (state == AFS_CALL_COMPLETE && call->incoming)
588− afs_put_call(call);
589589 out:
590590 _leave("");
591591 return;
@@ -604,11 +604,7 @@ call_complete: · 12 unmodified lines
604604 long afs_wait_for_call_to_complete(struct afs_call *call,
605605 struct afs_addr_cursor *ac)
606606 {
607− signed long rtt2, timeout;
608607 long ret;
609− bool stalled = false;
610− u64 rtt;
611− u32 life, last_life;
612608 bool rxrpc_complete = false;
613609
614610 DECLARE_WAITQUEUE(myself, current);
@@ -619,14 +615,6 @@ long afs_wait_for_call_to_complete(struct afs_call *call, · 4 unmodified lines
619615 if (ret < 0)
620616 goto out;
621617
622− rtt = rxrpc_kernel_get_rtt(call->net->socket, call->rxcall);
623− rtt2 = nsecs_to_jiffies64(rtt) * 2;
624− if (rtt2 < 2)
625− rtt2 = 2;
626−
627− timeout = rtt2;
628− rxrpc_kernel_check_life(call->net->socket, call->rxcall, &last_life);
629−
630618 add_wait_queue(&call->waitq, &myself);
631619 for (;;) {
632620 set_current_state(TASK_UNINTERRUPTIBLE);
@@ -637,37 +625,19 @@ long afs_wait_for_call_to_complete(struct afs_call *call, · 4 unmodified lines
637625 call->need_attention = false;
638626 __set_current_state(TASK_RUNNING);
639627 afs_deliver_to_call(call);
640− timeout = rtt2;
641628 continue;
642629 }
643630
644631 if (afs_check_call_state(call, AFS_CALL_COMPLETE))
645632 break;
646633
647− if (!rxrpc_kernel_check_life(call->net->socket, call->rxcall, &life)) {
634+ if (!rxrpc_kernel_check_life(call->net->socket, call->rxcall)) {
648635 /* rxrpc terminated the call. */
649636 rxrpc_complete = true;
650637 break;
651638 }
652639
653− if (call->intr && timeout == 0 &&
654− life == last_life && signal_pending(current)) {
655− if (stalled)
656− break;
657− __set_current_state(TASK_RUNNING);
658− rxrpc_kernel_probe_life(call->net->socket, call->rxcall);
659− timeout = rtt2;
660− stalled = true;
661− continue;
662− }
663−
664− if (life != last_life) {
665− timeout = rtt2;
666− last_life = life;
667− stalled = false;
668− }
669−
670− timeout = schedule_timeout(timeout);
640+ schedule();
671641 }
672642
673643 remove_wait_queue(&call->waitq, &myself);
@@ -735,7 +705,7 @@ static void afs_wake_up_async_call(struct sock *sk, struct rxrpc_call *rxcall, · 61 unmodified lines
735705
736706 u = atomic_fetch_add_unless(&call->usage, 1, 0);
737707 if (u != 0) {
738− trace_afs_call(call, afs_call_trace_wake, u,
708+ trace_afs_call(call, afs_call_trace_wake, u + 1,
739709 atomic_read(&call->net->nr_outstanding_calls),
740710 __builtin_return_address(0));
741711
@@ -744,21 +714,6 @@ static void afs_wake_up_async_call(struct sock *sk, struct rxrpc_call *rxcall, · 2 unmodified lines
744714 }
745715 }
746716
747−/*
748− * Delete an asynchronous call. The work item carries a ref to the call struct
749− * that we need to release.
750− */
751−static void afs_delete_async_call(struct work_struct *work)
752−{
753− struct afs_call *call = container_of(work, struct afs_call, async_work);
754−
755− _enter("");
756−
757− afs_put_call(call);
758−
759− _leave("");
760−}
761−
762717 /*
763718 * Perform I/O processing on an asynchronous call. The work item carries a ref
764719 * to the call struct that we either need to release or to pass on.
@@ -774,16 +729,6 @@ static void afs_process_async_call(struct work_struct *work) · 9 unmodified lines
774729 afs_deliver_to_call(call);
775730 }
776731
777− if (call->state == AFS_CALL_COMPLETE) {
778− /* We have two refs to release - one from the alloc and one
779− * queued with the work item - and we can't just deallocate the
780− * call because the work item may be queued again.
781− */
782− call->async_work.func = afs_delete_async_call;
783− if (!queue_work(afs_async_calls, &call->async_work))
784− afs_put_call(call);
785− }
786−
787732 afs_put_call(call);
788733 _leave("");
789734 }
@@ -810,6 +755,7 @@ void afs_charge_preallocation(struct work_struct *work) · 20 unmodified lines
810755 if (!call)
811756 break;
812757
758+ call->drop_ref = true;
813759 call->async = true;
814760 call->state = AFS_CALL_SV_AWAIT_OP_ID;
815761 init_waitqueue_head(&call->waitq);
fs/btrfs/block-group.c+2−2
@@ -856,9 +856,9 @@ static void clear_incompat_bg_bits(struct btrfs_fs_info *fs_info, u64 flags) · 855 unmodified lines
856856 found_raid1c34 = true;
857857 up_read(&sinfo->groups_sem);
858858 }
859− if (found_raid56)
859+ if (!found_raid56)
860860 btrfs_clear_fs_incompat(fs_info, RAID56);
861− if (found_raid1c34)
861+ if (!found_raid1c34)
862862 btrfs_clear_fs_incompat(fs_info, RAID1C34);
863863 }
864864 }
fs/btrfs/inode.c+4−0
@@ -9496,6 +9496,10 @@ out_fail: · 9495 unmodified lines
94969496 ret = btrfs_sync_log(trans, BTRFS_I(old_inode)->root, &ctx);
94979497 if (ret)
94989498 commit_transaction = true;
9499+ } else if (sync_log) {
9500+ mutex_lock(&root->log_mutex);
9501+ list_del(&ctx.list);
9502+ mutex_unlock(&root->log_mutex);
94999503 }
95009504 if (commit_transaction) {
95019505 ret = btrfs_commit_transaction(trans);
fs/ceph/file.c+11−3
@@ -1415,10 +1415,13 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from) · 1414 unmodified lines
14151415 struct inode *inode = file_inode(file);
14161416 struct ceph_inode_info *ci = ceph_inode(inode);
14171417 struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
1418+ struct ceph_osd_client *osdc = &fsc->client->osdc;
14181419 struct ceph_cap_flush *prealloc_cf;
14191420 ssize_t count, written = 0;
14201421 int err, want, got;
14211422 bool direct_lock = false;
1423+ u32 map_flags;
1424+ u64 pool_flags;
14221425 loff_t pos;
14231426 loff_t limit = max(i_size_read(inode), fsc->max_file_size);
14241427
@@ -1481,8 +1484,12 @@ retry_snap: · 56 unmodified lines
14811484 goto out;
14821485 }
14831486
1484− /* FIXME: not complete since it doesn't account for being at quota */
1485− if (ceph_osdmap_flag(&fsc->client->osdc, CEPH_OSDMAP_FULL)) {
1487+ down_read(&osdc->lock);
1488+ map_flags = osdc->osdmap->flags;
1489+ pool_flags = ceph_pg_pool_flags(osdc->osdmap, ci->i_layout.pool_id);
1490+ up_read(&osdc->lock);
1491+ if ((map_flags & CEPH_OSDMAP_FULL) ||
1492+ (pool_flags & CEPH_POOL_FLAG_FULL)) {
14861493 err = -ENOSPC;
14871494 goto out;
14881495 }
@@ -1575,7 +1582,8 @@ retry_snap: · 86 unmodified lines
15751582 }
15761583
15771584 if (written >= 0) {
1578− if (ceph_osdmap_flag(&fsc->client->osdc, CEPH_OSDMAP_NEARFULL))
1585+ if ((map_flags & CEPH_OSDMAP_NEARFULL) ||
1586+ (pool_flags & CEPH_POOL_FLAG_NEARFULL))
15791587 iocb->ki_flags |= IOCB_DSYNC;
15801588 written = generic_write_sync(iocb, written);
15811589 }
fs/ceph/snap.c+1−0
@@ -1155,5 +1155,6 @@ void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc) · 1154 unmodified lines
11551155 pr_err("snapid map %llx -> %x still in use\n",
11561156 sm->snap, sm->dev);
11571157 }
1158+ kfree(sm);
11581159 }
11591160 }
fs/cifs/dir.c+0−1
@@ -555,7 +555,6 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, · 554 unmodified lines
555555 if (server->ops->close)
556556 server->ops->close(xid, tcon, &fid);
557557 cifs_del_pending_open(&open);
558− fput(file);
559558 rc = -ENOMEM;
560559 }
561560
fs/cifs/file.c+2−1
@@ -1169,7 +1169,8 @@ try_again: · 1168 unmodified lines
11691169 rc = posix_lock_file(file, flock, NULL);
11701170 up_write(&cinode->lock_sem);
11711171 if (rc == FILE_LOCK_DEFERRED) {
1172− rc = wait_event_interruptible(flock->fl_wait, !flock->fl_blocker);
1172+ rc = wait_event_interruptible(flock->fl_wait,
1173+ list_empty(&flock->fl_blocked_member));
11731174 if (!rc)
11741175 goto try_again;
11751176 locks_delete_block(flock);
fs/cifs/inode.c+1−1
@@ -2191,7 +2191,7 @@ int cifs_getattr(const struct path *path, struct kstat *stat, · 2190 unmodified lines
21912191 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID))
21922192 stat->gid = current_fsgid();
21932193 }
2194− return rc;
2194+ return 0;
21952195 }
21962196
21972197 int cifs_fiemap(struct inode *inode, struct fiemap_extent_info *fei, u64 start,
fs/cifs/smb2ops.c+3−1
@@ -2222,6 +2222,8 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon, · 2221 unmodified lines
22222222 goto qdf_free;
22232223 }
22242224
2225+ atomic_inc(&tcon->num_remote_opens);
2226+
22252227 qd_rsp = (struct smb2_query_directory_rsp *)rsp_iov[1].iov_base;
22262228 if (qd_rsp->sync_hdr.Status == STATUS_NO_MORE_FILES) {
22272229 trace_smb3_query_dir_done(xid, fid->persistent_fid,
@@ -3417,7 +3419,7 @@ static int smb3_fiemap(struct cifs_tcon *tcon, · 1189 unmodified lines
34173419 if (rc)
34183420 goto out;
34193421
3420− if (out_data_len < sizeof(struct file_allocated_range_buffer)) {
3422+ if (out_data_len && out_data_len < sizeof(struct file_allocated_range_buffer)) {
34213423 rc = -EINVAL;
34223424 goto out;
34233425 }
fs/crypto/keysetup.c+9−0
@@ -538,6 +538,15 @@ int fscrypt_drop_inode(struct inode *inode) · 537 unmodified lines
538538 return 0;
539539 mk = ci->ci_master_key->payload.data[0];
540540
541+ /*
542+ * With proper, non-racy use of FS_IOC_REMOVE_ENCRYPTION_KEY, all inodes
543+ * protected by the key were cleaned by sync_filesystem(). But if
544+ * userspace is still using the files, inodes can be dirtied between
545+ * then and now. We mustn't lose any writes, so skip dirty inodes here.
546+ */
547+ if (inode->i_state & I_DIRTY_ALL)
548+ return 0;
549+
541550 /*
542551 * Note: since we aren't holding ->mk_secret_sem, the result here can
543552 * immediately become outdated. But there's no correctness problem with
fs/eventpoll.c+4−4
@@ -1854,9 +1854,9 @@ fetch_events: · 1853 unmodified lines
18541854 waiter = true;
18551855 init_waitqueue_entry(&wait, current);
18561856
1857− spin_lock_irq(&ep->wq.lock);
1857+ write_lock_irq(&ep->lock);
18581858 __add_wait_queue_exclusive(&ep->wq, &wait);
1859− spin_unlock_irq(&ep->wq.lock);
1859+ write_unlock_irq(&ep->lock);
18601860 }
18611861
18621862 for (;;) {
@@ -1904,9 +1904,9 @@ send_events: · 41 unmodified lines
19041904 goto fetch_events;
19051905
19061906 if (waiter) {
1907− spin_lock_irq(&ep->wq.lock);
1907+ write_lock_irq(&ep->lock);
19081908 __remove_wait_queue(&ep->wq, &wait);
1909− spin_unlock_irq(&ep->wq.lock);
1909+ write_unlock_irq(&ep->lock);
19101910 }
19111911
19121912 return res;
fs/file.c+6−1
@@ -540,9 +540,14 @@ static int alloc_fd(unsigned start, unsigned flags) · 539 unmodified lines
540540 return __alloc_fd(current->files, start, rlimit(RLIMIT_NOFILE), flags);
541541 }
542542
543+int __get_unused_fd_flags(unsigned flags, unsigned long nofile)
544+{
545+ return __alloc_fd(current->files, 0, nofile, flags);
546+}
547+
543548 int get_unused_fd_flags(unsigned flags)
544549 {
545− return __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags);
550+ return __get_unused_fd_flags(flags, rlimit(RLIMIT_NOFILE));
546551 }
547552 EXPORT_SYMBOL(get_unused_fd_flags);
548553
fs/fuse/dev.c+3−3
@@ -276,12 +276,10 @@ static void flush_bg_queue(struct fuse_conn *fc) · 275 unmodified lines
276276 void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req)
277277 {
278278 struct fuse_iqueue *fiq = &fc->iq;
279− bool async;
280279
281280 if (test_and_set_bit(FR_FINISHED, &req->flags))
282281 goto put_request;
283282
284− async = req->args->end;
285283 /*
286284 * test_and_set_bit() implies smp_mb() between bit
287285 * changing and below intr_entry check. Pairs with
@@ -324,7 +322,7 @@ void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req) · 36 unmodified lines
324322 wake_up(&req->waitq);
325323 }
326324
327− if (async)
325+ if (test_bit(FR_ASYNC, &req->flags))
328326 req->args->end(fc, req->args, req->out.h.error);
329327 put_request:
330328 fuse_put_request(fc, req);
@@ -471,6 +469,8 @@ static void fuse_args_to_req(struct fuse_req *req, struct fuse_args *args) · 140 unmodified lines
471469 req->in.h.opcode = args->opcode;
472470 req->in.h.nodeid = args->nodeid;
473471 req->args = args;
472+ if (args->end)
473+ __set_bit(FR_ASYNC, &req->flags);
474474 }
475475
476476 ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args)
fs/fuse/fuse_i.h+2−0
@@ -301,6 +301,7 @@ struct fuse_io_priv { · 300 unmodified lines
301301 * FR_SENT: request is in userspace, waiting for an answer
302302 * FR_FINISHED: request is finished
303303 * FR_PRIVATE: request is on private list
304+ * FR_ASYNC: request is asynchronous
304305 */
305306 enum fuse_req_flag {
306307 FR_ISREPLY,
@@ -314,6 +315,7 @@ enum fuse_req_flag { · 7 unmodified lines
314315 FR_SENT,
315316 FR_FINISHED,
316317 FR_PRIVATE,
318+ FR_ASYNC,
317319 };
318320
319321 /**
fs/gfs2/inode.c+1−1
@@ -1248,7 +1248,7 @@ static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry, · 1247 unmodified lines
12481248 if (!(file->f_mode & FMODE_OPENED))
12491249 return finish_no_open(file, d);
12501250 dput(d);
1251− return 0;
1251+ return excl && (flags & O_CREAT) ? -EEXIST : 0;
12521252 }
12531253
12541254 BUG_ON(d != NULL);
fs/inode.c+1−0
@@ -138,6 +138,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) · 137 unmodified lines
138138 inode->i_sb = sb;
139139 inode->i_blkbits = sb->s_blocksize_bits;
140140 inode->i_flags = 0;
141+ atomic64_set(&inode->i_sequence, 0);
141142 atomic_set(&inode->i_count, 1);
142143 inode->i_op = &empty_iops;
143144 inode->i_fop = &no_open_fops;
fs/io_uring.c+29−18
@@ -191,7 +191,6 @@ struct fixed_file_data { · 190 unmodified lines
191191 struct llist_head put_llist;
192192 struct work_struct ref_work;
193193 struct completion done;
194− struct rcu_head rcu;
195194 };
196195
197196 struct io_ring_ctx {
@@ -344,6 +343,7 @@ struct io_accept { · 146 unmodified lines
344343 struct sockaddr __user *addr;
345344 int __user *addr_len;
346345 int flags;
346+ unsigned long nofile;
347347 };
348348
349349 struct io_sync {
@@ -398,6 +398,7 @@ struct io_open { · 48 unmodified lines
398398 struct filename *filename;
399399 struct statx __user *buffer;
400400 struct open_how how;
401+ unsigned long nofile;
401402 };
402403
403404 struct io_files_update {
@@ -2578,6 +2579,7 @@ static int io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 2174 unmodified lines
25782579 return ret;
25792580 }
25802581
2582+ req->open.nofile = rlimit(RLIMIT_NOFILE);
25812583 req->flags |= REQ_F_NEED_CLEANUP;
25822584 return 0;
25832585 }
@@ -2619,6 +2621,7 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 35 unmodified lines
26192621 return ret;
26202622 }
26212623
2624+ req->open.nofile = rlimit(RLIMIT_NOFILE);
26222625 req->flags |= REQ_F_NEED_CLEANUP;
26232626 return 0;
26242627 }
@@ -2637,7 +2640,7 @@ static int io_openat2(struct io_kiocb *req, struct io_kiocb **nxt, · 12 unmodified lines
26372640 if (ret)
26382641 goto err;
26392642
2640− ret = get_unused_fd_flags(req->open.how.flags);
2643+ ret = __get_unused_fd_flags(req->open.how.flags, req->open.nofile);
26412644 if (ret < 0)
26422645 goto err;
26432646
@@ -3322,6 +3325,7 @@ static int io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 678 unmodified lines
33223325 accept->addr = u64_to_user_ptr(READ_ONCE(sqe->addr));
33233326 accept->addr_len = u64_to_user_ptr(READ_ONCE(sqe->addr2));
33243327 accept->flags = READ_ONCE(sqe->accept_flags);
3328+ accept->nofile = rlimit(RLIMIT_NOFILE);
33253329 return 0;
33263330 #else
33273331 return -EOPNOTSUPP;
@@ -3338,7 +3342,8 @@ static int __io_accept(struct io_kiocb *req, struct io_kiocb **nxt, · 10 unmodified lines
33383342
33393343 file_flags = force_nonblock ? O_NONBLOCK : 0;
33403344 ret = __sys_accept4_file(req->file, file_flags, accept->addr,
3341− accept->addr_len, accept->flags);
3345+ accept->addr_len, accept->flags,
3346+ accept->nofile);
33423347 if (ret == -EAGAIN && force_nonblock)
33433348 return -EAGAIN;
33443349 if (ret == -ERESTARTSYS)
@@ -4132,6 +4137,9 @@ static int io_req_defer_prep(struct io_kiocb *req, · 787 unmodified lines
41324137 {
41334138 ssize_t ret = 0;
41344139
4140+ if (!sqe)
4141+ return 0;
4142+
41354143 if (io_op_defs[req->opcode].file_table) {
41364144 ret = io_grab_files(req);
41374145 if (unlikely(ret))
@@ -4908,6 +4916,11 @@ err_req: · 770 unmodified lines
49084916 if (sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK)) {
49094917 req->flags |= REQ_F_LINK;
49104918 INIT_LIST_HEAD(&req->link_list);
4919+
4920+ if (io_alloc_async_ctx(req)) {
4921+ ret = -EAGAIN;
4922+ goto err_req;
4923+ }
49114924 ret = io_req_defer_prep(req, sqe);
49124925 if (ret)
49134926 req->flags |= REQ_F_FAIL_LINK;
@@ -5331,24 +5344,21 @@ static void io_file_ref_kill(struct percpu_ref *ref) · 417 unmodified lines
53315344 complete(&data->done);
53325345 }
53335346
5334−static void __io_file_ref_exit_and_free(struct rcu_head *rcu)
5347+static void io_file_ref_exit_and_free(struct work_struct *work)
53355348 {
5336− struct fixed_file_data *data = container_of(rcu, struct fixed_file_data,
5337− rcu);
5338− percpu_ref_exit(&data->refs);
5339− kfree(data);
5340−}
5349+ struct fixed_file_data *data;
5350+
5351+ data = container_of(work, struct fixed_file_data, ref_work);
53415352
5342−static void io_file_ref_exit_and_free(struct rcu_head *rcu)
5343−{
53445353 /*
5345− * We need to order our exit+free call against the potentially
5346− * existing call_rcu() for switching to atomic. One way to do that
5347− * is to have this rcu callback queue the final put and free, as we
5348− * could otherwise have a pre-existing atomic switch complete _after_
5349− * the free callback we queued.
5354+ * Ensure any percpu-ref atomic switch callback has run, it could have
5355+ * been in progress when the files were being unregistered. Once
5356+ * that's done, we can safely exit and free the ref and containing
5357+ * data structure.
53505358 */
5351− call_rcu(rcu, __io_file_ref_exit_and_free);
5359+ rcu_barrier();
5360+ percpu_ref_exit(&data->refs);
5361+ kfree(data);
53525362 }
53535363
53545364 static int io_sqe_files_unregister(struct io_ring_ctx *ctx)
@@ -5369,7 +5379,8 @@ static int io_sqe_files_unregister(struct io_ring_ctx *ctx) · 14 unmodified lines
53695379 for (i = 0; i < nr_tables; i++)
53705380 kfree(data->table[i].files);
53715381 kfree(data->table);
5372− call_rcu(&data->rcu, io_file_ref_exit_and_free);
5382+ INIT_WORK(&data->ref_work, io_file_ref_exit_and_free);
5383+ queue_work(system_wq, &data->ref_work);
53735384 ctx->file_data = NULL;
53745385 ctx->nr_user_files = 0;
53755386 return 0;
fs/locks.c+48−6
@@ -725,7 +725,6 @@ static void __locks_delete_block(struct file_lock *waiter) · 724 unmodified lines
725725 {
726726 locks_delete_global_blocked(waiter);
727727 list_del_init(&waiter->fl_blocked_member);
728− waiter->fl_blocker = NULL;
729728 }
730729
731730 static void __locks_wake_up_blocks(struct file_lock *blocker)
@@ -740,6 +739,13 @@ static void __locks_wake_up_blocks(struct file_lock *blocker) · 8 unmodified lines
740739 waiter->fl_lmops->lm_notify(waiter);
741740 else
742741 wake_up(&waiter->fl_wait);
742+
743+ /*
744+ * The setting of fl_blocker to NULL marks the "done"
745+ * point in deleting a block. Paired with acquire at the top
746+ * of locks_delete_block().
747+ */
748+ smp_store_release(&waiter->fl_blocker, NULL);
743749 }
744750 }
745751
@@ -753,11 +759,42 @@ int locks_delete_block(struct file_lock *waiter) · 7 unmodified lines
753759 {
754760 int status = -ENOENT;
755761
762+ /*
763+ * If fl_blocker is NULL, it won't be set again as this thread "owns"
764+ * the lock and is the only one that might try to claim the lock.
765+ *
766+ * We use acquire/release to manage fl_blocker so that we can
767+ * optimize away taking the blocked_lock_lock in many cases.
768+ *
769+ * The smp_load_acquire guarantees two things:
770+ *
771+ * 1/ that fl_blocked_requests can be tested locklessly. If something
772+ * was recently added to that list it must have been in a locked region
773+ * *before* the locked region when fl_blocker was set to NULL.
774+ *
775+ * 2/ that no other thread is accessing 'waiter', so it is safe to free
776+ * it. __locks_wake_up_blocks is careful not to touch waiter after
777+ * fl_blocker is released.
778+ *
779+ * If a lockless check of fl_blocker shows it to be NULL, we know that
780+ * no new locks can be inserted into its fl_blocked_requests list, and
781+ * can avoid doing anything further if the list is empty.
782+ */
783+ if (!smp_load_acquire(&waiter->fl_blocker) &&
784+ list_empty(&waiter->fl_blocked_requests))
785+ return status;
786+
756787 spin_lock(&blocked_lock_lock);
757788 if (waiter->fl_blocker)
758789 status = 0;
759790 __locks_wake_up_blocks(waiter);
760791 __locks_delete_block(waiter);
792+
793+ /*
794+ * The setting of fl_blocker to NULL marks the "done" point in deleting
795+ * a block. Paired with acquire at the top of this function.
796+ */
797+ smp_store_release(&waiter->fl_blocker, NULL);
761798 spin_unlock(&blocked_lock_lock);
762799 return status;
763800 }
@@ -1350,7 +1387,8 @@ static int posix_lock_inode_wait(struct inode *inode, struct file_lock *fl) · 586 unmodified lines
13501387 error = posix_lock_inode(inode, fl, NULL);
13511388 if (error != FILE_LOCK_DEFERRED)
13521389 break;
1353− error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);
1390+ error = wait_event_interruptible(fl->fl_wait,
1391+ list_empty(&fl->fl_blocked_member));
13541392 if (error)
13551393 break;
13561394 }
@@ -1435,7 +1473,8 @@ int locks_mandatory_area(struct inode *inode, struct file *filp, loff_t start, · 78 unmodified lines
14351473 error = posix_lock_inode(inode, &fl, NULL);
14361474 if (error != FILE_LOCK_DEFERRED)
14371475 break;
1438− error = wait_event_interruptible(fl.fl_wait, !fl.fl_blocker);
1476+ error = wait_event_interruptible(fl.fl_wait,
1477+ list_empty(&fl.fl_blocked_member));
14391478 if (!error) {
14401479 /*
14411480 * If we've been sleeping someone might have
@@ -1638,7 +1677,8 @@ restart: · 196 unmodified lines
16381677
16391678 locks_dispose_list(&dispose);
16401679 error = wait_event_interruptible_timeout(new_fl->fl_wait,
1641− !new_fl->fl_blocker, break_time);
1680+ list_empty(&new_fl->fl_blocked_member),
1681+ break_time);
16421682
16431683 percpu_down_read(&file_rwsem);
16441684 spin_lock(&ctx->flc_lock);
@@ -2122,7 +2162,8 @@ static int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl) · 477 unmodified lines
21222162 error = flock_lock_inode(inode, fl);
21232163 if (error != FILE_LOCK_DEFERRED)
21242164 break;
2125− error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);
2165+ error = wait_event_interruptible(fl->fl_wait,
2166+ list_empty(&fl->fl_blocked_member));
21262167 if (error)
21272168 break;
21282169 }
@@ -2399,7 +2440,8 @@ static int do_lock_file_wait(struct file *filp, unsigned int cmd, · 270 unmodified lines
23992440 error = vfs_lock_file(filp, cmd, fl, NULL);
24002441 if (error != FILE_LOCK_DEFERRED)
24012442 break;
2402− error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);
2443+ error = wait_event_interruptible(fl->fl_wait,
2444+ list_empty(&fl->fl_blocked_member));
24032445 if (error)
24042446 break;
24052447 }
fs/nfs/client.c+1−0
@@ -153,6 +153,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) · 152 unmodified lines
153153 if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
154154 goto error_0;
155155
156+ clp->cl_minorversion = cl_init->minorversion;
156157 clp->cl_nfs_mod = cl_init->nfs_mod;
157158 if (!try_module_get(clp->cl_nfs_mod->owner))
158159 goto error_dealloc;
fs/nfs/fs_context.c+9−0
@@ -832,6 +832,8 @@ static int nfs_parse_source(struct fs_context *fc, · 831 unmodified lines
832832 if (len > maxnamlen)
833833 goto out_hostname;
834834
835+ kfree(ctx->nfs_server.hostname);
836+
835837 /* N.B. caller will free nfs_server.hostname in all cases */
836838 ctx->nfs_server.hostname = kmemdup_nul(dev_name, len, GFP_KERNEL);
837839 if (!ctx->nfs_server.hostname)
@@ -1240,6 +1242,13 @@ static int nfs_fs_context_validate(struct fs_context *fc) · 402 unmodified lines
12401242 }
12411243 ctx->nfs_mod = nfs_mod;
12421244 }
1245+
1246+ /* Ensure the filesystem context has the correct fs_type */
1247+ if (fc->fs_type != ctx->nfs_mod->nfs_fs) {
1248+ module_put(fc->fs_type->owner);
1249+ __module_get(ctx->nfs_mod->nfs_fs->owner);
1250+ fc->fs_type = ctx->nfs_mod->nfs_fs;
1251+ }
12431252 return 0;
12441253
12451254 out_no_device_name:
fs/nfs/fscache.c+2−0
@@ -31,6 +31,7 @@ static DEFINE_SPINLOCK(nfs_fscache_keys_lock); · 30 unmodified lines
3131 struct nfs_server_key {
3232 struct {
3333 uint16_t nfsversion; /* NFS protocol version */
34+ uint32_t minorversion; /* NFSv4 minor version */
3435 uint16_t family; /* address family */
3536 __be16 port; /* IP port */
3637 } hdr;
@@ -55,6 +56,7 @@ void nfs_fscache_get_client_cookie(struct nfs_client *clp) · 18 unmodified lines
5556
5657 memset(&key, 0, sizeof(key));
5758 key.hdr.nfsversion = clp->rpc_ops->version;
59+ key.hdr.minorversion = clp->cl_minorversion;
5860 key.hdr.family = clp->cl_addr.ss_family;
5961
6062 switch (clp->cl_addr.ss_family) {
fs/nfs/namespace.c+1−1
@@ -153,7 +153,7 @@ struct vfsmount *nfs_d_automount(struct path *path) · 152 unmodified lines
153153 /* Open a new filesystem context, transferring parameters from the
154154 * parent superblock, including the network namespace.
155155 */
156− fc = fs_context_for_submount(&nfs_fs_type, path->dentry);
156+ fc = fs_context_for_submount(path->mnt->mnt_sb->s_type, path->dentry);
157157 if (IS_ERR(fc))
158158 return ERR_CAST(fc);
159159
fs/nfs/nfs4client.c+0−1
@@ -216,7 +216,6 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init) · 215 unmodified lines
216216 INIT_LIST_HEAD(&clp->cl_ds_clients);
217217 rpc_init_wait_queue(&clp->cl_rpcwaitq, "NFS client");
218218 clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED;
219− clp->cl_minorversion = cl_init->minorversion;
220219 clp->cl_mvops = nfs_v4_minor_ops[cl_init->minorversion];
221220 clp->cl_mig_gen = 1;
222221 #if IS_ENABLED(CONFIG_NFS_V4_1)
fs/open.c+0−3
@@ -860,9 +860,6 @@ cleanup_file: · 859 unmodified lines
860860 * the return value of d_splice_alias(), then the caller needs to perform dput()
861861 * on it after finish_open().
862862 *
863− * On successful return @file is a fully instantiated open file. After this, if
864− * an error occurs in ->atomic_open(), it needs to clean up with fput().
865− *
866863 * Returns zero on success or -errno if the open failed.
867864 */
868865 int finish_open(struct file *file, struct dentry *dentry,
fs/overlayfs/Kconfig+1−0
@@ -93,6 +93,7 @@ config OVERLAY_FS_XINO_AUTO · 92 unmodified lines
9393 bool "Overlayfs: auto enable inode number mapping"
9494 default n
9595 depends on OVERLAY_FS
96+ depends on 64BIT
9697 help
9798 If this config option is enabled then overlay filesystems will use
9899 unused high bits in undelying filesystem inode numbers to map all
fs/overlayfs/file.c+6−0
@@ -244,6 +244,9 @@ static void ovl_aio_cleanup_handler(struct ovl_aio_req *aio_req) · 243 unmodified lines
244244 if (iocb->ki_flags & IOCB_WRITE) {
245245 struct inode *inode = file_inode(orig_iocb->ki_filp);
246246
247+ /* Actually acquired in ovl_write_iter() */
248+ __sb_writers_acquired(file_inode(iocb->ki_filp)->i_sb,
249+ SB_FREEZE_WRITE);
247250 file_end_write(iocb->ki_filp);
248251 ovl_copyattr(ovl_inode_real(inode), inode);
249252 }
@@ -346,6 +349,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) · 96 unmodified lines
346349 goto out;
347350
348351 file_start_write(real.file);
352+ /* Pacify lockdep, same trick as done in aio_write() */
353+ __sb_writers_release(file_inode(real.file)->i_sb,
354+ SB_FREEZE_WRITE);
349355 aio_req->fd = real;
350356 real.flags = 0;
351357 aio_req->orig_iocb = iocb;
fs/overlayfs/overlayfs.h+6−1
@@ -318,7 +318,12 @@ static inline unsigned int ovl_xino_bits(struct super_block *sb) · 317 unmodified lines
318318 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0;
319319 }
320320
321−static inline int ovl_inode_lock(struct inode *inode)
321+static inline void ovl_inode_lock(struct inode *inode)
322+{
323+ mutex_lock(&OVL_I(inode)->lock);
324+}
325+
326+static inline int ovl_inode_lock_interruptible(struct inode *inode)
322327 {
323328 return mutex_lock_interruptible(&OVL_I(inode)->lock);
324329 }
fs/overlayfs/super.c+8−1
@@ -1411,6 +1411,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, · 1410 unmodified lines
14111411 if (ofs->config.xino == OVL_XINO_ON)
14121412 pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
14131413 ofs->xino_mode = 0;
1414+ } else if (ofs->config.xino == OVL_XINO_OFF) {
1415+ ofs->xino_mode = -1;
14141416 } else if (ofs->config.xino == OVL_XINO_ON && ofs->xino_mode < 0) {
14151417 /*
14161418 * This is a roundup of number of bits needed for encoding
@@ -1623,8 +1625,13 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) · 206 unmodified lines
16231625 sb->s_stack_depth = 0;
16241626 sb->s_maxbytes = MAX_LFS_FILESIZE;
16251627 /* Assume underlaying fs uses 32bit inodes unless proven otherwise */
1626− if (ofs->config.xino != OVL_XINO_OFF)
1628+ if (ofs->config.xino != OVL_XINO_OFF) {
16271629 ofs->xino_mode = BITS_PER_LONG - 32;
1630+ if (!ofs->xino_mode) {
1631+ pr_warn("xino not supported on 32bit kernel, falling back to xino=off.\n");
1632+ ofs->config.xino = OVL_XINO_OFF;
1633+ }
1634+ }
16281635
16291636 /* alloc/destroy_inode needed for setting up traps in inode cache */
16301637 sb->s_op = &ovl_super_operations;
fs/overlayfs/util.c+2−2
@@ -509,7 +509,7 @@ int ovl_copy_up_start(struct dentry *dentry, int flags) · 508 unmodified lines
509509 struct inode *inode = d_inode(dentry);
510510 int err;
511511
512− err = ovl_inode_lock(inode);
512+ err = ovl_inode_lock_interruptible(inode);
513513 if (!err && ovl_already_copied_up_locked(dentry, flags)) {
514514 err = 1; /* Already copied up */
515515 ovl_inode_unlock(inode);
@@ -764,7 +764,7 @@ int ovl_nlink_start(struct dentry *dentry) · 248 unmodified lines
764764 return err;
765765 }
766766
767− err = ovl_inode_lock(inode);
767+ err = ovl_inode_lock_interruptible(inode);
768768 if (err)
769769 return err;
770770
fs/zonefs/super.c+21−7
@@ -178,7 +178,8 @@ static void zonefs_update_stats(struct inode *inode, loff_t new_isize) · 177 unmodified lines
178178 * amount of readable data in the zone.
179179 */
180180 static loff_t zonefs_check_zone_condition(struct inode *inode,
181− struct blk_zone *zone, bool warn)
181+ struct blk_zone *zone, bool warn,
182+ bool mount)
182183 {
183184 struct zonefs_inode_info *zi = ZONEFS_I(inode);
184185
@@ -196,13 +197,26 @@ static loff_t zonefs_check_zone_condition(struct inode *inode, · 11 unmodified lines
196197 zone->wp = zone->start;
197198 return 0;
198199 case BLK_ZONE_COND_READONLY:
199− /* Do not allow writes in read-only zones */
200+ /*
201+ * The write pointer of read-only zones is invalid. If such a
202+ * zone is found during mount, the file size cannot be retrieved
203+ * so we treat the zone as offline (mount == true case).
204+ * Otherwise, keep the file size as it was when last updated
205+ * so that the user can recover data. In both cases, writes are
206+ * always disabled for the zone.
207+ */
200208 if (warn)
201209 zonefs_warn(inode->i_sb, "inode %lu: read-only zone\n",
202210 inode->i_ino);
203211 inode->i_flags |= S_IMMUTABLE;
212+ if (mount) {
213+ zone->cond = BLK_ZONE_COND_OFFLINE;
214+ inode->i_mode &= ~0777;
215+ zone->wp = zone->start;
216+ return 0;
217+ }
204218 inode->i_mode &= ~0222;
205− /* fallthrough */
219+ return i_size_read(inode);
206220 default:
207221 if (zi->i_ztype == ZONEFS_ZTYPE_CNV)
208222 return zi->i_max_size;
@@ -231,7 +245,7 @@ static int zonefs_io_error_cb(struct blk_zone *zone, unsigned int idx, · 22 unmodified lines
231245 * as there is no inconsistency between the inode size and the amount of
232246 * data writen in the zone (data_size).
233247 */
234− data_size = zonefs_check_zone_condition(inode, zone, true);
248+ data_size = zonefs_check_zone_condition(inode, zone, true, false);
235249 isize = i_size_read(inode);
236250 if (zone->cond != BLK_ZONE_COND_OFFLINE &&
237251 zone->cond != BLK_ZONE_COND_READONLY &&
@@ -274,7 +288,7 @@ static int zonefs_io_error_cb(struct blk_zone *zone, unsigned int idx, · 36 unmodified lines
274288 if (zone->cond != BLK_ZONE_COND_OFFLINE) {
275289 zone->cond = BLK_ZONE_COND_OFFLINE;
276290 data_size = zonefs_check_zone_condition(inode, zone,
277− false);
291+ false, false);
278292 }
279293 } else if (zone->cond == BLK_ZONE_COND_READONLY ||
280294 sbi->s_mount_opts & ZONEFS_MNTOPT_ERRORS_ZRO) {
@@ -283,7 +297,7 @@ static int zonefs_io_error_cb(struct blk_zone *zone, unsigned int idx, · 2 unmodified lines
283297 if (zone->cond != BLK_ZONE_COND_READONLY) {
284298 zone->cond = BLK_ZONE_COND_READONLY;
285299 data_size = zonefs_check_zone_condition(inode, zone,
286− false);
300+ false, false);
287301 }
288302 }
289303
@@ -975,7 +989,7 @@ static void zonefs_init_file_inode(struct inode *inode, struct blk_zone *zone, · 685 unmodified lines
975989 zi->i_zsector = zone->start;
976990 zi->i_max_size = min_t(loff_t, MAX_LFS_FILESIZE,
977991 zone->len << SECTOR_SHIFT);
978− zi->i_wpoffset = zonefs_check_zone_condition(inode, zone, true);
992+ zi->i_wpoffset = zonefs_check_zone_condition(inode, zone, true, true);
979993
980994 inode->i_uid = sbi->s_uid;
981995 inode->i_gid = sbi->s_gid;
include/crypto/curve25519.h+4−2
@@ -33,7 +33,8 @@ bool __must_check curve25519(u8 mypublic[CURVE25519_KEY_SIZE], · 32 unmodified lines
3333 const u8 secret[CURVE25519_KEY_SIZE],
3434 const u8 basepoint[CURVE25519_KEY_SIZE])
3535 {
36− if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519))
36+ if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
37+ (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
3738 curve25519_arch(mypublic, secret, basepoint);
3839 else
3940 curve25519_generic(mypublic, secret, basepoint);
@@ -49,7 +50,8 @@ __must_check curve25519_generate_public(u8 pub[CURVE25519_KEY_SIZE], · 9 unmodified lines
4950 CURVE25519_KEY_SIZE)))
5051 return false;
5152
52− if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519))
53+ if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
54+ (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
5355 curve25519_base_arch(pub, secret);
5456 else
5557 curve25519_generic(pub, secret, curve25519_base_point);
include/drm/drm_dp_mst_helper.h+2−2
@@ -81,7 +81,7 @@ struct drm_dp_vcpi { · 80 unmodified lines
8181 * &drm_dp_mst_topology_mgr.base.lock.
8282 * @num_sdp_stream_sinks: Number of stream sinks. Protected by
8383 * &drm_dp_mst_topology_mgr.base.lock.
84− * @available_pbn: Available bandwidth for this port. Protected by
84+ * @full_pbn: Max possible bandwidth for this port. Protected by
8585 * &drm_dp_mst_topology_mgr.base.lock.
8686 * @next: link to next port on this branch device
8787 * @aux: i2c aux transport to talk to device connected to this port, protected
@@ -126,7 +126,7 @@ struct drm_dp_mst_port { · 38 unmodified lines
126126 u8 dpcd_rev;
127127 u8 num_sdp_streams;
128128 u8 num_sdp_stream_sinks;
129− uint16_t available_pbn;
129+ uint16_t full_pbn;
130130 struct list_head next;
131131 /**
132132 * @mstb: the branch device connected to this port, if there is one.
include/dt-bindings/clock/imx8mn-clock.h+2−2
@@ -122,8 +122,8 @@ · 121 unmodified lines
122122 #define IMX8MN_CLK_I2C1 105
123123 #define IMX8MN_CLK_I2C2 106
124124 #define IMX8MN_CLK_I2C3 107
125−#define IMX8MN_CLK_I2C4 118
126−#define IMX8MN_CLK_UART1 119
125+#define IMX8MN_CLK_I2C4 108
126+#define IMX8MN_CLK_UART1 109
127127 #define IMX8MN_CLK_UART2 110
128128 #define IMX8MN_CLK_UART3 111
129129 #define IMX8MN_CLK_UART4 112
include/linux/bpf.h+1−0
@@ -160,6 +160,7 @@ static inline void copy_map_value(struct bpf_map *map, void *dst, void *src) · 159 unmodified lines
160160 }
161161 void copy_map_value_locked(struct bpf_map *map, void *dst, void *src,
162162 bool lock_src);
163+int bpf_obj_name_cpy(char *dst, const char *src, unsigned int size);
163164
164165 struct bpf_offload_dev;
165166 struct bpf_offloaded_map;
include/linux/ceph/messenger.h+4−3
@@ -175,9 +175,10 @@ struct ceph_msg_data { · 174 unmodified lines
175175 #endif /* CONFIG_BLOCK */
176176 struct ceph_bvec_iter bvec_pos;
177177 struct {
178− struct page **pages; /* NOT OWNER. */
178+ struct page **pages;
179179 size_t length; /* total # bytes */
180180 unsigned int alignment; /* first page */
181+ bool own_pages;
181182 };
182183 struct ceph_pagelist *pagelist;
183184 };
@@ -356,8 +357,8 @@ extern void ceph_con_keepalive(struct ceph_connection *con); · 172 unmodified lines
356357 extern bool ceph_con_keepalive_expired(struct ceph_connection *con,
357358 unsigned long interval);
358359
359−extern void ceph_msg_data_add_pages(struct ceph_msg *msg, struct page **pages,
360− size_t length, size_t alignment);
360+void ceph_msg_data_add_pages(struct ceph_msg *msg, struct page **pages,
361+ size_t length, size_t alignment, bool own_pages);
361362 extern void ceph_msg_data_add_pagelist(struct ceph_msg *msg,
362363 struct ceph_pagelist *pagelist);
363364 #ifdef CONFIG_BLOCK
include/linux/ceph/osdmap.h+4−0
@@ -37,6 +37,9 @@ int ceph_spg_compare(const struct ceph_spg *lhs, const struct ceph_spg *rhs); · 36 unmodified lines
3737 #define CEPH_POOL_FLAG_HASHPSPOOL (1ULL << 0) /* hash pg seed and pool id
3838 together */
3939 #define CEPH_POOL_FLAG_FULL (1ULL << 1) /* pool is full */
40+#define CEPH_POOL_FLAG_FULL_QUOTA (1ULL << 10) /* pool ran out of quota,
41+ will set FULL too */
42+#define CEPH_POOL_FLAG_NEARFULL (1ULL << 11) /* pool is nearfull */
4043
4144 struct ceph_pg_pool_info {
4245 struct rb_node node;
@@ -304,5 +307,6 @@ extern struct ceph_pg_pool_info *ceph_pg_pool_by_id(struct ceph_osdmap *map, · 261 unmodified lines
304307
305308 extern const char *ceph_pg_pool_name_by_id(struct ceph_osdmap *map, u64 id);
306309 extern int ceph_pg_poolid_by_name(struct ceph_osdmap *map, const char *name);
310+u64 ceph_pg_pool_flags(struct ceph_osdmap *map, u64 id);
307311
308312 #endif
include/linux/ceph/rados.h+4−2
@@ -143,8 +143,10 @@ extern const char *ceph_osd_state_name(int s); · 142 unmodified lines
143143 /*
144144 * osd map flag bits
145145 */
146−#define CEPH_OSDMAP_NEARFULL (1<<0) /* sync writes (near ENOSPC) */
147−#define CEPH_OSDMAP_FULL (1<<1) /* no data writes (ENOSPC) */
146+#define CEPH_OSDMAP_NEARFULL (1<<0) /* sync writes (near ENOSPC),
147+ not set since ~luminous */
148+#define CEPH_OSDMAP_FULL (1<<1) /* no data writes (ENOSPC),
149+ not set since ~luminous */
148150 #define CEPH_OSDMAP_PAUSERD (1<<2) /* pause all reads */
149151 #define CEPH_OSDMAP_PAUSEWR (1<<3) /* pause all writes */
150152 #define CEPH_OSDMAP_PAUSEREC (1<<4) /* pause recovery */
include/linux/cgroup.h+1−0
@@ -62,6 +62,7 @@ struct css_task_iter { · 61 unmodified lines
6262 struct list_head *mg_tasks_head;
6363 struct list_head *dying_tasks_head;
6464
65+ struct list_head *cur_tasks_head;
6566 struct css_set *cur_cset;
6667 struct css_set *cur_dcset;
6768 struct task_struct *cur_task;
include/linux/clk-provider.h+5−5
@@ -522,9 +522,9 @@ struct clk *clk_register_gate(struct device *dev, const char *name, · 521 unmodified lines
522522 * @clk_gate_flags: gate-specific flags for this clock
523523 * @lock: shared register lock for this clock
524524 */
525−#define clk_hw_register_gate_parent_hw(dev, name, parent_name, flags, reg, \
525+#define clk_hw_register_gate_parent_hw(dev, name, parent_hw, flags, reg, \
526526 bit_idx, clk_gate_flags, lock) \
527− __clk_hw_register_gate((dev), NULL, (name), (parent_name), NULL, \
527+ __clk_hw_register_gate((dev), NULL, (name), NULL, (parent_hw), \
528528 NULL, (flags), (reg), (bit_idx), \
529529 (clk_gate_flags), (lock))
530530 /**
@@ -539,10 +539,10 @@ struct clk *clk_register_gate(struct device *dev, const char *name, · 8 unmodified lines
539539 * @clk_gate_flags: gate-specific flags for this clock
540540 * @lock: shared register lock for this clock
541541 */
542−#define clk_hw_register_gate_parent_data(dev, name, parent_name, flags, reg, \
542+#define clk_hw_register_gate_parent_data(dev, name, parent_data, flags, reg, \
543543 bit_idx, clk_gate_flags, lock) \
544− __clk_hw_register_gate((dev), NULL, (name), (parent_name), NULL, \
545− NULL, (flags), (reg), (bit_idx), \
544+ __clk_hw_register_gate((dev), NULL, (name), NULL, NULL, (parent_data), \
545+ (flags), (reg), (bit_idx), \
546546 (clk_gate_flags), (lock))
547547 void clk_unregister_gate(struct clk *clk);
548548 void clk_hw_unregister_gate(struct clk_hw *hw);
include/linux/dmar.h+9−5
@@ -69,19 +69,23 @@ struct dmar_pci_notify_info { · 68 unmodified lines
6969 extern struct rw_semaphore dmar_global_lock;
7070 extern struct list_head dmar_drhd_units;
7171
72−#define for_each_drhd_unit(drhd) \
73− list_for_each_entry_rcu(drhd, &dmar_drhd_units, list)
72+#define for_each_drhd_unit(drhd) \
73+ list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
74+ dmar_rcu_check())
7475
7576 #define for_each_active_drhd_unit(drhd) \
76− list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \
77+ list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
78+ dmar_rcu_check()) \
7779 if (drhd->ignored) {} else
7880
7981 #define for_each_active_iommu(i, drhd) \
80− list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \
82+ list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
83+ dmar_rcu_check()) \
8184 if (i=drhd->iommu, drhd->ignored) {} else
8285
8386 #define for_each_iommu(i, drhd) \
84− list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \
87+ list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
88+ dmar_rcu_check()) \
8589 if (i=drhd->iommu, 0) {} else
8690
8791 static inline bool dmar_rcu_check(void)
include/linux/dsa/8021q.h+0−7
@@ -28,8 +28,6 @@ int dsa_8021q_rx_switch_id(u16 vid); · 27 unmodified lines
2828
2929 int dsa_8021q_rx_source_port(u16 vid);
3030
31−struct sk_buff *dsa_8021q_remove_header(struct sk_buff *skb);
32−
3331 #else
3432
3533 int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
@@ -64,11 +62,6 @@ int dsa_8021q_rx_source_port(u16 vid) · 28 unmodified lines
6462 return 0;
6563 }
6664
67−struct sk_buff *dsa_8021q_remove_header(struct sk_buff *skb)
68−{
69− return NULL;
70−}
71−
7265 #endif /* IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q) */
7366
7467 #endif /* _NET_DSA_8021Q_H */
include/linux/file.h+1−0
@@ -85,6 +85,7 @@ extern int f_dupfd(unsigned int from, struct file *file, unsigned flags); · 84 unmodified lines
8585 extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
8686 extern void set_close_on_exec(unsigned int fd, int flag);
8787 extern bool get_close_on_exec(unsigned int fd);
88+extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
8889 extern int get_unused_fd_flags(unsigned flags);
8990 extern void put_unused_fd(unsigned int fd);
9091
include/linux/fs.h+1−0
@@ -698,6 +698,7 @@ struct inode { · 697 unmodified lines
698698 struct rcu_head i_rcu;
699699 };
700700 atomic64_t i_version;
701+ atomic64_t i_sequence; /* see futex */
701702 atomic_t i_count;
702703 atomic_t i_dio_count;
703704 atomic_t i_writecount;
include/linux/futex.h+10−7
@@ -31,23 +31,26 @@ struct task_struct; · 30 unmodified lines
3131
3232 union futex_key {
3333 struct {
34+ u64 i_seq;
3435 unsigned long pgoff;
35− struct inode *inode;
36− int offset;
36+ unsigned int offset;
3737 } shared;
3838 struct {
39+ union {
40+ struct mm_struct *mm;
41+ u64 __tmp;
42+ };
3943 unsigned long address;
40− struct mm_struct *mm;
41− int offset;
44+ unsigned int offset;
4245 } private;
4346 struct {
47+ u64 ptr;
4448 unsigned long word;
45− void *ptr;
46− int offset;
49+ unsigned int offset;
4750 } both;
4851 };
4952
50−#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = NULL } }
53+#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = 0ULL } }
5154
5255 #ifdef CONFIG_FUTEX
5356 enum {
include/linux/genhd.h+1−12
@@ -245,18 +245,6 @@ static inline bool disk_part_scan_enabled(struct gendisk *disk) · 244 unmodified lines
245245 !(disk->flags & GENHD_FL_NO_PART_SCAN);
246246 }
247247
248−static inline bool disk_has_partitions(struct gendisk *disk)
249−{
250− bool ret = false;
251−
252− rcu_read_lock();
253− if (rcu_dereference(disk->part_tbl)->len > 1)
254− ret = true;
255− rcu_read_unlock();
256−
257− return ret;
258−}
259−
260248 static inline dev_t disk_devt(struct gendisk *disk)
261249 {
262250 return MKDEV(disk->major, disk->first_minor);
@@ -298,6 +286,7 @@ extern void disk_part_iter_exit(struct disk_part_iter *piter); · 35 unmodified lines
298286
299287 extern struct hd_struct *disk_map_sector_rcu(struct gendisk *disk,
300288 sector_t sector);
289+bool disk_has_partitions(struct gendisk *disk);
301290
302291 /*
303292 * Macros to operate on percpu disk statistics:
include/linux/i2c.h+2−2
@@ -506,7 +506,7 @@ i2c_register_board_info(int busnum, struct i2c_board_info const *info, · 505 unmodified lines
506506 * @smbus_xfer_atomic: same as @smbus_xfer. Yet, only using atomic context
507507 * so e.g. PMICs can be accessed very late before shutdown. Optional.
508508 * @functionality: Return the flags that this algorithm/adapter pair supports
509− * from the I2C_FUNC_* flags.
509+ * from the ``I2C_FUNC_*`` flags.
510510 * @reg_slave: Register given client to I2C slave mode of this adapter
511511 * @unreg_slave: Unregister given client from I2C slave mode of this adapter
512512 *
@@ -515,7 +515,7 @@ i2c_register_board_info(int busnum, struct i2c_board_info const *info, · 2 unmodified lines
515515 * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
516516 * to name two of the most common.
517517 *
518− * The return codes from the @master_xfer{_atomic} fields should indicate the
518+ * The return codes from the ``master_xfer{_atomic}`` fields should indicate the
519519 * type of error code that occurred during the transfer, as documented in the
520520 * Kernel Documentation file Documentation/i2c/fault-codes.rst.
521521 */
include/linux/ieee80211.h+2−2
@@ -2102,14 +2102,14 @@ ieee80211_he_spr_size(const u8 *he_spr_ie) · 2101 unmodified lines
21022102 {
21032103 struct ieee80211_he_spr *he_spr = (void *)he_spr_ie;
21042104 u8 spr_len = sizeof(struct ieee80211_he_spr);
2105− u32 he_spr_params;
2105+ u8 he_spr_params;
21062106
21072107 /* Make sure the input is not NULL */
21082108 if (!he_spr_ie)
21092109 return 0;
21102110
21112111 /* Calc required length */
2112− he_spr_params = le32_to_cpu(he_spr->he_sr_control);
2112+ he_spr_params = he_spr->he_sr_control;
21132113 if (he_spr_params & IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT)
21142114 spr_len++;
21152115 if (he_spr_params & IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT)
include/linux/inet_diag.h+12−6
@@ -2,15 +2,10 @@ · 1 unmodified line
22 #ifndef _INET_DIAG_H_
33 #define _INET_DIAG_H_ 1
44
5+#include <net/netlink.h>
56 #include <uapi/linux/inet_diag.h>
67
7−struct net;
8−struct sock;
98 struct inet_hashinfo;
10−struct nlattr;
11−struct nlmsghdr;
12−struct sk_buff;
13−struct netlink_callback;
149
1510 struct inet_diag_handler {
1611 void (*dump)(struct sk_buff *skb,
@@ -62,6 +57,17 @@ int inet_diag_bc_sk(const struct nlattr *_bc, struct sock *sk); · 45 unmodified lines
6257
6358 void inet_diag_msg_common_fill(struct inet_diag_msg *r, struct sock *sk);
6459
60+static inline size_t inet_diag_msg_attrs_size(void)
61+{
62+ return nla_total_size(1) /* INET_DIAG_SHUTDOWN */
63+ + nla_total_size(1) /* INET_DIAG_TOS */
64+#if IS_ENABLED(CONFIG_IPV6)
65+ + nla_total_size(1) /* INET_DIAG_TCLASS */
66+ + nla_total_size(1) /* INET_DIAG_SKV6ONLY */
67+#endif
68+ + nla_total_size(4) /* INET_DIAG_MARK */
69+ + nla_total_size(4); /* INET_DIAG_CLASS_ID */
70+}
6571 int inet_diag_msg_attrs_fill(struct sock *sk, struct sk_buff *skb,
6672 struct inet_diag_msg *r, int ext,
6773 struct user_namespace *user_ns, bool net_admin);
include/linux/intel-iommu.h+2−0
@@ -123,6 +123,8 @@ · 122 unmodified lines
123123
124124 #define dmar_readq(a) readq(a)
125125 #define dmar_writeq(a,v) writeq(v,a)
126+#define dmar_readl(a) readl(a)
127+#define dmar_writel(a, v) writel(v, a)
126128
127129 #define DMAR_VER_MAJOR(v) (((v) & 0xf0) >> 4)
128130 #define DMAR_VER_MINOR(v) ((v) & 0x0f)
include/linux/memcontrol.h+12−0
@@ -695,6 +695,7 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec, · 694 unmodified lines
695695 void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
696696 int val);
697697 void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val);
698+void mod_memcg_obj_state(void *p, int idx, int val);
698699
699700 static inline void mod_lruvec_state(struct lruvec *lruvec,
700701 enum node_stat_item idx, int val)
@@ -1123,6 +1124,10 @@ static inline void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, · 422 unmodified lines
11231124 __mod_node_page_state(page_pgdat(page), idx, val);
11241125 }
11251126
1127+static inline void mod_memcg_obj_state(void *p, int idx, int val)
1128+{
1129+}
1130+
11261131 static inline
11271132 unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
11281133 gfp_t gfp_mask,
@@ -1427,6 +1432,8 @@ static inline int memcg_cache_id(struct mem_cgroup *memcg) · 298 unmodified lines
14271432 return memcg ? memcg->kmemcg_id : -1;
14281433 }
14291434
1435+struct mem_cgroup *mem_cgroup_from_obj(void *p);
1436+
14301437 #else
14311438
14321439 static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
@@ -1468,6 +1475,11 @@ static inline void memcg_put_cache_ids(void) · 35 unmodified lines
14681475 {
14691476 }
14701477
1478+static inline struct mem_cgroup *mem_cgroup_from_obj(void *p)
1479+{
1480+ return NULL;
1481+}
1482+
14711483 #endif /* CONFIG_MEMCG_KMEM */
14721484
14731485 #endif /* _LINUX_MEMCONTROL_H */
include/linux/mmc/host.h+1−0
@@ -333,6 +333,7 @@ struct mmc_host { · 332 unmodified lines
333333 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | \
334334 MMC_CAP_UHS_DDR50)
335335 #define MMC_CAP_SYNC_RUNTIME_PM (1 << 21) /* Synced runtime PM suspends. */
336+#define MMC_CAP_NEED_RSP_BUSY (1 << 22) /* Commands with R1B can't use R1. */
336337 #define MMC_CAP_DRIVER_TYPE_A (1 << 23) /* Host supports Driver Type A */
337338 #define MMC_CAP_DRIVER_TYPE_C (1 << 24) /* Host supports Driver Type C */
338339 #define MMC_CAP_DRIVER_TYPE_D (1 << 25) /* Host supports Driver Type D */
include/linux/netlink.h+13−0
@@ -115,6 +115,19 @@ static inline void nl_set_extack_cookie_u64(struct netlink_ext_ack *extack, · 114 unmodified lines
115115 {
116116 u64 __cookie = cookie;
117117
118+ if (!extack)
119+ return;
120+ memcpy(extack->cookie, &__cookie, sizeof(__cookie));
121+ extack->cookie_len = sizeof(__cookie);
122+}
123+
124+static inline void nl_set_extack_cookie_u32(struct netlink_ext_ack *extack,
125+ u32 cookie)
126+{
127+ u32 __cookie = cookie;
128+
129+ if (!extack)
130+ return;
118131 memcpy(extack->cookie, &__cookie, sizeof(__cookie));
119132 extack->cookie_len = sizeof(__cookie);
120133 }
include/linux/of_clk.h+4−4
@@ -11,17 +11,17 @@ struct of_device_id; · 10 unmodified lines
1111
1212 #if defined(CONFIG_COMMON_CLK) && defined(CONFIG_OF)
1313
14−unsigned int of_clk_get_parent_count(struct device_node *np);
15−const char *of_clk_get_parent_name(struct device_node *np, int index);
14+unsigned int of_clk_get_parent_count(const struct device_node *np);
15+const char *of_clk_get_parent_name(const struct device_node *np, int index);
1616 void of_clk_init(const struct of_device_id *matches);
1717
1818 #else /* !CONFIG_COMMON_CLK || !CONFIG_OF */
1919
20−static inline unsigned int of_clk_get_parent_count(struct device_node *np)
20+static inline unsigned int of_clk_get_parent_count(const struct device_node *np)
2121 {
2222 return 0;
2323 }
24−static inline const char *of_clk_get_parent_name(struct device_node *np,
24+static inline const char *of_clk_get_parent_name(const struct device_node *np,
2525 int index)
2626 {
2727 return NULL;
include/linux/page-flags.h+1−1
@@ -311,7 +311,7 @@ static inline int TestClearPage##uname(struct page *page) { return 0; } · 310 unmodified lines
311311
312312 __PAGEFLAG(Locked, locked, PF_NO_TAIL)
313313 PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) __CLEARPAGEFLAG(Waiters, waiters, PF_ONLY_HEAD)
314−PAGEFLAG(Error, error, PF_NO_COMPOUND) TESTCLEARFLAG(Error, error, PF_NO_COMPOUND)
314+PAGEFLAG(Error, error, PF_NO_TAIL) TESTCLEARFLAG(Error, error, PF_NO_TAIL)
315315 PAGEFLAG(Referenced, referenced, PF_HEAD)
316316 TESTCLEARFLAG(Referenced, referenced, PF_HEAD)
317317 __SETPAGEFLAG(Referenced, referenced, PF_HEAD)
include/linux/phy.h+3−0
@@ -357,6 +357,7 @@ struct macsec_ops; · 356 unmodified lines
357357 * is_gigabit_capable: Set to true if PHY supports 1000Mbps
358358 * has_fixups: Set to true if this phy has fixups/quirks.
359359 * suspended: Set to true if this phy has been suspended successfully.
360+ * suspended_by_mdio_bus: Set to true if this phy was suspended by MDIO bus.
360361 * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
361362 * loopback_enabled: Set true if this phy has been loopbacked successfully.
362363 * state: state of the PHY for management purposes
@@ -396,6 +397,7 @@ struct phy_device { · 33 unmodified lines
396397 unsigned is_gigabit_capable:1;
397398 unsigned has_fixups:1;
398399 unsigned suspended:1;
400+ unsigned suspended_by_mdio_bus:1;
399401 unsigned sysfs_links:1;
400402 unsigned loopback_enabled:1;
401403
@@ -557,6 +559,7 @@ struct phy_driver { · 155 unmodified lines
557559 /*
558560 * Checks if the PHY generated an interrupt.
559561 * For multi-PHY devices with shared PHY interrupt pin
562+ * Set interrupt bits have to be cleared.
560563 */
561564 int (*did_interrupt)(struct phy_device *phydev);
562565
include/linux/platform_device.h+1−1
@@ -24,7 +24,7 @@ struct platform_device { · 23 unmodified lines
2424 int id;
2525 bool id_auto;
2626 struct device dev;
27− u64 dma_mask;
27+ u64 platform_dma_mask;
2828 u32 num_resources;
2929 struct resource *resource;
3030
include/linux/rhashtable.h+1−1
@@ -972,9 +972,9 @@ static inline int rhashtable_lookup_insert_key( · 971 unmodified lines
972972 /**
973973 * rhashtable_lookup_get_insert_key - lookup and insert object into hash table
974974 * @ht: hash table
975+ * @key: key
975976 * @obj: pointer to hash head inside object
976977 * @params: hash table parameters
977− * @data: pointer to element data already in hashes
978978 *
979979 * Just like rhashtable_lookup_insert_key(), but this function returns the
980980 * object if it exists, NULL if it does not and the insertion was successful,
include/linux/skbuff.h+32−4
@@ -645,8 +645,8 @@ typedef unsigned char *sk_buff_data_t; · 644 unmodified lines
645645 * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware
646646 * @tc_skip_classify: do not classify packet. set by IFB device
647647 * @tc_at_ingress: used within tc_classify to distinguish in/egress
648− * @tc_redirected: packet was redirected by a tc action
649− * @tc_from_ingress: if tc_redirected, tc_at_ingress at time of redirect
648+ * @redirected: packet was redirected by packet classifier
649+ * @from_ingress: packet was redirected from the ingress path
650650 * @peeked: this packet has been seen already, so stats have been
651651 * done for it, don't do them again
652652 * @nf_trace: netfilter packet trace flag
@@ -848,8 +848,10 @@ struct sk_buff { · 195 unmodified lines
848848 #ifdef CONFIG_NET_CLS_ACT
849849 __u8 tc_skip_classify:1;
850850 __u8 tc_at_ingress:1;
851− __u8 tc_redirected:1;
852− __u8 tc_from_ingress:1;
851+#endif
852+#ifdef CONFIG_NET_REDIRECT
853+ __u8 redirected:1;
854+ __u8 from_ingress:1;
853855 #endif
854856 #ifdef CONFIG_TLS_DEVICE
855857 __u8 decrypted:1;
@@ -4579,5 +4581,31 @@ static inline __wsum lco_csum(struct sk_buff *skb) · 3723 unmodified lines
45794581 return csum_partial(l4_hdr, csum_start - l4_hdr, partial);
45804582 }
45814583
4584+static inline bool skb_is_redirected(const struct sk_buff *skb)
4585+{
4586+#ifdef CONFIG_NET_REDIRECT
4587+ return skb->redirected;
4588+#else
4589+ return false;
4590+#endif
4591+}
4592+
4593+static inline void skb_set_redirected(struct sk_buff *skb, bool from_ingress)
4594+{
4595+#ifdef CONFIG_NET_REDIRECT
4596+ skb->redirected = 1;
4597+ skb->from_ingress = from_ingress;
4598+ if (skb->from_ingress)
4599+ skb->tstamp = 0;
4600+#endif
4601+}
4602+
4603+static inline void skb_reset_redirect(struct sk_buff *skb)
4604+{
4605+#ifdef CONFIG_NET_REDIRECT
4606+ skb->redirected = 0;
4607+#endif
4608+}
4609+
45824610 #endif /* __KERNEL__ */
45834611 #endif /* _LINUX_SKBUFF_H */
include/linux/socket.h+2−1
@@ -401,7 +401,8 @@ extern int __sys_sendto(int fd, void __user *buff, size_t len, · 400 unmodified lines
401401 int addr_len);
402402 extern int __sys_accept4_file(struct file *file, unsigned file_flags,
403403 struct sockaddr __user *upeer_sockaddr,
404− int __user *upeer_addrlen, int flags);
404+ int __user *upeer_addrlen, int flags,
405+ unsigned long nofile);
405406 extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
406407 int __user *upeer_addrlen, int flags);
407408 extern int __sys_socket(int family, int type, int protocol);
include/linux/vmalloc.h+3−2
@@ -141,8 +141,9 @@ extern int remap_vmalloc_range_partial(struct vm_area_struct *vma, · 140 unmodified lines
141141
142142 extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
143143 unsigned long pgoff);
144−void vmalloc_sync_all(void);
145−
144+void vmalloc_sync_mappings(void);
145+void vmalloc_sync_unmappings(void);
146+
146147 /*
147148 * Lowlevel-APIs (not for driver use!)
148149 */
include/linux/workqueue.h+16−0
@@ -487,6 +487,19 @@ extern void wq_worker_comm(char *buf, size_t size, struct task_struct *task); · 486 unmodified lines
487487 *
488488 * We queue the work to the CPU on which it was submitted, but if the CPU dies
489489 * it can be processed by another CPU.
490+ *
491+ * Memory-ordering properties: If it returns %true, guarantees that all stores
492+ * preceding the call to queue_work() in the program order will be visible from
493+ * the CPU which will execute @work by the time such work executes, e.g.,
494+ *
495+ * { x is initially 0 }
496+ *
497+ * CPU0 CPU1
498+ *
499+ * WRITE_ONCE(x, 1); [ @work is being executed ]
500+ * r0 = queue_work(wq, work); r1 = READ_ONCE(x);
501+ *
502+ * Forbids: r0 == true && r1 == 0
490503 */
491504 static inline bool queue_work(struct workqueue_struct *wq,
492505 struct work_struct *work)
@@ -546,6 +559,9 @@ static inline bool schedule_work_on(int cpu, struct work_struct *work) · 53 unmodified lines
546559 * This puts a job in the kernel-global workqueue if it was not already
547560 * queued and leaves it in the same position on the kernel-global
548561 * workqueue otherwise.
562+ *
563+ * Shares the same memory-ordering properties of queue_work(), cf. the
564+ * DocBook header of queue_work().
549565 */
550566 static inline bool schedule_work(struct work_struct *work)
551567 {
include/net/af_rxrpc.h+8−4
@@ -16,6 +16,12 @@ struct sock; · 15 unmodified lines
1616 struct socket;
1717 struct rxrpc_call;
1818
19+enum rxrpc_interruptibility {
20+ RXRPC_INTERRUPTIBLE, /* Call is interruptible */
21+ RXRPC_PREINTERRUPTIBLE, /* Call can be cancelled whilst waiting for a slot */
22+ RXRPC_UNINTERRUPTIBLE, /* Call should not be interruptible at all */
23+};
24+
1925 /*
2026 * Debug ID counter for tracing.
2127 */
@@ -41,7 +47,7 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *, · 19 unmodified lines
4147 gfp_t,
4248 rxrpc_notify_rx_t,
4349 bool,
44− bool,
50+ enum rxrpc_interruptibility,
4551 unsigned int);
4652 int rxrpc_kernel_send_data(struct socket *, struct rxrpc_call *,
4753 struct msghdr *, size_t,
@@ -58,9 +64,7 @@ int rxrpc_kernel_charge_accept(struct socket *, rxrpc_notify_rx_t, · 10 unmodified lines
5864 rxrpc_user_attach_call_t, unsigned long, gfp_t,
5965 unsigned int);
6066 void rxrpc_kernel_set_tx_length(struct socket *, struct rxrpc_call *, s64);
61−bool rxrpc_kernel_check_life(const struct socket *, const struct rxrpc_call *,
62− u32 *);
63−void rxrpc_kernel_probe_life(struct socket *, struct rxrpc_call *);
67+bool rxrpc_kernel_check_life(const struct socket *, const struct rxrpc_call *);
6468 u32 rxrpc_kernel_get_epoch(struct socket *, struct rxrpc_call *);
6569 bool rxrpc_kernel_get_reply_time(struct socket *, struct rxrpc_call *,
6670 ktime_t *);
include/net/fib_rules.h+1−0
@@ -108,6 +108,7 @@ struct fib_rule_notifier_info { · 107 unmodified lines
108108 [FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
109109 [FRA_PRIORITY] = { .type = NLA_U32 }, \
110110 [FRA_FWMARK] = { .type = NLA_U32 }, \
111+ [FRA_TUN_ID] = { .type = NLA_U64 }, \
111112 [FRA_FWMASK] = { .type = NLA_U32 }, \
112113 [FRA_TABLE] = { .type = NLA_U32 }, \
113114 [FRA_SUPPRESS_PREFIXLEN] = { .type = NLA_U32 }, \
include/net/sch_generic.h+0−16
@@ -675,22 +675,6 @@ void __qdisc_calculate_pkt_len(struct sk_buff *skb, · 674 unmodified lines
675675 const struct qdisc_size_table *stab);
676676 int skb_do_redirect(struct sk_buff *);
677677
678−static inline void skb_reset_tc(struct sk_buff *skb)
679−{
680−#ifdef CONFIG_NET_CLS_ACT
681− skb->tc_redirected = 0;
682−#endif
683−}
684−
685−static inline bool skb_is_tc_redirected(const struct sk_buff *skb)
686−{
687−#ifdef CONFIG_NET_CLS_ACT
688− return skb->tc_redirected;
689−#else
690− return false;
691−#endif
692−}
693−
694678 static inline bool skb_at_tc_ingress(const struct sk_buff *skb)
695679 {
696680 #ifdef CONFIG_NET_CLS_ACT
include/soc/mscc/ocelot_dev.h+1−1
@@ -74,7 +74,7 @@ · 73 unmodified lines
7474 #define DEV_MAC_TAGS_CFG_TAG_ID_M GENMASK(31, 16)
7575 #define DEV_MAC_TAGS_CFG_TAG_ID_X(x) (((x) & GENMASK(31, 16)) >> 16)
7676 #define DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA BIT(2)
77−#define DEV_MAC_TAGS_CFG_PB_ENA BIT(1)
77+#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA BIT(1)
7878 #define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)
7979
8080 #define DEV_MAC_ADV_CHK_CFG 0x2c
include/trace/events/afs.h+1−1
@@ -233,7 +233,7 @@ enum afs_cb_break_reason { · 232 unmodified lines
233233 EM(afs_call_trace_get, "GET ") \
234234 EM(afs_call_trace_put, "PUT ") \
235235 EM(afs_call_trace_wake, "WAKE ") \
236− E_(afs_call_trace_work, "WORK ")
236+ E_(afs_call_trace_work, "QUEUE")
237237
238238 #define afs_server_traces \
239239 EM(afs_server_trace_alloc, "ALLOC ") \
include/uapi/linux/in.h+2−0
@@ -74,6 +74,8 @@ enum { · 73 unmodified lines
7474 #define IPPROTO_UDPLITE IPPROTO_UDPLITE
7575 IPPROTO_MPLS = 137, /* MPLS in IP (RFC 4023) */
7676 #define IPPROTO_MPLS IPPROTO_MPLS
77+ IPPROTO_ETHERNET = 143, /* Ethernet-within-IPv6 Encapsulation */
78+#define IPPROTO_ETHERNET IPPROTO_ETHERNET
7779 IPPROTO_RAW = 255, /* Raw IP packets */
7880 #define IPPROTO_RAW IPPROTO_RAW
7981 IPPROTO_MPTCP = 262, /* Multipath TCP connection */
include/uapi/linux/input-event-codes.h+3−0
@@ -652,6 +652,9 @@ · 651 unmodified lines
652652 /* Electronic privacy screen control */
653653 #define KEY_PRIVACY_SCREEN_TOGGLE 0x279
654654
655+/* Select an area of screen to be copied */
656+#define KEY_SELECTIVE_SCREENSHOT 0x27a
657+
655658 /*
656659 * Some keyboards have keys which do not have a defined meaning, these keys
657660 * are intended to be programmed / bound to macros by the user. For most
include/uapi/linux/serio.h+5−5
@@ -9,7 +9,7 @@ · 8 unmodified lines
99 #ifndef _UAPI_SERIO_H
1010 #define _UAPI_SERIO_H
1111
12−
12+#include <linux/const.h>
1313 #include <linux/ioctl.h>
1414
1515 #define SPIOCSTYPE _IOW('q', 0x01, unsigned long)
@@ -18,10 +18,10 @@ · 2 unmodified lines
1818 /*
1919 * bit masks for use in "interrupt" flags (3rd argument)
2020 */
21−#define SERIO_TIMEOUT BIT(0)
22−#define SERIO_PARITY BIT(1)
23−#define SERIO_FRAME BIT(2)
24−#define SERIO_OOB_DATA BIT(3)
21+#define SERIO_TIMEOUT _BITUL(0)
22+#define SERIO_PARITY _BITUL(1)
23+#define SERIO_FRAME _BITUL(2)
24+#define SERIO_OOB_DATA _BITUL(3)
2525
2626 /*
2727 * Serio types
init/Kconfig+1−2
@@ -767,8 +767,7 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH · 766 unmodified lines
767767 bool
768768
769769 config CC_HAS_INT128
770− def_bool y
771− depends on !$(cc-option,-D__SIZEOF_INT128__=0)
770+ def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
772771
773772 #
774773 # For architectures that know their GCC __int128 support is sound
kernel/bpf/bpf_struct_ops.c+11−3
@@ -482,13 +482,21 @@ static int bpf_struct_ops_map_delete_elem(struct bpf_map *map, void *key) · 481 unmodified lines
482482 prev_state = cmpxchg(&st_map->kvalue.state,
483483 BPF_STRUCT_OPS_STATE_INUSE,
484484 BPF_STRUCT_OPS_STATE_TOBEFREE);
485− if (prev_state == BPF_STRUCT_OPS_STATE_INUSE) {
485+ switch (prev_state) {
486+ case BPF_STRUCT_OPS_STATE_INUSE:
486487 st_map->st_ops->unreg(&st_map->kvalue.data);
487488 if (refcount_dec_and_test(&st_map->kvalue.refcnt))
488489 bpf_map_put(map);
490+ return 0;
491+ case BPF_STRUCT_OPS_STATE_TOBEFREE:
492+ return -EINPROGRESS;
493+ case BPF_STRUCT_OPS_STATE_INIT:
494+ return -ENOENT;
495+ default:
496+ WARN_ON_ONCE(1);
497+ /* Should never happen. Treat it as not found. */
498+ return -ENOENT;
489499 }
490−
491− return 0;
492500 }
493501
494502 static void bpf_struct_ops_map_seq_show_elem(struct bpf_map *map, void *key,
kernel/bpf/btf.c+3−2
@@ -2418,7 +2418,7 @@ static int btf_enum_check_member(struct btf_verifier_env *env, · 2417 unmodified lines
24182418
24192419 struct_size = struct_type->size;
24202420 bytes_offset = BITS_ROUNDDOWN_BYTES(struct_bits_off);
2421− if (struct_size - bytes_offset < sizeof(int)) {
2421+ if (struct_size - bytes_offset < member_type->size) {
24222422 btf_verifier_log_member(env, struct_type, member,
24232423 "Member exceeds struct_size");
24242424 return -EINVAL;
@@ -4564,7 +4564,7 @@ int btf_get_info_by_fd(const struct btf *btf, · 2139 unmodified lines
45644564 union bpf_attr __user *uattr)
45654565 {
45664566 struct bpf_btf_info __user *uinfo;
4567− struct bpf_btf_info info = {};
4567+ struct bpf_btf_info info;
45684568 u32 info_copy, btf_copy;
45694569 void __user *ubtf;
45704570 u32 uinfo_len;
@@ -4573,6 +4573,7 @@ int btf_get_info_by_fd(const struct btf *btf, · 2 unmodified lines
45734573 uinfo_len = attr->info.info_len;
45744574
45754575 info_copy = min_t(u32, uinfo_len, sizeof(info));
4576+ memset(&info, 0, sizeof(info));
45764577 if (copy_from_user(&info, uinfo, info_copy))
45774578 return -EFAULT;
45784579
kernel/bpf/cgroup.c+5−2
@@ -227,6 +227,9 @@ cleanup: · 226 unmodified lines
227227 for (i = 0; i < NR; i++)
228228 bpf_prog_array_free(arrays[i]);
229229
230+ for (p = cgroup_parent(cgrp); p; p = cgroup_parent(p))
231+ cgroup_bpf_put(p);
232+
230233 percpu_ref_exit(&cgrp->bpf.refcnt);
231234
232235 return -ENOMEM;
@@ -302,8 +305,8 @@ int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, · 69 unmodified lines
302305 u32 saved_flags = (flags & (BPF_F_ALLOW_OVERRIDE | BPF_F_ALLOW_MULTI));
303306 struct list_head *progs = &cgrp->bpf.progs[type];
304307 struct bpf_prog *old_prog = NULL;
305− struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE],
306− *old_storage[MAX_BPF_CGROUP_STORAGE_TYPE] = {NULL};
308+ struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE] = {};
309+ struct bpf_cgroup_storage *old_storage[MAX_BPF_CGROUP_STORAGE_TYPE] = {};
307310 struct bpf_prog_list *pl, *replace_pl = NULL;
308311 enum bpf_cgroup_storage_type stype;
309312 int err;
kernel/bpf/syscall.c+25−14
@@ -696,14 +696,15 @@ int bpf_get_file_flag(int flags) · 695 unmodified lines
696696 offsetof(union bpf_attr, CMD##_LAST_FIELD) - \
697697 sizeof(attr->CMD##_LAST_FIELD)) != NULL
698698
699−/* dst and src must have at least BPF_OBJ_NAME_LEN number of bytes.
700− * Return 0 on success and < 0 on error.
699+/* dst and src must have at least "size" number of bytes.
700+ * Return strlen on success and < 0 on error.
701701 */
702−static int bpf_obj_name_cpy(char *dst, const char *src)
702+int bpf_obj_name_cpy(char *dst, const char *src, unsigned int size)
703703 {
704− const char *end = src + BPF_OBJ_NAME_LEN;
704+ const char *end = src + size;
705+ const char *orig_src = src;
705706
706− memset(dst, 0, BPF_OBJ_NAME_LEN);
707+ memset(dst, 0, size);
707708 /* Copy all isalnum(), '_' and '.' chars. */
708709 while (src < end && *src) {
709710 if (!isalnum(*src) &&
@@ -712,11 +713,11 @@ static int bpf_obj_name_cpy(char *dst, const char *src) · 2 unmodified lines
712713 *dst++ = *src++;
713714 }
714715
715− /* No '\0' found in BPF_OBJ_NAME_LEN number of bytes */
716+ /* No '\0' found in "size" number of bytes */
716717 if (src == end)
717718 return -EINVAL;
718719
719− return 0;
720+ return src - orig_src;
720721 }
721722
722723 int map_check_no_btf(const struct bpf_map *map,
@@ -810,8 +811,9 @@ static int map_create(union bpf_attr *attr) · 87 unmodified lines
810811 if (IS_ERR(map))
811812 return PTR_ERR(map);
812813
813− err = bpf_obj_name_cpy(map->name, attr->map_name);
814− if (err)
814+ err = bpf_obj_name_cpy(map->name, attr->map_name,
815+ sizeof(attr->map_name));
816+ if (err < 0)
815817 goto free_map;
816818
817819 atomic64_set(&map->refcnt, 1);
@@ -1510,6 +1512,11 @@ static int map_freeze(const union bpf_attr *attr) · 692 unmodified lines
15101512 if (IS_ERR(map))
15111513 return PTR_ERR(map);
15121514
1515+ if (map->map_type == BPF_MAP_TYPE_STRUCT_OPS) {
1516+ fdput(f);
1517+ return -ENOTSUPP;
1518+ }
1519+
15131520 mutex_lock(&map->freeze_mutex);
15141521
15151522 if (map->writecnt) {
@@ -2093,8 +2100,9 @@ static int bpf_prog_load(union bpf_attr *attr, union bpf_attr __user *uattr) · 577 unmodified lines
20932100 goto free_prog;
20942101
20952102 prog->aux->load_time = ktime_get_boottime_ns();
2096− err = bpf_obj_name_cpy(prog->aux->name, attr->prog_name);
2097− if (err)
2103+ err = bpf_obj_name_cpy(prog->aux->name, attr->prog_name,
2104+ sizeof(attr->prog_name));
2105+ if (err < 0)
20982106 goto free_prog;
20992107
21002108 /* run eBPF verifier */
@@ -2787,7 +2795,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog, · 686 unmodified lines
27872795 union bpf_attr __user *uattr)
27882796 {
27892797 struct bpf_prog_info __user *uinfo = u64_to_user_ptr(attr->info.info);
2790− struct bpf_prog_info info = {};
2798+ struct bpf_prog_info info;
27912799 u32 info_len = attr->info.info_len;
27922800 struct bpf_prog_stats stats;
27932801 char __user *uinsns;
@@ -2799,6 +2807,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog, · 5 unmodified lines
27992807 return err;
28002808 info_len = min_t(u32, sizeof(info), info_len);
28012809
2810+ memset(&info, 0, sizeof(info));
28022811 if (copy_from_user(&info, uinfo, info_len))
28032812 return -EFAULT;
28042813
@@ -3062,7 +3071,7 @@ static int bpf_map_get_info_by_fd(struct bpf_map *map, · 257 unmodified lines
30623071 union bpf_attr __user *uattr)
30633072 {
30643073 struct bpf_map_info __user *uinfo = u64_to_user_ptr(attr->info.info);
3065− struct bpf_map_info info = {};
3074+ struct bpf_map_info info;
30663075 u32 info_len = attr->info.info_len;
30673076 int err;
30683077
@@ -3071,6 +3080,7 @@ static int bpf_map_get_info_by_fd(struct bpf_map *map, · 2 unmodified lines
30713080 return err;
30723081 info_len = min_t(u32, sizeof(info), info_len);
30733082
3083+ memset(&info, 0, sizeof(info));
30743084 info.type = map->map_type;
30753085 info.id = map->id;
30763086 info.key_size = map->key_size;
@@ -3354,7 +3364,7 @@ err_put: · 277 unmodified lines
33543364
33553365 SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size)
33563366 {
3357− union bpf_attr attr = {};
3367+ union bpf_attr attr;
33583368 int err;
33593369
33603370 if (sysctl_unprivileged_bpf_disabled && !capable(CAP_SYS_ADMIN))
@@ -3366,6 +3376,7 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz · 5 unmodified lines
33663376 size = min_t(u32, size, sizeof(attr));
33673377
33683378 /* copy attributes from user space, may be less than sizeof(bpf_attr) */
3379+ memset(&attr, 0, sizeof(attr));
33693380 if (copy_from_user(&attr, uattr, size) != 0)
33703381 return -EFAULT;
33713382
kernel/cgroup/cgroup-v1.c+2−1
@@ -471,6 +471,7 @@ static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos) · 470 unmodified lines
471471 */
472472 p++;
473473 if (p >= end) {
474+ (*pos)++;
474475 return NULL;
475476 } else {
476477 *pos = *p;
@@ -782,7 +783,7 @@ void cgroup1_release_agent(struct work_struct *work) · 305 unmodified lines
782783
783784 pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
784785 agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL);
785− if (!pathbuf || !agentbuf)
786+ if (!pathbuf || !agentbuf || !strlen(agentbuf))
786787 goto out;
787788
788789 spin_lock_irq(&css_set_lock);
kernel/cgroup/cgroup.c+30−13
@@ -3542,21 +3542,21 @@ static int cpu_stat_show(struct seq_file *seq, void *v) · 3541 unmodified lines
35423542 static int cgroup_io_pressure_show(struct seq_file *seq, void *v)
35433543 {
35443544 struct cgroup *cgrp = seq_css(seq)->cgroup;
3545− struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;
3545+ struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
35463546
35473547 return psi_show(seq, psi, PSI_IO);
35483548 }
35493549 static int cgroup_memory_pressure_show(struct seq_file *seq, void *v)
35503550 {
35513551 struct cgroup *cgrp = seq_css(seq)->cgroup;
3552− struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;
3552+ struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
35533553
35543554 return psi_show(seq, psi, PSI_MEM);
35553555 }
35563556 static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)
35573557 {
35583558 struct cgroup *cgrp = seq_css(seq)->cgroup;
3559− struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;
3559+ struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
35603560
35613561 return psi_show(seq, psi, PSI_CPU);
35623562 }
@@ -4400,12 +4400,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it) · 837 unmodified lines
44004400 }
44014401 } while (!css_set_populated(cset) && list_empty(&cset->dying_tasks));
44024402
4403− if (!list_empty(&cset->tasks))
4403+ if (!list_empty(&cset->tasks)) {
44044404 it->task_pos = cset->tasks.next;
4405− else if (!list_empty(&cset->mg_tasks))
4405+ it->cur_tasks_head = &cset->tasks;
4406+ } else if (!list_empty(&cset->mg_tasks)) {
44064407 it->task_pos = cset->mg_tasks.next;
4407− else
4408+ it->cur_tasks_head = &cset->mg_tasks;
4409+ } else {
44084410 it->task_pos = cset->dying_tasks.next;
4411+ it->cur_tasks_head = &cset->dying_tasks;
4412+ }
44094413
44104414 it->tasks_head = &cset->tasks;
44114415 it->mg_tasks_head = &cset->mg_tasks;
@@ -4463,10 +4467,14 @@ repeat: · 51 unmodified lines
44634467 else
44644468 it->task_pos = it->task_pos->next;
44654469
4466− if (it->task_pos == it->tasks_head)
4470+ if (it->task_pos == it->tasks_head) {
44674471 it->task_pos = it->mg_tasks_head->next;
4468− if (it->task_pos == it->mg_tasks_head)
4472+ it->cur_tasks_head = it->mg_tasks_head;
4473+ }
4474+ if (it->task_pos == it->mg_tasks_head) {
44694475 it->task_pos = it->dying_tasks_head->next;
4476+ it->cur_tasks_head = it->dying_tasks_head;
4477+ }
44704478 if (it->task_pos == it->dying_tasks_head)
44714479 css_task_iter_advance_css_set(it);
44724480 } else {
@@ -4485,11 +4493,12 @@ repeat: · 12 unmodified lines
44854493 goto repeat;
44864494
44874495 /* and dying leaders w/o live member threads */
4488− if (!atomic_read(&task->signal->live))
4496+ if (it->cur_tasks_head == it->dying_tasks_head &&
4497+ !atomic_read(&task->signal->live))
44894498 goto repeat;
44904499 } else {
44914500 /* skip all dying ones */
4492− if (task->flags & PF_EXITING)
4501+ if (it->cur_tasks_head == it->dying_tasks_head)
44934502 goto repeat;
44944503 }
44954504 }
@@ -4595,6 +4604,9 @@ static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos) · 99 unmodified lines
45954604 struct kernfs_open_file *of = s->private;
45964605 struct css_task_iter *it = of->priv;
45974606
4607+ if (pos)
4608+ (*pos)++;
4609+
45984610 return css_task_iter_next(it);
45994611 }
46004612
@@ -4610,7 +4622,7 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos, · 9 unmodified lines
46104622 * from position 0, so we can simply keep iterating on !0 *pos.
46114623 */
46124624 if (!it) {
4613− if (WARN_ON_ONCE((*pos)++))
4625+ if (WARN_ON_ONCE((*pos)))
46144626 return ERR_PTR(-EINVAL);
46154627
46164628 it = kzalloc(sizeof(*it), GFP_KERNEL);
@@ -4618,10 +4630,11 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos, · 1 unmodified line
46184630 return ERR_PTR(-ENOMEM);
46194631 of->priv = it;
46204632 css_task_iter_start(&cgrp->self, iter_flags, it);
4621− } else if (!(*pos)++) {
4633+ } else if (!(*pos)) {
46224634 css_task_iter_end(it);
46234635 css_task_iter_start(&cgrp->self, iter_flags, it);
4624− }
4636+ } else
4637+ return it->cur_task;
46254638
46264639 return cgroup_procs_next(s, NULL, NULL);
46274640 }
@@ -6258,6 +6271,10 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) · 1630 unmodified lines
62586271 return;
62596272 }
62606273
6274+ /* Don't associate the sock with unrelated interrupted task's cgroup. */
6275+ if (in_interrupt())
6276+ return;
6277+
62616278 rcu_read_lock();
62626279
62636280 while (true) {
kernel/fork.c+2−2
@@ -397,8 +397,8 @@ static void account_kernel_stack(struct task_struct *tsk, int account) · 396 unmodified lines
397397 mod_zone_page_state(page_zone(first_page), NR_KERNEL_STACK_KB,
398398 THREAD_SIZE / 1024 * account);
399399
400− mod_memcg_page_state(first_page, MEMCG_KERNEL_STACK_KB,
401− account * (THREAD_SIZE / 1024));
400+ mod_memcg_obj_state(stack, MEMCG_KERNEL_STACK_KB,
401+ account * (THREAD_SIZE / 1024));
402402 }
403403 }
404404
kernel/futex.c+55−38
@@ -385,9 +385,9 @@ static inline int hb_waiters_pending(struct futex_hash_bucket *hb) · 384 unmodified lines
385385 */
386386 static struct futex_hash_bucket *hash_futex(union futex_key *key)
387387 {
388− u32 hash = jhash2((u32*)&key->both.word,
389− (sizeof(key->both.word)+sizeof(key->both.ptr))/4,
388+ u32 hash = jhash2((u32 *)key, offsetof(typeof(*key), both.offset) / 4,
390389 key->both.offset);
390+
391391 return &futex_queues[hash & (futex_hashsize - 1)];
392392 }
393393
@@ -429,7 +429,7 @@ static void get_futex_key_refs(union futex_key *key) · 35 unmodified lines
429429
430430 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
431431 case FUT_OFF_INODE:
432− ihold(key->shared.inode); /* implies smp_mb(); (B) */
432+ smp_mb(); /* explicit smp_mb(); (B) */
433433 break;
434434 case FUT_OFF_MMSHARED:
435435 futex_get_mm(key); /* implies smp_mb(); (B) */
@@ -463,7 +463,6 @@ static void drop_futex_key_refs(union futex_key *key) · 27 unmodified lines
463463
464464 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
465465 case FUT_OFF_INODE:
466− iput(key->shared.inode);
467466 break;
468467 case FUT_OFF_MMSHARED:
469468 mmdrop(key->private.mm);
@@ -505,6 +504,46 @@ futex_setup_timer(ktime_t *time, struct hrtimer_sleeper *timeout, · 35 unmodified lines
505504 return timeout;
506505 }
507506
507+/*
508+ * Generate a machine wide unique identifier for this inode.
509+ *
510+ * This relies on u64 not wrapping in the life-time of the machine; which with
511+ * 1ns resolution means almost 585 years.
512+ *
513+ * This further relies on the fact that a well formed program will not unmap
514+ * the file while it has a (shared) futex waiting on it. This mapping will have
515+ * a file reference which pins the mount and inode.
516+ *
517+ * If for some reason an inode gets evicted and read back in again, it will get
518+ * a new sequence number and will _NOT_ match, even though it is the exact same
519+ * file.
520+ *
521+ * It is important that match_futex() will never have a false-positive, esp.
522+ * for PI futexes that can mess up the state. The above argues that false-negatives
523+ * are only possible for malformed programs.
524+ */
525+static u64 get_inode_sequence_number(struct inode *inode)
526+{
527+ static atomic64_t i_seq;
528+ u64 old;
529+
530+ /* Does the inode already have a sequence number? */
531+ old = atomic64_read(&inode->i_sequence);
532+ if (likely(old))
533+ return old;
534+
535+ for (;;) {
536+ u64 new = atomic64_add_return(1, &i_seq);
537+ if (WARN_ON_ONCE(!new))
538+ continue;
539+
540+ old = atomic64_cmpxchg_relaxed(&inode->i_sequence, 0, new);
541+ if (old)
542+ return old;
543+ return new;
544+ }
545+}
546+
508547 /**
509548 * get_futex_key() - Get parameters which are the keys for a futex
510549 * @uaddr: virtual address of the futex
@@ -517,9 +556,15 @@ futex_setup_timer(ktime_t *time, struct hrtimer_sleeper *timeout, · 6 unmodified lines
517556 *
518557 * The key words are stored in @key on success.
519558 *
520− * For shared mappings, it's (page->index, file_inode(vma->vm_file),
521− * offset_within_page). For private mappings, it's (uaddr, current->mm).
522− * We can usually work out the index without swapping in the page.
559+ * For shared mappings (when @fshared), the key is:
560+ * ( inode->i_sequence, page->index, offset_within_page )
561+ * [ also see get_inode_sequence_number() ]
562+ *
563+ * For private mappings (or when !@fshared), the key is:
564+ * ( current->mm, address, 0 )
565+ *
566+ * This allows (cross process, where applicable) identification of the futex
567+ * without keeping the page pinned for the duration of the FUTEX_WAIT.
523568 *
524569 * lock_page() might sleep, the caller should not hold a spinlock.
525570 */
@@ -659,8 +704,6 @@ again: · 133 unmodified lines
659704 key->private.mm = mm;
660705 key->private.address = address;
661706
662− get_futex_key_refs(key); /* implies smp_mb(); (B) */
663−
664707 } else {
665708 struct inode *inode;
666709
@@ -692,40 +735,14 @@ again: · 25 unmodified lines
692735 goto again;
693736 }
694737
695− /*
696− * Take a reference unless it is about to be freed. Previously
697− * this reference was taken by ihold under the page lock
698− * pinning the inode in place so i_lock was unnecessary. The
699− * only way for this check to fail is if the inode was
700− * truncated in parallel which is almost certainly an
701− * application bug. In such a case, just retry.
702− *
703− * We are not calling into get_futex_key_refs() in file-backed
704− * cases, therefore a successful atomic_inc return below will
705− * guarantee that get_futex_key() will still imply smp_mb(); (B).
706− */
707− if (!atomic_inc_not_zero(&inode->i_count)) {
708− rcu_read_unlock();
709− put_page(page);
710−
711− goto again;
712− }
713−
714− /* Should be impossible but lets be paranoid for now */
715− if (WARN_ON_ONCE(inode->i_mapping != mapping)) {
716− err = -EFAULT;
717− rcu_read_unlock();
718− iput(inode);
719−
720− goto out;
721− }
722−
723738 key->both.offset |= FUT_OFF_INODE; /* inode-based key */
724− key->shared.inode = inode;
739+ key->shared.i_seq = get_inode_sequence_number(inode);
725740 key->shared.pgoff = basepage_index(tail);
726741 rcu_read_unlock();
727742 }
728743
744+ get_futex_key_refs(key); /* implies smp_mb(); (B) */
745+
729746 out:
730747 put_page(page);
731748 return err;
kernel/irq/manage.c+9−2
@@ -323,7 +323,11 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask, · 322 unmodified lines
323323
324324 if (desc->affinity_notify) {
325325 kref_get(&desc->affinity_notify->kref);
326− schedule_work(&desc->affinity_notify->work);
326+ if (!schedule_work(&desc->affinity_notify->work)) {
327+ /* Work was already scheduled, drop our extra ref */
328+ kref_put(&desc->affinity_notify->kref,
329+ desc->affinity_notify->release);
330+ }
327331 }
328332 irqd_set(data, IRQD_AFFINITY_SET);
329333
@@ -423,7 +427,10 @@ irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) · 93 unmodified lines
423427 raw_spin_unlock_irqrestore(&desc->lock, flags);
424428
425429 if (old_notify) {
426− cancel_work_sync(&old_notify->work);
430+ if (cancel_work_sync(&old_notify->work)) {
431+ /* Pending work had a ref, put that one too */
432+ kref_put(&old_notify->kref, old_notify->release);
433+ }
427434 kref_put(&old_notify->kref, old_notify->release);
428435 }
429436
kernel/notifier.c+1−1
@@ -519,7 +519,7 @@ NOKPROBE_SYMBOL(notify_die); · 518 unmodified lines
519519
520520 int register_die_notifier(struct notifier_block *nb)
521521 {
522− vmalloc_sync_all();
522+ vmalloc_sync_mappings();
523523 return atomic_notifier_chain_register(&die_chain, nb);
524524 }
525525 EXPORT_SYMBOL_GPL(register_die_notifier);
kernel/pid.c+10−0
@@ -247,6 +247,16 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid, · 246 unmodified lines
247247 tmp = tmp->parent;
248248 }
249249
250+ /*
251+ * ENOMEM is not the most obvious choice especially for the case
252+ * where the child subreaper has already exited and the pid
253+ * namespace denies the creation of any new processes. But ENOMEM
254+ * is what we have exposed to userspace for a long time and it is
255+ * documented behavior for pid namespaces. So we can't easily
256+ * change it even if there were an error code better suited.
257+ */
258+ retval = -ENOMEM;
259+
250260 if (unlikely(is_child_reaper(pid))) {
251261 if (pid_ns_prepare_proc(ns))
252262 goto out_free;
kernel/sys.c+2−0
@@ -47,6 +47,7 @@ · 46 unmodified lines
4747 #include <linux/syscalls.h>
4848 #include <linux/kprobes.h>
4949 #include <linux/user_namespace.h>
50+#include <linux/time_namespace.h>
5051 #include <linux/binfmts.h>
5152
5253 #include <linux/sched.h>
@@ -2546,6 +2547,7 @@ static int do_sysinfo(struct sysinfo *info) · 2493 unmodified lines
25462547 memset(info, 0, sizeof(struct sysinfo));
25472548
25482549 ktime_get_boottime_ts64(&tp);
2550+ timens_add_boottime(&tp);
25492551 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
25502552
25512553 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
kernel/trace/bpf_trace.c+1−1
@@ -732,7 +732,7 @@ static int bpf_send_signal_common(u32 sig, enum pid_type type) · 731 unmodified lines
732732 if (unlikely(!nmi_uaccess_okay()))
733733 return -EPERM;
734734
735− if (in_nmi()) {
735+ if (irqs_disabled()) {
736736 /* Do an early check on signal validity. Otherwise,
737737 * the error is lost in deferred irq_work.
738738 */
kernel/trace/ftrace.c+2−0
@@ -1547,6 +1547,8 @@ static struct dyn_ftrace *lookup_rec(unsigned long start, unsigned long end) · 1546 unmodified lines
15471547 rec = bsearch(&key, pg->records, pg->index,
15481548 sizeof(struct dyn_ftrace),
15491549 ftrace_cmp_recs);
1550+ if (rec)
1551+ break;
15501552 }
15511553 return rec;
15521554 }
kernel/workqueue.c+8−6
@@ -1411,14 +1411,16 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, · 1410 unmodified lines
14111411 return;
14121412 rcu_read_lock();
14131413 retry:
1414− if (req_cpu == WORK_CPU_UNBOUND)
1415− cpu = wq_select_unbound_cpu(raw_smp_processor_id());
1416−
14171414 /* pwq which will be used unless @work is executing elsewhere */
1418− if (!(wq->flags & WQ_UNBOUND))
1419− pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
1420− else
1415+ if (wq->flags & WQ_UNBOUND) {
1416+ if (req_cpu == WORK_CPU_UNBOUND)
1417+ cpu = wq_select_unbound_cpu(raw_smp_processor_id());
14211418 pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
1419+ } else {
1420+ if (req_cpu == WORK_CPU_UNBOUND)
1421+ cpu = raw_smp_processor_id();
1422+ pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
1423+ }
14221424
14231425 /*
14241426 * If @work was previously on a different pool, it might still be
lib/crypto/chacha20poly1305-selftest.c+8−3
@@ -9028,10 +9028,15 @@ bool __init chacha20poly1305_selftest(void) · 9027 unmodified lines
90289028 && total_len <= 1 << 10; ++total_len) {
90299029 for (i = 0; i <= total_len; ++i) {
90309030 for (j = i; j <= total_len; ++j) {
9031+ k = 0;
90319032 sg_init_table(sg_src, 3);
9032− sg_set_buf(&sg_src[0], input, i);
9033− sg_set_buf(&sg_src[1], input + i, j - i);
9034− sg_set_buf(&sg_src[2], input + j, total_len - j);
9033+ if (i)
9034+ sg_set_buf(&sg_src[k++], input, i);
9035+ if (j - i)
9036+ sg_set_buf(&sg_src[k++], input + i, j - i);
9037+ if (total_len - j)
9038+ sg_set_buf(&sg_src[k++], input + j, total_len - j);
9039+ sg_init_marker(sg_src, k);
90359040 memset(computed_output, 0, total_len);
90369041 memset(input, 0, total_len);
90379042
mm/hugetlb_cgroup.c+1−2
@@ -240,8 +240,7 @@ again: · 239 unmodified lines
240240 if (!page_counter_try_charge(&h_cg->hugepage[idx], nr_pages,
241241 &counter)) {
242242 ret = -ENOMEM;
243− hugetlb_event(hugetlb_cgroup_from_counter(counter, idx), idx,
244− HUGETLB_MAX);
243+ hugetlb_event(h_cg, idx, HUGETLB_MAX);
245244 }
246245 css_put(&h_cg->css);
247246 done:
mm/madvise.c+9−3
@@ -335,12 +335,14 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, · 334 unmodified lines
335335 }
336336
337337 page = pmd_page(orig_pmd);
338+
339+ /* Do not interfere with other mappings of this page */
340+ if (page_mapcount(page) != 1)
341+ goto huge_unlock;
342+
338343 if (next - addr != HPAGE_PMD_SIZE) {
339344 int err;
340345
341− if (page_mapcount(page) != 1)
342− goto huge_unlock;
343−
344346 get_page(page);
345347 spin_unlock(ptl);
346348 lock_page(page);
@@ -426,6 +428,10 @@ regular_page: · 79 unmodified lines
426428 continue;
427429 }
428430
431+ /* Do not interfere with other mappings of this page */
432+ if (page_mapcount(page) != 1)
433+ continue;
434+
429435 VM_BUG_ON_PAGE(PageTransCompound(page), page);
430436
431437 if (pte_young(ptent)) {
mm/memcontrol.c+106−49
@@ -777,6 +777,17 @@ void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val) · 776 unmodified lines
777777 rcu_read_unlock();
778778 }
779779
780+void mod_memcg_obj_state(void *p, int idx, int val)
781+{
782+ struct mem_cgroup *memcg;
783+
784+ rcu_read_lock();
785+ memcg = mem_cgroup_from_obj(p);
786+ if (memcg)
787+ mod_memcg_state(memcg, idx, val);
788+ rcu_read_unlock();
789+}
790+
780791 /**
781792 * __count_memcg_events - account VM events in a cgroup
782793 * @memcg: the memory cgroup
@@ -2297,28 +2308,41 @@ static void high_work_func(struct work_struct *work) · 1514 unmodified lines
22972308 #define MEMCG_DELAY_SCALING_SHIFT 14
22982309
22992310 /*
2300− * Scheduled by try_charge() to be executed from the userland return path
2301− * and reclaims memory over the high limit.
2311+ * Get the number of jiffies that we should penalise a mischievous cgroup which
2312+ * is exceeding its memory.high by checking both it and its ancestors.
23022313 */
2303−void mem_cgroup_handle_over_high(void)
2314+static unsigned long calculate_high_delay(struct mem_cgroup *memcg,
2315+ unsigned int nr_pages)
23042316 {
2305− unsigned long usage, high, clamped_high;
2306− unsigned long pflags;
2307− unsigned long penalty_jiffies, overage;
2308− unsigned int nr_pages = current->memcg_nr_pages_over_high;
2309− struct mem_cgroup *memcg;
2317+ unsigned long penalty_jiffies;
2318+ u64 max_overage = 0;
23102319
2311− if (likely(!nr_pages))
2312− return;
2320+ do {
2321+ unsigned long usage, high;
2322+ u64 overage;
23132323
2314− memcg = get_mem_cgroup_from_mm(current->mm);
2315− reclaim_high(memcg, nr_pages, GFP_KERNEL);
2316− current->memcg_nr_pages_over_high = 0;
2324+ usage = page_counter_read(&memcg->memory);
2325+ high = READ_ONCE(memcg->high);
2326+
2327+ /*
2328+ * Prevent division by 0 in overage calculation by acting as if
2329+ * it was a threshold of 1 page
2330+ */
2331+ high = max(high, 1UL);
2332+
2333+ overage = usage - high;
2334+ overage <<= MEMCG_DELAY_PRECISION_SHIFT;
2335+ overage = div64_u64(overage, high);
2336+
2337+ if (overage > max_overage)
2338+ max_overage = overage;
2339+ } while ((memcg = parent_mem_cgroup(memcg)) &&
2340+ !mem_cgroup_is_root(memcg));
2341+
2342+ if (!max_overage)
2343+ return 0;
23172344
23182345 /*
2319− * memory.high is breached and reclaim is unable to keep up. Throttle
2320− * allocators proactively to slow down excessive growth.
2321− *
23222346 * We use overage compared to memory.high to calculate the number of
23232347 * jiffies to sleep (penalty_jiffies). Ideally this value should be
23242348 * fairly lenient on small overages, and increasingly harsh when the
@@ -2326,24 +2350,9 @@ void mem_cgroup_handle_over_high(void) · 1 unmodified line
23262350 * its crazy behaviour, so we exponentially increase the delay based on
23272351 * overage amount.
23282352 */
2329−
2330− usage = page_counter_read(&memcg->memory);
2331− high = READ_ONCE(memcg->high);
2332−
2333− if (usage <= high)
2334− goto out;
2335−
2336− /*
2337− * Prevent division by 0 in overage calculation by acting as if it was a
2338− * threshold of 1 page
2339− */
2340− clamped_high = max(high, 1UL);
2341−
2342− overage = div_u64((u64)(usage - high) << MEMCG_DELAY_PRECISION_SHIFT,
2343− clamped_high);
2344−
2345− penalty_jiffies = ((u64)overage * overage * HZ)
2346− >> (MEMCG_DELAY_PRECISION_SHIFT + MEMCG_DELAY_SCALING_SHIFT);
2353+ penalty_jiffies = max_overage * max_overage * HZ;
2354+ penalty_jiffies >>= MEMCG_DELAY_PRECISION_SHIFT;
2355+ penalty_jiffies >>= MEMCG_DELAY_SCALING_SHIFT;
23472356
23482357 /*
23492358 * Factor in the task's own contribution to the overage, such that four
@@ -2360,7 +2369,32 @@ void mem_cgroup_handle_over_high(void) · 10 unmodified lines
23602369 * application moving forwards and also permit diagnostics, albeit
23612370 * extremely slowly.
23622371 */
2363− penalty_jiffies = min(penalty_jiffies, MEMCG_MAX_HIGH_DELAY_JIFFIES);
2372+ return min(penalty_jiffies, MEMCG_MAX_HIGH_DELAY_JIFFIES);
2373+}
2374+
2375+/*
2376+ * Scheduled by try_charge() to be executed from the userland return path
2377+ * and reclaims memory over the high limit.
2378+ */
2379+void mem_cgroup_handle_over_high(void)
2380+{
2381+ unsigned long penalty_jiffies;
2382+ unsigned long pflags;
2383+ unsigned int nr_pages = current->memcg_nr_pages_over_high;
2384+ struct mem_cgroup *memcg;
2385+
2386+ if (likely(!nr_pages))
2387+ return;
2388+
2389+ memcg = get_mem_cgroup_from_mm(current->mm);
2390+ reclaim_high(memcg, nr_pages, GFP_KERNEL);
2391+ current->memcg_nr_pages_over_high = 0;
2392+
2393+ /*
2394+ * memory.high is breached and reclaim is unable to keep up. Throttle
2395+ * allocators proactively to slow down excessive growth.
2396+ */
2397+ penalty_jiffies = calculate_high_delay(memcg, nr_pages);
23642398
23652399 /*
23662400 * Don't sleep if the amount of jiffies this memcg owes us is so low
@@ -2638,6 +2672,33 @@ static void commit_charge(struct page *page, struct mem_cgroup *memcg, · 271 unmodified lines
26382672 }
26392673
26402674 #ifdef CONFIG_MEMCG_KMEM
2675+/*
2676+ * Returns a pointer to the memory cgroup to which the kernel object is charged.
2677+ *
2678+ * The caller must ensure the memcg lifetime, e.g. by taking rcu_read_lock(),
2679+ * cgroup_mutex, etc.
2680+ */
2681+struct mem_cgroup *mem_cgroup_from_obj(void *p)
2682+{
2683+ struct page *page;
2684+
2685+ if (mem_cgroup_disabled())
2686+ return NULL;
2687+
2688+ page = virt_to_head_page(p);
2689+
2690+ /*
2691+ * Slab pages don't have page->mem_cgroup set because corresponding
2692+ * kmem caches can be reparented during the lifetime. That's why
2693+ * memcg_from_slab_page() should be used instead.
2694+ */
2695+ if (PageSlab(page))
2696+ return memcg_from_slab_page(page);
2697+
2698+ /* All other pages use page->mem_cgroup */
2699+ return page->mem_cgroup;
2700+}
2701+
26412702 static int memcg_alloc_cache_id(void)
26422703 {
26432704 int id, size;
@@ -4027,7 +4088,7 @@ static void __mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg, · 1383 unmodified lines
40274088 struct mem_cgroup_thresholds *thresholds;
40284089 struct mem_cgroup_threshold_ary *new;
40294090 unsigned long usage;
4030− int i, j, size;
4091+ int i, j, size, entries;
40314092
40324093 mutex_lock(&memcg->thresholds_lock);
40334094
@@ -4047,14 +4108,20 @@ static void __mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg, · 13 unmodified lines
40474108 __mem_cgroup_threshold(memcg, type == _MEMSWAP);
40484109
40494110 /* Calculate new number of threshold */
4050− size = 0;
4111+ size = entries = 0;
40514112 for (i = 0; i < thresholds->primary->size; i++) {
40524113 if (thresholds->primary->entries[i].eventfd != eventfd)
40534114 size++;
4115+ else
4116+ entries++;
40544117 }
40554118
40564119 new = thresholds->spare;
40574120
4121+ /* If no items related to eventfd have been cleared, nothing to do */
4122+ if (!entries)
4123+ goto unlock;
4124+
40584125 /* Set thresholds array to NULL if we don't have thresholds */
40594126 if (!size) {
40604127 kfree(new);
@@ -6682,19 +6749,9 @@ void mem_cgroup_sk_alloc(struct sock *sk) · 2621 unmodified lines
66826749 if (!mem_cgroup_sockets_enabled)
66836750 return;
66846751
6685− /*
6686− * Socket cloning can throw us here with sk_memcg already
6687− * filled. It won't however, necessarily happen from
6688− * process context. So the test for root memcg given
6689− * the current task's memcg won't help us in this case.
6690− *
6691− * Respecting the original socket's memcg is a better
6692− * decision in this case.
6693− */
6694− if (sk->sk_memcg) {
6695− css_get(&sk->sk_memcg->css);
6752+ /* Do not associate the sock with unrelated interrupted task's memcg. */
6753+ if (in_interrupt())
66966754 return;
6697− }
66986755
66996756 rcu_read_lock();
67006757 memcg = mem_cgroup_from_task(current);
mm/mmu_notifier.c+18−9
@@ -307,7 +307,8 @@ static void mn_hlist_release(struct mmu_notifier_subscriptions *subscriptions, · 306 unmodified lines
307307 * ->release returns.
308308 */
309309 id = srcu_read_lock(&srcu);
310− hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist)
310+ hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
311+ srcu_read_lock_held(&srcu))
311312 /*
312313 * If ->release runs before mmu_notifier_unregister it must be
313314 * handled, as it's the only way for the driver to flush all
@@ -370,7 +371,8 @@ int __mmu_notifier_clear_flush_young(struct mm_struct *mm, · 56 unmodified lines
370371
371372 id = srcu_read_lock(&srcu);
372373 hlist_for_each_entry_rcu(subscription,
373− &mm->notifier_subscriptions->list, hlist) {
374+ &mm->notifier_subscriptions->list, hlist,
375+ srcu_read_lock_held(&srcu)) {
374376 if (subscription->ops->clear_flush_young)
375377 young |= subscription->ops->clear_flush_young(
376378 subscription, mm, start, end);
@@ -389,7 +391,8 @@ int __mmu_notifier_clear_young(struct mm_struct *mm, · 12 unmodified lines
389391
390392 id = srcu_read_lock(&srcu);
391393 hlist_for_each_entry_rcu(subscription,
392− &mm->notifier_subscriptions->list, hlist) {
394+ &mm->notifier_subscriptions->list, hlist,
395+ srcu_read_lock_held(&srcu)) {
393396 if (subscription->ops->clear_young)
394397 young |= subscription->ops->clear_young(subscription,
395398 mm, start, end);
@@ -407,7 +410,8 @@ int __mmu_notifier_test_young(struct mm_struct *mm, · 11 unmodified lines
407410
408411 id = srcu_read_lock(&srcu);
409412 hlist_for_each_entry_rcu(subscription,
410− &mm->notifier_subscriptions->list, hlist) {
413+ &mm->notifier_subscriptions->list, hlist,
414+ srcu_read_lock_held(&srcu)) {
411415 if (subscription->ops->test_young) {
412416 young = subscription->ops->test_young(subscription, mm,
413417 address);
@@ -428,7 +432,8 @@ void __mmu_notifier_change_pte(struct mm_struct *mm, unsigned long address, · 14 unmodified lines
428432
429433 id = srcu_read_lock(&srcu);
430434 hlist_for_each_entry_rcu(subscription,
431− &mm->notifier_subscriptions->list, hlist) {
435+ &mm->notifier_subscriptions->list, hlist,
436+ srcu_read_lock_held(&srcu)) {
432437 if (subscription->ops->change_pte)
433438 subscription->ops->change_pte(subscription, mm, address,
434439 pte);
@@ -476,7 +481,8 @@ static int mn_hlist_invalidate_range_start( · 41 unmodified lines
476481 int id;
477482
478483 id = srcu_read_lock(&srcu);
479− hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist) {
484+ hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
485+ srcu_read_lock_held(&srcu)) {
480486 const struct mmu_notifier_ops *ops = subscription->ops;
481487
482488 if (ops->invalidate_range_start) {
@@ -528,7 +534,8 @@ mn_hlist_invalidate_end(struct mmu_notifier_subscriptions *subscriptions, · 45 unmodified lines
528534 int id;
529535
530536 id = srcu_read_lock(&srcu);
531− hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist) {
537+ hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
538+ srcu_read_lock_held(&srcu)) {
532539 /*
533540 * Call invalidate_range here too to avoid the need for the
534541 * subsystem of having to register an invalidate_range_end
@@ -582,7 +589,8 @@ void __mmu_notifier_invalidate_range(struct mm_struct *mm, · 47 unmodified lines
582589
583590 id = srcu_read_lock(&srcu);
584591 hlist_for_each_entry_rcu(subscription,
585− &mm->notifier_subscriptions->list, hlist) {
592+ &mm->notifier_subscriptions->list, hlist,
593+ srcu_read_lock_held(&srcu)) {
586594 if (subscription->ops->invalidate_range)
587595 subscription->ops->invalidate_range(subscription, mm,
588596 start, end);
@@ -714,7 +722,8 @@ find_get_mmu_notifier(struct mm_struct *mm, const struct mmu_notifier_ops *ops) · 125 unmodified lines
714722
715723 spin_lock(&mm->notifier_subscriptions->lock);
716724 hlist_for_each_entry_rcu(subscription,
717− &mm->notifier_subscriptions->list, hlist) {
725+ &mm->notifier_subscriptions->list, hlist,
726+ lockdep_is_held(&mm->notifier_subscriptions->lock)) {
718727 if (subscription->ops != ops)
719728 continue;
720729
mm/nommu.c+7−3
@@ -370,10 +370,14 @@ void vm_unmap_aliases(void) · 369 unmodified lines
370370 EXPORT_SYMBOL_GPL(vm_unmap_aliases);
371371
372372 /*
373− * Implement a stub for vmalloc_sync_all() if the architecture chose not to
374− * have one.
373+ * Implement a stub for vmalloc_sync_[un]mapping() if the architecture
374+ * chose not to have one.
375375 */
376−void __weak vmalloc_sync_all(void)
376+void __weak vmalloc_sync_mappings(void)
377+{
378+}
379+
380+void __weak vmalloc_sync_unmappings(void)
377381 {
378382 }
379383
mm/slub.c+30−11
@@ -1973,8 +1973,6 @@ static void *get_partial(struct kmem_cache *s, gfp_t flags, int node, · 1972 unmodified lines
19731973
19741974 if (node == NUMA_NO_NODE)
19751975 searchnode = numa_mem_id();
1976− else if (!node_present_pages(node))
1977− searchnode = node_to_mem_node(node);
19781976
19791977 object = get_partial_node(s, get_node(s, searchnode), c, flags);
19801978 if (object || node != NUMA_NO_NODE)
@@ -2563,17 +2561,27 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, · 582 unmodified lines
25632561 struct page *page;
25642562
25652563 page = c->page;
2566− if (!page)
2564+ if (!page) {
2565+ /*
2566+ * if the node is not online or has no normal memory, just
2567+ * ignore the node constraint
2568+ */
2569+ if (unlikely(node != NUMA_NO_NODE &&
2570+ !node_state(node, N_NORMAL_MEMORY)))
2571+ node = NUMA_NO_NODE;
25672572 goto new_slab;
2573+ }
25682574 redo:
25692575
25702576 if (unlikely(!node_match(page, node))) {
2571− int searchnode = node;
2572−
2573− if (node != NUMA_NO_NODE && !node_present_pages(node))
2574− searchnode = node_to_mem_node(node);
2575−
2576− if (unlikely(!node_match(page, searchnode))) {
2577+ /*
2578+ * same as above but node_match() being false already
2579+ * implies node != NUMA_NO_NODE
2580+ */
2581+ if (!node_state(node, N_NORMAL_MEMORY)) {
2582+ node = NUMA_NO_NODE;
2583+ goto redo;
2584+ } else {
25772585 stat(s, ALLOC_NODE_MISMATCH);
25782586 deactivate_slab(s, page, c->freelist, c);
25792587 goto new_slab;
@@ -2997,11 +3005,13 @@ redo: · 417 unmodified lines
29973005 barrier();
29983006
29993007 if (likely(page == c->page)) {
3000− set_freepointer(s, tail_obj, c->freelist);
3008+ void **freelist = READ_ONCE(c->freelist);
3009+
3010+ set_freepointer(s, tail_obj, freelist);
30013011
30023012 if (unlikely(!this_cpu_cmpxchg_double(
30033013 s->cpu_slab->freelist, s->cpu_slab->tid,
3004− c->freelist, tid,
3014+ freelist, tid,
30053015 head, next_tid(tid)))) {
30063016
30073017 note_cmpxchg_failure("slab_free", s, tid);
@@ -3174,6 +3184,15 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size, · 166 unmodified lines
31743184 void *object = c->freelist;
31753185
31763186 if (unlikely(!object)) {
3187+ /*
3188+ * We may have removed an object from c->freelist using
3189+ * the fastpath in the previous iteration; in that case,
3190+ * c->tid has not been bumped yet.
3191+ * Since ___slab_alloc() may reenable interrupts while
3192+ * allocating memory, we should bump c->tid now.
3193+ */
3194+ c->tid = next_tid(c->tid);
3195+
31773196 /*
31783197 * Invoking slow path likely have side-effect
31793198 * of re-populating per CPU c->freelist
mm/sparse.c+12−2
@@ -734,6 +734,7 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 733 unmodified lines
734734 struct mem_section *ms = __pfn_to_section(pfn);
735735 bool section_is_early = early_section(ms);
736736 struct page *memmap = NULL;
737+ bool empty;
737738 unsigned long *subsection_map = ms->usage
738739 ? &ms->usage->subsection_map[0] : NULL;
739740
@@ -764,7 +765,8 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 24 unmodified lines
764765 * For 2/ and 3/ the SPARSEMEM_VMEMMAP={y,n} cases are unified
765766 */
766767 bitmap_xor(subsection_map, map, subsection_map, SUBSECTIONS_PER_SECTION);
767− if (bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION)) {
768+ empty = bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION);
769+ if (empty) {
768770 unsigned long section_nr = pfn_to_section_nr(pfn);
769771
770772 /*
@@ -779,13 +781,21 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 8 unmodified lines
779781 ms->usage = NULL;
780782 }
781783 memmap = sparse_decode_mem_map(ms->section_mem_map, section_nr);
782− ms->section_mem_map = (unsigned long)NULL;
784+ /*
785+ * Mark the section invalid so that valid_section()
786+ * return false. This prevents code from dereferencing
787+ * ms->usage array.
788+ */
789+ ms->section_mem_map &= ~SECTION_HAS_MEM_MAP;
783790 }
784791
785792 if (section_is_early && memmap)
786793 free_map_bootmem(memmap);
787794 else
788795 depopulate_section_memmap(pfn, nr_pages, altmap);
796+
797+ if (empty)
798+ ms->section_mem_map = (unsigned long)NULL;
789799 }
790800
791801 static struct page * __meminit section_activate(int nid, unsigned long pfn,
mm/swapfile.c+20−21
@@ -2899,10 +2899,6 @@ static int claim_swapfile(struct swap_info_struct *p, struct inode *inode) · 2898 unmodified lines
28992899 p->bdev = inode->i_sb->s_bdev;
29002900 }
29012901
2902− inode_lock(inode);
2903− if (IS_SWAPFILE(inode))
2904− return -EBUSY;
2905−
29062902 return 0;
29072903 }
29082904
@@ -3157,36 +3153,41 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 248 unmodified lines
31573153 mapping = swap_file->f_mapping;
31583154 inode = mapping->host;
31593155
3160− /* will take i_rwsem; */
31613156 error = claim_swapfile(p, inode);
31623157 if (unlikely(error))
31633158 goto bad_swap;
31643159
3160+ inode_lock(inode);
3161+ if (IS_SWAPFILE(inode)) {
3162+ error = -EBUSY;
3163+ goto bad_swap_unlock_inode;
3164+ }
3165+
31653166 /*
31663167 * Read the swap header.
31673168 */
31683169 if (!mapping->a_ops->readpage) {
31693170 error = -EINVAL;
3170− goto bad_swap;
3171+ goto bad_swap_unlock_inode;
31713172 }
31723173 page = read_mapping_page(mapping, 0, swap_file);
31733174 if (IS_ERR(page)) {
31743175 error = PTR_ERR(page);
3175− goto bad_swap;
3176+ goto bad_swap_unlock_inode;
31763177 }
31773178 swap_header = kmap(page);
31783179
31793180 maxpages = read_swap_header(p, swap_header, inode);
31803181 if (unlikely(!maxpages)) {
31813182 error = -EINVAL;
3182− goto bad_swap;
3183+ goto bad_swap_unlock_inode;
31833184 }
31843185
31853186 /* OK, set up the swap map and apply the bad block list */
31863187 swap_map = vzalloc(maxpages);
31873188 if (!swap_map) {
31883189 error = -ENOMEM;
3189− goto bad_swap;
3190+ goto bad_swap_unlock_inode;
31903191 }
31913192
31923193 if (bdi_cap_stable_pages_required(inode_to_bdi(inode)))
@@ -3211,7 +3212,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 18 unmodified lines
32113212 GFP_KERNEL);
32123213 if (!cluster_info) {
32133214 error = -ENOMEM;
3214− goto bad_swap;
3215+ goto bad_swap_unlock_inode;
32153216 }
32163217
32173218 for (ci = 0; ci < nr_cluster; ci++)
@@ -3220,7 +3221,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 2 unmodified lines
32203221 p->percpu_cluster = alloc_percpu(struct percpu_cluster);
32213222 if (!p->percpu_cluster) {
32223223 error = -ENOMEM;
3223− goto bad_swap;
3224+ goto bad_swap_unlock_inode;
32243225 }
32253226 for_each_possible_cpu(cpu) {
32263227 struct percpu_cluster *cluster;
@@ -3234,13 +3235,13 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 7 unmodified lines
32343235
32353236 error = swap_cgroup_swapon(p->type, maxpages);
32363237 if (error)
3237− goto bad_swap;
3238+ goto bad_swap_unlock_inode;
32383239
32393240 nr_extents = setup_swap_map_and_extents(p, swap_header, swap_map,
32403241 cluster_info, maxpages, &span);
32413242 if (unlikely(nr_extents < 0)) {
32423243 error = nr_extents;
3243− goto bad_swap;
3244+ goto bad_swap_unlock_inode;
32443245 }
32453246 /* frontswap enabled? set up bit-per-page map for frontswap */
32463247 if (IS_ENABLED(CONFIG_FRONTSWAP))
@@ -3280,7 +3281,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 33 unmodified lines
32803281
32813282 error = init_swap_address_space(p->type, maxpages);
32823283 if (error)
3283− goto bad_swap;
3284+ goto bad_swap_unlock_inode;
32843285
32853286 /*
32863287 * Flush any pending IO and dirty mappings before we start using this
@@ -3290,7 +3291,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 3 unmodified lines
32903291 error = inode_drain_writes(inode);
32913292 if (error) {
32923293 inode->i_flags &= ~S_SWAPFILE;
3293− goto bad_swap;
3294+ goto bad_swap_unlock_inode;
32943295 }
32953296
32963297 mutex_lock(&swapon_mutex);
@@ -3315,6 +3316,8 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) · 18 unmodified lines
33153316
33163317 error = 0;
33173318 goto out;
3319+bad_swap_unlock_inode:
3320+ inode_unlock(inode);
33183321 bad_swap:
33193322 free_percpu(p->percpu_cluster);
33203323 p->percpu_cluster = NULL;
@@ -3322,6 +3325,7 @@ bad_swap: · 1 unmodified line
33223325 set_blocksize(p->bdev, p->old_block_size);
33233326 blkdev_put(p->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
33243327 }
3328+ inode = NULL;
33253329 destroy_swap_extents(p);
33263330 swap_cgroup_swapoff(p->type);
33273331 spin_lock(&swap_lock);
@@ -3333,13 +3337,8 @@ bad_swap: · 5 unmodified lines
33333337 kvfree(frontswap_map);
33343338 if (inced_nr_rotate_swap)
33353339 atomic_dec(&nr_rotate_swap);
3336− if (swap_file) {
3337− if (inode) {
3338− inode_unlock(inode);
3339− inode = NULL;
3340− }
3340+ if (swap_file)
33413341 filp_close(swap_file, NULL);
3342− }
33433342 out:
33443343 if (page && !IS_ERR(page)) {
33453344 kunmap(page);
mm/vmalloc.c+7−4
@@ -1295,7 +1295,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end) · 1294 unmodified lines
12951295 * First make sure the mappings are removed from all page-tables
12961296 * before they are freed.
12971297 */
1298− vmalloc_sync_all();
1298+ vmalloc_sync_unmappings();
12991299
13001300 /*
13011301 * TODO: to calculate a flush range without looping.
@@ -3128,16 +3128,19 @@ int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, · 1826 unmodified lines
31283128 EXPORT_SYMBOL(remap_vmalloc_range);
31293129
31303130 /*
3131− * Implement a stub for vmalloc_sync_all() if the architecture chose not to
3132− * have one.
3131+ * Implement stubs for vmalloc_sync_[un]mappings () if the architecture chose
3132+ * not to have one.
31333133 *
31343134 * The purpose of this function is to make sure the vmalloc area
31353135 * mappings are identical in all page-tables in the system.
31363136 */
3137−void __weak vmalloc_sync_all(void)
3137+void __weak vmalloc_sync_mappings(void)
31383138 {
31393139 }
31403140
3141+void __weak vmalloc_sync_unmappings(void)
3142+{
3143+}
31413144
31423145 static int f(pte_t *pte, unsigned long addr, void *data)
31433146 {
net/Kconfig+3−0
@@ -52,6 +52,9 @@ config NET_INGRESS · 51 unmodified lines
5252 config NET_EGRESS
5353 bool
5454
55+config NET_REDIRECT
56+ bool
57+
5558 config SKB_EXTENSIONS
5659 bool
5760
net/batman-adv/bat_iv_ogm.c+4−0
@@ -789,6 +789,10 @@ static void batadv_iv_ogm_schedule_buff(struct batadv_hard_iface *hard_iface) · 788 unmodified lines
789789
790790 lockdep_assert_held(&hard_iface->bat_iv.ogm_buff_mutex);
791791
792+ /* interface already disabled by batadv_iv_ogm_iface_disable */
793+ if (!*ogm_buff)
794+ return;
795+
792796 /* the interface gets activated here to avoid race conditions between
793797 * the moment of activating the interface in
794798 * hardif_activate_interface() where the originator mac is set and
net/bpfilter/main.c+8−6
@@ -10,7 +10,7 @@ · 9 unmodified lines
1010 #include <asm/unistd.h>
1111 #include "msgfmt.h"
1212
13−int debug_fd;
13+FILE *debug_f;
1414
1515 static int handle_get_cmd(struct mbox_request *cmd)
1616 {
@@ -35,9 +35,10 @@ static void loop(void) · 18 unmodified lines
3535 struct mbox_reply reply;
3636 int n;
3737
38+ fprintf(debug_f, "testing the buffer\n");
3839 n = read(0, &req, sizeof(req));
3940 if (n != sizeof(req)) {
40− dprintf(debug_fd, "invalid request %d\n", n);
41+ fprintf(debug_f, "invalid request %d\n", n);
4142 return;
4243 }
4344
@@ -47,7 +48,7 @@ static void loop(void) · 3 unmodified lines
4748
4849 n = write(1, &reply, sizeof(reply));
4950 if (n != sizeof(reply)) {
50− dprintf(debug_fd, "reply failed %d\n", n);
51+ fprintf(debug_f, "reply failed %d\n", n);
5152 return;
5253 }
5354 }
@@ -55,9 +56,10 @@ static void loop(void) · 1 unmodified line
5556
5657 int main(void)
5758 {
58− debug_fd = open("/dev/kmsg", 00000002);
59− dprintf(debug_fd, "Started bpfilter\n");
59+ debug_f = fopen("/dev/kmsg", "w");
60+ setvbuf(debug_f, 0, _IOLBF, 0);
61+ fprintf(debug_f, "Started bpfilter\n");
6062 loop();
61− close(debug_fd);
63+ fclose(debug_f);
6264 return 0;
6365 }
net/caif/caif_dev.c+2−1
@@ -112,7 +112,8 @@ static struct caif_device_entry *caif_get(struct net_device *dev) · 111 unmodified lines
112112 caif_device_list(dev_net(dev));
113113 struct caif_device_entry *caifd;
114114
115− list_for_each_entry_rcu(caifd, &caifdevs->list, list) {
115+ list_for_each_entry_rcu(caifd, &caifdevs->list, list,
116+ lockdep_rtnl_is_held()) {
116117 if (caifd->netdev == dev)
117118 return caifd;
118119 }
net/ceph/messenger.c+7−2
@@ -3248,12 +3248,16 @@ static struct ceph_msg_data *ceph_msg_data_add(struct ceph_msg *msg) · 3247 unmodified lines
32483248
32493249 static void ceph_msg_data_destroy(struct ceph_msg_data *data)
32503250 {
3251− if (data->type == CEPH_MSG_DATA_PAGELIST)
3251+ if (data->type == CEPH_MSG_DATA_PAGES && data->own_pages) {
3252+ int num_pages = calc_pages_for(data->alignment, data->length);
3253+ ceph_release_page_vector(data->pages, num_pages);
3254+ } else if (data->type == CEPH_MSG_DATA_PAGELIST) {
32523255 ceph_pagelist_release(data->pagelist);
3256+ }
32533257 }
32543258
32553259 void ceph_msg_data_add_pages(struct ceph_msg *msg, struct page **pages,
3256− size_t length, size_t alignment)
3260+ size_t length, size_t alignment, bool own_pages)
32573261 {
32583262 struct ceph_msg_data *data;
32593263
@@ -3265,6 +3269,7 @@ void ceph_msg_data_add_pages(struct ceph_msg *msg, struct page **pages, · 5 unmodified lines
32653269 data->pages = pages;
32663270 data->length = length;
32673271 data->alignment = alignment & ~PAGE_MASK;
3272+ data->own_pages = own_pages;
32683273
32693274 msg->data_length += length;
32703275 }
net/ceph/osd_client.c+3−11
@@ -962,7 +962,7 @@ static void ceph_osdc_msg_data_add(struct ceph_msg *msg, · 961 unmodified lines
962962 BUG_ON(length > (u64) SIZE_MAX);
963963 if (length)
964964 ceph_msg_data_add_pages(msg, osd_data->pages,
965− length, osd_data->alignment);
965+ length, osd_data->alignment, false);
966966 } else if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGELIST) {
967967 BUG_ON(!length);
968968 ceph_msg_data_add_pagelist(msg, osd_data->pagelist);
@@ -4436,9 +4436,7 @@ static void handle_watch_notify(struct ceph_osd_client *osdc, · 3467 unmodified lines
44364436 CEPH_MSG_DATA_PAGES);
44374437 *lreq->preply_pages = data->pages;
44384438 *lreq->preply_len = data->length;
4439− } else {
4440− ceph_release_page_vector(data->pages,
4441− calc_pages_for(0, data->length));
4439+ data->own_pages = false;
44424440 }
44434441 }
44444442 lreq->notify_finish_error = return_code;
@@ -5506,9 +5504,6 @@ out_unlock_osdc: · 1061 unmodified lines
55065504 return m;
55075505 }
55085506
5509−/*
5510− * TODO: switch to a msg-owned pagelist
5511− */
55125507 static struct ceph_msg *alloc_msg_with_page_vector(struct ceph_msg_header *hdr)
55135508 {
55145509 struct ceph_msg *m;
@@ -5522,7 +5517,6 @@ static struct ceph_msg *alloc_msg_with_page_vector(struct ceph_msg_header *hdr) · 7 unmodified lines
55225517
55235518 if (data_len) {
55245519 struct page **pages;
5525− struct ceph_osd_data osd_data;
55265520
55275521 pages = ceph_alloc_page_vector(calc_pages_for(0, data_len),
55285522 GFP_NOIO);
@@ -5531,9 +5525,7 @@ static struct ceph_msg *alloc_msg_with_page_vector(struct ceph_msg_header *hdr) · 2 unmodified lines
55315525 return NULL;
55325526 }
55335527
5534− ceph_osd_data_pages_init(&osd_data, pages, data_len, 0, false,
5535− false);
5536− ceph_osdc_msg_data_add(m, &osd_data);
5528+ ceph_msg_data_add_pages(m, pages, data_len, 0, true);
55375529 }
55385530
55395531 return m;
net/ceph/osdmap.c+9−0
@@ -710,6 +710,15 @@ int ceph_pg_poolid_by_name(struct ceph_osdmap *map, const char *name) · 709 unmodified lines
710710 }
711711 EXPORT_SYMBOL(ceph_pg_poolid_by_name);
712712
713+u64 ceph_pg_pool_flags(struct ceph_osdmap *map, u64 id)
714+{
715+ struct ceph_pg_pool_info *pi;
716+
717+ pi = __lookup_pg_pool(&map->pg_pools, id);
718+ return pi ? pi->flags : 0;
719+}
720+EXPORT_SYMBOL(ceph_pg_pool_flags);
721+
713722 static void __remove_pg_pool(struct rb_root *root, struct ceph_pg_pool_info *pi)
714723 {
715724 rb_erase(&pi->node, root);
net/core/dev.c+3−3
@@ -4516,7 +4516,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, · 4515 unmodified lines
45164516 /* Reinjected packets coming from act_mirred or similar should
45174517 * not get XDP generic processing.
45184518 */
4519− if (skb_is_tc_redirected(skb))
4519+ if (skb_is_redirected(skb))
45204520 return XDP_PASS;
45214521
45224522 /* XDP packets must be linear and must have sufficient headroom
@@ -5063,7 +5063,7 @@ skip_taps: · 540 unmodified lines
50635063 goto out;
50645064 }
50655065 #endif
5066− skb_reset_tc(skb);
5066+ skb_reset_redirect(skb);
50675067 skip_classify:
50685068 if (pfmemalloc && !skb_pfmemalloc_protocol(skb))
50695069 goto drop;
@@ -5195,7 +5195,7 @@ static int __netif_receive_skb_one_core(struct sk_buff *skb, bool pfmemalloc) · 125 unmodified lines
51955195 *
51965196 * More direct receive version of netif_receive_skb(). It should
51975197 * only be used by callers that have a need to skip RPS and Generic XDP.
5198− * Caller must also take care of handling if (page_is_)pfmemalloc.
5198+ * Caller must also take care of handling if ``(page_is_)pfmemalloc``.
51995199 *
52005200 * This function may only be called from softirq context and interrupts
52015201 * should be enabled.
net/core/devlink.c+21−12
@@ -3352,34 +3352,41 @@ devlink_param_value_get_from_info(const struct devlink_param *param, · 3351 unmodified lines
33523352 struct genl_info *info,
33533353 union devlink_param_value *value)
33543354 {
3355+ struct nlattr *param_data;
33553356 int len;
33563357
3357− if (param->type != DEVLINK_PARAM_TYPE_BOOL &&
3358− !info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA])
3358+ param_data = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA];
3359+
3360+ if (param->type != DEVLINK_PARAM_TYPE_BOOL && !param_data)
33593361 return -EINVAL;
33603362
33613363 switch (param->type) {
33623364 case DEVLINK_PARAM_TYPE_U8:
3363− value->vu8 = nla_get_u8(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);
3365+ if (nla_len(param_data) != sizeof(u8))
3366+ return -EINVAL;
3367+ value->vu8 = nla_get_u8(param_data);
33643368 break;
33653369 case DEVLINK_PARAM_TYPE_U16:
3366− value->vu16 = nla_get_u16(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);
3370+ if (nla_len(param_data) != sizeof(u16))
3371+ return -EINVAL;
3372+ value->vu16 = nla_get_u16(param_data);
33673373 break;
33683374 case DEVLINK_PARAM_TYPE_U32:
3369− value->vu32 = nla_get_u32(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);
3375+ if (nla_len(param_data) != sizeof(u32))
3376+ return -EINVAL;
3377+ value->vu32 = nla_get_u32(param_data);
33703378 break;
33713379 case DEVLINK_PARAM_TYPE_STRING:
3372− len = strnlen(nla_data(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]),
3373− nla_len(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]));
3374− if (len == nla_len(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]) ||
3380+ len = strnlen(nla_data(param_data), nla_len(param_data));
3381+ if (len == nla_len(param_data) ||
33753382 len >= __DEVLINK_PARAM_MAX_STRING_VALUE)
33763383 return -EINVAL;
3377− strcpy(value->vstr,
3378− nla_data(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]));
3384+ strcpy(value->vstr, nla_data(param_data));
33793385 break;
33803386 case DEVLINK_PARAM_TYPE_BOOL:
3381− value->vbool = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA] ?
3382− true : false;
3387+ if (param_data && nla_len(param_data))
3388+ return -EINVAL;
3389+ value->vbool = nla_get_flag(param_data);
33833390 break;
33843391 }
33853392 return 0;
@@ -5951,6 +5958,8 @@ static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = { · 2565 unmodified lines
59515958 [DEVLINK_ATTR_PARAM_VALUE_CMODE] = { .type = NLA_U8 },
59525959 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING },
59535960 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32 },
5961+ [DEVLINK_ATTR_REGION_CHUNK_ADDR] = { .type = NLA_U64 },
5962+ [DEVLINK_ATTR_REGION_CHUNK_LEN] = { .type = NLA_U64 },
59545963 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING },
59555964 [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64 },
59565965 [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8 },
net/core/netclassid_cgroup.c+37−10
@@ -53,30 +53,60 @@ static void cgrp_css_free(struct cgroup_subsys_state *css) · 52 unmodified lines
5353 kfree(css_cls_state(css));
5454 }
5555
56+/*
57+ * To avoid freezing of sockets creation for tasks with big number of threads
58+ * and opened sockets lets release file_lock every 1000 iterated descriptors.
59+ * New sockets will already have been created with new classid.
60+ */
61+
62+struct update_classid_context {
63+ u32 classid;
64+ unsigned int batch;
65+};
66+
67+#define UPDATE_CLASSID_BATCH 1000
68+
5669 static int update_classid_sock(const void *v, struct file *file, unsigned n)
5770 {
5871 int err;
72+ struct update_classid_context *ctx = (void *)v;
5973 struct socket *sock = sock_from_file(file, &err);
6074
6175 if (sock) {
6276 spin_lock(&cgroup_sk_update_lock);
63− sock_cgroup_set_classid(&sock->sk->sk_cgrp_data,
64− (unsigned long)v);
77+ sock_cgroup_set_classid(&sock->sk->sk_cgrp_data, ctx->classid);
6578 spin_unlock(&cgroup_sk_update_lock);
6679 }
80+ if (--ctx->batch == 0) {
81+ ctx->batch = UPDATE_CLASSID_BATCH;
82+ return n + 1;
83+ }
6784 return 0;
6885 }
6986
87+static void update_classid_task(struct task_struct *p, u32 classid)
88+{
89+ struct update_classid_context ctx = {
90+ .classid = classid,
91+ .batch = UPDATE_CLASSID_BATCH
92+ };
93+ unsigned int fd = 0;
94+
95+ do {
96+ task_lock(p);
97+ fd = iterate_fd(p->files, fd, update_classid_sock, &ctx);
98+ task_unlock(p);
99+ cond_resched();
100+ } while (fd);
101+}
102+
70103 static void cgrp_attach(struct cgroup_taskset *tset)
71104 {
72105 struct cgroup_subsys_state *css;
73106 struct task_struct *p;
74107
75108 cgroup_taskset_for_each(p, css, tset) {
76− task_lock(p);
77− iterate_fd(p->files, 0, update_classid_sock,
78− (void *)(unsigned long)css_cls_state(css)->classid);
79− task_unlock(p);
109+ update_classid_task(p, css_cls_state(css)->classid);
80110 }
81111 }
82112
@@ -98,10 +128,7 @@ static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, · 15 unmodified lines
98128
99129 css_task_iter_start(css, 0, &it);
100130 while ((p = css_task_iter_next(&it))) {
101− task_lock(p);
102− iterate_fd(p->files, 0, update_classid_sock,
103− (void *)(unsigned long)cs->classid);
104− task_unlock(p);
131+ update_classid_task(p, cs->classid);
105132 cond_resched();
106133 }
107134 css_task_iter_end(&it);
net/core/pktgen.c+1−1
@@ -3362,7 +3362,7 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev) · 3361 unmodified lines
33623362 /* skb was 'freed' by stack, so clean few
33633363 * bits and reuse it
33643364 */
3365− skb_reset_tc(skb);
3365+ skb_reset_redirect(skb);
33663366 } while (--burst > 0);
33673367 goto out; /* Skips xmit_mode M_START_XMIT */
33683368 } else if (pkt_dev->xmit_mode == M_QUEUE_XMIT) {
net/core/sock.c+4−1
@@ -1830,7 +1830,10 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) · 1829 unmodified lines
18301830 atomic_set(&newsk->sk_zckey, 0);
18311831
18321832 sock_reset_flag(newsk, SOCK_DONE);
1833− mem_cgroup_sk_alloc(newsk);
1833+
1834+ /* sk->sk_memcg will be populated at accept() time */
1835+ newsk->sk_memcg = NULL;
1836+
18341837 cgroup_sk_alloc(&newsk->sk_cgrp_data);
18351838
18361839 rcu_read_lock();
net/core/sock_map.c+8−4
@@ -233,8 +233,11 @@ static void sock_map_free(struct bpf_map *map) · 232 unmodified lines
233233 struct bpf_stab *stab = container_of(map, struct bpf_stab, map);
234234 int i;
235235
236+ /* After the sync no updates or deletes will be in-flight so it
237+ * is safe to walk map and remove entries without risking a race
238+ * in EEXIST update case.
239+ */
236240 synchronize_rcu();
237− raw_spin_lock_bh(&stab->lock);
238241 for (i = 0; i < stab->map.max_entries; i++) {
239242 struct sock **psk = &stab->sks[i];
240243 struct sock *sk;
@@ -248,7 +251,6 @@ static void sock_map_free(struct bpf_map *map) · 7 unmodified lines
248251 release_sock(sk);
249252 }
250253 }
251− raw_spin_unlock_bh(&stab->lock);
252254
253255 /* wait for psock readers accessing its map link */
254256 synchronize_rcu();
@@ -863,10 +865,13 @@ static void sock_hash_free(struct bpf_map *map) · 608 unmodified lines
863865 struct hlist_node *node;
864866 int i;
865867
868+ /* After the sync no updates or deletes will be in-flight so it
869+ * is safe to walk map and remove entries without risking a race
870+ * in EEXIST update case.
871+ */
866872 synchronize_rcu();
867873 for (i = 0; i < htab->buckets_num; i++) {
868874 bucket = sock_hash_select_bucket(htab, i);
869− raw_spin_lock_bh(&bucket->lock);
870875 hlist_for_each_entry_safe(elem, node, &bucket->head, node) {
871876 hlist_del_rcu(&elem->node);
872877 lock_sock(elem->sk);
@@ -875,7 +880,6 @@ static void sock_hash_free(struct bpf_map *map) · 2 unmodified lines
875880 rcu_read_unlock();
876881 release_sock(elem->sk);
877882 }
878− raw_spin_unlock_bh(&bucket->lock);
879883 }
880884
881885 /* wait for psock readers accessing its map link */
net/dsa/dsa_priv.h+2−0
@@ -117,7 +117,9 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev, · 116 unmodified lines
117117 /* port.c */
118118 int dsa_port_set_state(struct dsa_port *dp, u8 state,
119119 struct switchdev_trans *trans);
120+int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
120121 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
122+void dsa_port_disable_rt(struct dsa_port *dp);
121123 void dsa_port_disable(struct dsa_port *dp);
122124 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br);
123125 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
net/dsa/port.c+35−9
@@ -63,7 +63,7 @@ static void dsa_port_set_state_now(struct dsa_port *dp, u8 state) · 62 unmodified lines
6363 pr_err("DSA: failed to set STP state %u (%d)\n", state, err);
6464 }
6565
66−int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
66+int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy)
6767 {
6868 struct dsa_switch *ds = dp->ds;
6969 int port = dp->index;
@@ -78,14 +78,31 @@ int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy) · 8 unmodified lines
7878 if (!dp->bridge_dev)
7979 dsa_port_set_state_now(dp, BR_STATE_FORWARDING);
8080
81+ if (dp->pl)
82+ phylink_start(dp->pl);
83+
8184 return 0;
8285 }
8386
84−void dsa_port_disable(struct dsa_port *dp)
87+int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
88+{
89+ int err;
90+
91+ rtnl_lock();
92+ err = dsa_port_enable_rt(dp, phy);
93+ rtnl_unlock();
94+
95+ return err;
96+}
97+
98+void dsa_port_disable_rt(struct dsa_port *dp)
8599 {
86100 struct dsa_switch *ds = dp->ds;
87101 int port = dp->index;
88102
103+ if (dp->pl)
104+ phylink_stop(dp->pl);
105+
89106 if (!dp->bridge_dev)
90107 dsa_port_set_state_now(dp, BR_STATE_DISABLED);
91108
@@ -93,6 +110,13 @@ void dsa_port_disable(struct dsa_port *dp) · 1 unmodified line
93110 ds->ops->port_disable(ds, port);
94111 }
95112
113+void dsa_port_disable(struct dsa_port *dp)
114+{
115+ rtnl_lock();
116+ dsa_port_disable_rt(dp);
117+ rtnl_unlock();
118+}
119+
96120 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
97121 {
98122 struct dsa_notifier_bridge_info info = {
@@ -614,10 +638,6 @@ static int dsa_port_phylink_register(struct dsa_port *dp) · 515 unmodified lines
614638 goto err_phy_connect;
615639 }
616640
617− rtnl_lock();
618− phylink_start(dp->pl);
619− rtnl_unlock();
620−
621641 return 0;
622642
623643 err_phy_connect:
@@ -628,9 +648,14 @@ err_phy_connect: · 4 unmodified lines
628648 int dsa_port_link_register_of(struct dsa_port *dp)
629649 {
630650 struct dsa_switch *ds = dp->ds;
651+ struct device_node *phy_np;
631652
632− if (!ds->ops->adjust_link)
633− return dsa_port_phylink_register(dp);
653+ if (!ds->ops->adjust_link) {
654+ phy_np = of_parse_phandle(dp->dn, "phy-handle", 0);
655+ if (of_phy_is_fixed_link(dp->dn) || phy_np)
656+ return dsa_port_phylink_register(dp);
657+ return 0;
658+ }
634659
635660 dev_warn(ds->dev,
636661 "Using legacy PHYLIB callbacks. Please migrate to PHYLINK!\n");
@@ -645,11 +670,12 @@ void dsa_port_link_unregister_of(struct dsa_port *dp) · 8 unmodified lines
645670 {
646671 struct dsa_switch *ds = dp->ds;
647672
648− if (!ds->ops->adjust_link) {
673+ if (!ds->ops->adjust_link && dp->pl) {
649674 rtnl_lock();
650675 phylink_disconnect_phy(dp->pl);
651676 rtnl_unlock();
652677 phylink_destroy(dp->pl);
678+ dp->pl = NULL;
653679 return;
654680 }
655681
net/dsa/slave.c+2−6
@@ -88,12 +88,10 @@ static int dsa_slave_open(struct net_device *dev) · 87 unmodified lines
8888 goto clear_allmulti;
8989 }
9090
91− err = dsa_port_enable(dp, dev->phydev);
91+ err = dsa_port_enable_rt(dp, dev->phydev);
9292 if (err)
9393 goto clear_promisc;
9494
95− phylink_start(dp->pl);
96−
9795 return 0;
9896
9997 clear_promisc:
@@ -114,9 +112,7 @@ static int dsa_slave_close(struct net_device *dev) · 14 unmodified lines
114112 struct net_device *master = dsa_slave_to_master(dev);
115113 struct dsa_port *dp = dsa_slave_to_port(dev);
116114
117− phylink_stop(dp->pl);
118−
119− dsa_port_disable(dp);
115+ dsa_port_disable_rt(dp);
120116
121117 dev_mc_unsync(master, dev);
122118 dev_uc_unsync(master, dev);
net/dsa/tag_8021q.c+0−43
@@ -298,47 +298,4 @@ struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev, · 297 unmodified lines
298298 }
299299 EXPORT_SYMBOL_GPL(dsa_8021q_xmit);
300300
301−/* In the DSA packet_type handler, skb->data points in the middle of the VLAN
302− * tag, after tpid and before tci. This is because so far, ETH_HLEN
303− * (DMAC, SMAC, EtherType) bytes were pulled.
304− * There are 2 bytes of VLAN tag left in skb->data, and upper
305− * layers expect the 'real' EtherType to be consumed as well.
306− * Coincidentally, a VLAN header is also of the same size as
307− * the number of bytes that need to be pulled.
308− *
309− * skb_mac_header skb->data
310− * | |
311− * v v
312− * | | | | | | | | | | | | | | | | | | |
313− * +-----------------------+-----------------------+-------+-------+-------+
314− * | Destination MAC | Source MAC | TPID | TCI | EType |
315− * +-----------------------+-----------------------+-------+-------+-------+
316− * ^ | |
317− * |<--VLAN_HLEN-->to <---VLAN_HLEN--->
318− * from |
319− * >>>>>>> v
320− * >>>>>>> | | | | | | | | | | | | | | |
321− * >>>>>>> +-----------------------+-----------------------+-------+
322− * >>>>>>> | Destination MAC | Source MAC | EType |
323− * +-----------------------+-----------------------+-------+
324− * ^ ^
325− * (now part of | |
326− * skb->head) skb_mac_header skb->data
327− */
328−struct sk_buff *dsa_8021q_remove_header(struct sk_buff *skb)
329−{
330− u8 *from = skb_mac_header(skb);
331− u8 *dest = from + VLAN_HLEN;
332−
333− memmove(dest, from, ETH_HLEN - VLAN_HLEN);
334− skb_pull(skb, VLAN_HLEN);
335− skb_push(skb, ETH_HLEN);
336− skb_reset_mac_header(skb);
337− skb_reset_mac_len(skb);
338− skb_pull_rcsum(skb, ETH_HLEN);
339−
340− return skb;
341−}
342−EXPORT_SYMBOL_GPL(dsa_8021q_remove_header);
343−
344301 MODULE_LICENSE("GPL v2");
net/dsa/tag_brcm.c+2−0
@@ -140,6 +140,8 @@ static struct sk_buff *brcm_tag_rcv_ll(struct sk_buff *skb, · 139 unmodified lines
140140 /* Remove Broadcom tag and update checksum */
141141 skb_pull_rcsum(skb, BRCM_TAG_LEN);
142142
143+ skb->offload_fwd_mark = 1;
144+
143145 return skb;
144146 }
145147 #endif
net/dsa/tag_sja1105.c+9−10
@@ -250,14 +250,14 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb, · 249 unmodified lines
250250 {
251251 struct sja1105_meta meta = {0};
252252 int source_port, switch_id;
253− struct vlan_ethhdr *hdr;
253+ struct ethhdr *hdr;
254254 u16 tpid, vid, tci;
255255 bool is_link_local;
256256 bool is_tagged;
257257 bool is_meta;
258258
259− hdr = vlan_eth_hdr(skb);
260− tpid = ntohs(hdr->h_vlan_proto);
259+ hdr = eth_hdr(skb);
260+ tpid = ntohs(hdr->h_proto);
261261 is_tagged = (tpid == ETH_P_SJA1105);
262262 is_link_local = sja1105_is_link_local(skb);
263263 is_meta = sja1105_is_meta_frame(skb);
@@ -266,7 +266,12 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb, · 2 unmodified lines
266266
267267 if (is_tagged) {
268268 /* Normal traffic path. */
269− tci = ntohs(hdr->h_vlan_TCI);
269+ skb_push_rcsum(skb, ETH_HLEN);
270+ __skb_vlan_pop(skb, &tci);
271+ skb_pull_rcsum(skb, ETH_HLEN);
272+ skb_reset_network_header(skb);
273+ skb_reset_transport_header(skb);
274+
270275 vid = tci & VLAN_VID_MASK;
271276 source_port = dsa_8021q_rx_source_port(vid);
272277 switch_id = dsa_8021q_rx_switch_id(vid);
@@ -295,12 +300,6 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb, · 22 unmodified lines
295300 return NULL;
296301 }
297302
298− /* Delete/overwrite fake VLAN header, DSA expects to not find
299− * it there, see dsa_switch_rcv: skb_push(skb, ETH_HLEN).
300− */
301− if (is_tagged)
302− skb = dsa_8021q_remove_header(skb);
303−
304303 return sja1105_rcv_meta_state_machine(skb, &meta, is_link_local,
305304 is_meta);
306305 }
net/ethtool/debug.c+3−1
@@ -107,8 +107,9 @@ int ethnl_set_debug(struct sk_buff *skb, struct genl_info *info) · 106 unmodified lines
107107 if (ret < 0)
108108 return ret;
109109 dev = req_info.dev;
110+ ret = -EOPNOTSUPP;
110111 if (!dev->ethtool_ops->get_msglevel || !dev->ethtool_ops->set_msglevel)
111− return -EOPNOTSUPP;
112+ goto out_dev;
112113
113114 rtnl_lock();
114115 ret = ethnl_ops_begin(dev);
@@ -129,6 +130,7 @@ out_ops: · 14 unmodified lines
129130 ethnl_ops_complete(dev);
130131 out_rtnl:
131132 rtnl_unlock();
133+out_dev:
132134 dev_put(dev);
133135 return ret;
134136 }
net/ethtool/linkinfo.c+3−1
@@ -126,9 +126,10 @@ int ethnl_set_linkinfo(struct sk_buff *skb, struct genl_info *info) · 125 unmodified lines
126126 if (ret < 0)
127127 return ret;
128128 dev = req_info.dev;
129+ ret = -EOPNOTSUPP;
129130 if (!dev->ethtool_ops->get_link_ksettings ||
130131 !dev->ethtool_ops->set_link_ksettings)
131− return -EOPNOTSUPP;
132+ goto out_dev;
132133
133134 rtnl_lock();
134135 ret = ethnl_ops_begin(dev);
@@ -162,6 +163,7 @@ out_ops: · 27 unmodified lines
162163 ethnl_ops_complete(dev);
163164 out_rtnl:
164165 rtnl_unlock();
166+out_dev:
165167 dev_put(dev);
166168 return ret;
167169 }
net/ethtool/linkmodes.c+3−1
@@ -338,9 +338,10 @@ int ethnl_set_linkmodes(struct sk_buff *skb, struct genl_info *info) · 337 unmodified lines
338338 if (ret < 0)
339339 return ret;
340340 dev = req_info.dev;
341+ ret = -EOPNOTSUPP;
341342 if (!dev->ethtool_ops->get_link_ksettings ||
342343 !dev->ethtool_ops->set_link_ksettings)
343− return -EOPNOTSUPP;
344+ goto out_dev;
344345
345346 rtnl_lock();
346347 ret = ethnl_ops_begin(dev);
@@ -370,6 +371,7 @@ out_ops: · 23 unmodified lines
370371 ethnl_ops_complete(dev);
371372 out_rtnl:
372373 rtnl_unlock();
374+out_dev:
373375 dev_put(dev);
374376 return ret;
375377 }
net/ethtool/netlink.c+12−4
@@ -40,6 +40,7 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, · 39 unmodified lines
4040 struct nlattr *tb[ETHTOOL_A_HEADER_MAX + 1];
4141 const struct nlattr *devname_attr;
4242 struct net_device *dev = NULL;
43+ u32 flags = 0;
4344 int ret;
4445
4546 if (!header) {
@@ -50,8 +51,17 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, · 4 unmodified lines
5051 ethnl_header_policy, extack);
5152 if (ret < 0)
5253 return ret;
53− devname_attr = tb[ETHTOOL_A_HEADER_DEV_NAME];
54+ if (tb[ETHTOOL_A_HEADER_FLAGS]) {
55+ flags = nla_get_u32(tb[ETHTOOL_A_HEADER_FLAGS]);
56+ if (flags & ~ETHTOOL_FLAG_ALL) {
57+ NL_SET_ERR_MSG_ATTR(extack, tb[ETHTOOL_A_HEADER_FLAGS],
58+ "unrecognized request flags");
59+ nl_set_extack_cookie_u32(extack, ETHTOOL_FLAG_ALL);
60+ return -EOPNOTSUPP;
61+ }
62+ }
5463
64+ devname_attr = tb[ETHTOOL_A_HEADER_DEV_NAME];
5565 if (tb[ETHTOOL_A_HEADER_DEV_INDEX]) {
5666 u32 ifindex = nla_get_u32(tb[ETHTOOL_A_HEADER_DEV_INDEX]);
5767
@@ -90,9 +100,7 @@ int ethnl_parse_header(struct ethnl_req_info *req_info, · 32 unmodified lines
90100 }
91101
92102 req_info->dev = dev;
93− if (tb[ETHTOOL_A_HEADER_FLAGS])
94− req_info->flags = nla_get_u32(tb[ETHTOOL_A_HEADER_FLAGS]);
95−
103+ req_info->flags = flags;
96104 return 0;
97105 }
98106
net/ethtool/wol.c+3−1
@@ -128,8 +128,9 @@ int ethnl_set_wol(struct sk_buff *skb, struct genl_info *info) · 127 unmodified lines
128128 if (ret < 0)
129129 return ret;
130130 dev = req_info.dev;
131+ ret = -EOPNOTSUPP;
131132 if (!dev->ethtool_ops->get_wol || !dev->ethtool_ops->set_wol)
132− return -EOPNOTSUPP;
133+ goto out_dev;
133134
134135 rtnl_lock();
135136 ret = ethnl_ops_begin(dev);
@@ -172,6 +173,7 @@ out_ops: · 36 unmodified lines
172173 ethnl_ops_complete(dev);
173174 out_rtnl:
174175 rtnl_unlock();
176+out_dev:
175177 dev_put(dev);
176178 return ret;
177179 }
net/hsr/hsr_framereg.c+2−7
@@ -482,12 +482,9 @@ int hsr_get_node_data(struct hsr_priv *hsr, · 481 unmodified lines
482482 struct hsr_port *port;
483483 unsigned long tdiff;
484484
485− rcu_read_lock();
486485 node = find_node_by_addr_A(&hsr->node_db, addr);
487− if (!node) {
488− rcu_read_unlock();
489− return -ENOENT; /* No such entry */
490− }
486+ if (!node)
487+ return -ENOENT;
491488
492489 ether_addr_copy(addr_b, node->macaddress_B);
493490
@@ -522,7 +519,5 @@ int hsr_get_node_data(struct hsr_priv *hsr, · 28 unmodified lines
522519 *addr_b_ifindex = -1;
523520 }
524521
525− rcu_read_unlock();
526−
527522 return 0;
528523 }
net/hsr/hsr_netlink.c+42−28
@@ -251,15 +251,16 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info) · 250 unmodified lines
251251 if (!na)
252252 goto invalid;
253253
254− hsr_dev = __dev_get_by_index(genl_info_net(info),
255− nla_get_u32(info->attrs[HSR_A_IFINDEX]));
254+ rcu_read_lock();
255+ hsr_dev = dev_get_by_index_rcu(genl_info_net(info),
256+ nla_get_u32(info->attrs[HSR_A_IFINDEX]));
256257 if (!hsr_dev)
257− goto invalid;
258+ goto rcu_unlock;
258259 if (!is_hsr_master(hsr_dev))
259− goto invalid;
260+ goto rcu_unlock;
260261
261262 /* Send reply */
262− skb_out = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
263+ skb_out = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
263264 if (!skb_out) {
264265 res = -ENOMEM;
265266 goto fail;
@@ -313,12 +314,10 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info) · 47 unmodified lines
313314 res = nla_put_u16(skb_out, HSR_A_IF1_SEQ, hsr_node_if1_seq);
314315 if (res < 0)
315316 goto nla_put_failure;
316− rcu_read_lock();
317317 port = hsr_port_get_hsr(hsr, HSR_PT_SLAVE_A);
318318 if (port)
319319 res = nla_put_u32(skb_out, HSR_A_IF1_IFINDEX,
320320 port->dev->ifindex);
321− rcu_read_unlock();
322321 if (res < 0)
323322 goto nla_put_failure;
324323
@@ -328,20 +327,22 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info) · 3 unmodified lines
328327 res = nla_put_u16(skb_out, HSR_A_IF2_SEQ, hsr_node_if2_seq);
329328 if (res < 0)
330329 goto nla_put_failure;
331− rcu_read_lock();
332330 port = hsr_port_get_hsr(hsr, HSR_PT_SLAVE_B);
333331 if (port)
334332 res = nla_put_u32(skb_out, HSR_A_IF2_IFINDEX,
335333 port->dev->ifindex);
336− rcu_read_unlock();
337334 if (res < 0)
338335 goto nla_put_failure;
339336
337+ rcu_read_unlock();
338+
340339 genlmsg_end(skb_out, msg_head);
341340 genlmsg_unicast(genl_info_net(info), skb_out, info->snd_portid);
342341
343342 return 0;
344343
344+rcu_unlock:
345+ rcu_read_unlock();
345346 invalid:
346347 netlink_ack(skb_in, nlmsg_hdr(skb_in), -EINVAL, NULL);
347348 return 0;
@@ -351,6 +352,7 @@ nla_put_failure: · 3 unmodified lines
351352 /* Fall through */
352353
353354 fail:
355+ rcu_read_unlock();
354356 return res;
355357 }
356358
@@ -358,16 +360,14 @@ fail: · 1 unmodified line
358360 */
359361 static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info)
360362 {
361− /* For receiving */
362− struct nlattr *na;
363+ unsigned char addr[ETH_ALEN];
363364 struct net_device *hsr_dev;
364−
365− /* For sending */
366365 struct sk_buff *skb_out;
367− void *msg_head;
368366 struct hsr_priv *hsr;
369− void *pos;
370− unsigned char addr[ETH_ALEN];
367+ bool restart = false;
368+ struct nlattr *na;
369+ void *pos = NULL;
370+ void *msg_head;
371371 int res;
372372
373373 if (!info)
@@ -377,15 +377,17 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info) · 3 unmodified lines
377377 if (!na)
378378 goto invalid;
379379
380− hsr_dev = __dev_get_by_index(genl_info_net(info),
381− nla_get_u32(info->attrs[HSR_A_IFINDEX]));
380+ rcu_read_lock();
381+ hsr_dev = dev_get_by_index_rcu(genl_info_net(info),
382+ nla_get_u32(info->attrs[HSR_A_IFINDEX]));
382383 if (!hsr_dev)
383− goto invalid;
384+ goto rcu_unlock;
384385 if (!is_hsr_master(hsr_dev))
385− goto invalid;
386+ goto rcu_unlock;
386387
388+restart:
387389 /* Send reply */
388− skb_out = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
390+ skb_out = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
389391 if (!skb_out) {
390392 res = -ENOMEM;
391393 goto fail;
@@ -399,18 +401,26 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info) · 7 unmodified lines
399401 goto nla_put_failure;
400402 }
401403
402− res = nla_put_u32(skb_out, HSR_A_IFINDEX, hsr_dev->ifindex);
403− if (res < 0)
404− goto nla_put_failure;
404+ if (!restart) {
405+ res = nla_put_u32(skb_out, HSR_A_IFINDEX, hsr_dev->ifindex);
406+ if (res < 0)
407+ goto nla_put_failure;
408+ }
405409
406410 hsr = netdev_priv(hsr_dev);
407411
408− rcu_read_lock();
409− pos = hsr_get_next_node(hsr, NULL, addr);
412+ if (!pos)
413+ pos = hsr_get_next_node(hsr, NULL, addr);
410414 while (pos) {
411415 res = nla_put(skb_out, HSR_A_NODE_ADDR, ETH_ALEN, addr);
412416 if (res < 0) {
413− rcu_read_unlock();
417+ if (res == -EMSGSIZE) {
418+ genlmsg_end(skb_out, msg_head);
419+ genlmsg_unicast(genl_info_net(info), skb_out,
420+ info->snd_portid);
421+ restart = true;
422+ goto restart;
423+ }
414424 goto nla_put_failure;
415425 }
416426 pos = hsr_get_next_node(hsr, pos, addr);
@@ -422,15 +432,18 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info) · 5 unmodified lines
422432
423433 return 0;
424434
435+rcu_unlock:
436+ rcu_read_unlock();
425437 invalid:
426438 netlink_ack(skb_in, nlmsg_hdr(skb_in), -EINVAL, NULL);
427439 return 0;
428440
429441 nla_put_failure:
430− kfree_skb(skb_out);
442+ nlmsg_free(skb_out);
431443 /* Fall through */
432444
433445 fail:
446+ rcu_read_unlock();
434447 return res;
435448 }
436449
@@ -457,6 +470,7 @@ static struct genl_family hsr_genl_family __ro_after_init = { · 20 unmodified lines
457470 .version = 1,
458471 .maxattr = HSR_A_MAX,
459472 .policy = hsr_genl_policy,
473+ .netnsok = true,
460474 .module = THIS_MODULE,
461475 .ops = hsr_ops,
462476 .n_ops = ARRAY_SIZE(hsr_ops),
net/hsr/hsr_slave.c+4−4
@@ -145,16 +145,16 @@ int hsr_add_port(struct hsr_priv *hsr, struct net_device *dev, · 144 unmodified lines
145145 if (!port)
146146 return -ENOMEM;
147147
148+ port->hsr = hsr;
149+ port->dev = dev;
150+ port->type = type;
151+
148152 if (type != HSR_PT_MASTER) {
149153 res = hsr_portdev_setup(dev, port);
150154 if (res)
151155 goto fail_dev_setup;
152156 }
153157
154− port->hsr = hsr;
155− port->dev = dev;
156− port->type = type;
157−
158158 list_add_tail_rcu(&port->port_list, &hsr->ports);
159159 synchronize_rcu();
160160
net/ieee802154/nl_policy.c+6−0
@@ -21,7 +21,13 @@ const struct nla_policy ieee802154_policy[IEEE802154_ATTR_MAX + 1] = { · 20 unmodified lines
2121 [IEEE802154_ATTR_HW_ADDR] = { .type = NLA_HW_ADDR, },
2222 [IEEE802154_ATTR_PAN_ID] = { .type = NLA_U16, },
2323 [IEEE802154_ATTR_CHANNEL] = { .type = NLA_U8, },
24+ [IEEE802154_ATTR_BCN_ORD] = { .type = NLA_U8, },
25+ [IEEE802154_ATTR_SF_ORD] = { .type = NLA_U8, },
26+ [IEEE802154_ATTR_PAN_COORD] = { .type = NLA_U8, },
27+ [IEEE802154_ATTR_BAT_EXT] = { .type = NLA_U8, },
28+ [IEEE802154_ATTR_COORD_REALIGN] = { .type = NLA_U8, },
2429 [IEEE802154_ATTR_PAGE] = { .type = NLA_U8, },
30+ [IEEE802154_ATTR_DEV_TYPE] = { .type = NLA_U8, },
2531 [IEEE802154_ATTR_COORD_SHORT_ADDR] = { .type = NLA_U16, },
2632 [IEEE802154_ATTR_COORD_HW_ADDR] = { .type = NLA_HW_ADDR, },
2733 [IEEE802154_ATTR_COORD_PAN_ID] = { .type = NLA_U16, },
net/ipv4/Kconfig+1−0
@@ -303,6 +303,7 @@ config SYN_COOKIES · 302 unmodified lines
303303
304304 config NET_IPVTI
305305 tristate "Virtual (secure) IP: tunneling"
306+ depends on IPV6 || IPV6=n
306307 select INET_TUNNEL
307308 select NET_IP_TUNNEL
308309 select XFRM
net/ipv4/bpf_tcp_ca.c+2−5
@@ -184,7 +184,6 @@ static int bpf_tcp_ca_init_member(const struct btf_type *t, · 183 unmodified lines
184184 {
185185 const struct tcp_congestion_ops *utcp_ca;
186186 struct tcp_congestion_ops *tcp_ca;
187− size_t tcp_ca_name_len;
188187 int prog_fd;
189188 u32 moff;
190189
@@ -199,13 +198,11 @@ static int bpf_tcp_ca_init_member(const struct btf_type *t, · 8 unmodified lines
199198 tcp_ca->flags = utcp_ca->flags;
200199 return 1;
201200 case offsetof(struct tcp_congestion_ops, name):
202− tcp_ca_name_len = strnlen(utcp_ca->name, sizeof(utcp_ca->name));
203− if (!tcp_ca_name_len ||
204− tcp_ca_name_len == sizeof(utcp_ca->name))
201+ if (bpf_obj_name_cpy(tcp_ca->name, utcp_ca->name,
202+ sizeof(tcp_ca->name)) <= 0)
205203 return -EINVAL;
206204 if (tcp_ca_find(utcp_ca->name))
207205 return -EEXIST;
208− memcpy(tcp_ca->name, utcp_ca->name, sizeof(tcp_ca->name));
209206 return 1;
210207 }
211208
net/ipv4/fib_frontend.c+2−0
@@ -997,7 +997,9 @@ static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb) · 996 unmodified lines
997997 return -ENOENT;
998998 }
999999
1000+ rcu_read_lock();
10001001 err = fib_table_dump(tb, skb, cb, &filter);
1002+ rcu_read_unlock();
10011003 return skb->len ? : err;
10021004 }
10031005
net/ipv4/gre_demux.c+10−2
@@ -56,7 +56,9 @@ int gre_del_protocol(const struct gre_protocol *proto, u8 version) · 55 unmodified lines
5656 }
5757 EXPORT_SYMBOL_GPL(gre_del_protocol);
5858
59−/* Fills in tpi and returns header length to be pulled. */
59+/* Fills in tpi and returns header length to be pulled.
60+ * Note that caller must use pskb_may_pull() before pulling GRE header.
61+ */
6062 int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
6163 bool *csum_err, __be16 proto, int nhs)
6264 {
@@ -110,8 +112,14 @@ int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, · 47 unmodified lines
110112 * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
111113 */
112114 if (greh->flags == 0 && tpi->proto == htons(ETH_P_WCCP)) {
115+ u8 _val, *val;
116+
117+ val = skb_header_pointer(skb, nhs + hdr_len,
118+ sizeof(_val), &_val);
119+ if (!val)
120+ return -EINVAL;
113121 tpi->proto = proto;
114− if ((*(u8 *)options & 0xF0) != 0x40)
122+ if ((*val & 0xF0) != 0x40)
115123 hdr_len += 4;
116124 }
117125 tpi->hdr_len = hdr_len;
net/ipv4/inet_connection_sock.c+20−0
@@ -482,8 +482,28 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) · 481 unmodified lines
482482 }
483483 spin_unlock_bh(&queue->fastopenq.lock);
484484 }
485+
485486 out:
486487 release_sock(sk);
488+ if (newsk && mem_cgroup_sockets_enabled) {
489+ int amt;
490+
491+ /* atomically get the memory usage, set and charge the
492+ * newsk->sk_memcg.
493+ */
494+ lock_sock(newsk);
495+
496+ /* The socket has not been accepted yet, no need to look at
497+ * newsk->sk_wmem_queued.
498+ */
499+ amt = sk_mem_pages(newsk->sk_forward_alloc +
500+ atomic_read(&newsk->sk_rmem_alloc));
501+ mem_cgroup_sk_alloc(newsk);
502+ if (newsk->sk_memcg && amt)
503+ mem_cgroup_charge_skmem(newsk->sk_memcg, amt);
504+
505+ release_sock(newsk);
506+ }
487507 if (req)
488508 reqsk_put(req);
489509 return newsk;
net/ipv4/inet_diag.c+20−24
@@ -100,13 +100,9 @@ static size_t inet_sk_attr_size(struct sock *sk, · 99 unmodified lines
100100 aux = handler->idiag_get_aux_size(sk, net_admin);
101101
102102 return nla_total_size(sizeof(struct tcp_info))
103− + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
104− + nla_total_size(1) /* INET_DIAG_TOS */
105− + nla_total_size(1) /* INET_DIAG_TCLASS */
106− + nla_total_size(4) /* INET_DIAG_MARK */
107− + nla_total_size(4) /* INET_DIAG_CLASS_ID */
108− + nla_total_size(sizeof(struct inet_diag_meminfo))
109103 + nla_total_size(sizeof(struct inet_diag_msg))
104+ + inet_diag_msg_attrs_size()
105+ + nla_total_size(sizeof(struct inet_diag_meminfo))
110106 + nla_total_size(SK_MEMINFO_VARS * sizeof(u32))
111107 + nla_total_size(TCP_CA_NAME_MAX)
112108 + nla_total_size(sizeof(struct tcpvegas_info))
@@ -147,6 +143,24 @@ int inet_diag_msg_attrs_fill(struct sock *sk, struct sk_buff *skb, · 34 unmodified lines
147143 if (net_admin && nla_put_u32(skb, INET_DIAG_MARK, sk->sk_mark))
148144 goto errout;
149145
146+ if (ext & (1 << (INET_DIAG_CLASS_ID - 1)) ||
147+ ext & (1 << (INET_DIAG_TCLASS - 1))) {
148+ u32 classid = 0;
149+
150+#ifdef CONFIG_SOCK_CGROUP_DATA
151+ classid = sock_cgroup_classid(&sk->sk_cgrp_data);
152+#endif
153+ /* Fallback to socket priority if class id isn't set.
154+ * Classful qdiscs use it as direct reference to class.
155+ * For cgroup2 classid is always zero.
156+ */
157+ if (!classid)
158+ classid = sk->sk_priority;
159+
160+ if (nla_put_u32(skb, INET_DIAG_CLASS_ID, classid))
161+ goto errout;
162+ }
163+
150164 r->idiag_uid = from_kuid_munged(user_ns, sock_i_uid(sk));
151165 r->idiag_inode = sock_i_ino(sk);
152166
@@ -284,24 +298,6 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, · 131 unmodified lines
284298 goto errout;
285299 }
286300
287− if (ext & (1 << (INET_DIAG_CLASS_ID - 1)) ||
288− ext & (1 << (INET_DIAG_TCLASS - 1))) {
289− u32 classid = 0;
290−
291−#ifdef CONFIG_SOCK_CGROUP_DATA
292− classid = sock_cgroup_classid(&sk->sk_cgrp_data);
293−#endif
294− /* Fallback to socket priority if class id isn't set.
295− * Classful qdiscs use it as direct reference to class.
296− * For cgroup2 classid is always zero.
297− */
298− if (!classid)
299− classid = sk->sk_priority;
300−
301− if (nla_put_u32(skb, INET_DIAG_CLASS_ID, classid))
302− goto errout;
303− }
304−
305301 out:
306302 nlmsg_end(skb, nlh);
307303 return 0;
net/ipv4/ip_gre.c+87−18
@@ -1153,6 +1153,24 @@ static int ipgre_netlink_parms(struct net_device *dev, · 1152 unmodified lines
11531153 if (data[IFLA_GRE_FWMARK])
11541154 *fwmark = nla_get_u32(data[IFLA_GRE_FWMARK]);
11551155
1156+ return 0;
1157+}
1158+
1159+static int erspan_netlink_parms(struct net_device *dev,
1160+ struct nlattr *data[],
1161+ struct nlattr *tb[],
1162+ struct ip_tunnel_parm *parms,
1163+ __u32 *fwmark)
1164+{
1165+ struct ip_tunnel *t = netdev_priv(dev);
1166+ int err;
1167+
1168+ err = ipgre_netlink_parms(dev, data, tb, parms, fwmark);
1169+ if (err)
1170+ return err;
1171+ if (!data)
1172+ return 0;
1173+
11561174 if (data[IFLA_GRE_ERSPAN_VER]) {
11571175 t->erspan_ver = nla_get_u8(data[IFLA_GRE_ERSPAN_VER]);
11581176
@@ -1276,45 +1294,70 @@ static void ipgre_tap_setup(struct net_device *dev) · 117 unmodified lines
12761294 ip_tunnel_setup(dev, gre_tap_net_id);
12771295 }
12781296
1279−static int ipgre_newlink(struct net *src_net, struct net_device *dev,
1280− struct nlattr *tb[], struct nlattr *data[],
1281− struct netlink_ext_ack *extack)
1297+static int
1298+ipgre_newlink_encap_setup(struct net_device *dev, struct nlattr *data[])
12821299 {
1283− struct ip_tunnel_parm p;
12841300 struct ip_tunnel_encap ipencap;
1285− __u32 fwmark = 0;
1286− int err;
12871301
12881302 if (ipgre_netlink_encap_parms(data, &ipencap)) {
12891303 struct ip_tunnel *t = netdev_priv(dev);
1290− err = ip_tunnel_encap_setup(t, &ipencap);
1304+ int err = ip_tunnel_encap_setup(t, &ipencap);
12911305
12921306 if (err < 0)
12931307 return err;
12941308 }
12951309
1310+ return 0;
1311+}
1312+
1313+static int ipgre_newlink(struct net *src_net, struct net_device *dev,
1314+ struct nlattr *tb[], struct nlattr *data[],
1315+ struct netlink_ext_ack *extack)
1316+{
1317+ struct ip_tunnel_parm p;
1318+ __u32 fwmark = 0;
1319+ int err;
1320+
1321+ err = ipgre_newlink_encap_setup(dev, data);
1322+ if (err)
1323+ return err;
1324+
12961325 err = ipgre_netlink_parms(dev, data, tb, &p, &fwmark);
12971326 if (err < 0)
12981327 return err;
12991328 return ip_tunnel_newlink(dev, tb, &p, fwmark);
13001329 }
13011330
1331+static int erspan_newlink(struct net *src_net, struct net_device *dev,
1332+ struct nlattr *tb[], struct nlattr *data[],
1333+ struct netlink_ext_ack *extack)
1334+{
1335+ struct ip_tunnel_parm p;
1336+ __u32 fwmark = 0;
1337+ int err;
1338+
1339+ err = ipgre_newlink_encap_setup(dev, data);
1340+ if (err)
1341+ return err;
1342+
1343+ err = erspan_netlink_parms(dev, data, tb, &p, &fwmark);
1344+ if (err)
1345+ return err;
1346+ return ip_tunnel_newlink(dev, tb, &p, fwmark);
1347+}
1348+
13021349 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
13031350 struct nlattr *data[],
13041351 struct netlink_ext_ack *extack)
13051352 {
13061353 struct ip_tunnel *t = netdev_priv(dev);
1307− struct ip_tunnel_encap ipencap;
13081354 __u32 fwmark = t->fwmark;
13091355 struct ip_tunnel_parm p;
13101356 int err;
13111357
1312− if (ipgre_netlink_encap_parms(data, &ipencap)) {
1313− err = ip_tunnel_encap_setup(t, &ipencap);
1314−
1315− if (err < 0)
1316− return err;
1317− }
1358+ err = ipgre_newlink_encap_setup(dev, data);
1359+ if (err)
1360+ return err;
13181361
13191362 err = ipgre_netlink_parms(dev, data, tb, &p, &fwmark);
13201363 if (err < 0)
@@ -1327,8 +1370,34 @@ static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[], · 6 unmodified lines
13271370 t->parms.i_flags = p.i_flags;
13281371 t->parms.o_flags = p.o_flags;
13291372
1330− if (strcmp(dev->rtnl_link_ops->kind, "erspan"))
1331− ipgre_link_update(dev, !tb[IFLA_MTU]);
1373+ ipgre_link_update(dev, !tb[IFLA_MTU]);
1374+
1375+ return 0;
1376+}
1377+
1378+static int erspan_changelink(struct net_device *dev, struct nlattr *tb[],
1379+ struct nlattr *data[],
1380+ struct netlink_ext_ack *extack)
1381+{
1382+ struct ip_tunnel *t = netdev_priv(dev);
1383+ __u32 fwmark = t->fwmark;
1384+ struct ip_tunnel_parm p;
1385+ int err;
1386+
1387+ err = ipgre_newlink_encap_setup(dev, data);
1388+ if (err)
1389+ return err;
1390+
1391+ err = erspan_netlink_parms(dev, data, tb, &p, &fwmark);
1392+ if (err < 0)
1393+ return err;
1394+
1395+ err = ip_tunnel_changelink(dev, tb, &p, fwmark);
1396+ if (err < 0)
1397+ return err;
1398+
1399+ t->parms.i_flags = p.i_flags;
1400+ t->parms.o_flags = p.o_flags;
13321401
13331402 return 0;
13341403 }
@@ -1519,8 +1588,8 @@ static struct rtnl_link_ops erspan_link_ops __read_mostly = { · 184 unmodified lines
15191588 .priv_size = sizeof(struct ip_tunnel),
15201589 .setup = erspan_setup,
15211590 .validate = erspan_validate,
1522− .newlink = ipgre_newlink,
1523− .changelink = ipgre_changelink,
1591+ .newlink = erspan_newlink,
1592+ .changelink = erspan_changelink,
15241593 .dellink = ip_tunnel_dellink,
15251594 .get_size = ipgre_get_size,
15261595 .fill_info = ipgre_fill_info,
net/ipv4/ip_vti.c+30−8
@@ -187,17 +187,39 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev, · 186 unmodified lines
187187 int mtu;
188188
189189 if (!dst) {
190− struct rtable *rt;
191−
192− fl->u.ip4.flowi4_oif = dev->ifindex;
193− fl->u.ip4.flowi4_flags |= FLOWI_FLAG_ANYSRC;
194− rt = __ip_route_output_key(dev_net(dev), &fl->u.ip4);
195− if (IS_ERR(rt)) {
190+ switch (skb->protocol) {
191+ case htons(ETH_P_IP): {
192+ struct rtable *rt;
193+
194+ fl->u.ip4.flowi4_oif = dev->ifindex;
195+ fl->u.ip4.flowi4_flags |= FLOWI_FLAG_ANYSRC;
196+ rt = __ip_route_output_key(dev_net(dev), &fl->u.ip4);
197+ if (IS_ERR(rt)) {
198+ dev->stats.tx_carrier_errors++;
199+ goto tx_error_icmp;
200+ }
201+ dst = &rt->dst;
202+ skb_dst_set(skb, dst);
203+ break;
204+ }
205+#if IS_ENABLED(CONFIG_IPV6)
206+ case htons(ETH_P_IPV6):
207+ fl->u.ip6.flowi6_oif = dev->ifindex;
208+ fl->u.ip6.flowi6_flags |= FLOWI_FLAG_ANYSRC;
209+ dst = ip6_route_output(dev_net(dev), NULL, &fl->u.ip6);
210+ if (dst->error) {
211+ dst_release(dst);
212+ dst = NULL;
213+ dev->stats.tx_carrier_errors++;
214+ goto tx_error_icmp;
215+ }
216+ skb_dst_set(skb, dst);
217+ break;
218+#endif
219+ default:
196220 dev->stats.tx_carrier_errors++;
197221 goto tx_error_icmp;
198222 }
199− dst = &rt->dst;
200− skb_dst_set(skb, dst);
201223 }
202224
203225 dst_hold(dst);
net/ipv4/raw_diag.c+3−2
@@ -100,8 +100,9 @@ static int raw_diag_dump_one(struct sk_buff *in_skb, · 99 unmodified lines
100100 if (IS_ERR(sk))
101101 return PTR_ERR(sk);
102102
103− rep = nlmsg_new(sizeof(struct inet_diag_msg) +
104− sizeof(struct inet_diag_meminfo) + 64,
103+ rep = nlmsg_new(nla_total_size(sizeof(struct inet_diag_msg)) +
104+ inet_diag_msg_attrs_size() +
105+ nla_total_size(sizeof(struct inet_diag_meminfo)) + 64,
105106 GFP_KERNEL);
106107 if (!rep) {
107108 sock_put(sk);
net/ipv4/tcp.c+3−1
@@ -2948,8 +2948,10 @@ static int do_tcp_setsockopt(struct sock *sk, int level, · 2947 unmodified lines
29482948 err = -EPERM;
29492949 else if (tp->repair_queue == TCP_SEND_QUEUE)
29502950 WRITE_ONCE(tp->write_seq, val);
2951− else if (tp->repair_queue == TCP_RECV_QUEUE)
2951+ else if (tp->repair_queue == TCP_RECV_QUEUE) {
29522952 WRITE_ONCE(tp->rcv_nxt, val);
2953+ WRITE_ONCE(tp->copied_seq, val);
2954+ }
29532955 else
29542956 err = -EINVAL;
29552957 break;
net/ipv4/tcp_output.c+10−2
@@ -1109,6 +1109,10 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, · 1108 unmodified lines
11091109
11101110 if (unlikely(!skb))
11111111 return -ENOBUFS;
1112+ /* retransmit skbs might have a non zero value in skb->dev
1113+ * because skb->dev is aliased with skb->rbnode.rb_left
1114+ */
1115+ skb->dev = NULL;
11121116 }
11131117
11141118 inet = inet_sk(sk);
@@ -3037,8 +3041,12 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs) · 1922 unmodified lines
30373041
30383042 tcp_skb_tsorted_save(skb) {
30393043 nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC);
3040− err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
3041− -ENOBUFS;
3044+ if (nskb) {
3045+ nskb->dev = NULL;
3046+ err = tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC);
3047+ } else {
3048+ err = -ENOBUFS;
3049+ }
30423050 } tcp_skb_tsorted_restore(skb);
30433051
30443052 if (!err) {
net/ipv4/udp_diag.c+3−2
@@ -64,8 +64,9 @@ static int udp_dump_one(struct udp_table *tbl, struct sk_buff *in_skb, · 63 unmodified lines
6464 goto out;
6565
6666 err = -ENOMEM;
67− rep = nlmsg_new(sizeof(struct inet_diag_msg) +
68− sizeof(struct inet_diag_meminfo) + 64,
67+ rep = nlmsg_new(nla_total_size(sizeof(struct inet_diag_msg)) +
68+ inet_diag_msg_attrs_size() +
69+ nla_total_size(sizeof(struct inet_diag_meminfo)) + 64,
6970 GFP_KERNEL);
7071 if (!rep)
7172 goto out;
net/ipv6/addrconf.c+40−11
@@ -1226,11 +1226,13 @@ check_cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long *expires) · 1225 unmodified lines
12261226 }
12271227
12281228 static void
1229−cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires, bool del_rt)
1229+cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires,
1230+ bool del_rt, bool del_peer)
12301231 {
12311232 struct fib6_info *f6i;
12321233
1233− f6i = addrconf_get_prefix_route(&ifp->addr, ifp->prefix_len,
1234+ f6i = addrconf_get_prefix_route(del_peer ? &ifp->peer_addr : &ifp->addr,
1235+ ifp->prefix_len,
12341236 ifp->idev->dev, 0, RTF_DEFAULT, true);
12351237 if (f6i) {
12361238 if (del_rt)
@@ -1293,7 +1295,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) · 56 unmodified lines
12931295
12941296 if (action != CLEANUP_PREFIX_RT_NOP) {
12951297 cleanup_prefix_route(ifp, expires,
1296− action == CLEANUP_PREFIX_RT_DEL);
1298+ action == CLEANUP_PREFIX_RT_DEL, false);
12971299 }
12981300
12991301 /* clean up prefsrc entries */
@@ -3345,6 +3347,10 @@ static void addrconf_dev_config(struct net_device *dev) · 2045 unmodified lines
33453347 (dev->type != ARPHRD_NONE) &&
33463348 (dev->type != ARPHRD_RAWIP)) {
33473349 /* Alas, we support only Ethernet autoconfiguration. */
3350+ idev = __in6_dev_get(dev);
3351+ if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
3352+ dev->flags & IFF_MULTICAST)
3353+ ipv6_mc_up(idev);
33483354 return;
33493355 }
33503356
@@ -4586,12 +4592,14 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, · 1235 unmodified lines
45864592 }
45874593
45884594 static int modify_prefix_route(struct inet6_ifaddr *ifp,
4589− unsigned long expires, u32 flags)
4595+ unsigned long expires, u32 flags,
4596+ bool modify_peer)
45904597 {
45914598 struct fib6_info *f6i;
45924599 u32 prio;
45934600
4594− f6i = addrconf_get_prefix_route(&ifp->addr, ifp->prefix_len,
4601+ f6i = addrconf_get_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4602+ ifp->prefix_len,
45954603 ifp->idev->dev, 0, RTF_DEFAULT, true);
45964604 if (!f6i)
45974605 return -ENOENT;
@@ -4602,7 +4610,8 @@ static int modify_prefix_route(struct inet6_ifaddr *ifp, · 4 unmodified lines
46024610 ip6_del_rt(dev_net(ifp->idev->dev), f6i);
46034611
46044612 /* add new one */
4605− addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
4613+ addrconf_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4614+ ifp->prefix_len,
46064615 ifp->rt_priority, ifp->idev->dev,
46074616 expires, flags, GFP_KERNEL);
46084617 } else {
@@ -4624,6 +4633,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 15 unmodified lines
46244633 unsigned long timeout;
46254634 bool was_managetempaddr;
46264635 bool had_prefixroute;
4636+ bool new_peer = false;
46274637
46284638 ASSERT_RTNL();
46294639
@@ -4655,6 +4665,13 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 25 unmodified lines
46554665 cfg->preferred_lft = timeout;
46564666 }
46574667
4668+ if (cfg->peer_pfx &&
4669+ memcmp(&ifp->peer_addr, cfg->peer_pfx, sizeof(struct in6_addr))) {
4670+ if (!ipv6_addr_any(&ifp->peer_addr))
4671+ cleanup_prefix_route(ifp, expires, true, true);
4672+ new_peer = true;
4673+ }
4674+
46584675 spin_lock_bh(&ifp->lock);
46594676 was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR;
46604677 had_prefixroute = ifp->flags & IFA_F_PERMANENT &&
@@ -4670,6 +4687,9 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 9 unmodified lines
46704687 if (cfg->rt_priority && cfg->rt_priority != ifp->rt_priority)
46714688 ifp->rt_priority = cfg->rt_priority;
46724689
4690+ if (new_peer)
4691+ ifp->peer_addr = *cfg->peer_pfx;
4692+
46734693 spin_unlock_bh(&ifp->lock);
46744694 if (!(ifp->flags&IFA_F_TENTATIVE))
46754695 ipv6_ifa_notify(0, ifp);
@@ -4678,7 +4698,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 2 unmodified lines
46784698 int rc = -ENOENT;
46794699
46804700 if (had_prefixroute)
4681− rc = modify_prefix_route(ifp, expires, flags);
4701+ rc = modify_prefix_route(ifp, expires, flags, false);
46824702
46834703 /* prefix route could have been deleted; if so restore it */
46844704 if (rc == -ENOENT) {
@@ -4686,6 +4706,15 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 1 unmodified line
46864706 ifp->rt_priority, ifp->idev->dev,
46874707 expires, flags, GFP_KERNEL);
46884708 }
4709+
4710+ if (had_prefixroute && !ipv6_addr_any(&ifp->peer_addr))
4711+ rc = modify_prefix_route(ifp, expires, flags, true);
4712+
4713+ if (rc == -ENOENT && !ipv6_addr_any(&ifp->peer_addr)) {
4714+ addrconf_prefix_route(&ifp->peer_addr, ifp->prefix_len,
4715+ ifp->rt_priority, ifp->idev->dev,
4716+ expires, flags, GFP_KERNEL);
4717+ }
46894718 } else if (had_prefixroute) {
46904719 enum cleanup_prefix_rt_t action;
46914720 unsigned long rt_expires;
@@ -4696,7 +4725,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 4 unmodified lines
46964725
46974726 if (action != CLEANUP_PREFIX_RT_NOP) {
46984727 cleanup_prefix_route(ifp, rt_expires,
4699− action == CLEANUP_PREFIX_RT_DEL);
4728+ action == CLEANUP_PREFIX_RT_DEL, false);
47004729 }
47014730 }
47024731
@@ -5983,9 +6012,9 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) · 1280 unmodified lines
59836012 if (ifp->idev->cnf.forwarding)
59846013 addrconf_join_anycast(ifp);
59856014 if (!ipv6_addr_any(&ifp->peer_addr))
5986− addrconf_prefix_route(&ifp->peer_addr, 128, 0,
5987− ifp->idev->dev, 0, 0,
5988− GFP_ATOMIC);
6015+ addrconf_prefix_route(&ifp->peer_addr, 128,
6016+ ifp->rt_priority, ifp->idev->dev,
6017+ 0, 0, GFP_ATOMIC);
59896018 break;
59906019 case RTM_DELADDR:
59916020 if (ifp->idev->cnf.forwarding)
net/ipv6/ip6_vti.c+26−8
@@ -311,7 +311,7 @@ static int vti6_rcv(struct sk_buff *skb) · 310 unmodified lines
311311
312312 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
313313 rcu_read_unlock();
314− return 0;
314+ goto discard;
315315 }
316316
317317 ipv6h = ipv6_hdr(skb);
@@ -450,15 +450,33 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl) · 132 unmodified lines
450450 int mtu;
451451
452452 if (!dst) {
453− fl->u.ip6.flowi6_oif = dev->ifindex;
454− fl->u.ip6.flowi6_flags |= FLOWI_FLAG_ANYSRC;
455− dst = ip6_route_output(dev_net(dev), NULL, &fl->u.ip6);
456− if (dst->error) {
457− dst_release(dst);
458− dst = NULL;
453+ switch (skb->protocol) {
454+ case htons(ETH_P_IP): {
455+ struct rtable *rt;
456+
457+ fl->u.ip4.flowi4_oif = dev->ifindex;
458+ fl->u.ip4.flowi4_flags |= FLOWI_FLAG_ANYSRC;
459+ rt = __ip_route_output_key(dev_net(dev), &fl->u.ip4);
460+ if (IS_ERR(rt))
461+ goto tx_err_link_failure;
462+ dst = &rt->dst;
463+ skb_dst_set(skb, dst);
464+ break;
465+ }
466+ case htons(ETH_P_IPV6):
467+ fl->u.ip6.flowi6_oif = dev->ifindex;
468+ fl->u.ip6.flowi6_flags |= FLOWI_FLAG_ANYSRC;
469+ dst = ip6_route_output(dev_net(dev), NULL, &fl->u.ip6);
470+ if (dst->error) {
471+ dst_release(dst);
472+ dst = NULL;
473+ goto tx_err_link_failure;
474+ }
475+ skb_dst_set(skb, dst);
476+ break;
477+ default:
459478 goto tx_err_link_failure;
460479 }
461− skb_dst_set(skb, dst);
462480 }
463481
464482 dst_hold(dst);
net/ipv6/seg6_iptunnel.c+1−1
@@ -268,7 +268,7 @@ static int seg6_do_srh(struct sk_buff *skb) · 267 unmodified lines
268268 skb_mac_header_rebuild(skb);
269269 skb_push(skb, skb->mac_len);
270270
271− err = seg6_do_srh_encap(skb, tinfo->srh, NEXTHDR_NONE);
271+ err = seg6_do_srh_encap(skb, tinfo->srh, IPPROTO_ETHERNET);
272272 if (err)
273273 return err;
274274
net/ipv6/seg6_local.c+1−1
@@ -282,7 +282,7 @@ static int input_action_end_dx2(struct sk_buff *skb, · 281 unmodified lines
282282 struct net_device *odev;
283283 struct ethhdr *eth;
284284
285− if (!decap_and_validate(skb, NEXTHDR_NONE))
285+ if (!decap_and_validate(skb, IPPROTO_ETHERNET))
286286 goto drop;
287287
288288 if (!pskb_may_pull(skb, ETH_HLEN))
net/ipv6/xfrm6_tunnel.c+1−1
@@ -78,7 +78,7 @@ static struct xfrm6_tunnel_spi *__xfrm6_tunnel_spi_lookup(struct net *net, const · 77 unmodified lines
7878
7979 hlist_for_each_entry_rcu(x6spi,
8080 &xfrm6_tn->spi_byaddr[xfrm6_tunnel_spi_hash_byaddr(saddr)],
81− list_byaddr) {
81+ list_byaddr, lockdep_is_held(&xfrm6_tunnel_spi_lock)) {
8282 if (xfrm6_addr_equal(&x6spi->addr, saddr))
8383 return x6spi;
8484 }
net/mac80211/debugfs_sta.c+2−1
@@ -5,7 +5,7 @@ · 4 unmodified lines
55 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
66 * Copyright 2013-2014 Intel Mobile Communications GmbH
77 * Copyright(c) 2016 Intel Deutschland GmbH
8− * Copyright (C) 2018 - 2019 Intel Corporation
8+ * Copyright (C) 2018 - 2020 Intel Corporation
99 */
1010
1111 #include <linux/debugfs.h>
@@ -78,6 +78,7 @@ static const char * const sta_flag_names[] = { · 66 unmodified lines
7878 FLAG(MPSP_OWNER),
7979 FLAG(MPSP_RECIPIENT),
8080 FLAG(PS_DELIVER),
81+ FLAG(USES_ENCRYPTION),
8182 #undef FLAG
8283 };
8384
net/mac80211/key.c+12−8
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 * Copyright 2007-2008 Johannes Berg <johannes@sipsolutions.net>
77 * Copyright 2013-2014 Intel Mobile Communications GmbH
88 * Copyright 2015-2017 Intel Deutschland GmbH
9− * Copyright 2018-2019 Intel Corporation
9+ * Copyright 2018-2020 Intel Corporation
1010 */
1111
1212 #include <linux/if_ether.h>
@@ -262,22 +262,29 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key) · 249 unmodified lines
262262 sta ? sta->sta.addr : bcast_addr, ret);
263263 }
264264
265−int ieee80211_set_tx_key(struct ieee80211_key *key)
265+static int _ieee80211_set_tx_key(struct ieee80211_key *key, bool force)
266266 {
267267 struct sta_info *sta = key->sta;
268268 struct ieee80211_local *local = key->local;
269269
270270 assert_key_lock(local);
271271
272+ set_sta_flag(sta, WLAN_STA_USES_ENCRYPTION);
273+
272274 sta->ptk_idx = key->conf.keyidx;
273275
274− if (!ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT))
276+ if (force || !ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT))
275277 clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
276278 ieee80211_check_fast_xmit(sta);
277279
278280 return 0;
279281 }
280282
283+int ieee80211_set_tx_key(struct ieee80211_key *key)
284+{
285+ return _ieee80211_set_tx_key(key, false);
286+}
287+
281288 static void ieee80211_pairwise_rekey(struct ieee80211_key *old,
282289 struct ieee80211_key *new)
283290 {
@@ -441,11 +448,8 @@ static int ieee80211_key_replace(struct ieee80211_sub_if_data *sdata, · 157 unmodified lines
441448 if (pairwise) {
442449 rcu_assign_pointer(sta->ptk[idx], new);
443450 if (new &&
444− !(new->conf.flags & IEEE80211_KEY_FLAG_NO_AUTO_TX)) {
445− sta->ptk_idx = idx;
446− clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
447− ieee80211_check_fast_xmit(sta);
448− }
451+ !(new->conf.flags & IEEE80211_KEY_FLAG_NO_AUTO_TX))
452+ _ieee80211_set_tx_key(new, true);
449453 } else {
450454 rcu_assign_pointer(sta->gtk[idx], new);
451455 }
net/mac80211/mesh_hwmp.c+2−1
@@ -1152,7 +1152,8 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata, · 1151 unmodified lines
11521152 }
11531153 }
11541154
1155− if (!(mpath->flags & MESH_PATH_RESOLVING))
1155+ if (!(mpath->flags & MESH_PATH_RESOLVING) &&
1156+ mesh_path_sel_is_hwmp(sdata))
11561157 mesh_queue_preq(mpath, PREQ_Q_F_START);
11571158
11581159 if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)
net/mac80211/sta_info.c+6−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
44 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
55 * Copyright 2013-2014 Intel Mobile Communications GmbH
66 * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
7− * Copyright (C) 2018-2019 Intel Corporation
7+ * Copyright (C) 2018-2020 Intel Corporation
88 */
99
1010 #include <linux/module.h>
@@ -1049,6 +1049,11 @@ static void __sta_info_destroy_part2(struct sta_info *sta) · 1038 unmodified lines
10491049 might_sleep();
10501050 lockdep_assert_held(&local->sta_mtx);
10511051
1052+ while (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
1053+ ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
1054+ WARN_ON_ONCE(ret);
1055+ }
1056+
10521057 /* now keys can no longer be reached */
10531058 ieee80211_free_sta_keys(local, sta);
10541059
net/mac80211/sta_info.h+1−0
@@ -98,6 +98,7 @@ enum ieee80211_sta_info_flags { · 97 unmodified lines
9898 WLAN_STA_MPSP_OWNER,
9999 WLAN_STA_MPSP_RECIPIENT,
100100 WLAN_STA_PS_DELIVER,
101+ WLAN_STA_USES_ENCRYPTION,
101102
102103 NUM_WLAN_STA_FLAGS,
103104 };
net/mac80211/tx.c+33−6
@@ -5,7 +5,7 @@ · 4 unmodified lines
55 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
66 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
77 * Copyright 2013-2014 Intel Mobile Communications GmbH
8− * Copyright (C) 2018 Intel Corporation
8+ * Copyright (C) 2018, 2020 Intel Corporation
99 *
1010 * Transmit and frame generation functions.
1111 */
@@ -590,10 +590,13 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx) · 578 unmodified lines
590590 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
591591 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
592592
593− if (unlikely(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT))
593+ if (unlikely(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT)) {
594594 tx->key = NULL;
595− else if (tx->sta &&
596− (key = rcu_dereference(tx->sta->ptk[tx->sta->ptk_idx])))
595+ return TX_CONTINUE;
596+ }
597+
598+ if (tx->sta &&
599+ (key = rcu_dereference(tx->sta->ptk[tx->sta->ptk_idx])))
597600 tx->key = key;
598601 else if (ieee80211_is_group_privacy_action(tx->skb) &&
599602 (key = rcu_dereference(tx->sdata->default_multicast_key)))
@@ -654,6 +657,9 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx) · 54 unmodified lines
654657 if (!skip_hw && tx->key &&
655658 tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
656659 info->control.hw_key = &tx->key->conf;
660+ } else if (!ieee80211_is_mgmt(hdr->frame_control) && tx->sta &&
661+ test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) {
662+ return TX_DROP;
657663 }
658664
659665 return TX_CONTINUE;
@@ -3598,8 +3604,25 @@ begin: · 2938 unmodified lines
35983604 tx.skb = skb;
35993605 tx.sdata = vif_to_sdata(info->control.vif);
36003606
3601− if (txq->sta)
3607+ if (txq->sta) {
36023608 tx.sta = container_of(txq->sta, struct sta_info, sta);
3609+ /*
3610+ * Drop unicast frames to unauthorised stations unless they are
3611+ * EAPOL frames from the local station.
3612+ */
3613+ if (unlikely(!ieee80211_vif_is_mesh(&tx.sdata->vif) &&
3614+ tx.sdata->vif.type != NL80211_IFTYPE_OCB &&
3615+ !is_multicast_ether_addr(hdr->addr1) &&
3616+ !test_sta_flag(tx.sta, WLAN_STA_AUTHORIZED) &&
3617+ (!(info->control.flags &
3618+ IEEE80211_TX_CTRL_PORT_CTRL_PROTO) ||
3619+ !ether_addr_equal(tx.sdata->vif.addr,
3620+ hdr->addr2)))) {
3621+ I802_DEBUG_INC(local->tx_handlers_drop_unauth_port);
3622+ ieee80211_free_txskb(&local->hw, skb);
3623+ goto begin;
3624+ }
3625+ }
36033626
36043627 /*
36053628 * The key can be removed while the packet was queued, so need to call
@@ -5126,6 +5149,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, · 1520 unmodified lines
51265149 struct ieee80211_local *local = sdata->local;
51275150 struct sk_buff *skb;
51285151 struct ethhdr *ehdr;
5152+ u32 ctrl_flags = 0;
51295153 u32 flags;
51305154
51315155 /* Only accept CONTROL_PORT_PROTOCOL configured in CONNECT/ASSOCIATE
@@ -5135,6 +5159,9 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, · 3 unmodified lines
51355159 proto != cpu_to_be16(ETH_P_PREAUTH))
51365160 return -EINVAL;
51375161
5162+ if (proto == sdata->control_port_protocol)
5163+ ctrl_flags |= IEEE80211_TX_CTRL_PORT_CTRL_PROTO;
5164+
51385165 if (unencrypted)
51395166 flags = IEEE80211_TX_INTFL_DONT_ENCRYPT;
51405167 else
@@ -5160,7 +5187,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, · 19 unmodified lines
51605187 skb_reset_mac_header(skb);
51615188
51625189 local_bh_disable();
5163− __ieee80211_subif_start_xmit(skb, skb->dev, flags, 0);
5190+ __ieee80211_subif_start_xmit(skb, skb->dev, flags, ctrl_flags);
51645191 local_bh_enable();
51655192
51665193 return 0;
net/mptcp/options.c+17−2
@@ -334,6 +334,8 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 333 unmodified lines
334334 struct mptcp_sock *msk;
335335 unsigned int ack_size;
336336 bool ret = false;
337+ bool can_ack;
338+ u64 ack_seq;
337339 u8 tcp_fin;
338340
339341 if (skb) {
@@ -360,9 +362,22 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 20 unmodified lines
360362 ret = true;
361363 }
362364
365+ /* passive sockets msk will set the 'can_ack' after accept(), even
366+ * if the first subflow may have the already the remote key handy
367+ */
368+ can_ack = true;
363369 opts->ext_copy.use_ack = 0;
364370 msk = mptcp_sk(subflow->conn);
365− if (!msk || !READ_ONCE(msk->can_ack)) {
371+ if (likely(msk && READ_ONCE(msk->can_ack))) {
372+ ack_seq = msk->ack_seq;
373+ } else if (subflow->can_ack) {
374+ mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq);
375+ ack_seq++;
376+ } else {
377+ can_ack = false;
378+ }
379+
380+ if (unlikely(!can_ack)) {
366381 *size = ALIGN(dss_size, 4);
367382 return ret;
368383 }
@@ -375,7 +390,7 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 6 unmodified lines
375390
376391 dss_size += ack_size;
377392
378− opts->ext_copy.data_ack = msk->ack_seq;
393+ opts->ext_copy.data_ack = ack_seq;
379394 opts->ext_copy.ack64 = 1;
380395 opts->ext_copy.use_ack = 1;
381396
net/netfilter/nf_conntrack_standalone.c+1−1
@@ -411,7 +411,7 @@ static void *ct_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 410 unmodified lines
411411 *pos = cpu + 1;
412412 return per_cpu_ptr(net->ct.stat, cpu);
413413 }
414−
414+ (*pos)++;
415415 return NULL;
416416 }
417417
net/netfilter/nf_flow_table_core.c+3−0
@@ -554,6 +554,9 @@ void nf_flow_table_free(struct nf_flowtable *flow_table) · 553 unmodified lines
554554 nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL);
555555 nf_flow_table_iterate(flow_table, nf_flow_offload_gc_step, flow_table);
556556 nf_flow_table_offload_flush(flow_table);
557+ if (nf_flowtable_hw_offload(flow_table))
558+ nf_flow_table_iterate(flow_table, nf_flow_offload_gc_step,
559+ flow_table);
557560 rhashtable_destroy(&flow_table->rhashtable);
558561 }
559562 EXPORT_SYMBOL_GPL(nf_flow_table_free);
net/netfilter/nf_flow_table_ip.c+10−4
@@ -146,11 +146,13 @@ static int nf_flow_nat_ip(const struct flow_offload *flow, struct sk_buff *skb, · 145 unmodified lines
146146
147147 if (test_bit(NF_FLOW_SNAT, &flow->flags) &&
148148 (nf_flow_snat_port(flow, skb, thoff, iph->protocol, dir) < 0 ||
149− nf_flow_snat_ip(flow, skb, iph, thoff, dir) < 0))
149+ nf_flow_snat_ip(flow, skb, ip_hdr(skb), thoff, dir) < 0))
150150 return -1;
151+
152+ iph = ip_hdr(skb);
151153 if (test_bit(NF_FLOW_DNAT, &flow->flags) &&
152154 (nf_flow_dnat_port(flow, skb, thoff, iph->protocol, dir) < 0 ||
153− nf_flow_dnat_ip(flow, skb, iph, thoff, dir) < 0))
155+ nf_flow_dnat_ip(flow, skb, ip_hdr(skb), thoff, dir) < 0))
154156 return -1;
155157
156158 return 0;
@@ -189,6 +191,7 @@ static int nf_flow_tuple_ip(struct sk_buff *skb, const struct net_device *dev, · 32 unmodified lines
189191 if (!pskb_may_pull(skb, thoff + sizeof(*ports)))
190192 return -1;
191193
194+ iph = ip_hdr(skb);
192195 ports = (struct flow_ports *)(skb_network_header(skb) + thoff);
193196
194197 tuple->src_v4.s_addr = iph->saddr;
@@ -426,11 +429,13 @@ static int nf_flow_nat_ipv6(const struct flow_offload *flow, · 231 unmodified lines
426429
427430 if (test_bit(NF_FLOW_SNAT, &flow->flags) &&
428431 (nf_flow_snat_port(flow, skb, thoff, ip6h->nexthdr, dir) < 0 ||
429− nf_flow_snat_ipv6(flow, skb, ip6h, thoff, dir) < 0))
432+ nf_flow_snat_ipv6(flow, skb, ipv6_hdr(skb), thoff, dir) < 0))
430433 return -1;
434+
435+ ip6h = ipv6_hdr(skb);
431436 if (test_bit(NF_FLOW_DNAT, &flow->flags) &&
432437 (nf_flow_dnat_port(flow, skb, thoff, ip6h->nexthdr, dir) < 0 ||
433− nf_flow_dnat_ipv6(flow, skb, ip6h, thoff, dir) < 0))
438+ nf_flow_dnat_ipv6(flow, skb, ipv6_hdr(skb), thoff, dir) < 0))
434439 return -1;
435440
436441 return 0;
@@ -459,6 +464,7 @@ static int nf_flow_tuple_ipv6(struct sk_buff *skb, const struct net_device *dev, · 22 unmodified lines
459464 if (!pskb_may_pull(skb, thoff + sizeof(*ports)))
460465 return -1;
461466
467+ ip6h = ipv6_hdr(skb);
462468 ports = (struct flow_ports *)(skb_network_header(skb) + thoff);
463469
464470 tuple->src_v6 = ip6h->saddr;
net/netfilter/nf_flow_table_offload.c+1−0
@@ -87,6 +87,7 @@ static int nf_flow_rule_match(struct nf_flow_match *match, · 86 unmodified lines
8787 default:
8888 return -EOPNOTSUPP;
8989 }
90+ mask->control.addr_type = 0xffff;
9091 match->dissector.used_keys |= BIT(key->control.addr_type);
9192 mask->basic.n_proto = 0xffff;
9293
net/netfilter/nf_synproxy_core.c+1−1
@@ -267,7 +267,7 @@ static void *synproxy_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 266 unmodified lines
267267 *pos = cpu + 1;
268268 return per_cpu_ptr(snet->stats, cpu);
269269 }
270−
270+ (*pos)++;
271271 return NULL;
272272 }
273273
net/netfilter/nf_tables_api.c+19−8
@@ -1405,6 +1405,11 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net, · 1404 unmodified lines
14051405 lockdep_commit_lock_is_held(net));
14061406 if (nft_dump_stats(skb, stats))
14071407 goto nla_put_failure;
1408+
1409+ if ((chain->flags & NFT_CHAIN_HW_OFFLOAD) &&
1410+ nla_put_be32(skb, NFTA_CHAIN_FLAGS,
1411+ htonl(NFT_CHAIN_HW_OFFLOAD)))
1412+ goto nla_put_failure;
14081413 }
14091414
14101415 if (nla_put_be32(skb, NFTA_CHAIN_USE, htonl(chain->use)))
@@ -5077,6 +5082,11 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, · 3666 unmodified lines
50775082 err = -EBUSY;
50785083 else if (!(nlmsg_flags & NLM_F_EXCL))
50795084 err = 0;
5085+ } else if (err == -ENOTEMPTY) {
5086+ /* ENOTEMPTY reports overlapping between this element
5087+ * and an existing one.
5088+ */
5089+ err = -EEXIST;
50805090 }
50815091 goto err_element_clash;
50825092 }
@@ -6300,8 +6310,13 @@ static int nf_tables_newflowtable(struct net *net, struct sock *nlsk, · 1217 unmodified lines
63006310 goto err4;
63016311
63026312 err = nft_register_flowtable_net_hooks(ctx.net, table, flowtable);
6303− if (err < 0)
6313+ if (err < 0) {
6314+ list_for_each_entry_safe(hook, next, &flowtable->hook_list, list) {
6315+ list_del_rcu(&hook->list);
6316+ kfree_rcu(hook, rcu);
6317+ }
63046318 goto err4;
6319+ }
63056320
63066321 err = nft_trans_flowtable_add(&ctx, NFT_MSG_NEWFLOWTABLE, flowtable);
63076322 if (err < 0)
@@ -7378,13 +7393,8 @@ static void nf_tables_module_autoload(struct net *net) · 1070 unmodified lines
73787393 list_splice_init(&net->nft.module_list, &module_list);
73797394 mutex_unlock(&net->nft.commit_mutex);
73807395 list_for_each_entry_safe(req, next, &module_list, list) {
7381− if (req->done) {
7382− list_del(&req->list);
7383− kfree(req);
7384− } else {
7385− request_module("%s", req->module);
7386− req->done = true;
7387− }
7396+ request_module("%s", req->module);
7397+ req->done = true;
73887398 }
73897399 mutex_lock(&net->nft.commit_mutex);
73907400 list_splice(&module_list, &net->nft.module_list);
@@ -8167,6 +8177,7 @@ static void __net_exit nf_tables_exit_net(struct net *net) · 776 unmodified lines
81678177 __nft_release_tables(net);
81688178 mutex_unlock(&net->nft.commit_mutex);
81698179 WARN_ON_ONCE(!list_empty(&net->nft.tables));
8180+ WARN_ON_ONCE(!list_empty(&net->nft.module_list));
81708181 }
81718182
81728183 static struct pernet_operations nf_tables_net_ops = {
net/netfilter/nfnetlink_cthelper.c+2−0
@@ -742,6 +742,8 @@ static const struct nla_policy nfnl_cthelper_policy[NFCTH_MAX+1] = { · 741 unmodified lines
742742 [NFCTH_NAME] = { .type = NLA_NUL_STRING,
743743 .len = NF_CT_HELPER_NAME_LEN-1 },
744744 [NFCTH_QUEUE_NUM] = { .type = NLA_U32, },
745+ [NFCTH_PRIV_DATA_LEN] = { .type = NLA_U32, },
746+ [NFCTH_STATUS] = { .type = NLA_U32, },
745747 };
746748
747749 static const struct nfnl_callback nfnl_cthelper_cb[NFNL_MSG_CTHELPER_MAX] = {
net/netfilter/nft_chain_nat.c+1−0
@@ -89,6 +89,7 @@ static const struct nft_chain_type nft_chain_nat_inet = { · 88 unmodified lines
8989 .name = "nat",
9090 .type = NFT_CHAIN_T_NAT,
9191 .family = NFPROTO_INET,
92+ .owner = THIS_MODULE,
9293 .hook_mask = (1 << NF_INET_PRE_ROUTING) |
9394 (1 << NF_INET_LOCAL_IN) |
9495 (1 << NF_INET_LOCAL_OUT) |
net/netfilter/nft_fwd_netdev.c+12−0
@@ -28,6 +28,9 @@ static void nft_fwd_netdev_eval(const struct nft_expr *expr, · 27 unmodified lines
2828 struct nft_fwd_netdev *priv = nft_expr_priv(expr);
2929 int oif = regs->data[priv->sreg_dev];
3030
31+ /* This is used by ifb only. */
32+ skb_set_redirected(pkt->skb, true);
33+
3134 nf_fwd_netdev_egress(pkt, oif);
3235 regs->verdict.code = NF_STOLEN;
3336 }
@@ -190,6 +193,13 @@ nla_put_failure: · 156 unmodified lines
190193 return -1;
191194 }
192195
196+static int nft_fwd_validate(const struct nft_ctx *ctx,
197+ const struct nft_expr *expr,
198+ const struct nft_data **data)
199+{
200+ return nft_chain_validate_hooks(ctx->chain, (1 << NF_NETDEV_INGRESS));
201+}
202+
193203 static struct nft_expr_type nft_fwd_netdev_type;
194204 static const struct nft_expr_ops nft_fwd_neigh_netdev_ops = {
195205 .type = &nft_fwd_netdev_type,
@@ -197,6 +207,7 @@ static const struct nft_expr_ops nft_fwd_neigh_netdev_ops = { · 1 unmodified line
197207 .eval = nft_fwd_neigh_eval,
198208 .init = nft_fwd_neigh_init,
199209 .dump = nft_fwd_neigh_dump,
210+ .validate = nft_fwd_validate,
200211 };
201212
202213 static const struct nft_expr_ops nft_fwd_netdev_ops = {
@@ -205,6 +216,7 @@ static const struct nft_expr_ops nft_fwd_netdev_ops = { · 2 unmodified lines
205216 .eval = nft_fwd_netdev_eval,
206217 .init = nft_fwd_netdev_init,
207218 .dump = nft_fwd_netdev_dump,
219+ .validate = nft_fwd_validate,
208220 .offload = nft_fwd_netdev_offload,
209221 };
210222
net/netfilter/nft_payload.c+1−0
@@ -129,6 +129,7 @@ static const struct nla_policy nft_payload_policy[NFTA_PAYLOAD_MAX + 1] = { · 128 unmodified lines
129129 [NFTA_PAYLOAD_LEN] = { .type = NLA_U32 },
130130 [NFTA_PAYLOAD_CSUM_TYPE] = { .type = NLA_U32 },
131131 [NFTA_PAYLOAD_CSUM_OFFSET] = { .type = NLA_U32 },
132+ [NFTA_PAYLOAD_CSUM_FLAGS] = { .type = NLA_U32 },
132133 };
133134
134135 static int nft_payload_init(const struct nft_ctx *ctx,
net/netfilter/nft_set_pipapo.c+27−7
@@ -1098,21 +1098,41 @@ static int nft_pipapo_insert(const struct net *net, const struct nft_set *set, · 1097 unmodified lines
10981098 struct nft_pipapo_field *f;
10991099 int i, bsize_max, err = 0;
11001100
1101+ if (nft_set_ext_exists(ext, NFT_SET_EXT_KEY_END))
1102+ end = (const u8 *)nft_set_ext_key_end(ext)->data;
1103+ else
1104+ end = start;
1105+
11011106 dup = pipapo_get(net, set, start, genmask);
1102− if (PTR_ERR(dup) == -ENOENT) {
1103− if (nft_set_ext_exists(ext, NFT_SET_EXT_KEY_END)) {
1104− end = (const u8 *)nft_set_ext_key_end(ext)->data;
1105− dup = pipapo_get(net, set, end, nft_genmask_next(net));
1106− } else {
1107− end = start;
1107+ if (!IS_ERR(dup)) {
1108+ /* Check if we already have the same exact entry */
1109+ const struct nft_data *dup_key, *dup_end;
1110+
1111+ dup_key = nft_set_ext_key(&dup->ext);
1112+ if (nft_set_ext_exists(&dup->ext, NFT_SET_EXT_KEY_END))
1113+ dup_end = nft_set_ext_key_end(&dup->ext);
1114+ else
1115+ dup_end = dup_key;
1116+
1117+ if (!memcmp(start, dup_key->data, sizeof(*dup_key->data)) &&
1118+ !memcmp(end, dup_end->data, sizeof(*dup_end->data))) {
1119+ *ext2 = &dup->ext;
1120+ return -EEXIST;
11081121 }
1122+
1123+ return -ENOTEMPTY;
1124+ }
1125+
1126+ if (PTR_ERR(dup) == -ENOENT) {
1127+ /* Look for partially overlapping entries */
1128+ dup = pipapo_get(net, set, end, nft_genmask_next(net));
11091129 }
11101130
11111131 if (PTR_ERR(dup) != -ENOENT) {
11121132 if (IS_ERR(dup))
11131133 return PTR_ERR(dup);
11141134 *ext2 = &dup->ext;
1115− return -EEXIST;
1135+ return -ENOTEMPTY;
11161136 }
11171137
11181138 /* Validate */
net/netfilter/nft_set_rbtree.c+78−9
@@ -33,6 +33,11 @@ static bool nft_rbtree_interval_end(const struct nft_rbtree_elem *rbe) · 32 unmodified lines
3333 (*nft_set_ext_flags(&rbe->ext) & NFT_SET_ELEM_INTERVAL_END);
3434 }
3535
36+static bool nft_rbtree_interval_start(const struct nft_rbtree_elem *rbe)
37+{
38+ return !nft_rbtree_interval_end(rbe);
39+}
40+
3641 static bool nft_rbtree_equal(const struct nft_set *set, const void *this,
3742 const struct nft_rbtree_elem *interval)
3843 {
@@ -64,7 +69,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set · 25 unmodified lines
6469 if (interval &&
6570 nft_rbtree_equal(set, this, interval) &&
6671 nft_rbtree_interval_end(rbe) &&
67− !nft_rbtree_interval_end(interval))
72+ nft_rbtree_interval_start(interval))
6873 continue;
6974 interval = rbe;
7075 } else if (d > 0)
@@ -89,7 +94,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set · 18 unmodified lines
8994
9095 if (set->flags & NFT_SET_INTERVAL && interval != NULL &&
9196 nft_set_elem_active(&interval->ext, genmask) &&
92− !nft_rbtree_interval_end(interval)) {
97+ nft_rbtree_interval_start(interval)) {
9398 *ext = &interval->ext;
9499 return true;
95100 }
@@ -208,8 +213,43 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, · 112 unmodified lines
208213 u8 genmask = nft_genmask_next(net);
209214 struct nft_rbtree_elem *rbe;
210215 struct rb_node *parent, **p;
216+ bool overlap = false;
211217 int d;
212218
219+ /* Detect overlaps as we descend the tree. Set the flag in these cases:
220+ *
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)
225+ *
226+ * and clear it later on, as we eventually reach the points indicated by
227+ * '?' above, in the cases described below. We'll always meet these
228+ * later, locally, due to tree ordering, and overlaps for the intervals
229+ * that are the closest together are always evaluated last.
230+ *
231+ * b1. |__ _ _! >|__ _ _ (insert start after existing end)
232+ * b2. _ _ __>| !_ _ __| (insert end before existing start)
233+ * b3. !_____>| (insert end after existing start)
234+ *
235+ * Case a4. resolves to b1.:
236+ * - if the inserted start element is the leftmost, because the '0'
237+ * element in the tree serves as end element
238+ * - otherwise, if an existing end is found. Note that end elements are
239+ * always inserted after corresponding start elements.
240+ *
241+ * For a new, rightmost pair of elements, we'll hit cases b1. and b3.,
242+ * in that order.
243+ *
244+ * The flag is also cleared in two special cases:
245+ *
246+ * b4. |__ _ _!|<_ _ _ (insert start right before existing end)
247+ * b5. |__ _ >|!__ _ _ (insert end right after existing start)
248+ *
249+ * which always happen as last step and imply that no further
250+ * overlapping is possible.
251+ */
252+
213253 parent = NULL;
214254 p = &priv->root.rb_node;
215255 while (*p != NULL) {
@@ -218,17 +258,42 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, · 2 unmodified lines
218258 d = memcmp(nft_set_ext_key(&rbe->ext),
219259 nft_set_ext_key(&new->ext),
220260 set->klen);
221− if (d < 0)
261+ if (d < 0) {
222262 p = &parent->rb_left;
223− else if (d > 0)
263+
264+ if (nft_rbtree_interval_start(new)) {
265+ overlap = nft_rbtree_interval_start(rbe) &&
266+ nft_set_elem_active(&rbe->ext,
267+ genmask);
268+ } else {
269+ overlap = nft_rbtree_interval_end(rbe) &&
270+ nft_set_elem_active(&rbe->ext,
271+ genmask);
272+ }
273+ } else if (d > 0) {
224274 p = &parent->rb_right;
225− else {
275+
276+ if (nft_rbtree_interval_end(new)) {
277+ overlap = nft_rbtree_interval_end(rbe) &&
278+ nft_set_elem_active(&rbe->ext,
279+ genmask);
280+ } else if (nft_rbtree_interval_end(rbe) &&
281+ nft_set_elem_active(&rbe->ext, genmask)) {
282+ overlap = true;
283+ }
284+ } else {
226285 if (nft_rbtree_interval_end(rbe) &&
227− !nft_rbtree_interval_end(new)) {
286+ nft_rbtree_interval_start(new)) {
228287 p = &parent->rb_left;
229− } else if (!nft_rbtree_interval_end(rbe) &&
288+
289+ if (nft_set_elem_active(&rbe->ext, genmask))
290+ overlap = false;
291+ } else if (nft_rbtree_interval_start(rbe) &&
230292 nft_rbtree_interval_end(new)) {
231293 p = &parent->rb_right;
294+
295+ if (nft_set_elem_active(&rbe->ext, genmask))
296+ overlap = false;
232297 } else if (nft_set_elem_active(&rbe->ext, genmask)) {
233298 *ext = &rbe->ext;
234299 return -EEXIST;
@@ -237,6 +302,10 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, · 2 unmodified lines
237302 }
238303 }
239304 }
305+
306+ if (overlap)
307+ return -ENOTEMPTY;
308+
240309 rb_link_node_rcu(&new->node, parent, p);
241310 rb_insert_color(&new->node, &priv->root);
242311 return 0;
@@ -317,10 +386,10 @@ static void *nft_rbtree_deactivate(const struct net *net, · 74 unmodified lines
317386 parent = parent->rb_right;
318387 else {
319388 if (nft_rbtree_interval_end(rbe) &&
320− !nft_rbtree_interval_end(this)) {
389+ nft_rbtree_interval_start(this)) {
321390 parent = parent->rb_left;
322391 continue;
323− } else if (!nft_rbtree_interval_end(rbe) &&
392+ } else if (nft_rbtree_interval_start(rbe) &&
324393 nft_rbtree_interval_end(this)) {
325394 parent = parent->rb_right;
326395 continue;
net/netfilter/nft_tunnel.c+2−0
@@ -339,6 +339,8 @@ static const struct nla_policy nft_tunnel_key_policy[NFTA_TUNNEL_KEY_MAX + 1] = · 338 unmodified lines
339339 [NFTA_TUNNEL_KEY_FLAGS] = { .type = NLA_U32, },
340340 [NFTA_TUNNEL_KEY_TOS] = { .type = NLA_U8, },
341341 [NFTA_TUNNEL_KEY_TTL] = { .type = NLA_U8, },
342+ [NFTA_TUNNEL_KEY_SPORT] = { .type = NLA_U16, },
343+ [NFTA_TUNNEL_KEY_DPORT] = { .type = NLA_U16, },
342344 [NFTA_TUNNEL_KEY_OPTS] = { .type = NLA_NESTED, },
343345 };
344346
net/netfilter/x_tables.c+3−3
@@ -1551,6 +1551,9 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, · 1550 unmodified lines
15511551 uint8_t nfproto = (unsigned long)PDE_DATA(file_inode(seq->file));
15521552 struct nf_mttg_trav *trav = seq->private;
15531553
1554+ if (ppos != NULL)
1555+ ++(*ppos);
1556+
15541557 switch (trav->class) {
15551558 case MTTG_TRAV_INIT:
15561559 trav->class = MTTG_TRAV_NFP_UNSPEC;
@@ -1576,9 +1579,6 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, · 19 unmodified lines
15761579 default:
15771580 return NULL;
15781581 }
1579−
1580− if (ppos != NULL)
1581− ++*ppos;
15821582 return trav;
15831583 }
15841584
net/netfilter/xt_recent.c+1−1
@@ -492,12 +492,12 @@ static void *recent_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 491 unmodified lines
492492 const struct recent_entry *e = v;
493493 const struct list_head *head = e->list.next;
494494
495+ (*pos)++;
495496 while (head == &t->iphash[st->bucket]) {
496497 if (++st->bucket >= ip_list_hash_size)
497498 return NULL;
498499 head = t->iphash[st->bucket].next;
499500 }
500− (*pos)++;
501501 return list_entry(head, struct recent_entry, list);
502502 }
503503
net/netlink/af_netlink.c+17−26
@@ -2392,19 +2392,14 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, · 2391 unmodified lines
23922392 if (nlk_has_extack && extack && extack->_msg)
23932393 tlvlen += nla_total_size(strlen(extack->_msg) + 1);
23942394
2395− if (err) {
2396− if (!(nlk->flags & NETLINK_F_CAP_ACK))
2397− payload += nlmsg_len(nlh);
2398− else
2399− flags |= NLM_F_CAPPED;
2400− if (nlk_has_extack && extack && extack->bad_attr)
2401− tlvlen += nla_total_size(sizeof(u32));
2402− } else {
2395+ if (err && !(nlk->flags & NETLINK_F_CAP_ACK))
2396+ payload += nlmsg_len(nlh);
2397+ else
24032398 flags |= NLM_F_CAPPED;
2404−
2405− if (nlk_has_extack && extack && extack->cookie_len)
2406− tlvlen += nla_total_size(extack->cookie_len);
2407− }
2399+ if (err && nlk_has_extack && extack && extack->bad_attr)
2400+ tlvlen += nla_total_size(sizeof(u32));
2401+ if (nlk_has_extack && extack && extack->cookie_len)
2402+ tlvlen += nla_total_size(extack->cookie_len);
24082403
24092404 if (tlvlen)
24102405 flags |= NLM_F_ACK_TLVS;
@@ -2427,20 +2422,16 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, · 16 unmodified lines
24272422 WARN_ON(nla_put_string(skb, NLMSGERR_ATTR_MSG,
24282423 extack->_msg));
24292424 }
2430− if (err) {
2431− if (extack->bad_attr &&
2432− !WARN_ON((u8 *)extack->bad_attr < in_skb->data ||
2433− (u8 *)extack->bad_attr >= in_skb->data +
2434− in_skb->len))
2435− WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS,
2436− (u8 *)extack->bad_attr -
2437− in_skb->data));
2438− } else {
2439− if (extack->cookie_len)
2440− WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE,
2441− extack->cookie_len,
2442− extack->cookie));
2443− }
2425+ if (err && extack->bad_attr &&
2426+ !WARN_ON((u8 *)extack->bad_attr < in_skb->data ||
2427+ (u8 *)extack->bad_attr >= in_skb->data +
2428+ in_skb->len))
2429+ WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS,
2430+ (u8 *)extack->bad_attr -
2431+ (u8 *)nlh));
2432+ if (extack->cookie_len)
2433+ WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE,
2434+ extack->cookie_len, extack->cookie));
24442435 }
24452436
24462437 nlmsg_end(skb, rep);
net/nfc/hci/core.c+16−3
@@ -181,13 +181,20 @@ exit: · 180 unmodified lines
181181 void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
182182 struct sk_buff *skb)
183183 {
184− u8 gate = hdev->pipes[pipe].gate;
185184 u8 status = NFC_HCI_ANY_OK;
186185 struct hci_create_pipe_resp *create_info;
187186 struct hci_delete_pipe_noti *delete_info;
188187 struct hci_all_pipe_cleared_noti *cleared_info;
188+ u8 gate;
189189
190− pr_debug("from gate %x pipe %x cmd %x\n", gate, pipe, cmd);
190+ pr_debug("from pipe %x cmd %x\n", pipe, cmd);
191+
192+ if (pipe >= NFC_HCI_MAX_PIPES) {
193+ status = NFC_HCI_ANY_E_NOK;
194+ goto exit;
195+ }
196+
197+ gate = hdev->pipes[pipe].gate;
191198
192199 switch (cmd) {
193200 case NFC_HCI_ADM_NOTIFY_PIPE_CREATED:
@@ -375,8 +382,14 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event, · 181 unmodified lines
375382 struct sk_buff *skb)
376383 {
377384 int r = 0;
378− u8 gate = hdev->pipes[pipe].gate;
385+ u8 gate;
386+
387+ if (pipe >= NFC_HCI_MAX_PIPES) {
388+ pr_err("Discarded event %x to invalid pipe %x\n", event, pipe);
389+ goto exit;
390+ }
379391
392+ gate = hdev->pipes[pipe].gate;
380393 if (gate == NFC_HCI_INVALID_GATE) {
381394 pr_err("Discarded event %x to unopened pipe %x\n", event, pipe);
382395 goto exit;
net/nfc/netlink.c+4−0
@@ -32,6 +32,7 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { · 31 unmodified lines
3232 [NFC_ATTR_DEVICE_NAME] = { .type = NLA_STRING,
3333 .len = NFC_DEVICE_NAME_MAXSIZE },
3434 [NFC_ATTR_PROTOCOLS] = { .type = NLA_U32 },
35+ [NFC_ATTR_TARGET_INDEX] = { .type = NLA_U32 },
3536 [NFC_ATTR_COMM_MODE] = { .type = NLA_U8 },
3637 [NFC_ATTR_RF_MODE] = { .type = NLA_U8 },
3738 [NFC_ATTR_DEVICE_POWERED] = { .type = NLA_U8 },
@@ -43,7 +44,10 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { · 5 unmodified lines
4344 [NFC_ATTR_LLC_SDP] = { .type = NLA_NESTED },
4445 [NFC_ATTR_FIRMWARE_NAME] = { .type = NLA_STRING,
4546 .len = NFC_FIRMWARE_NAME_MAXSIZE },
47+ [NFC_ATTR_SE_INDEX] = { .type = NLA_U32 },
4648 [NFC_ATTR_SE_APDU] = { .type = NLA_BINARY },
49+ [NFC_ATTR_VENDOR_ID] = { .type = NLA_U32 },
50+ [NFC_ATTR_VENDOR_SUBCMD] = { .type = NLA_U32 },
4751 [NFC_ATTR_VENDOR_DATA] = { .type = NLA_BINARY },
4852
4953 };
net/openvswitch/datapath.c+1−0
@@ -645,6 +645,7 @@ static const struct nla_policy packet_policy[OVS_PACKET_ATTR_MAX + 1] = { · 644 unmodified lines
645645 [OVS_PACKET_ATTR_ACTIONS] = { .type = NLA_NESTED },
646646 [OVS_PACKET_ATTR_PROBE] = { .type = NLA_FLAG },
647647 [OVS_PACKET_ATTR_MRU] = { .type = NLA_U16 },
648+ [OVS_PACKET_ATTR_HASH] = { .type = NLA_U64 },
648649 };
649650
650651 static const struct genl_ops dp_packet_genl_ops[] = {
net/packet/af_packet.c+28−6
@@ -2173,6 +2173,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 2172 unmodified lines
21732173 struct timespec64 ts;
21742174 __u32 ts_status;
21752175 bool is_drop_n_account = false;
2176+ unsigned int slot_id = 0;
21762177 bool do_vnet = false;
21772178
21782179 /* struct tpacket{2,3}_hdr is aligned to a multiple of TPACKET_ALIGNMENT.
@@ -2274,6 +2275,20 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 95 unmodified lines
22742275 TP_STATUS_KERNEL, (macoff+snaplen));
22752276 if (!h.raw)
22762277 goto drop_n_account;
2278+
2279+ if (po->tp_version <= TPACKET_V2) {
2280+ slot_id = po->rx_ring.head;
2281+ if (test_bit(slot_id, po->rx_ring.rx_owner_map))
2282+ goto drop_n_account;
2283+ __set_bit(slot_id, po->rx_ring.rx_owner_map);
2284+ }
2285+
2286+ if (do_vnet &&
2287+ virtio_net_hdr_from_skb(skb, h.raw + macoff -
2288+ sizeof(struct virtio_net_hdr),
2289+ vio_le(), true, 0))
2290+ goto drop_n_account;
2291+
22772292 if (po->tp_version <= TPACKET_V2) {
22782293 packet_increment_rx_head(po, &po->rx_ring);
22792294 /*
@@ -2286,12 +2301,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 6 unmodified lines
22862301 status |= TP_STATUS_LOSING;
22872302 }
22882303
2289− if (do_vnet &&
2290− virtio_net_hdr_from_skb(skb, h.raw + macoff -
2291− sizeof(struct virtio_net_hdr),
2292− vio_le(), true, 0))
2293− goto drop_n_account;
2294−
22952304 po->stats.stats1.tp_packets++;
22962305 if (copy_skb) {
22972306 status |= TP_STATUS_COPY;
@@ -2379,7 +2388,10 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 81 unmodified lines
23792388 #endif
23802389
23812390 if (po->tp_version <= TPACKET_V2) {
2391+ spin_lock(&sk->sk_receive_queue.lock);
23822392 __packet_set_status(po, h.raw, status);
2393+ __clear_bit(slot_id, po->rx_ring.rx_owner_map);
2394+ spin_unlock(&sk->sk_receive_queue.lock);
23832395 sk->sk_data_ready(sk);
23842396 } else {
23852397 prb_clear_blk_fill_status(&po->rx_ring);
@@ -4276,6 +4288,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, · 1890 unmodified lines
42764288 {
42774289 struct pgv *pg_vec = NULL;
42784290 struct packet_sock *po = pkt_sk(sk);
4291+ unsigned long *rx_owner_map = NULL;
42794292 int was_running, order = 0;
42804293 struct packet_ring_buffer *rb;
42814294 struct sk_buff_head *rb_queue;
@@ -4361,6 +4374,12 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, · 79 unmodified lines
43614374 }
43624375 break;
43634376 default:
4377+ if (!tx_ring) {
4378+ rx_owner_map = bitmap_alloc(req->tp_frame_nr,
4379+ GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO);
4380+ if (!rx_owner_map)
4381+ goto out_free_pg_vec;
4382+ }
43644383 break;
43654384 }
43664385 }
@@ -4390,6 +4409,8 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, · 23 unmodified lines
43904409 err = 0;
43914410 spin_lock_bh(&rb_queue->lock);
43924411 swap(rb->pg_vec, pg_vec);
4412+ if (po->tp_version <= TPACKET_V2)
4413+ swap(rb->rx_owner_map, rx_owner_map);
43934414 rb->frame_max = (req->tp_frame_nr - 1);
43944415 rb->head = 0;
43954416 rb->frame_size = req->tp_frame_size;
@@ -4421,6 +4442,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, · 25 unmodified lines
44214442 }
44224443
44234444 out_free_pg_vec:
4445+ bitmap_free(rx_owner_map);
44244446 if (pg_vec)
44254447 free_pg_vec(pg_vec, order, req->tp_block_nr);
44264448 out:
net/packet/internal.h+4−1
@@ -70,7 +70,10 @@ struct packet_ring_buffer { · 69 unmodified lines
7070
7171 unsigned int __percpu *pending_refcnt;
7272
73− struct tpacket_kbdq_core prb_bdqc;
73+ union {
74+ unsigned long *rx_owner_map;
75+ struct tpacket_kbdq_core prb_bdqc;
76+ };
7477 };
7578
7679 extern struct mutex fanout_mutex;
net/rxrpc/af_rxrpc.c+5−32
@@ -285,7 +285,7 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, · 284 unmodified lines
285285 gfp_t gfp,
286286 rxrpc_notify_rx_t notify_rx,
287287 bool upgrade,
288− bool intr,
288+ enum rxrpc_interruptibility interruptibility,
289289 unsigned int debug_id)
290290 {
291291 struct rxrpc_conn_parameters cp;
@@ -310,7 +310,7 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, · 18 unmodified lines
310310 memset(&p, 0, sizeof(p));
311311 p.user_call_ID = user_call_ID;
312312 p.tx_total_len = tx_total_len;
313− p.intr = intr;
313+ p.interruptibility = interruptibility;
314314
315315 memset(&cp, 0, sizeof(cp));
316316 cp.local = rx->local;
@@ -371,44 +371,17 @@ EXPORT_SYMBOL(rxrpc_kernel_end_call); · 54 unmodified lines
371371 * rxrpc_kernel_check_life - Check to see whether a call is still alive
372372 * @sock: The socket the call is on
373373 * @call: The call to check
374− * @_life: Where to store the life value
375374 *
376− * Allow a kernel service to find out whether a call is still alive - ie. we're
377− * getting ACKs from the server. Passes back in *_life a number representing
378− * the life state which can be compared to that returned by a previous call and
379− * return true if the call is still alive.
380− *
381− * If the life state stalls, rxrpc_kernel_probe_life() should be called and
382− * then 2RTT waited.
375+ * Allow a kernel service to find out whether a call is still alive -
376+ * ie. whether it has completed.
383377 */
384378 bool rxrpc_kernel_check_life(const struct socket *sock,
385− const struct rxrpc_call *call,
386− u32 *_life)
379+ const struct rxrpc_call *call)
387380 {
388− *_life = call->acks_latest;
389381 return call->state != RXRPC_CALL_COMPLETE;
390382 }
391383 EXPORT_SYMBOL(rxrpc_kernel_check_life);
392384
393−/**
394− * rxrpc_kernel_probe_life - Poke the peer to see if it's still alive
395− * @sock: The socket the call is on
396− * @call: The call to check
397− *
398− * In conjunction with rxrpc_kernel_check_life(), allow a kernel service to
399− * find out whether a call is still alive by pinging it. This should cause the
400− * life state to be bumped in about 2*RTT.
401− *
402− * The must be called in TASK_RUNNING state on pain of might_sleep() objecting.
403− */
404−void rxrpc_kernel_probe_life(struct socket *sock, struct rxrpc_call *call)
405−{
406− rxrpc_propose_ACK(call, RXRPC_ACK_PING, 0, true, false,
407− rxrpc_propose_ack_ping_for_check_life);
408− rxrpc_send_ack_packet(call, true, NULL);
409−}
410−EXPORT_SYMBOL(rxrpc_kernel_probe_life);
411−
412385 /**
413386 * rxrpc_kernel_get_epoch - Retrieve the epoch value from a call.
414387 * @sock: The socket the call is on
net/rxrpc/ar-internal.h+2−3
@@ -489,7 +489,6 @@ enum rxrpc_call_flag { · 488 unmodified lines
489489 RXRPC_CALL_BEGAN_RX_TIMER, /* We began the expect_rx_by timer */
490490 RXRPC_CALL_RX_HEARD, /* The peer responded at least once to this call */
491491 RXRPC_CALL_RX_UNDERRUN, /* Got data underrun */
492− RXRPC_CALL_IS_INTR, /* The call is interruptible */
493492 RXRPC_CALL_DISCONNECTED, /* The call has been disconnected */
494493 };
495494
@@ -598,6 +597,7 @@ struct rxrpc_call { · 102 unmodified lines
598597 atomic_t usage;
599598 u16 service_id; /* service ID */
600599 u8 security_ix; /* Security type */
600+ enum rxrpc_interruptibility interruptibility; /* At what point call may be interrupted */
601601 u32 call_id; /* call ID on connection */
602602 u32 cid; /* connection ID plus channel index */
603603 int debug_id; /* debug ID for printks */
@@ -675,7 +675,6 @@ struct rxrpc_call { · 71 unmodified lines
675675
676676 /* transmission-phase ACK management */
677677 ktime_t acks_latest_ts; /* Timestamp of latest ACK received */
678− rxrpc_serial_t acks_latest; /* serial number of latest ACK received */
679678 rxrpc_seq_t acks_lowest_nak; /* Lowest NACK in the buffer (or ==tx_hard_ack) */
680679 rxrpc_seq_t acks_lost_top; /* tx_top at the time lost-ack ping sent */
681680 rxrpc_serial_t acks_lost_ping; /* Serial number of probe ACK */
@@ -721,7 +720,7 @@ struct rxrpc_call_params { · 39 unmodified lines
721720 u32 normal; /* Max time since last call packet (msec) */
722721 } timeouts;
723722 u8 nr_timeouts; /* Number of timeouts specified */
724− bool intr; /* The call is interruptible */
723+ enum rxrpc_interruptibility interruptibility; /* How is interruptible is the call? */
725724 };
726725
727726 struct rxrpc_send_params {
net/rxrpc/call_object.c+1−2
@@ -237,8 +237,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx, · 236 unmodified lines
237237 return call;
238238 }
239239
240− if (p->intr)
241− __set_bit(RXRPC_CALL_IS_INTR, &call->flags);
240+ call->interruptibility = p->interruptibility;
242241 call->tx_total_len = p->tx_total_len;
243242 trace_rxrpc_call(call->debug_id, rxrpc_call_new_client,
244243 atomic_read(&call->usage),
net/rxrpc/conn_client.c+10−3
@@ -655,13 +655,20 @@ static int rxrpc_wait_for_channel(struct rxrpc_call *call, gfp_t gfp) · 654 unmodified lines
655655
656656 add_wait_queue_exclusive(&call->waitq, &myself);
657657 for (;;) {
658− if (test_bit(RXRPC_CALL_IS_INTR, &call->flags))
658+ switch (call->interruptibility) {
659+ case RXRPC_INTERRUPTIBLE:
660+ case RXRPC_PREINTERRUPTIBLE:
659661 set_current_state(TASK_INTERRUPTIBLE);
660− else
662+ break;
663+ case RXRPC_UNINTERRUPTIBLE:
664+ default:
661665 set_current_state(TASK_UNINTERRUPTIBLE);
666+ break;
667+ }
662668 if (call->call_id)
663669 break;
664− if (test_bit(RXRPC_CALL_IS_INTR, &call->flags) &&
670+ if ((call->interruptibility == RXRPC_INTERRUPTIBLE ||
671+ call->interruptibility == RXRPC_PREINTERRUPTIBLE) &&
665672 signal_pending(current)) {
666673 ret = -ERESTARTSYS;
667674 break;
net/rxrpc/input.c+0−1
@@ -882,7 +882,6 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb) · 881 unmodified lines
882882 before(prev_pkt, call->ackr_prev_seq))
883883 goto out;
884884 call->acks_latest_ts = skb->tstamp;
885− call->acks_latest = sp->hdr.serial;
886885
887886 call->ackr_first_seq = first_soft_ack;
888887 call->ackr_prev_seq = prev_pkt;
net/rxrpc/sendmsg.c+56−19
@@ -17,6 +17,21 @@ · 16 unmodified lines
1717 #include <net/af_rxrpc.h>
1818 #include "ar-internal.h"
1919
20+/*
21+ * Return true if there's sufficient Tx queue space.
22+ */
23+static bool rxrpc_check_tx_space(struct rxrpc_call *call, rxrpc_seq_t *_tx_win)
24+{
25+ unsigned int win_size =
26+ min_t(unsigned int, call->tx_winsize,
27+ call->cong_cwnd + call->cong_extra);
28+ rxrpc_seq_t tx_win = READ_ONCE(call->tx_hard_ack);
29+
30+ if (_tx_win)
31+ *_tx_win = tx_win;
32+ return call->tx_top - tx_win < win_size;
33+}
34+
2035 /*
2136 * Wait for space to appear in the Tx queue or a signal to occur.
2237 */
@@ -26,9 +41,7 @@ static int rxrpc_wait_for_tx_window_intr(struct rxrpc_sock *rx, · 3 unmodified lines
2641 {
2742 for (;;) {
2843 set_current_state(TASK_INTERRUPTIBLE);
29− if (call->tx_top - call->tx_hard_ack <
30− min_t(unsigned int, call->tx_winsize,
31− call->cong_cwnd + call->cong_extra))
44+ if (rxrpc_check_tx_space(call, NULL))
3245 return 0;
3346
3447 if (call->state >= RXRPC_CALL_COMPLETE)
@@ -49,7 +62,7 @@ static int rxrpc_wait_for_tx_window_intr(struct rxrpc_sock *rx, · 14 unmodified lines
4962 * Wait for space to appear in the Tx queue uninterruptibly, but with
5063 * a timeout of 2*RTT if no progress was made and a signal occurred.
5164 */
52−static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx,
65+static int rxrpc_wait_for_tx_window_waitall(struct rxrpc_sock *rx,
5366 struct rxrpc_call *call)
5467 {
5568 rxrpc_seq_t tx_start, tx_win;
@@ -58,8 +71,8 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, · 2 unmodified lines
5871
5972 rtt = READ_ONCE(call->peer->rtt);
6073 rtt2 = nsecs_to_jiffies64(rtt) * 2;
61− if (rtt2 < 1)
62− rtt2 = 1;
74+ if (rtt2 < 2)
75+ rtt2 = 2;
6376
6477 timeout = rtt2;
6578 tx_start = READ_ONCE(call->tx_hard_ack);
@@ -68,16 +81,13 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, · 2 unmodified lines
6881 set_current_state(TASK_UNINTERRUPTIBLE);
6982
7083 tx_win = READ_ONCE(call->tx_hard_ack);
71− if (call->tx_top - tx_win <
72− min_t(unsigned int, call->tx_winsize,
73− call->cong_cwnd + call->cong_extra))
84+ if (rxrpc_check_tx_space(call, &tx_win))
7485 return 0;
7586
7687 if (call->state >= RXRPC_CALL_COMPLETE)
7788 return call->error;
7889
79− if (test_bit(RXRPC_CALL_IS_INTR, &call->flags) &&
80− timeout == 0 &&
90+ if (timeout == 0 &&
8191 tx_win == tx_start && signal_pending(current))
8292 return -EINTR;
8393
@@ -91,6 +101,26 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, · 7 unmodified lines
91101 }
92102 }
93103
104+/*
105+ * Wait for space to appear in the Tx queue uninterruptibly.
106+ */
107+static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx,
108+ struct rxrpc_call *call,
109+ long *timeo)
110+{
111+ for (;;) {
112+ set_current_state(TASK_UNINTERRUPTIBLE);
113+ if (rxrpc_check_tx_space(call, NULL))
114+ return 0;
115+
116+ if (call->state >= RXRPC_CALL_COMPLETE)
117+ return call->error;
118+
119+ trace_rxrpc_transmit(call, rxrpc_transmit_wait);
120+ *timeo = schedule_timeout(*timeo);
121+ }
122+}
123+
94124 /*
95125 * wait for space to appear in the transmit/ACK window
96126 * - caller holds the socket locked
@@ -108,10 +138,19 @@ static int rxrpc_wait_for_tx_window(struct rxrpc_sock *rx, · 11 unmodified lines
108138
109139 add_wait_queue(&call->waitq, &myself);
110140
111− if (waitall)
112− ret = rxrpc_wait_for_tx_window_nonintr(rx, call);
113− else
114− ret = rxrpc_wait_for_tx_window_intr(rx, call, timeo);
141+ switch (call->interruptibility) {
142+ case RXRPC_INTERRUPTIBLE:
143+ if (waitall)
144+ ret = rxrpc_wait_for_tx_window_waitall(rx, call);
145+ else
146+ ret = rxrpc_wait_for_tx_window_intr(rx, call, timeo);
147+ break;
148+ case RXRPC_PREINTERRUPTIBLE:
149+ case RXRPC_UNINTERRUPTIBLE:
150+ default:
151+ ret = rxrpc_wait_for_tx_window_nonintr(rx, call, timeo);
152+ break;
153+ }
115154
116155 remove_wait_queue(&call->waitq, &myself);
117156 set_current_state(TASK_RUNNING);
@@ -302,9 +341,7 @@ static int rxrpc_send_data(struct rxrpc_sock *rx, · 184 unmodified lines
302341
303342 _debug("alloc");
304343
305− if (call->tx_top - call->tx_hard_ack >=
306− min_t(unsigned int, call->tx_winsize,
307− call->cong_cwnd + call->cong_extra)) {
344+ if (!rxrpc_check_tx_space(call, NULL)) {
308345 ret = -EAGAIN;
309346 if (msg->msg_flags & MSG_DONTWAIT)
310347 goto maybe_error;
@@ -619,7 +656,7 @@ int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len) · 308 unmodified lines
619656 .call.tx_total_len = -1,
620657 .call.user_call_ID = 0,
621658 .call.nr_timeouts = 0,
622− .call.intr = true,
659+ .call.interruptibility = RXRPC_INTERRUPTIBLE,
623660 .abort_code = 0,
624661 .command = RXRPC_CMD_SEND_DATA,
625662 .exclusive = false,
net/sched/act_ct.c+1−1
@@ -739,7 +739,7 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla, · 738 unmodified lines
739739 if (goto_ch)
740740 tcf_chain_put_by_act(goto_ch);
741741 if (params)
742− kfree_rcu(params, rcu);
742+ call_rcu(&params->rcu, tcf_ct_params_free);
743743 if (res == ACT_P_CREATED)
744744 tcf_idr_insert(tn, *a);
745745
net/sched/act_mirred.c+2−4
@@ -284,10 +284,8 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, · 283 unmodified lines
284284
285285 /* mirror is always swallowed */
286286 if (is_redirect) {
287− skb2->tc_redirected = 1;
288− skb2->tc_from_ingress = skb2->tc_at_ingress;
289− if (skb2->tc_from_ingress)
290− skb2->tstamp = 0;
287+ skb_set_redirected(skb2, skb2->tc_at_ingress);
288+
291289 /* let's the caller reinsert the packet, if possible */
292290 if (use_reinsert) {
293291 res->ingress = want_ingress;
net/sched/cls_route.c+2−2
@@ -534,8 +534,8 @@ static int route4_change(struct net *net, struct sk_buff *in_skb, · 533 unmodified lines
534534 fp = &b->ht[h];
535535 for (pfp = rtnl_dereference(*fp); pfp;
536536 fp = &pfp->next, pfp = rtnl_dereference(*fp)) {
537− if (pfp == f) {
538− *fp = f->next;
537+ if (pfp == fold) {
538+ rcu_assign_pointer(*fp, fold->next);
539539 break;
540540 }
541541 }
net/sched/cls_tcindex.c+3−0
@@ -261,8 +261,10 @@ static void tcindex_partial_destroy_work(struct work_struct *work) · 260 unmodified lines
261261 struct tcindex_data,
262262 rwork);
263263
264+ rtnl_lock();
264265 kfree(p->perfect);
265266 kfree(p);
267+ rtnl_unlock();
266268 }
267269
268270 static void tcindex_free_perfect_hash(struct tcindex_data *cp)
@@ -357,6 +359,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, · 88 unmodified lines
357359
358360 if (tcindex_alloc_perfect_hash(net, cp) < 0)
359361 goto errout;
362+ cp->alloc_hash = cp->hash;
360363 for (i = 0; i < min(cp->hash, p->hash); i++)
361364 cp->perfect[i].res = p->perfect[i].res;
362365 balloc = 1;
net/sched/sch_cbs.c+11−1
@@ -181,6 +181,11 @@ static struct sk_buff *cbs_dequeue_soft(struct Qdisc *sch) · 180 unmodified lines
181181 s64 credits;
182182 int len;
183183
184+ /* The previous packet is still being sent */
185+ if (now < q->last) {
186+ qdisc_watchdog_schedule_ns(&q->watchdog, q->last);
187+ return NULL;
188+ }
184189 if (q->credits < 0) {
185190 credits = timediff_to_credits(now - q->last, q->idleslope);
186191
@@ -212,7 +217,12 @@ static struct sk_buff *cbs_dequeue_soft(struct Qdisc *sch) · 25 unmodified lines
212217 credits += q->credits;
213218
214219 q->credits = max_t(s64, credits, q->locredit);
215− q->last = now;
220+ /* Estimate of the transmission of the last byte of the packet in ns */
221+ if (unlikely(atomic64_read(&q->port_rate) == 0))
222+ q->last = now;
223+ else
224+ q->last = now + div64_s64(len * NSEC_PER_SEC,
225+ atomic64_read(&q->port_rate));
216226
217227 return skb;
218228 }
net/sched/sch_fq.c+1−0
@@ -744,6 +744,7 @@ static const struct nla_policy fq_policy[TCA_FQ_MAX + 1] = { · 743 unmodified lines
744744 [TCA_FQ_FLOW_MAX_RATE] = { .type = NLA_U32 },
745745 [TCA_FQ_BUCKETS_LOG] = { .type = NLA_U32 },
746746 [TCA_FQ_FLOW_REFILL_DELAY] = { .type = NLA_U32 },
747+ [TCA_FQ_ORPHAN_MASK] = { .type = NLA_U32 },
747748 [TCA_FQ_LOW_RATE_THRESHOLD] = { .type = NLA_U32 },
748749 [TCA_FQ_CE_THRESHOLD] = { .type = NLA_U32 },
749750 };
net/sched/sch_taprio.c+10−3
@@ -564,8 +564,10 @@ static struct sk_buff *taprio_dequeue_soft(struct Qdisc *sch) · 563 unmodified lines
564564 prio = skb->priority;
565565 tc = netdev_get_prio_tc_map(dev, prio);
566566
567− if (!(gate_mask & BIT(tc)))
567+ if (!(gate_mask & BIT(tc))) {
568+ skb = NULL;
568569 continue;
570+ }
569571
570572 len = qdisc_pkt_len(skb);
571573 guard = ktime_add_ns(taprio_get_time(q),
@@ -575,13 +577,17 @@ static struct sk_buff *taprio_dequeue_soft(struct Qdisc *sch) · 3 unmodified lines
575577 * guard band ...
576578 */
577579 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&
578− ktime_after(guard, entry->close_time))
580+ ktime_after(guard, entry->close_time)) {
581+ skb = NULL;
579582 continue;
583+ }
580584
581585 /* ... and no budget. */
582586 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&
583− atomic_sub_return(len, &entry->budget) < 0)
587+ atomic_sub_return(len, &entry->budget) < 0) {
588+ skb = NULL;
584589 continue;
590+ }
585591
586592 skb = child->ops->dequeue(child);
587593 if (unlikely(!skb))
@@ -768,6 +774,7 @@ static const struct nla_policy taprio_policy[TCA_TAPRIO_ATTR_MAX + 1] = { · 180 unmodified lines
768774 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME] = { .type = NLA_S64 },
769775 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION] = { .type = NLA_S64 },
770776 [TCA_TAPRIO_ATTR_FLAGS] = { .type = NLA_U32 },
777+ [TCA_TAPRIO_ATTR_TXTIME_DELAY] = { .type = NLA_U32 },
771778 };
772779
773780 static int fill_sched_entry(struct nlattr **tb, struct sched_entry *entry,
net/sctp/diag.c+2−6
@@ -237,15 +237,11 @@ static size_t inet_assoc_attr_size(struct sctp_association *asoc) · 236 unmodified lines
237237 addrcnt++;
238238
239239 return nla_total_size(sizeof(struct sctp_info))
240− + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
241− + nla_total_size(1) /* INET_DIAG_TOS */
242− + nla_total_size(1) /* INET_DIAG_TCLASS */
243− + nla_total_size(4) /* INET_DIAG_MARK */
244− + nla_total_size(4) /* INET_DIAG_CLASS_ID */
245240 + nla_total_size(addrlen * asoc->peer.transport_count)
246241 + nla_total_size(addrlen * addrcnt)
247− + nla_total_size(sizeof(struct inet_diag_meminfo))
248242 + nla_total_size(sizeof(struct inet_diag_msg))
243+ + inet_diag_msg_attrs_size()
244+ + nla_total_size(sizeof(struct inet_diag_meminfo))
249245 + 64;
250246 }
251247
net/smc/smc_ib.c+1−0
@@ -582,6 +582,7 @@ static void smc_ib_remove_dev(struct ib_device *ibdev, void *client_data) · 581 unmodified lines
582582 smc_smcr_terminate_all(smcibdev);
583583 smc_ib_cleanup_per_ibdev(smcibdev);
584584 ib_unregister_event_handler(&smcibdev->event_handler);
585+ cancel_work_sync(&smcibdev->port_event_work);
585586 kfree(smcibdev);
586587 }
587588
net/socket.c+5−3
@@ -1707,7 +1707,8 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) · 1706 unmodified lines
17071707
17081708 int __sys_accept4_file(struct file *file, unsigned file_flags,
17091709 struct sockaddr __user *upeer_sockaddr,
1710− int __user *upeer_addrlen, int flags)
1710+ int __user *upeer_addrlen, int flags,
1711+ unsigned long nofile)
17111712 {
17121713 struct socket *sock, *newsock;
17131714 struct file *newfile;
@@ -1738,7 +1739,7 @@ int __sys_accept4_file(struct file *file, unsigned file_flags, · 24 unmodified lines
17381739 */
17391740 __module_get(newsock->ops->owner);
17401741
1741− newfd = get_unused_fd_flags(flags);
1742+ newfd = __get_unused_fd_flags(flags, nofile);
17421743 if (unlikely(newfd < 0)) {
17431744 err = newfd;
17441745 sock_release(newsock);
@@ -1807,7 +1808,8 @@ int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, · 62 unmodified lines
18071808 f = fdget(fd);
18081809 if (f.file) {
18091810 ret = __sys_accept4_file(f.file, 0, upeer_sockaddr,
1810− upeer_addrlen, flags);
1811+ upeer_addrlen, flags,
1812+ rlimit(RLIMIT_NOFILE));
18111813 if (f.flags)
18121814 fput(f.file);
18131815 }
net/tipc/netlink.c+1−0
@@ -116,6 +116,7 @@ const struct nla_policy tipc_nl_prop_policy[TIPC_NLA_PROP_MAX + 1] = { · 115 unmodified lines
116116 [TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 },
117117 [TIPC_NLA_PROP_TOL] = { .type = NLA_U32 },
118118 [TIPC_NLA_PROP_WIN] = { .type = NLA_U32 },
119+ [TIPC_NLA_PROP_MTU] = { .type = NLA_U32 },
119120 [TIPC_NLA_PROP_BROADCAST] = { .type = NLA_U32 },
120121 [TIPC_NLA_PROP_BROADCAST_RATIO] = { .type = NLA_U32 }
121122 };
net/wireless/nl80211.c+6−1
@@ -470,6 +470,8 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 469 unmodified lines
470470 [NL80211_ATTR_WOWLAN_TRIGGERS] = { .type = NLA_NESTED },
471471 [NL80211_ATTR_STA_PLINK_STATE] =
472472 NLA_POLICY_MAX(NLA_U8, NUM_NL80211_PLINK_STATES - 1),
473+ [NL80211_ATTR_MEASUREMENT_DURATION] = { .type = NLA_U16 },
474+ [NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY] = { .type = NLA_FLAG },
473475 [NL80211_ATTR_MESH_PEER_AID] =
474476 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),
475477 [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 },
@@ -531,6 +533,8 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 55 unmodified lines
531533 [NL80211_ATTR_MDID] = { .type = NLA_U16 },
532534 [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY,
533535 .len = IEEE80211_MAX_DATA_LEN },
536+ [NL80211_ATTR_CRIT_PROT_ID] = { .type = NLA_U16 },
537+ [NL80211_ATTR_MAX_CRIT_PROT_DURATION] = { .type = NLA_U16 },
534538 [NL80211_ATTR_PEER_AID] =
535539 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),
536540 [NL80211_ATTR_CH_SWITCH_COUNT] = { .type = NLA_U32 },
@@ -561,6 +565,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 24 unmodified lines
561565 NLA_POLICY_MAX(NLA_U8, IEEE80211_NUM_UPS - 1),
562566 [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 },
563567 [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 },
568+ [NL80211_ATTR_OPER_CLASS] = { .type = NLA_U8 },
564569 [NL80211_ATTR_MAC_MASK] = {
565570 .type = NLA_EXACT_LEN_WARN,
566571 .len = ETH_ALEN
@@ -16411,7 +16416,7 @@ void cfg80211_sta_opmode_change_notify(struct net_device *dev, const u8 *mac, · 15844 unmodified lines
1641116416 goto nla_put_failure;
1641216417
1641316418 if ((sta_opmode->changed & STA_OPMODE_MAX_BW_CHANGED) &&
16414− nla_put_u8(msg, NL80211_ATTR_CHANNEL_WIDTH, sta_opmode->bw))
16419+ nla_put_u32(msg, NL80211_ATTR_CHANNEL_WIDTH, sta_opmode->bw))
1641516420 goto nla_put_failure;
1641616421
1641716422 if ((sta_opmode->changed & STA_OPMODE_N_SS_CHANGED) &&
net/wireless/scan.c+5−1
@@ -2022,7 +2022,11 @@ void cfg80211_update_assoc_bss_entry(struct wireless_dev *wdev, · 2021 unmodified lines
20222022
20232023 spin_lock_bh(&rdev->bss_lock);
20242024
2025− if (WARN_ON(cbss->pub.channel == chan))
2025+ /*
2026+ * Some APs use CSA also for bandwidth changes, i.e., without actually
2027+ * changing the control channel, so no need to update in such a case.
2028+ */
2029+ if (cbss->pub.channel == chan)
20262030 goto done;
20272031
20282032 /* use transmitting bss */
net/xfrm/xfrm_device.c+5−4
@@ -78,8 +78,8 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur · 77 unmodified lines
7878 int err;
7979 unsigned long flags;
8080 struct xfrm_state *x;
81− struct sk_buff *skb2, *nskb;
8281 struct softnet_data *sd;
82+ struct sk_buff *skb2, *nskb, *pskb = NULL;
8383 netdev_features_t esp_features = features;
8484 struct xfrm_offload *xo = xfrm_offload(skb);
8585 struct sec_path *sp;
@@ -168,14 +168,14 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur · 82 unmodified lines
168168 } else {
169169 if (skb == skb2)
170170 skb = nskb;
171−
172− if (!skb)
173− return NULL;
171+ else
172+ pskb->next = nskb;
174173
175174 continue;
176175 }
177176
178177 skb_push(skb2, skb2->data - skb_mac_header(skb2));
178+ pskb = skb2;
179179 }
180180
181181 return skb;
@@ -383,6 +383,7 @@ static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void · 201 unmodified lines
383383 return xfrm_dev_feat_change(dev);
384384
385385 case NETDEV_DOWN:
386+ case NETDEV_UNREGISTER:
386387 return xfrm_dev_down(dev);
387388 }
388389 return NOTIFY_DONE;
net/xfrm/xfrm_policy.c+2−0
@@ -434,7 +434,9 @@ EXPORT_SYMBOL(xfrm_policy_destroy); · 433 unmodified lines
434434
435435 static void xfrm_policy_kill(struct xfrm_policy *policy)
436436 {
437+ write_lock_bh(&policy->lock);
437438 policy->walk.dead = 1;
439+ write_unlock_bh(&policy->lock);
438440
439441 atomic_inc(&policy->genid);
440442
net/xfrm/xfrm_user.c+5−1
@@ -110,7 +110,8 @@ static inline int verify_sec_ctx_len(struct nlattr **attrs) · 109 unmodified lines
110110 return 0;
111111
112112 uctx = nla_data(rt);
113− if (uctx->len != (sizeof(struct xfrm_user_sec_ctx) + uctx->ctx_len))
113+ if (uctx->len > nla_len(rt) ||
114+ uctx->len != (sizeof(struct xfrm_user_sec_ctx) + uctx->ctx_len))
114115 return -EINVAL;
115116
116117 return 0;
@@ -2273,6 +2274,9 @@ static int xfrm_add_acquire(struct sk_buff *skb, struct nlmsghdr *nlh, · 2156 unmodified lines
22732274 xfrm_mark_get(attrs, &mark);
22742275
22752276 err = verify_newpolicy_info(&ua->policy);
2277+ if (err)
2278+ goto free_state;
2279+ err = verify_sec_ctx_len(attrs);
22762280 if (err)
22772281 goto free_state;
22782282
scripts/Kconfig.include+7−0
@@ -44,3 +44,10 @@ $(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supporte · 43 unmodified lines
4444
4545 # gcc version including patch level
4646 gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
47+
48+# machine bit flags
49+# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
50+# $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
51+cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1))
52+m32-flag := $(cc-option-bit,-m32)
53+m64-flag := $(cc-option-bit,-m64)
scripts/Makefile.extrawarn+1−0
@@ -48,6 +48,7 @@ KBUILD_CFLAGS += -Wno-initializer-overrides · 47 unmodified lines
4848 KBUILD_CFLAGS += -Wno-format
4949 KBUILD_CFLAGS += -Wno-sign-compare
5050 KBUILD_CFLAGS += -Wno-format-zero-length
51+KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
5152 endif
5253
5354 endif
scripts/dtc/dtc-lexer.l+0−1
@@ -23,7 +23,6 @@ LINECOMMENT "//".*\n · 22 unmodified lines
2323 #include "srcpos.h"
2424 #include "dtc-parser.tab.h"
2525
26−YYLTYPE yylloc;
2726 extern bool treesource_error;
2827
2928 /* CAUTION: this will stop working if we ever use yyless() or yyunput() */
scripts/export_report.pl+1−1
@@ -94,7 +94,7 @@ if (defined $opt{'o'}) { · 93 unmodified lines
9494 #
9595 while ( <$module_symvers> ) {
9696 chomp;
97− my (undef, $symbol, $namespace, $module, $gpl) = split('\t');
97+ my (undef, $symbol, $module, $gpl, $namespace) = split('\t');
9898 $SYMBOL { $symbol } = [ $module , "0" , $symbol, $gpl];
9999 }
100100 close($module_symvers);
scripts/kallsyms.c+4−4
@@ -195,13 +195,13 @@ static struct sym_entry *read_symbol(FILE *in) · 194 unmodified lines
195195 return NULL;
196196 }
197197
198− if (is_ignored_symbol(name, type))
199− return NULL;
200−
201− /* Ignore most absolute/undefined (?) symbols. */
202198 if (strcmp(name, "_text") == 0)
203199 _text = addr;
204200
201+ /* Ignore most absolute/undefined (?) symbols. */
202+ if (is_ignored_symbol(name, type))
203+ return NULL;
204+
205205 check_symbol_range(name, addr, text_ranges, ARRAY_SIZE(text_ranges));
206206 check_symbol_range(name, addr, &percpu_range, 1);
207207
scripts/mod/modpost.c+14−13
@@ -308,7 +308,8 @@ static const char *sec_name(struct elf_info *elf, int secindex) · 307 unmodified lines
308308
309309 static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
310310 {
311− Elf_Shdr *sechdr = &info->sechdrs[sym->st_shndx];
311+ unsigned int secindex = get_secindex(info, sym);
312+ Elf_Shdr *sechdr = &info->sechdrs[secindex];
312313 unsigned long offset;
313314
314315 offset = sym->st_value;
@@ -2427,7 +2428,7 @@ static void write_if_changed(struct buffer *b, const char *fname) · 2112 unmodified lines
24272428 }
24282429
24292430 /* parse Module.symvers file. line format:
2430− * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2431+ * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
24312432 **/
24322433 static void read_dump(const char *fname, unsigned int kernel)
24332434 {
@@ -2440,7 +2441,7 @@ static void read_dump(const char *fname, unsigned int kernel) · 6 unmodified lines
24402441 return;
24412442
24422443 while ((line = get_next_line(&pos, file, size))) {
2443− char *symname, *namespace, *modname, *d, *export, *end;
2444+ char *symname, *namespace, *modname, *d, *export;
24442445 unsigned int crc;
24452446 struct module *mod;
24462447 struct symbol *s;
@@ -2448,16 +2449,16 @@ static void read_dump(const char *fname, unsigned int kernel) · 1 unmodified line
24482449 if (!(symname = strchr(line, '\t')))
24492450 goto fail;
24502451 *symname++ = '\0';
2451− if (!(namespace = strchr(symname, '\t')))
2452− goto fail;
2453− *namespace++ = '\0';
2454− if (!(modname = strchr(namespace, '\t')))
2452+ if (!(modname = strchr(symname, '\t')))
24552453 goto fail;
24562454 *modname++ = '\0';
2457− if ((export = strchr(modname, '\t')) != NULL)
2458− *export++ = '\0';
2459− if (export && ((end = strchr(export, '\t')) != NULL))
2460− *end = '\0';
2455+ if (!(export = strchr(modname, '\t')))
2456+ goto fail;
2457+ *export++ = '\0';
2458+ if (!(namespace = strchr(export, '\t')))
2459+ goto fail;
2460+ *namespace++ = '\0';
2461+
24612462 crc = strtoul(line, &d, 16);
24622463 if (*symname == '\0' || *modname == '\0' || *d != '\0')
24632464 goto fail;
@@ -2508,9 +2509,9 @@ static void write_dump(const char *fname) · 44 unmodified lines
25082509 namespace = symbol->namespace;
25092510 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
25102511 symbol->crc, symbol->name,
2511− namespace ? namespace : "",
25122512 symbol->module->name,
2513− export_str(symbol->export));
2513+ export_str(symbol->export),
2514+ namespace ? namespace : "");
25142515 }
25152516 symbol = symbol->next;
25162517 }
scripts/parse-maintainers.pl+27−4
@@ -8,13 +8,14 @@ my $input_file = "MAINTAINERS"; · 7 unmodified lines
88 my $output_file = "MAINTAINERS.new";
99 my $output_section = "SECTION.new";
1010 my $help = 0;
11−
11+my $order = 0;
1212 my $P = $0;
1313
1414 if (!GetOptions(
1515 'input=s' => \$input_file,
1616 'output=s' => \$output_file,
1717 'section=s' => \$output_section,
18+ 'order!' => \$order,
1819 'h|help|usage' => \$help,
1920 )) {
2021 die "$P: invalid argument - use --help if necessary\n";
@@ -32,6 +33,22 @@ usage: $P [options] <pattern matching regexes> · 11 unmodified lines
3233 --input => MAINTAINERS file to read (default: MAINTAINERS)
3334 --output => sorted MAINTAINERS file to write (default: MAINTAINERS.new)
3435 --section => new sorted MAINTAINERS file to write to (default: SECTION.new)
36+ --order => Use the preferred section content output ordering (default: 0)
37+ Preferred ordering of section output is:
38+ M: Person acting as a maintainer
39+ R: Person acting as a patch reviewer
40+ L: Mailing list where patches should be sent
41+ S: Maintenance status
42+ W: URI for general information
43+ Q: URI for patchwork tracking
44+ B: URI for bug tracking/submission
45+ C: URI for chat
46+ P: URI or file for subsystem specific coding styles
47+ T: SCM tree type and location
48+ F: File and directory pattern
49+ X: File and directory exclusion pattern
50+ N: File glob
51+ K: Keyword - patch content regex
3552
3653 If <pattern match regexes> exist, then the sections that match the
3754 regexes are not written to the output file but are written to the
@@ -56,7 +73,7 @@ sub by_category($$) { · 18 unmodified lines
5673
5774 sub by_pattern($$) {
5875 my ($a, $b) = @_;
59− my $preferred_order = 'MRPLSWTQBCFXNK';
76+ my $preferred_order = 'MRLSWQBCPTFXNK';
6077
6178 my $a1 = uc(substr($a, 0, 1));
6279 my $b1 = uc(substr($b, 0, 1));
@@ -105,8 +122,14 @@ sub alpha_output { · 42 unmodified lines
105122 print $file $separator;
106123 }
107124 print $file $key . "\n";
108− foreach my $pattern (sort by_pattern split('\n', %$hashref{$key})) {
109− print $file ($pattern . "\n");
125+ if ($order) {
126+ foreach my $pattern (sort by_pattern split('\n', %$hashref{$key})) {
127+ print $file ($pattern . "\n");
128+ }
129+ } else {
130+ foreach my $pattern (split('\n', %$hashref{$key})) {
131+ print $file ($pattern . "\n");
132+ }
110133 }
111134 }
112135 }
sound/core/oss/pcm_plugin.c+10−2
@@ -111,7 +111,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) · 110 unmodified lines
111111 while (plugin->next) {
112112 if (plugin->dst_frames)
113113 frames = plugin->dst_frames(plugin, frames);
114− if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))
114+ if ((snd_pcm_sframes_t)frames <= 0)
115115 return -ENXIO;
116116 plugin = plugin->next;
117117 err = snd_pcm_plugin_alloc(plugin, frames);
@@ -123,7 +123,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) · 5 unmodified lines
123123 while (plugin->prev) {
124124 if (plugin->src_frames)
125125 frames = plugin->src_frames(plugin, frames);
126− if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))
126+ if ((snd_pcm_sframes_t)frames <= 0)
127127 return -ENXIO;
128128 plugin = plugin->prev;
129129 err = snd_pcm_plugin_alloc(plugin, frames);
@@ -209,6 +209,8 @@ snd_pcm_sframes_t snd_pcm_plug_client_size(struct snd_pcm_substream *plug, snd_p · 79 unmodified lines
209209 if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
210210 plugin = snd_pcm_plug_last(plug);
211211 while (plugin && drv_frames > 0) {
212+ if (drv_frames > plugin->buf_frames)
213+ drv_frames = plugin->buf_frames;
212214 plugin_prev = plugin->prev;
213215 if (plugin->src_frames)
214216 drv_frames = plugin->src_frames(plugin, drv_frames);
@@ -220,6 +222,8 @@ snd_pcm_sframes_t snd_pcm_plug_client_size(struct snd_pcm_substream *plug, snd_p · 5 unmodified lines
220222 plugin_next = plugin->next;
221223 if (plugin->dst_frames)
222224 drv_frames = plugin->dst_frames(plugin, drv_frames);
225+ if (drv_frames > plugin->buf_frames)
226+ drv_frames = plugin->buf_frames;
223227 plugin = plugin_next;
224228 }
225229 } else
@@ -248,11 +252,15 @@ snd_pcm_sframes_t snd_pcm_plug_slave_size(struct snd_pcm_substream *plug, snd_pc · 22 unmodified lines
248252 if (frames < 0)
249253 return frames;
250254 }
255+ if (frames > plugin->buf_frames)
256+ frames = plugin->buf_frames;
251257 plugin = plugin_next;
252258 }
253259 } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
254260 plugin = snd_pcm_plug_last(plug);
255261 while (plugin) {
262+ if (frames > plugin->buf_frames)
263+ frames = plugin->buf_frames;
256264 plugin_prev = plugin->prev;
257265 if (plugin->src_frames) {
258266 frames = plugin->src_frames(plugin, frames);
sound/core/seq/oss/seq_oss_midi.c+1−0
@@ -602,6 +602,7 @@ send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, struct seq · 601 unmodified lines
602602 len = snd_seq_oss_timer_start(dp->timer);
603603 if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {
604604 snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev);
605+ snd_midi_event_reset_decode(mdev->coder);
605606 } else {
606607 len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev);
607608 if (len > 0)
sound/core/seq/seq_virmidi.c+1−0
@@ -81,6 +81,7 @@ static int snd_virmidi_dev_receive_event(struct snd_virmidi_dev *rdev, · 80 unmodified lines
8181 if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
8282 continue;
8383 snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream);
84+ snd_midi_event_reset_decode(vmidi->parser);
8485 } else {
8586 len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev);
8687 if (len > 0)
sound/pci/hda/patch_realtek.c+25−0
@@ -8051,6 +8051,8 @@ static int patch_alc269(struct hda_codec *codec) · 8050 unmodified lines
80518051 spec->gen.mixer_nid = 0;
80528052 break;
80538053 case 0x10ec0225:
8054+ codec->power_save_node = 1;
8055+ /* fall through */
80548056 case 0x10ec0295:
80558057 case 0x10ec0299:
80568058 spec->codec_variant = ALC269_TYPE_ALC225;
@@ -8610,6 +8612,8 @@ enum { · 553 unmodified lines
86108612 ALC669_FIXUP_ACER_ASPIRE_ETHOS,
86118613 ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,
86128614 ALC671_FIXUP_HP_HEADSET_MIC2,
8615+ ALC662_FIXUP_ACER_X2660G_HEADSET_MODE,
8616+ ALC662_FIXUP_ACER_NITRO_HEADSET_MODE,
86138617 };
86148618
86158619 static const struct hda_fixup alc662_fixups[] = {
@@ -8955,6 +8959,25 @@ static const struct hda_fixup alc662_fixups[] = { · 339 unmodified lines
89558959 .type = HDA_FIXUP_FUNC,
89568960 .v.func = alc671_fixup_hp_headset_mic2,
89578961 },
8962+ [ALC662_FIXUP_ACER_X2660G_HEADSET_MODE] = {
8963+ .type = HDA_FIXUP_PINS,
8964+ .v.pins = (const struct hda_pintbl[]) {
8965+ { 0x1a, 0x02a1113c }, /* use as headset mic, without its own jack detect */
8966+ { }
8967+ },
8968+ .chained = true,
8969+ .chain_id = ALC662_FIXUP_USI_FUNC
8970+ },
8971+ [ALC662_FIXUP_ACER_NITRO_HEADSET_MODE] = {
8972+ .type = HDA_FIXUP_PINS,
8973+ .v.pins = (const struct hda_pintbl[]) {
8974+ { 0x1a, 0x01a11140 }, /* use as headset mic, without its own jack detect */
8975+ { 0x1b, 0x0221144f },
8976+ { }
8977+ },
8978+ .chained = true,
8979+ .chain_id = ALC662_FIXUP_USI_FUNC
8980+ },
89588981 };
89598982
89608983 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
@@ -8966,6 +8989,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { · 5 unmodified lines
89668989 SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC),
89678990 SND_PCI_QUIRK(0x1025, 0x034a, "Gateway LT27", ALC662_FIXUP_INV_DMIC),
89688991 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
8992+ SND_PCI_QUIRK(0x1025, 0x123c, "Acer Nitro N50-600", ALC662_FIXUP_ACER_NITRO_HEADSET_MODE),
8993+ SND_PCI_QUIRK(0x1025, 0x124e, "Acer 2660G", ALC662_FIXUP_ACER_X2660G_HEADSET_MODE),
89698994 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
89708995 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
89718996 SND_PCI_QUIRK(0x1028, 0x05fe, "Dell XPS 15", ALC668_FIXUP_DELL_XPS13),
sound/usb/line6/driver.c+1−1
@@ -305,7 +305,7 @@ static void line6_data_received(struct urb *urb) · 304 unmodified lines
305305 line6_midibuf_read(mb, line6->buffer_message,
306306 LINE6_MIDI_MESSAGE_MAXLEN);
307307
308− if (done == 0)
308+ if (done <= 0)
309309 break;
310310
311311 line6->message_length = done;
sound/usb/line6/midibuf.c+1−1
@@ -159,7 +159,7 @@ int line6_midibuf_read(struct midi_buffer *this, unsigned char *data, · 158 unmodified lines
159159 int midi_length_prev =
160160 midibuf_message_length(this->command_prev);
161161
162− if (midi_length_prev > 0) {
162+ if (midi_length_prev > 1) {
163163 midi_length = midi_length_prev - 1;
164164 repeat = 1;
165165 } else
tools/include/uapi/asm/errno.h+7−7
@@ -1,18 +1,18 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 #if defined(__i386__) || defined(__x86_64__)
3−#include "../../arch/x86/include/uapi/asm/errno.h"
3+#include "../../../arch/x86/include/uapi/asm/errno.h"
44 #elif defined(__powerpc__)
5−#include "../../arch/powerpc/include/uapi/asm/errno.h"
5+#include "../../../arch/powerpc/include/uapi/asm/errno.h"
66 #elif defined(__sparc__)
7−#include "../../arch/sparc/include/uapi/asm/errno.h"
7+#include "../../../arch/sparc/include/uapi/asm/errno.h"
88 #elif defined(__alpha__)
9−#include "../../arch/alpha/include/uapi/asm/errno.h"
9+#include "../../../arch/alpha/include/uapi/asm/errno.h"
1010 #elif defined(__mips__)
11−#include "../../arch/mips/include/uapi/asm/errno.h"
11+#include "../../../arch/mips/include/uapi/asm/errno.h"
1212 #elif defined(__ia64__)
13−#include "../../arch/ia64/include/uapi/asm/errno.h"
13+#include "../../../arch/ia64/include/uapi/asm/errno.h"
1414 #elif defined(__xtensa__)
15−#include "../../arch/xtensa/include/uapi/asm/errno.h"
15+#include "../../../arch/xtensa/include/uapi/asm/errno.h"
1616 #else
1717 #include <asm-generic/errno.h>
1818 #endif
tools/include/uapi/linux/in.h+2−0
@@ -74,6 +74,8 @@ enum { · 73 unmodified lines
7474 #define IPPROTO_UDPLITE IPPROTO_UDPLITE
7575 IPPROTO_MPLS = 137, /* MPLS in IP (RFC 4023) */
7676 #define IPPROTO_MPLS IPPROTO_MPLS
77+ IPPROTO_ETHERNET = 143, /* Ethernet-within-IPv6 Encapsulation */
78+#define IPPROTO_ETHERNET IPPROTO_ETHERNET
7779 IPPROTO_RAW = 255, /* Raw IP packets */
7880 #define IPPROTO_RAW IPPROTO_RAW
7981 IPPROTO_MPTCP = 262, /* Multipath TCP connection */
tools/perf/Makefile+1−1
@@ -35,7 +35,7 @@ endif · 34 unmodified lines
3535 # Only pass canonical directory names as the output directory:
3636 #
3737 ifneq ($(O),)
38− FULL_O := $(shell readlink -f $(O) || echo $(O))
38+ FULL_O := $(shell cd $(PWD); readlink -f $(O) || echo $(O))
3939 endif
4040
4141 #
tools/perf/arch/arm64/util/arm-spe.c+10−10
@@ -11,17 +11,17 @@ · 10 unmodified lines
1111 #include <linux/zalloc.h>
1212 #include <time.h>
1313
14−#include "../../util/cpumap.h"
15−#include "../../util/event.h"
16−#include "../../util/evsel.h"
17−#include "../../util/evlist.h"
18−#include "../../util/session.h"
14+#include "../../../util/cpumap.h"
15+#include "../../../util/event.h"
16+#include "../../../util/evsel.h"
17+#include "../../../util/evlist.h"
18+#include "../../../util/session.h"
1919 #include <internal/lib.h> // page_size
20−#include "../../util/pmu.h"
21−#include "../../util/debug.h"
22−#include "../../util/auxtrace.h"
23−#include "../../util/record.h"
24−#include "../../util/arm-spe.h"
20+#include "../../../util/pmu.h"
21+#include "../../../util/debug.h"
22+#include "../../../util/auxtrace.h"
23+#include "../../../util/record.h"
24+#include "../../../util/arm-spe.h"
2525
2626 #define KiB(x) ((x) * 1024)
2727 #define MiB(x) ((x) * 1024 * 1024)
tools/perf/arch/arm64/util/perf_regs.c+1−1
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: GPL-2.0
2−#include "../../util/perf_regs.h"
2+#include "../../../util/perf_regs.h"
33
44 const struct sample_reg sample_reg_masks[] = {
55 SMPL_REG_END
tools/perf/arch/powerpc/util/perf_regs.c+2−2
@@ -4,8 +4,8 @@ · 3 unmodified lines
44 #include <regex.h>
55 #include <linux/zalloc.h>
66
7−#include "../../util/perf_regs.h"
8−#include "../../util/debug.h"
7+#include "../../../util/perf_regs.h"
8+#include "../../../util/debug.h"
99
1010 #include <linux/kernel.h>
1111
tools/perf/arch/x86/util/auxtrace.c+7−7
@@ -7,13 +7,13 @@ · 6 unmodified lines
77 #include <errno.h>
88 #include <stdbool.h>
99
10−#include "../../util/header.h"
11−#include "../../util/debug.h"
12−#include "../../util/pmu.h"
13−#include "../../util/auxtrace.h"
14−#include "../../util/intel-pt.h"
15−#include "../../util/intel-bts.h"
16−#include "../../util/evlist.h"
10+#include "../../../util/header.h"
11+#include "../../../util/debug.h"
12+#include "../../../util/pmu.h"
13+#include "../../../util/auxtrace.h"
14+#include "../../../util/intel-pt.h"
15+#include "../../../util/intel-bts.h"
16+#include "../../../util/evlist.h"
1717
1818 static
1919 struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist,
tools/perf/arch/x86/util/event.c+6−6
@@ -3,12 +3,12 @@ · 2 unmodified lines
33 #include <linux/string.h>
44 #include <linux/zalloc.h>
55
6−#include "../../util/event.h"
7−#include "../../util/synthetic-events.h"
8−#include "../../util/machine.h"
9−#include "../../util/tool.h"
10−#include "../../util/map.h"
11−#include "../../util/debug.h"
6+#include "../../../util/event.h"
7+#include "../../../util/synthetic-events.h"
8+#include "../../../util/machine.h"
9+#include "../../../util/tool.h"
10+#include "../../../util/map.h"
11+#include "../../../util/debug.h"
1212
1313 #if defined(__x86_64__)
1414
tools/perf/arch/x86/util/header.c+2−2
@@ -7,8 +7,8 @@ · 6 unmodified lines
77 #include <string.h>
88 #include <regex.h>
99
10−#include "../../util/debug.h"
11−#include "../../util/header.h"
10+#include "../../../util/debug.h"
11+#include "../../../util/header.h"
1212
1313 static inline void
1414 cpuid(unsigned int op, unsigned int *a, unsigned int *b, unsigned int *c,
tools/perf/arch/x86/util/intel-bts.c+12−12
@@ -11,18 +11,18 @@ · 10 unmodified lines
1111 #include <linux/log2.h>
1212 #include <linux/zalloc.h>
1313
14−#include "../../util/cpumap.h"
15−#include "../../util/event.h"
16−#include "../../util/evsel.h"
17−#include "../../util/evlist.h"
18−#include "../../util/mmap.h"
19−#include "../../util/session.h"
20−#include "../../util/pmu.h"
21−#include "../../util/debug.h"
22−#include "../../util/record.h"
23−#include "../../util/tsc.h"
24−#include "../../util/auxtrace.h"
25−#include "../../util/intel-bts.h"
14+#include "../../../util/cpumap.h"
15+#include "../../../util/event.h"
16+#include "../../../util/evsel.h"
17+#include "../../../util/evlist.h"
18+#include "../../../util/mmap.h"
19+#include "../../../util/session.h"
20+#include "../../../util/pmu.h"
21+#include "../../../util/debug.h"
22+#include "../../../util/record.h"
23+#include "../../../util/tsc.h"
24+#include "../../../util/auxtrace.h"
25+#include "../../../util/intel-bts.h"
2626 #include <internal/lib.h> // page_size
2727
2828 #define KiB(x) ((x) * 1024)
tools/perf/arch/x86/util/intel-pt.c+15−15
@@ -13,23 +13,23 @@ · 12 unmodified lines
1313 #include <linux/zalloc.h>
1414 #include <cpuid.h>
1515
16−#include "../../util/session.h"
17−#include "../../util/event.h"
18−#include "../../util/evlist.h"
19−#include "../../util/evsel.h"
20−#include "../../util/evsel_config.h"
21−#include "../../util/cpumap.h"
22−#include "../../util/mmap.h"
16+#include "../../../util/session.h"
17+#include "../../../util/event.h"
18+#include "../../../util/evlist.h"
19+#include "../../../util/evsel.h"
20+#include "../../../util/evsel_config.h"
21+#include "../../../util/cpumap.h"
22+#include "../../../util/mmap.h"
2323 #include <subcmd/parse-options.h>
24−#include "../../util/parse-events.h"
25−#include "../../util/pmu.h"
26−#include "../../util/debug.h"
27−#include "../../util/auxtrace.h"
28−#include "../../util/record.h"
29−#include "../../util/target.h"
30−#include "../../util/tsc.h"
24+#include "../../../util/parse-events.h"
25+#include "../../../util/pmu.h"
26+#include "../../../util/debug.h"
27+#include "../../../util/auxtrace.h"
28+#include "../../../util/record.h"
29+#include "../../../util/target.h"
30+#include "../../../util/tsc.h"
3131 #include <internal/lib.h> // page_size
32−#include "../../util/intel-pt.h"
32+#include "../../../util/intel-pt.h"
3333
3434 #define KiB(x) ((x) * 1024)
3535 #define MiB(x) ((x) * 1024 * 1024)
tools/perf/arch/x86/util/machine.c+3−3
@@ -5,9 +5,9 @@ · 4 unmodified lines
55 #include <stdlib.h>
66
77 #include <internal/lib.h> // page_size
8−#include "../../util/machine.h"
9−#include "../../util/map.h"
10−#include "../../util/symbol.h"
8+#include "../../../util/machine.h"
9+#include "../../../util/map.h"
10+#include "../../../util/symbol.h"
1111 #include <linux/ctype.h>
1212
1313 #include <symbol/kallsyms.h>
tools/perf/arch/x86/util/perf_regs.c+4−4
@@ -5,10 +5,10 @@ · 4 unmodified lines
55 #include <linux/kernel.h>
66 #include <linux/zalloc.h>
77
8−#include "../../perf-sys.h"
9−#include "../../util/perf_regs.h"
10−#include "../../util/debug.h"
11−#include "../../util/event.h"
8+#include "../../../perf-sys.h"
9+#include "../../../util/perf_regs.h"
10+#include "../../../util/debug.h"
11+#include "../../../util/event.h"
1212
1313 const struct sample_reg sample_reg_masks[] = {
1414 SMPL_REG(AX, PERF_REG_X86_AX),
tools/perf/arch/x86/util/pmu.c+3−3
@@ -4,9 +4,9 @@ · 3 unmodified lines
44 #include <linux/stddef.h>
55 #include <linux/perf_event.h>
66
7−#include "../../util/intel-pt.h"
8−#include "../../util/intel-bts.h"
9−#include "../../util/pmu.h"
7+#include "../../../util/intel-pt.h"
8+#include "../../../util/intel-bts.h"
9+#include "../../../util/pmu.h"
1010
1111 struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu __maybe_unused)
1212 {
tools/perf/bench/bench.h+4−0
@@ -2,6 +2,10 @@ · 1 unmodified line
22 #ifndef BENCH_H
33 #define BENCH_H
44
5+#include <sys/time.h>
6+
7+extern struct timeval bench__start, bench__end, bench__runtime;
8+
59 /*
610 * The madvise transparent hugepage constants were added in glibc
711 * 2.13. For compatibility with older versions of glibc, define these
tools/perf/bench/epoll-ctl.c+4−4
@@ -35,7 +35,6 @@ · 34 unmodified lines
3535
3636 static unsigned int nthreads = 0;
3737 static unsigned int nsecs = 8;
38−struct timeval start, end, runtime;
3938 static bool done, __verbose, randomize;
4039
4140 /*
@@ -94,8 +93,8 @@ static void toggle_done(int sig __maybe_unused, · 52 unmodified lines
9493 {
9594 /* inform all threads that we're done for the day */
9695 done = true;
97− gettimeofday(&end, NULL);
98− timersub(&end, &start, &runtime);
96+ gettimeofday(&bench__end, NULL);
97+ timersub(&bench__end, &bench__start, &bench__runtime);
9998 }
10099
101100 static void nest_epollfd(void)
@@ -313,6 +312,7 @@ int bench_epoll_ctl(int argc, const char **argv) · 211 unmodified lines
313312 exit(EXIT_FAILURE);
314313 }
315314
315+ memset(&act, 0, sizeof(act));
316316 sigfillset(&act.sa_mask);
317317 act.sa_sigaction = toggle_done;
318318 sigaction(SIGINT, &act, NULL);
@@ -361,7 +361,7 @@ int bench_epoll_ctl(int argc, const char **argv) · 42 unmodified lines
361361
362362 threads_starting = nthreads;
363363
364− gettimeofday(&start, NULL);
364+ gettimeofday(&bench__start, NULL);
365365
366366 do_threads(worker, cpu);
367367
tools/perf/bench/epoll-wait.c+6−6
@@ -90,7 +90,6 @@ · 89 unmodified lines
9090
9191 static unsigned int nthreads = 0;
9292 static unsigned int nsecs = 8;
93−struct timeval start, end, runtime;
9493 static bool wdone, done, __verbose, randomize, nonblocking;
9594
9695 /*
@@ -276,8 +275,8 @@ static void toggle_done(int sig __maybe_unused, · 179 unmodified lines
276275 {
277276 /* inform all threads that we're done for the day */
278277 done = true;
279− gettimeofday(&end, NULL);
280− timersub(&end, &start, &runtime);
278+ gettimeofday(&bench__end, NULL);
279+ timersub(&bench__end, &bench__start, &bench__runtime);
281280 }
282281
283282 static void print_summary(void)
@@ -287,7 +286,7 @@ static void print_summary(void) · 3 unmodified lines
287286
288287 printf("\nAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
289288 avg, rel_stddev_stats(stddev, avg),
290− (int) runtime.tv_sec);
289+ (int)bench__runtime.tv_sec);
291290 }
292291
293292 static int do_threads(struct worker *worker, struct perf_cpu_map *cpu)
@@ -427,6 +426,7 @@ int bench_epoll_wait(int argc, const char **argv) · 133 unmodified lines
427426 exit(EXIT_FAILURE);
428427 }
429428
429+ memset(&act, 0, sizeof(act));
430430 sigfillset(&act.sa_mask);
431431 act.sa_sigaction = toggle_done;
432432 sigaction(SIGINT, &act, NULL);
@@ -479,7 +479,7 @@ int bench_epoll_wait(int argc, const char **argv) · 46 unmodified lines
479479
480480 threads_starting = nthreads;
481481
482− gettimeofday(&start, NULL);
482+ gettimeofday(&bench__start, NULL);
483483
484484 do_threads(worker, cpu);
485485
@@ -519,7 +519,7 @@ int bench_epoll_wait(int argc, const char **argv) · 33 unmodified lines
519519 qsort(worker, nthreads, sizeof(struct worker), cmpworker);
520520
521521 for (i = 0; i < nthreads; i++) {
522− unsigned long t = worker[i].ops/runtime.tv_sec;
522+ unsigned long t = worker[i].ops / bench__runtime.tv_sec;
523523
524524 update_stats(&throughput_stats, t);
525525
tools/perf/bench/futex-hash.c+7−6
@@ -37,7 +37,7 @@ static unsigned int nfutexes = 1024; · 36 unmodified lines
3737 static bool fshared = false, done = false, silent = false;
3838 static int futex_flag = 0;
3939
40−struct timeval start, end, runtime;
40+struct timeval bench__start, bench__end, bench__runtime;
4141 static pthread_mutex_t thread_lock;
4242 static unsigned int threads_starting;
4343 static struct stats throughput_stats;
@@ -103,8 +103,8 @@ static void toggle_done(int sig __maybe_unused, · 59 unmodified lines
103103 {
104104 /* inform all threads that we're done for the day */
105105 done = true;
106− gettimeofday(&end, NULL);
107− timersub(&end, &start, &runtime);
106+ gettimeofday(&bench__end, NULL);
107+ timersub(&bench__end, &bench__start, &bench__runtime);
108108 }
109109
110110 static void print_summary(void)
@@ -114,7 +114,7 @@ static void print_summary(void) · 3 unmodified lines
114114
115115 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
116116 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
117− (int) runtime.tv_sec);
117+ (int)bench__runtime.tv_sec);
118118 }
119119
120120 int bench_futex_hash(int argc, const char **argv)
@@ -137,6 +137,7 @@ int bench_futex_hash(int argc, const char **argv) · 16 unmodified lines
137137 if (!cpu)
138138 goto errmem;
139139
140+ memset(&act, 0, sizeof(act));
140141 sigfillset(&act.sa_mask);
141142 act.sa_sigaction = toggle_done;
142143 sigaction(SIGINT, &act, NULL);
@@ -161,7 +162,7 @@ int bench_futex_hash(int argc, const char **argv) · 18 unmodified lines
161162
162163 threads_starting = nthreads;
163164 pthread_attr_init(&thread_attr);
164− gettimeofday(&start, NULL);
165+ gettimeofday(&bench__start, NULL);
165166 for (i = 0; i < nthreads; i++) {
166167 worker[i].tid = i;
167168 worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex));
@@ -204,7 +205,7 @@ int bench_futex_hash(int argc, const char **argv) · 36 unmodified lines
204205 pthread_mutex_destroy(&thread_lock);
205206
206207 for (i = 0; i < nthreads; i++) {
207− unsigned long t = worker[i].ops/runtime.tv_sec;
208+ unsigned long t = worker[i].ops / bench__runtime.tv_sec;
208209 update_stats(&throughput_stats, t);
209210 if (!silent) {
210211 if (nfutexes == 1)
tools/perf/bench/futex-lock-pi.c+6−6
@@ -37,7 +37,6 @@ static bool silent = false, multi = false; · 36 unmodified lines
3737 static bool done = false, fshared = false;
3838 static unsigned int nthreads = 0;
3939 static int futex_flag = 0;
40−struct timeval start, end, runtime;
4140 static pthread_mutex_t thread_lock;
4241 static unsigned int threads_starting;
4342 static struct stats throughput_stats;
@@ -64,7 +63,7 @@ static void print_summary(void) · 20 unmodified lines
6463
6564 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
6665 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
67− (int) runtime.tv_sec);
66+ (int)bench__runtime.tv_sec);
6867 }
6968
7069 static void toggle_done(int sig __maybe_unused,
@@ -73,8 +72,8 @@ static void toggle_done(int sig __maybe_unused, · 2 unmodified lines
7372 {
7473 /* inform all threads that we're done for the day */
7574 done = true;
76− gettimeofday(&end, NULL);
77− timersub(&end, &start, &runtime);
75+ gettimeofday(&bench__end, NULL);
76+ timersub(&bench__end, &bench__start, &bench__runtime);
7877 }
7978
8079 static void *workerfn(void *arg)
@@ -161,6 +160,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 80 unmodified lines
161160 if (!cpu)
162161 err(EXIT_FAILURE, "calloc");
163162
163+ memset(&act, 0, sizeof(act));
164164 sigfillset(&act.sa_mask);
165165 act.sa_sigaction = toggle_done;
166166 sigaction(SIGINT, &act, NULL);
@@ -185,7 +185,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 18 unmodified lines
185185
186186 threads_starting = nthreads;
187187 pthread_attr_init(&thread_attr);
188− gettimeofday(&start, NULL);
188+ gettimeofday(&bench__start, NULL);
189189
190190 create_threads(worker, thread_attr, cpu);
191191 pthread_attr_destroy(&thread_attr);
@@ -211,7 +211,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 19 unmodified lines
211211 pthread_mutex_destroy(&thread_lock);
212212
213213 for (i = 0; i < nthreads; i++) {
214− unsigned long t = worker[i].ops/runtime.tv_sec;
214+ unsigned long t = worker[i].ops / bench__runtime.tv_sec;
215215
216216 update_stats(&throughput_stats, t);
217217 if (!silent)
tools/perf/bench/futex-requeue.c+1−0
@@ -128,6 +128,7 @@ int bench_futex_requeue(int argc, const char **argv) · 127 unmodified lines
128128 if (!cpu)
129129 err(EXIT_FAILURE, "cpu_map__new");
130130
131+ memset(&act, 0, sizeof(act));
131132 sigfillset(&act.sa_mask);
132133 act.sa_sigaction = toggle_done;
133134 sigaction(SIGINT, &act, NULL);
tools/perf/bench/futex-wake-parallel.c+1−0
@@ -234,6 +234,7 @@ int bench_futex_wake_parallel(int argc, const char **argv) · 233 unmodified lines
234234 exit(EXIT_FAILURE);
235235 }
236236
237+ memset(&act, 0, sizeof(act));
237238 sigfillset(&act.sa_mask);
238239 act.sa_sigaction = toggle_done;
239240 sigaction(SIGINT, &act, NULL);
tools/perf/bench/futex-wake.c+3−2
@@ -43,7 +43,7 @@ static bool done = false, silent = false, fshared = false; · 42 unmodified lines
4343 static pthread_mutex_t thread_lock;
4444 static pthread_cond_t thread_parent, thread_worker;
4545 static struct stats waketime_stats, wakeup_stats;
46−static unsigned int ncpus, threads_starting, nthreads = 0;
46+static unsigned int threads_starting, nthreads = 0;
4747 static int futex_flag = 0;
4848
4949 static const struct option options[] = {
@@ -136,12 +136,13 @@ int bench_futex_wake(int argc, const char **argv) · 86 unmodified lines
136136 if (!cpu)
137137 err(EXIT_FAILURE, "calloc");
138138
139+ memset(&act, 0, sizeof(act));
139140 sigfillset(&act.sa_mask);
140141 act.sa_sigaction = toggle_done;
141142 sigaction(SIGINT, &act, NULL);
142143
143144 if (!nthreads)
144− nthreads = ncpus;
145+ nthreads = cpu->nr;
145146
146147 worker = calloc(nthreads, sizeof(*worker));
147148 if (!worker)
tools/perf/builtin-diff.c+2−1
@@ -1312,7 +1312,8 @@ static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, · 1311 unmodified lines
13121312 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,
13131313 he->ms.sym);
13141314
1315− if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) {
1315+ if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) &&
1316+ (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) {
13161317 scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld",
13171318 start_line, end_line, block_he->diff.cycles);
13181319 } else {
tools/perf/builtin-top.c+3−1
@@ -684,7 +684,9 @@ repeat: · 683 unmodified lines
684684 delay_msecs = top->delay_secs * MSEC_PER_SEC;
685685 set_term_quiet_input(&save);
686686 /* trash return*/
687− getc(stdin);
687+ clearerr(stdin);
688+ if (poll(&stdin_poll, 1, 0) > 0)
689+ getc(stdin);
688690
689691 while (!done) {
690692 perf_top__print_sym_table(top);
tools/perf/pmu-events/jevents.c+9−6
@@ -1082,10 +1082,9 @@ static int process_one_file(const char *fpath, const struct stat *sb, · 1081 unmodified lines
10821082 */
10831083 int main(int argc, char *argv[])
10841084 {
1085− int rc;
1085+ int rc, ret = 0;
10861086 int maxfds;
10871087 char ldirname[PATH_MAX];
1088−
10891088 const char *arch;
10901089 const char *output_file;
10911090 const char *start_dirname;
@@ -1156,7 +1155,8 @@ int main(int argc, char *argv[]) · 64 unmodified lines
11561155 /* Make build fail */
11571156 fclose(eventsfp);
11581157 free_arch_std_events();
1159− return 1;
1158+ ret = 1;
1159+ goto out_free_mapfile;
11601160 } else if (rc) {
11611161 goto empty_map;
11621162 }
@@ -1174,14 +1174,17 @@ int main(int argc, char *argv[]) · 11 unmodified lines
11741174 /* Make build fail */
11751175 fclose(eventsfp);
11761176 free_arch_std_events();
1177− return 1;
1177+ ret = 1;
11781178 }
11791179
1180− return 0;
1180+
1181+ goto out_free_mapfile;
11811182
11821183 empty_map:
11831184 fclose(eventsfp);
11841185 create_empty_mapping(output_file);
11851186 free_arch_std_events();
1186− return 0;
1187+out_free_mapfile:
1188+ free(mapfile);
1189+ return ret;
11871190 }
tools/perf/tests/bp_account.c+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
1919 #include "../perf-sys.h"
2020 #include "cloexec.h"
2121
22−volatile long the_var;
22+static volatile long the_var;
2323
2424 static noinline int test_function(void)
2525 {
tools/perf/util/block-info.c+2−1
@@ -295,7 +295,8 @@ static int block_range_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, · 294 unmodified lines
295295 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,
296296 he->ms.sym);
297297
298− if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) {
298+ if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) &&
299+ (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) {
299300 scnprintf(buf, sizeof(buf), "[%s -> %s]",
300301 start_line, end_line);
301302 } else {
tools/perf/util/env.c+2−2
@@ -343,11 +343,11 @@ static const char *normalize_arch(char *arch) · 342 unmodified lines
343343
344344 const char *perf_env__arch(struct perf_env *env)
345345 {
346− struct utsname uts;
347346 char *arch_name;
348347
349348 if (!env || !env->arch) { /* Assume local operation */
350− if (uname(&uts) < 0)
349+ static struct utsname uts = { .machine[0] = '\0', };
350+ if (uts.machine[0] == '\0' && uname(&uts) < 0)
351351 return NULL;
352352 arch_name = uts.machine;
353353 } else
tools/perf/util/map.c+2−2
@@ -89,7 +89,7 @@ static inline bool replace_android_lib(const char *filename, char *newfilename) · 88 unmodified lines
8989 return true;
9090 }
9191
92− if (!strncmp(filename, "/system/lib/", 11)) {
92+ if (!strncmp(filename, "/system/lib/", 12)) {
9393 char *ndk, *app;
9494 const char *arch;
9595 size_t ndk_length;
@@ -431,7 +431,7 @@ int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, · 335 unmodified lines
431431
432432 if (map && map->dso) {
433433 char *srcline = map__srcline(map, addr, NULL);
434− if (srcline != SRCLINE_UNKNOWN)
434+ if (strncmp(srcline, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)
435435 ret = fprintf(fp, "%s%s", prefix, srcline);
436436 free_srcline(srcline);
437437 }
tools/perf/util/parse-events.c+25−31
@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config) · 256 unmodified lines
257257 path = zalloc(sizeof(*path));
258258 if (!path)
259259 return NULL;
260− path->system = malloc(MAX_EVENT_LENGTH);
261− if (!path->system) {
260+ if (asprintf(&path->system, "%.*s", MAX_EVENT_LENGTH, sys_dirent->d_name) < 0) {
262261 free(path);
263262 return NULL;
264263 }
265− path->name = malloc(MAX_EVENT_LENGTH);
266− if (!path->name) {
264+ if (asprintf(&path->name, "%.*s", MAX_EVENT_LENGTH, evt_dirent->d_name) < 0) {
267265 zfree(&path->system);
268266 free(path);
269267 return NULL;
270268 }
271− strncpy(path->system, sys_dirent->d_name,
272− MAX_EVENT_LENGTH);
273− strncpy(path->name, evt_dirent->d_name,
274− MAX_EVENT_LENGTH);
275269 return path;
276270 }
277271 }
@@ -1219,7 +1213,7 @@ static int config_attr(struct perf_event_attr *attr, · 941 unmodified lines
12191213 static int get_config_terms(struct list_head *head_config,
12201214 struct list_head *head_terms __maybe_unused)
12211215 {
1222−#define ADD_CONFIG_TERM(__type) \
1216+#define ADD_CONFIG_TERM(__type, __weak) \
12231217 struct perf_evsel_config_term *__t; \
12241218 \
12251219 __t = zalloc(sizeof(*__t)); \
@@ -1228,18 +1222,18 @@ static int get_config_terms(struct list_head *head_config, · 2 unmodified lines
12281222 \
12291223 INIT_LIST_HEAD(&__t->list); \
12301224 __t->type = PERF_EVSEL__CONFIG_TERM_ ## __type; \
1231− __t->weak = term->weak; \
1225+ __t->weak = __weak; \
12321226 list_add_tail(&__t->list, head_terms)
12331227
1234−#define ADD_CONFIG_TERM_VAL(__type, __name, __val) \
1228+#define ADD_CONFIG_TERM_VAL(__type, __name, __val, __weak) \
12351229 do { \
1236− ADD_CONFIG_TERM(__type); \
1230+ ADD_CONFIG_TERM(__type, __weak); \
12371231 __t->val.__name = __val; \
12381232 } while (0)
12391233
1240−#define ADD_CONFIG_TERM_STR(__type, __val) \
1234+#define ADD_CONFIG_TERM_STR(__type, __val, __weak) \
12411235 do { \
1242− ADD_CONFIG_TERM(__type); \
1236+ ADD_CONFIG_TERM(__type, __weak); \
12431237 __t->val.str = strdup(__val); \
12441238 if (!__t->val.str) { \
12451239 zfree(&__t); \
@@ -1253,62 +1247,62 @@ do { \ · 7 unmodified lines
12531247 list_for_each_entry(term, head_config, list) {
12541248 switch (term->type_term) {
12551249 case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
1256− ADD_CONFIG_TERM_VAL(PERIOD, period, term->val.num);
1250+ ADD_CONFIG_TERM_VAL(PERIOD, period, term->val.num, term->weak);
12571251 break;
12581252 case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
1259− ADD_CONFIG_TERM_VAL(FREQ, freq, term->val.num);
1253+ ADD_CONFIG_TERM_VAL(FREQ, freq, term->val.num, term->weak);
12601254 break;
12611255 case PARSE_EVENTS__TERM_TYPE_TIME:
1262− ADD_CONFIG_TERM_VAL(TIME, time, term->val.num);
1256+ ADD_CONFIG_TERM_VAL(TIME, time, term->val.num, term->weak);
12631257 break;
12641258 case PARSE_EVENTS__TERM_TYPE_CALLGRAPH:
1265− ADD_CONFIG_TERM_STR(CALLGRAPH, term->val.str);
1259+ ADD_CONFIG_TERM_STR(CALLGRAPH, term->val.str, term->weak);
12661260 break;
12671261 case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
1268− ADD_CONFIG_TERM_STR(BRANCH, term->val.str);
1262+ ADD_CONFIG_TERM_STR(BRANCH, term->val.str, term->weak);
12691263 break;
12701264 case PARSE_EVENTS__TERM_TYPE_STACKSIZE:
12711265 ADD_CONFIG_TERM_VAL(STACK_USER, stack_user,
1272− term->val.num);
1266+ term->val.num, term->weak);
12731267 break;
12741268 case PARSE_EVENTS__TERM_TYPE_INHERIT:
12751269 ADD_CONFIG_TERM_VAL(INHERIT, inherit,
1276− term->val.num ? 1 : 0);
1270+ term->val.num ? 1 : 0, term->weak);
12771271 break;
12781272 case PARSE_EVENTS__TERM_TYPE_NOINHERIT:
12791273 ADD_CONFIG_TERM_VAL(INHERIT, inherit,
1280− term->val.num ? 0 : 1);
1274+ term->val.num ? 0 : 1, term->weak);
12811275 break;
12821276 case PARSE_EVENTS__TERM_TYPE_MAX_STACK:
12831277 ADD_CONFIG_TERM_VAL(MAX_STACK, max_stack,
1284− term->val.num);
1278+ term->val.num, term->weak);
12851279 break;
12861280 case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS:
12871281 ADD_CONFIG_TERM_VAL(MAX_EVENTS, max_events,
1288− term->val.num);
1282+ term->val.num, term->weak);
12891283 break;
12901284 case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
12911285 ADD_CONFIG_TERM_VAL(OVERWRITE, overwrite,
1292− term->val.num ? 1 : 0);
1286+ term->val.num ? 1 : 0, term->weak);
12931287 break;
12941288 case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
12951289 ADD_CONFIG_TERM_VAL(OVERWRITE, overwrite,
1296− term->val.num ? 0 : 1);
1290+ term->val.num ? 0 : 1, term->weak);
12971291 break;
12981292 case PARSE_EVENTS__TERM_TYPE_DRV_CFG:
1299− ADD_CONFIG_TERM_STR(DRV_CFG, term->val.str);
1293+ ADD_CONFIG_TERM_STR(DRV_CFG, term->val.str, term->weak);
13001294 break;
13011295 case PARSE_EVENTS__TERM_TYPE_PERCORE:
13021296 ADD_CONFIG_TERM_VAL(PERCORE, percore,
1303− term->val.num ? true : false);
1297+ term->val.num ? true : false, term->weak);
13041298 break;
13051299 case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
13061300 ADD_CONFIG_TERM_VAL(AUX_OUTPUT, aux_output,
1307− term->val.num ? 1 : 0);
1301+ term->val.num ? 1 : 0, term->weak);
13081302 break;
13091303 case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
13101304 ADD_CONFIG_TERM_VAL(AUX_SAMPLE_SIZE, aux_sample_size,
1311− term->val.num);
1305+ term->val.num, term->weak);
13121306 break;
13131307 default:
13141308 break;
@@ -1345,7 +1339,7 @@ static int get_config_chgs(struct perf_pmu *pmu, struct list_head *head_config, · 30 unmodified lines
13451339 }
13461340
13471341 if (bits)
1348− ADD_CONFIG_TERM_VAL(CFG_CHG, cfg_chg, bits);
1342+ ADD_CONFIG_TERM_VAL(CFG_CHG, cfg_chg, bits, false);
13491343
13501344 #undef ADD_CONFIG_TERM
13511345 return 0;
tools/perf/util/probe-file.c+3−0
@@ -206,6 +206,9 @@ static struct strlist *__probe_file__get_namelist(int fd, bool include_group) · 205 unmodified lines
206206 } else
207207 ret = strlist__add(sl, tev.event);
208208 clear_probe_trace_event(&tev);
209+ /* Skip if there is same name multi-probe event in the list */
210+ if (ret == -EEXIST)
211+ ret = 0;
209212 if (ret < 0)
210213 break;
211214 }
tools/perf/util/probe-finder.c+8−3
@@ -637,14 +637,19 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwfl_Module *mod, · 636 unmodified lines
637637 return -EINVAL;
638638 }
639639
640− /* Try to get actual symbol name from symtab */
641− symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
640+ if (dwarf_entrypc(sp_die, &eaddr) == 0) {
641+ /* If the DIE has entrypc, use it. */
642+ symbol = dwarf_diename(sp_die);
643+ } else {
644+ /* Try to get actual symbol name and address from symtab */
645+ symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
646+ eaddr = sym.st_value;
647+ }
642648 if (!symbol) {
643649 pr_warning("Failed to find symbol at 0x%lx\n",
644650 (unsigned long)paddr);
645651 return -ENOENT;
646652 }
647− eaddr = sym.st_value;
648653
649654 tp->offset = (unsigned long)(paddr - eaddr);
650655 tp->address = (unsigned long)paddr;
tools/perf/util/setup.py+6−4
@@ -2,11 +2,13 @@ from os import getenv · 1 unmodified line
22 from subprocess import Popen, PIPE
33 from re import sub
44
5+cc = getenv("CC")
6+cc_is_clang = b"clang version" in Popen([cc, "-v"], stderr=PIPE).stderr.readline()
7+
58 def clang_has_option(option):
6− return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if b"unknown argument" in o] == [ ]
9+ return [o for o in Popen([cc, option], stderr=PIPE).stderr.readlines() if b"unknown argument" in o] == [ ]
710
8−cc = getenv("CC")
9−if cc == "clang":
11+if cc_is_clang:
1012 from distutils.sysconfig import get_config_vars
1113 vars = get_config_vars()
1214 for var in ('CFLAGS', 'OPT'):
@@ -40,7 +42,7 @@ class install_lib(_install_lib): · 27 unmodified lines
4042 cflags = getenv('CFLAGS', '').split()
4143 # switch off several checks (need to be at the end of cflags list)
4244 cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls' ]
43−if cc != "clang":
45+if not cc_is_clang:
4446 cflags += ['-Wno-cast-function-type' ]
4547
4648 src_perf = getenv('srctree') + '/tools/perf'
tools/perf/util/symbol.c+6−7
@@ -1622,7 +1622,12 @@ int dso__load(struct dso *dso, struct map *map) · 1621 unmodified lines
16221622 goto out;
16231623 }
16241624
1625− if (dso->kernel) {
1625+ kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
1626+ dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
1627+ dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
1628+ dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
1629+
1630+ if (dso->kernel && !kmod) {
16261631 if (dso->kernel == DSO_TYPE_KERNEL)
16271632 ret = dso__load_kernel_sym(dso, map);
16281633 else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
@@ -1650,12 +1655,6 @@ int dso__load(struct dso *dso, struct map *map) · 21 unmodified lines
16501655 if (!name)
16511656 goto out;
16521657
1653− kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
1654− dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
1655− dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
1656− dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
1657−
1658−
16591658 /*
16601659 * Read the build id if possible. This is required for
16611660 * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
tools/power/cpupower/utils/idle_monitor/amd_fam14h_idle.c+1−1
@@ -82,7 +82,7 @@ static struct pci_access *pci_acc; · 81 unmodified lines
8282 static struct pci_dev *amd_fam14h_pci_dev;
8383 static int nbp1_entered;
8484
85−struct timespec start_time;
85+static struct timespec start_time;
8686 static unsigned long long timediff;
8787
8888 #ifdef DEBUG
tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c+1−1
@@ -19,7 +19,7 @@ struct cpuidle_monitor cpuidle_sysfs_monitor; · 18 unmodified lines
1919
2020 static unsigned long long **previous_count;
2121 static unsigned long long **current_count;
22−struct timespec start_time;
22+static struct timespec start_time;
2323 static unsigned long long timediff;
2424
2525 static int cpuidle_get_count_percent(unsigned int id, double *percent,
tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c+2−0
@@ -27,6 +27,8 @@ struct cpuidle_monitor *all_monitors[] = { · 26 unmodified lines
2727 0
2828 };
2929
30+int cpu_count;
31+
3032 static struct cpuidle_monitor *monitors[MONITORS_MAX];
3133 static unsigned int avail_monitors;
3234
tools/power/cpupower/utils/idle_monitor/cpupower-monitor.h+1−1
@@ -25,7 +25,7 @@ · 24 unmodified lines
2525 #endif
2626 #define CSTATE_DESC_LEN 60
2727
28−int cpu_count;
28+extern int cpu_count;
2929
3030 /* Hard to define the right names ...: */
3131 enum power_range_e {
tools/power/x86/turbostat/Makefile+1−1
@@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2 · 15 unmodified lines
1616
1717 %: %.c
1818 @mkdir -p $(BUILD_OUTPUT)
19− $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS)
19+ $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap
2020
2121 .PHONY : clean
2222 clean :
tools/power/x86/turbostat/turbostat.c+113−29
@@ -30,7 +30,7 @@ · 29 unmodified lines
3030 #include <sched.h>
3131 #include <time.h>
3232 #include <cpuid.h>
33−#include <linux/capability.h>
33+#include <sys/capability.h>
3434 #include <errno.h>
3535 #include <math.h>
3636
@@ -304,6 +304,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ · 267 unmodified lines
304304
305305 void setup_all_buffers(void);
306306
307+char *sys_lpi_file;
308+char *sys_lpi_file_sysfs = "/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us";
309+char *sys_lpi_file_debugfs = "/sys/kernel/debug/pmc_core/slp_s0_residency_usec";
310+
307311 int cpu_is_not_present(int cpu)
308312 {
309313 return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);
@@ -2916,8 +2920,6 @@ int snapshot_gfx_mhz(void) · 2606 unmodified lines
29162920 *
29172921 * record snapshot of
29182922 * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us
2919− *
2920− * return 1 if config change requires a restart, else return 0
29212923 */
29222924 int snapshot_cpu_lpi_us(void)
29232925 {
@@ -2941,17 +2943,14 @@ int snapshot_cpu_lpi_us(void) · 17 unmodified lines
29412943 /*
29422944 * snapshot_sys_lpi()
29432945 *
2944− * record snapshot of
2945− * /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us
2946− *
2947− * return 1 if config change requires a restart, else return 0
2946+ * record snapshot of sys_lpi_file
29482947 */
29492948 int snapshot_sys_lpi_us(void)
29502949 {
29512950 FILE *fp;
29522951 int retval;
29532952
2954− fp = fopen_or_die("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", "r");
2953+ fp = fopen_or_die(sys_lpi_file, "r");
29552954
29562955 retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us);
29572956 if (retval != 1) {
@@ -3151,28 +3150,42 @@ void check_dev_msr() · 193 unmodified lines
31513150 err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" ");
31523151 }
31533152
3154−void check_permissions()
3153+/*
3154+ * check for CAP_SYS_RAWIO
3155+ * return 0 on success
3156+ * return 1 on fail
3157+ */
3158+int check_for_cap_sys_rawio(void)
31553159 {
3156− struct __user_cap_header_struct cap_header_data;
3157− cap_user_header_t cap_header = &cap_header_data;
3158− struct __user_cap_data_struct cap_data_data;
3159− cap_user_data_t cap_data = &cap_data_data;
3160− extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
3161− int do_exit = 0;
3162− char pathname[32];
3160+ cap_t caps;
3161+ cap_flag_value_t cap_flag_value;
31633162
3164− /* check for CAP_SYS_RAWIO */
3165− cap_header->pid = getpid();
3166− cap_header->version = _LINUX_CAPABILITY_VERSION;
3167− if (capget(cap_header, cap_data) < 0)
3168− err(-6, "capget(2) failed");
3163+ caps = cap_get_proc();
3164+ if (caps == NULL)
3165+ err(-6, "cap_get_proc\n");
31693166
3170− if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) {
3171− do_exit++;
3167+ if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value))
3168+ err(-6, "cap_get\n");
3169+
3170+ if (cap_flag_value != CAP_SET) {
31723171 warnx("capget(CAP_SYS_RAWIO) failed,"
31733172 " try \"# setcap cap_sys_rawio=ep %s\"", progname);
3173+ return 1;
31743174 }
31753175
3176+ if (cap_free(caps) == -1)
3177+ err(-6, "cap_free\n");
3178+
3179+ return 0;
3180+}
3181+void check_permissions(void)
3182+{
3183+ int do_exit = 0;
3184+ char pathname[32];
3185+
3186+ /* check for CAP_SYS_RAWIO */
3187+ do_exit += check_for_cap_sys_rawio();
3188+
31763189 /* test file permissions */
31773190 sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
31783191 if (euidaccess(pathname, R_OK)) {
@@ -3265,6 +3278,7 @@ int probe_nhm_msrs(unsigned int family, unsigned int model) · 86 unmodified lines
32653278 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
32663279 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
32673280 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */
3281+ case INTEL_FAM6_ATOM_TREMONT: /* EHL */
32683282 pkg_cstate_limits = glm_pkg_cstate_limits;
32693283 break;
32703284 default:
@@ -3336,6 +3350,17 @@ int is_skx(unsigned int family, unsigned int model) · 65 unmodified lines
33363350 }
33373351 return 0;
33383352 }
3353+int is_ehl(unsigned int family, unsigned int model)
3354+{
3355+ if (!genuine_intel)
3356+ return 0;
3357+
3358+ switch (model) {
3359+ case INTEL_FAM6_ATOM_TREMONT:
3360+ return 1;
3361+ }
3362+ return 0;
3363+}
33393364
33403365 int has_turbo_ratio_limit(unsigned int family, unsigned int model)
33413366 {
@@ -3478,6 +3503,23 @@ dump_cstate_pstate_config_info(unsigned int family, unsigned int model) · 136 unmodified lines
34783503 dump_nhm_cst_cfg();
34793504 }
34803505
3506+static void dump_sysfs_file(char *path)
3507+{
3508+ FILE *input;
3509+ char cpuidle_buf[64];
3510+
3511+ input = fopen(path, "r");
3512+ if (input == NULL) {
3513+ if (debug)
3514+ fprintf(outf, "NSFOD %s\n", path);
3515+ return;
3516+ }
3517+ if (!fgets(cpuidle_buf, sizeof(cpuidle_buf), input))
3518+ err(1, "%s: failed to read file", path);
3519+ fclose(input);
3520+
3521+ fprintf(outf, "%s: %s", strrchr(path, '/') + 1, cpuidle_buf);
3522+}
34813523 static void
34823524 dump_sysfs_cstate_config(void)
34833525 {
@@ -3491,6 +3533,15 @@ dump_sysfs_cstate_config(void) · 7 unmodified lines
34913533 if (!DO_BIC(BIC_sysfs))
34923534 return;
34933535
3536+ if (access("/sys/devices/system/cpu/cpuidle", R_OK)) {
3537+ fprintf(outf, "cpuidle not loaded\n");
3538+ return;
3539+ }
3540+
3541+ dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_driver");
3542+ dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor");
3543+ dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor_ro");
3544+
34943545 for (state = 0; state < 10; ++state) {
34953546
34963547 sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name",
@@ -3894,6 +3945,20 @@ void rapl_probe_intel(unsigned int family, unsigned int model) · 397 unmodified lines
38943945 else
38953946 BIC_PRESENT(BIC_PkgWatt);
38963947 break;
3948+ case INTEL_FAM6_ATOM_TREMONT: /* EHL */
3949+ do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
3950+ if (rapl_joules) {
3951+ BIC_PRESENT(BIC_Pkg_J);
3952+ BIC_PRESENT(BIC_Cor_J);
3953+ BIC_PRESENT(BIC_RAM_J);
3954+ BIC_PRESENT(BIC_GFX_J);
3955+ } else {
3956+ BIC_PRESENT(BIC_PkgWatt);
3957+ BIC_PRESENT(BIC_CorWatt);
3958+ BIC_PRESENT(BIC_RAMWatt);
3959+ BIC_PRESENT(BIC_GFXWatt);
3960+ }
3961+ break;
38973962 case INTEL_FAM6_SKYLAKE_L: /* SKL */
38983963 case INTEL_FAM6_CANNONLAKE_L: /* CNL */
38993964 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
@@ -4295,6 +4360,7 @@ int has_snb_msrs(unsigned int family, unsigned int model) · 395 unmodified lines
42954360 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
42964361 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
42974362 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */
4363+ case INTEL_FAM6_ATOM_TREMONT: /* EHL */
42984364 return 1;
42994365 }
43004366 return 0;
@@ -4324,6 +4390,7 @@ int has_c8910_msrs(unsigned int family, unsigned int model) · 23 unmodified lines
43244390 case INTEL_FAM6_CANNONLAKE_L: /* CNL */
43254391 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
43264392 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
4393+ case INTEL_FAM6_ATOM_TREMONT: /* EHL */
43274394 return 1;
43284395 }
43294396 return 0;
@@ -4610,14 +4677,24 @@ unsigned int intel_model_duplicates(unsigned int model) · 280 unmodified lines
46104677 case INTEL_FAM6_SKYLAKE:
46114678 case INTEL_FAM6_KABYLAKE_L:
46124679 case INTEL_FAM6_KABYLAKE:
4680+ case INTEL_FAM6_COMETLAKE_L:
4681+ case INTEL_FAM6_COMETLAKE:
46134682 return INTEL_FAM6_SKYLAKE_L;
46144683
46154684 case INTEL_FAM6_ICELAKE_L:
46164685 case INTEL_FAM6_ICELAKE_NNPI:
4686+ case INTEL_FAM6_TIGERLAKE_L:
4687+ case INTEL_FAM6_TIGERLAKE:
46174688 return INTEL_FAM6_CANNONLAKE_L;
46184689
46194690 case INTEL_FAM6_ATOM_TREMONT_D:
46204691 return INTEL_FAM6_ATOM_GOLDMONT_D;
4692+
4693+ case INTEL_FAM6_ATOM_TREMONT_L:
4694+ return INTEL_FAM6_ATOM_TREMONT;
4695+
4696+ case INTEL_FAM6_ICELAKE_X:
4697+ return INTEL_FAM6_SKYLAKE_X;
46214698 }
46224699 return model;
46234700 }
@@ -4872,7 +4949,8 @@ void process_cpuid() · 248 unmodified lines
48724949 do_slm_cstates = is_slm(family, model);
48734950 do_knl_cstates = is_knl(family, model);
48744951
4875− if (do_slm_cstates || do_knl_cstates || is_cnl(family, model))
4952+ if (do_slm_cstates || do_knl_cstates || is_cnl(family, model) ||
4953+ is_ehl(family, model))
48764954 BIC_NOT_PRESENT(BIC_CPU_c3);
48774955
48784956 if (!quiet)
@@ -4907,10 +4985,16 @@ void process_cpuid() · 28 unmodified lines
49074985 else
49084986 BIC_NOT_PRESENT(BIC_CPU_LPI);
49094987
4910− if (!access("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", R_OK))
4988+ if (!access(sys_lpi_file_sysfs, R_OK)) {
4989+ sys_lpi_file = sys_lpi_file_sysfs;
49114990 BIC_PRESENT(BIC_SYS_LPI);
4912− else
4991+ } else if (!access(sys_lpi_file_debugfs, R_OK)) {
4992+ sys_lpi_file = sys_lpi_file_debugfs;
4993+ BIC_PRESENT(BIC_SYS_LPI);
4994+ } else {
4995+ sys_lpi_file_sysfs = NULL;
49134996 BIC_NOT_PRESENT(BIC_SYS_LPI);
4997+ }
49144998
49154999 if (!quiet)
49165000 decode_misc_feature_control();
@@ -5306,7 +5390,7 @@ int get_and_dump_counters(void) · 389 unmodified lines
53065390 }
53075391
53085392 void print_version() {
5309− fprintf(outf, "turbostat version 19.08.31"
5393+ fprintf(outf, "turbostat version 20.03.20"
53105394 " - Len Brown <lenb@kernel.org>\n");
53115395 }
53125396
@@ -5323,9 +5407,9 @@ int add_counter(unsigned int msr_num, char *path, char *name, · 10 unmodified lines
53235407 }
53245408
53255409 msrp->msr_num = msr_num;
5326− strncpy(msrp->name, name, NAME_BYTES);
5410+ strncpy(msrp->name, name, NAME_BYTES - 1);
53275411 if (path)
5328− strncpy(msrp->path, path, PATH_BYTES);
5412+ strncpy(msrp->path, path, PATH_BYTES - 1);
53295413 msrp->width = width;
53305414 msrp->type = type;
53315415 msrp->format = format;
tools/scripts/Makefile.include+2−2
@@ -1,8 +1,8 @@
11 # SPDX-License-Identifier: GPL-2.0
22 ifneq ($(O),)
33 ifeq ($(origin O), command line)
4− dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
5− ABSOLUTE_O := $(shell cd $(O) ; pwd)
4+ dummy := $(if $(shell cd $(PWD); test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
5+ ABSOLUTE_O := $(shell cd $(PWD); cd $(O) ; pwd)
66 OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/)
77 COMMAND_O := O=$(ABSOLUTE_O)
88 ifeq ($(objtree),)
tools/testing/ktest/ktest.pl+8−8
@@ -30,7 +30,7 @@ my %default = ( · 29 unmodified lines
3030 "EMAIL_WHEN_STARTED" => 0,
3131 "NUM_TESTS" => 1,
3232 "TEST_TYPE" => "build",
33− "BUILD_TYPE" => "randconfig",
33+ "BUILD_TYPE" => "oldconfig",
3434 "MAKE_CMD" => "make",
3535 "CLOSE_CONSOLE_SIGNAL" => "INT",
3636 "TIMEOUT" => 120,
@@ -1030,7 +1030,7 @@ sub __read_config { · 993 unmodified lines
10301030 }
10311031
10321032 if (!$skip && $rest !~ /^\s*$/) {
1033− die "$name: $.: Gargbage found after $type\n$_";
1033+ die "$name: $.: Garbage found after $type\n$_";
10341034 }
10351035
10361036 if ($skip && $type eq "TEST_START") {
@@ -1063,7 +1063,7 @@ sub __read_config { · 26 unmodified lines
10631063 }
10641064
10651065 if ($rest !~ /^\s*$/) {
1066− die "$name: $.: Gargbage found after DEFAULTS\n$_";
1066+ die "$name: $.: Garbage found after DEFAULTS\n$_";
10671067 }
10681068
10691069 } elsif (/^\s*INCLUDE\s+(\S+)/) {
@@ -1154,7 +1154,7 @@ sub __read_config { · 84 unmodified lines
11541154 # on of these sections that have SKIP defined.
11551155 # The save variable can be
11561156 # defined multiple times and the new one simply overrides
1157− # the prevous one.
1157+ # the previous one.
11581158 set_variable($lvalue, $rvalue);
11591159
11601160 } else {
@@ -1234,7 +1234,7 @@ sub read_config { · 73 unmodified lines
12341234 foreach my $option (keys %not_used) {
12351235 print "$option\n";
12361236 }
1237− print "Set IGRNORE_UNUSED = 1 to have ktest ignore unused variables\n";
1237+ print "Set IGNORE_UNUSED = 1 to have ktest ignore unused variables\n";
12381238 if (!read_yn "Do you want to continue?") {
12391239 exit -1;
12401240 }
@@ -1345,7 +1345,7 @@ sub eval_option { · 104 unmodified lines
13451345 # Check for recursive evaluations.
13461346 # 100 deep should be more than enough.
13471347 if ($r++ > 100) {
1348− die "Over 100 evaluations accurred with $option\n" .
1348+ die "Over 100 evaluations occurred with $option\n" .
13491349 "Check for recursive variables\n";
13501350 }
13511351 $prev = $option;
@@ -1383,7 +1383,7 @@ sub reboot { · 31 unmodified lines
13831383
13841384 } else {
13851385 # Make sure everything has been written to disk
1386− run_ssh("sync");
1386+ run_ssh("sync", 10);
13871387
13881388 if (defined($time)) {
13891389 start_monitor;
@@ -1461,7 +1461,7 @@ sub get_test_name() { · 71 unmodified lines
14611461
14621462 sub dodie {
14631463
1464− # avoid recusion
1464+ # avoid recursion
14651465 return if ($in_die);
14661466 $in_die = 1;
14671467
tools/testing/ktest/sample.conf+11−11
@@ -10,7 +10,7 @@ · 9 unmodified lines
1010 #
1111
1212 # Options set in the beginning of the file are considered to be
13−# default options. These options can be overriden by test specific
13+# default options. These options can be overridden by test specific
1414 # options, with the following exceptions:
1515 #
1616 # LOG_FILE
@@ -204,7 +204,7 @@ · 187 unmodified lines
204204 #
205205 # This config file can also contain "config variables".
206206 # These are assigned with ":=" instead of the ktest option
207−# assigment "=".
207+# assignment "=".
208208 #
209209 # The difference between ktest options and config variables
210210 # is that config variables can be used multiple times,
@@ -263,7 +263,7 @@ · 52 unmodified lines
263263 #### Using options in other options ####
264264 #
265265 # Options that are defined in the config file may also be used
266−# by other options. All options are evaulated at time of
266+# by other options. All options are evaluated at time of
267267 # use (except that config variables are evaluated at config
268268 # processing time).
269269 #
@@ -505,7 +505,7 @@ · 235 unmodified lines
505505 #TEST = ssh user@machine /root/run_test
506506
507507 # The build type is any make config type or special command
508−# (default randconfig)
508+# (default oldconfig)
509509 # nobuild - skip the clean and build step
510510 # useconfig:/path/to/config - use the given config and run
511511 # oldconfig on it.
@@ -707,7 +707,7 @@ · 195 unmodified lines
707707
708708 # Line to define a successful boot up in console output.
709709 # This is what the line contains, not the entire line. If you need
710−# the entire line to match, then use regural expression syntax like:
710+# the entire line to match, then use regular expression syntax like:
711711 # (do not add any quotes around it)
712712 #
713713 # SUCCESS_LINE = ^MyBox Login:$
@@ -839,7 +839,7 @@ · 125 unmodified lines
839839 # (ignored if POWEROFF_ON_SUCCESS is set)
840840 #REBOOT_ON_SUCCESS = 1
841841
842−# In case there are isses with rebooting, you can specify this
842+# In case there are issues with rebooting, you can specify this
843843 # to always powercycle after this amount of time after calling
844844 # reboot.
845845 # Note, POWERCYCLE_AFTER_REBOOT = 0 does NOT disable it. It just
@@ -848,7 +848,7 @@ · 2 unmodified lines
848848 # (default undefined)
849849 #POWERCYCLE_AFTER_REBOOT = 5
850850
851−# In case there's isses with halting, you can specify this
851+# In case there's issues with halting, you can specify this
852852 # to always poweroff after this amount of time after calling
853853 # halt.
854854 # Note, POWEROFF_AFTER_HALT = 0 does NOT disable it. It just
@@ -972,7 +972,7 @@ · 117 unmodified lines
972972 #
973973 # PATCHCHECK_START is required and is the first patch to
974974 # test (the SHA1 of the commit). You may also specify anything
975−# that git checkout allows (branch name, tage, HEAD~3).
975+# that git checkout allows (branch name, tag, HEAD~3).
976976 #
977977 # PATCHCHECK_END is the last patch to check (default HEAD)
978978 #
@@ -994,7 +994,7 @@ · 15 unmodified lines
994994 # IGNORE_WARNINGS is set for the given commit's sha1
995995 #
996996 # IGNORE_WARNINGS can be used to disable the failure of patchcheck
997−# on a particuler commit (SHA1). You can add more than one commit
997+# on a particular commit (SHA1). You can add more than one commit
998998 # by adding a list of SHA1s that are space delimited.
999999 #
10001000 # If BUILD_NOCLEAN is set, then make mrproper will not be run on
@@ -1093,7 +1093,7 @@ · 92 unmodified lines
10931093 # whatever reason. (Can't reboot, want to inspect each iteration)
10941094 # Doing a BISECT_MANUAL will have the test wait for you to
10951095 # tell it if the test passed or failed after each iteration.
1096−# This is basicall the same as running git bisect yourself
1096+# This is basically the same as running git bisect yourself
10971097 # but ktest will rebuild and install the kernel for you.
10981098 #
10991099 # BISECT_CHECK = 1 (optional, default 0)
@@ -1239,7 +1239,7 @@ · 139 unmodified lines
12391239 #
12401240 # CONFIG_BISECT_EXEC (optional)
12411241 # The config bisect is a separate program that comes with ktest.pl.
1242−# By befault, it will look for:
1242+# By default, it will look for:
12431243 # `pwd`/config-bisect.pl # the location ktest.pl was executed from.
12441244 # If it does not find it there, it will look for:
12451245 # `dirname <ktest.pl>`/config-bisect.pl # The directory that holds ktest.pl
tools/testing/selftests/Makefile+1−0
@@ -33,6 +33,7 @@ TARGETS += memory-hotplug · 32 unmodified lines
3333 TARGETS += mount
3434 TARGETS += mqueue
3535 TARGETS += net
36+TARGETS += net/forwarding
3637 TARGETS += net/mptcp
3738 TARGETS += netfilter
3839 TARGETS += networking/timestamping
tools/testing/selftests/bpf/prog_tests/send_signal_sched_switch.c+60−0
@@ -0,0 +1,60 @@
1+// SPDX-License-Identifier: GPL-2.0
2+#include <test_progs.h>
3+#include <stdio.h>
4+#include <stdlib.h>
5+#include <sys/mman.h>
6+#include <pthread.h>
7+#include <sys/types.h>
8+#include <sys/stat.h>
9+#include <fcntl.h>
10+#include "test_send_signal_kern.skel.h"
11+
12+static void sigusr1_handler(int signum)
13+{
14+}
15+
16+#define THREAD_COUNT 100
17+
18+static void *worker(void *p)
19+{
20+ int i;
21+
22+ for ( i = 0; i < 1000; i++)
23+ usleep(1);
24+
25+ return NULL;
26+}
27+
28+void test_send_signal_sched_switch(void)
29+{
30+ struct test_send_signal_kern *skel;
31+ pthread_t threads[THREAD_COUNT];
32+ u32 duration = 0;
33+ int i, err;
34+
35+ signal(SIGUSR1, sigusr1_handler);
36+
37+ skel = test_send_signal_kern__open_and_load();
38+ if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n"))
39+ return;
40+
41+ skel->bss->pid = getpid();
42+ skel->bss->sig = SIGUSR1;
43+
44+ err = test_send_signal_kern__attach(skel);
45+ if (CHECK(err, "skel_attach", "skeleton attach failed\n"))
46+ goto destroy_skel;
47+
48+ for (i = 0; i < THREAD_COUNT; i++) {
49+ err = pthread_create(threads + i, NULL, worker, NULL);
50+ if (CHECK(err, "pthread_create", "Error creating thread, %s\n",
51+ strerror(errno)))
52+ goto destroy_skel;
53+ }
54+
55+ for (i = 0; i < THREAD_COUNT; i++)
56+ pthread_join(threads[i], NULL);
57+
58+destroy_skel:
59+ test_send_signal_kern__destroy(skel);
60+}
tools/testing/selftests/bpf/progs/test_send_signal_kern.c+6−0
@@ -31,6 +31,12 @@ int send_signal_tp(void *ctx) · 30 unmodified lines
3131 return bpf_send_signal_test(ctx);
3232 }
3333
34+SEC("tracepoint/sched/sched_switch")
35+int send_signal_tp_sched(void *ctx)
36+{
37+ return bpf_send_signal_test(ctx);
38+}
39+
3440 SEC("perf_event")
3541 int send_signal_perf(void *ctx)
3642 {
tools/testing/selftests/bpf/test_btf.c+42−0
@@ -1062,6 +1062,48 @@ static struct btf_raw_test raw_tests[] = { · 1061 unmodified lines
10621062 .err_str = "Member exceeds struct_size",
10631063 },
10641064
1065+/* Test member unexceeds the size of struct
1066+ *
1067+ * enum E {
1068+ * E0,
1069+ * E1,
1070+ * };
1071+ *
1072+ * struct A {
1073+ * char m;
1074+ * enum E __attribute__((packed)) n;
1075+ * };
1076+ */
1077+{
1078+ .descr = "size check test #5",
1079+ .raw_types = {
1080+ /* int */ /* [1] */
1081+ BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, sizeof(int)),
1082+ /* char */ /* [2] */
1083+ BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 8, 1),
1084+ /* enum E { */ /* [3] */
1085+ BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 1),
1086+ BTF_ENUM_ENC(NAME_TBD, 0),
1087+ BTF_ENUM_ENC(NAME_TBD, 1),
1088+ /* } */
1089+ /* struct A { */ /* [4] */
1090+ BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 2),
1091+ BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* char m; */
1092+ BTF_MEMBER_ENC(NAME_TBD, 3, 8),/* enum E __attribute__((packed)) n; */
1093+ /* } */
1094+ BTF_END_RAW,
1095+ },
1096+ .str_sec = "\0E\0E0\0E1\0A\0m\0n",
1097+ .str_sec_size = sizeof("\0E\0E0\0E1\0A\0m\0n"),
1098+ .map_type = BPF_MAP_TYPE_ARRAY,
1099+ .map_name = "size_check5_map",
1100+ .key_size = sizeof(int),
1101+ .value_size = 2,
1102+ .key_type_id = 1,
1103+ .value_type_id = 4,
1104+ .max_entries = 4,
1105+},
1106+
10651107 /* typedef const void * const_void_ptr;
10661108 * struct A {
10671109 * const_void_ptr m;
tools/testing/selftests/bpf/verifier/jmp32.c+15−0
@@ -61,6 +61,21 @@ · 60 unmodified lines
6161 },
6262 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
6363 },
64+{
65+ "jset32: ignores upper bits",
66+ .insns = {
67+ BPF_MOV64_IMM(BPF_REG_0, 0),
68+ BPF_LD_IMM64(BPF_REG_7, 0x8000000000000000),
69+ BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),
70+ BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
71+ BPF_EXIT_INSN(),
72+ BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
73+ BPF_MOV64_IMM(BPF_REG_0, 2),
74+ BPF_EXIT_INSN(),
75+ },
76+ .result = ACCEPT,
77+ .retval = 2,
78+},
6479 {
6580 "jset32: min/max deduction",
6681 .insns = {
tools/testing/selftests/net/Makefile+3−1
@@ -11,7 +11,9 @@ TEST_PROGS += udpgso_bench.sh fib_rule_tests.sh msg_zerocopy.sh psock_snd.sh · 10 unmodified lines
1111 TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_any.sh
1212 TEST_PROGS += test_vxlan_fdb_changelink.sh so_txtime.sh ipv6_flowlabel.sh
1313 TEST_PROGS += tcp_fastopen_backup_key.sh fcnal-test.sh l2tp.sh traceroute.sh
14−TEST_PROGS += fin_ack_lat.sh
14+TEST_PROGS += fin_ack_lat.sh fib_nexthop_multiprefix.sh fib_nexthops.sh
15+TEST_PROGS += altnames.sh icmp_redirect.sh ip6_gre_headroom.sh
16+TEST_PROGS += route_localnet.sh
1517 TEST_PROGS_EXTENDED := in_netns.sh
1618 TEST_GEN_FILES = socket nettest
1719 TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
tools/testing/selftests/net/fib_tests.sh+31−3
@@ -1041,6 +1041,27 @@ ipv6_addr_metric_test() · 1040 unmodified lines
10411041 fi
10421042 log_test $rc 0 "Prefix route with metric on link up"
10431043
1044+ # verify peer metric added correctly
1045+ set -e
1046+ run_cmd "$IP -6 addr flush dev dummy2"
1047+ run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::1 peer 2001:db8:104::2 metric 260"
1048+ set +e
1049+
1050+ check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 260"
1051+ log_test $? 0 "Set metric with peer route on local side"
1052+ log_test $? 0 "User specified metric on local address"
1053+ check_route6 "2001:db8:104::2 dev dummy2 proto kernel metric 260"
1054+ log_test $? 0 "Set metric with peer route on peer side"
1055+
1056+ set -e
1057+ run_cmd "$IP -6 addr change dev dummy2 2001:db8:104::1 peer 2001:db8:104::3 metric 261"
1058+ set +e
1059+
1060+ check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 261"
1061+ log_test $? 0 "Modify metric and peer address on local side"
1062+ check_route6 "2001:db8:104::3 dev dummy2 proto kernel metric 261"
1063+ log_test $? 0 "Modify metric and peer address on peer side"
1064+
10441065 $IP li del dummy1
10451066 $IP li del dummy2
10461067 cleanup
@@ -1457,13 +1478,20 @@ ipv4_addr_metric_test() · 410 unmodified lines
14571478
14581479 run_cmd "$IP addr flush dev dummy2"
14591480 run_cmd "$IP addr add dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 260"
1460− run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 261"
14611481 rc=$?
14621482 if [ $rc -eq 0 ]; then
1463− check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261"
1483+ check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 260"
1484+ rc=$?
1485+ fi
1486+ log_test $rc 0 "Set metric of address with peer route"
1487+
1488+ run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.3 metric 261"
1489+ rc=$?
1490+ if [ $rc -eq 0 ]; then
1491+ check_route "172.16.104.3 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261"
14641492 rc=$?
14651493 fi
1466− log_test $rc 0 "Modify metric of address with peer route"
1494+ log_test $rc 0 "Modify metric and peer address for peer route"
14671495
14681496 $IP li del dummy1
14691497 $IP li del dummy2
tools/testing/selftests/net/forwarding/Makefile+76−0
@@ -0,0 +1,76 @@
1+# SPDX-License-Identifier: GPL-2.0+ OR MIT
2+
3+TEST_PROGS = bridge_igmp.sh \
4+ bridge_port_isolation.sh \
5+ bridge_sticky_fdb.sh \
6+ bridge_vlan_aware.sh \
7+ bridge_vlan_unaware.sh \
8+ ethtool.sh \
9+ gre_inner_v4_multipath.sh \
10+ gre_inner_v6_multipath.sh \
11+ gre_multipath.sh \
12+ ip6gre_inner_v4_multipath.sh \
13+ ip6gre_inner_v6_multipath.sh \
14+ ipip_flat_gre_key.sh \
15+ ipip_flat_gre_keys.sh \
16+ ipip_flat_gre.sh \
17+ ipip_hier_gre_key.sh \
18+ ipip_hier_gre_keys.sh \
19+ ipip_hier_gre.sh \
20+ loopback.sh \
21+ mirror_gre_bound.sh \
22+ mirror_gre_bridge_1d.sh \
23+ mirror_gre_bridge_1d_vlan.sh \
24+ mirror_gre_bridge_1q_lag.sh \
25+ mirror_gre_bridge_1q.sh \
26+ mirror_gre_changes.sh \
27+ mirror_gre_flower.sh \
28+ mirror_gre_lag_lacp.sh \
29+ mirror_gre_neigh.sh \
30+ mirror_gre_nh.sh \
31+ mirror_gre.sh \
32+ mirror_gre_vlan_bridge_1q.sh \
33+ mirror_gre_vlan.sh \
34+ mirror_vlan.sh \
35+ router_bridge.sh \
36+ router_bridge_vlan.sh \
37+ router_broadcast.sh \
38+ router_mpath_nh.sh \
39+ router_multicast.sh \
40+ router_multipath.sh \
41+ router.sh \
42+ router_vid_1.sh \
43+ sch_ets.sh \
44+ sch_tbf_ets.sh \
45+ sch_tbf_prio.sh \
46+ sch_tbf_root.sh \
47+ tc_actions.sh \
48+ tc_chains.sh \
49+ tc_flower_router.sh \
50+ tc_flower.sh \
51+ tc_shblocks.sh \
52+ tc_vlan_modify.sh \
53+ vxlan_asymmetric.sh \
54+ vxlan_bridge_1d_port_8472.sh \
55+ vxlan_bridge_1d.sh \
56+ vxlan_bridge_1q_port_8472.sh \
57+ vxlan_bridge_1q.sh \
58+ vxlan_symmetric.sh
59+
60+TEST_PROGS_EXTENDED := devlink_lib.sh \
61+ ethtool_lib.sh \
62+ fib_offload_lib.sh \
63+ forwarding.config.sample \
64+ ipip_lib.sh \
65+ lib.sh \
66+ mirror_gre_lib.sh \
67+ mirror_gre_topo_lib.sh \
68+ mirror_lib.sh \
69+ mirror_topo_lib.sh \
70+ sch_ets_core.sh \
71+ sch_ets_tests.sh \
72+ sch_tbf_core.sh \
73+ sch_tbf_etsprio.sh \
74+ tc_common.sh
75+
76+include ../../lib.mk
tools/testing/selftests/net/forwarding/ethtool_lib.sh+0−0

File mode changed from 100755 to 100644.

tools/testing/selftests/net/reuseport_addr_any.c+4−0
@@ -21,6 +21,10 @@ · 20 unmodified lines
2121 #include <sys/socket.h>
2222 #include <unistd.h>
2323
24+#ifndef SOL_DCCP
25+#define SOL_DCCP 269
26+#endif
27+
2428 static const char *IP4_ADDR = "127.0.0.1";
2529 static const char *IP6_ADDR = "::1";
2630 static const char *IP4_MAPPED6 = "::ffff:127.0.0.1";
tools/testing/selftests/netfilter/Makefile+5−1
@@ -3,6 +3,10 @@ · 2 unmodified lines
33
44 TEST_PROGS := nft_trans_stress.sh nft_nat.sh bridge_brouter.sh \
55 conntrack_icmp_related.sh nft_flowtable.sh ipvs.sh \
6− nft_concat_range.sh
6+ nft_concat_range.sh \
7+ nft_queue.sh
8+
9+LDLIBS = -lmnl
10+TEST_GEN_FILES = nf-queue
711
812 include ../lib.mk
tools/testing/selftests/netfilter/config+6−0

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

tools/testing/selftests/netfilter/nf-queue.c+352−0

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

tools/testing/selftests/netfilter/nft_queue.sh+332−0

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

tools/testing/selftests/tc-testing/config+1−0

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

tools/testing/selftests/wireguard/netns.sh+10−5

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

tools/testing/selftests/wireguard/qemu/Makefile+1−1

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

tools/testing/selftests/wireguard/qemu/init.c+0−1

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

tools/testing/selftests/wireguard/qemu/kernel.config+0−1

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

usr/Kconfig+11−11

This diff is large: its 34 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