History

Merge 5.12-rc6 into char-misc-next

We need the char/misc fixes in here as well.

Greg Kroah-Hartman committed 5 years ago

Commit 422d2242 parents b0077b4 e49d033884 files · +6978 −3902Browse files

Unified · Split

884 files
  1. .mailmap +3 −0
  2. Documentation/ABI/testing/sysfs-fs-xfs +1 −1
  3. Documentation/arm64/acpi_object_usage.rst +5 −5
  4. Documentation/arm64/silicon-errata.rst +3 −0
  5. Documentation/devicetree/bindings/sound/fsl,spdif.yaml +4 −0
  6. Documentation/networking/device_drivers/ethernet/amazon/ena.rst +1 −1
  7. Documentation/networking/devlink/devlink-dpipe.rst +1 −1
  8. Documentation/networking/devlink/devlink-port.rst +2 −2
  9. Documentation/networking/xfrm_device.rst +1 −1
  10. Documentation/virt/kvm/api.rst +6 −3
  11. MAINTAINERS +31 −35
  12. Makefile +1 −1
  13. arch/arm/boot/dts/am33xx.dtsi +3 −0
  14. arch/arm/boot/dts/at91-sam9x60ek.dts +0 −8
  15. arch/arm/boot/dts/at91-sama5d27_som1.dtsi +2 −2
  16. arch/arm/boot/dts/imx6ul-14x14-evk.dtsi +16 −6
  17. arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts +1 −0
  18. arch/arm/boot/dts/sam9x60.dtsi +9 −0
  19. arch/arm/mach-imx/avic.c +15 −1
  20. arch/arm/mach-imx/common.h +0 −1
  21. arch/arm/mach-imx/mach-imx1.c +0 −11
  22. arch/arm/mach-imx/mach-imx25.c +0 −12
  23. arch/arm/mach-imx/mach-imx27.c +0 −12
  24. arch/arm/mach-imx/mach-imx31.c +0 −1
  25. arch/arm/mach-imx/mach-imx35.c +0 −1
  26. arch/arm/mach-imx/mm-imx3.c +0 −24
  27. arch/arm/mach-omap2/sr_device.c +58 −17
  28. arch/arm64/Kconfig +10 −0
  29. arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi +1 −0
  30. arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +1 −0
  31. arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +1 −0
  32. arch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts +1 −1
  33. arch/arm64/boot/dts/freescale/imx8mp-phycore-som.dtsi +1 −1
  34. arch/arm64/include/asm/checksum.h +1 −1
  35. arch/arm64/include/asm/cpucaps.h +2 −1
  36. arch/arm64/include/asm/kvm_arm.h +1 −0
  37. arch/arm64/include/asm/processor.h +2 −0
  38. arch/arm64/include/asm/thread_info.h +2 −0
  39. arch/arm64/kernel/cpu_errata.c +8 −0
  40. arch/arm64/kernel/cpufeature.c +4 −2
  41. arch/arm64/kernel/cpuinfo.c +1 −1
  42. arch/arm64/kernel/crash_dump.c +2 −0
  43. arch/arm64/kernel/process.c +2 −0
  44. arch/arm64/kernel/stacktrace.c +5 −4
  45. arch/arm64/kvm/debug.c +2 −0
  46. arch/arm64/kvm/hyp/vgic-v3-sr.c +9 −0
  47. arch/arm64/mm/mmu.c +19 −2
  48. arch/csky/kernel/probes/ftrace.c +1 −1
  49. arch/ia64/kernel/err_inject.c +11 −11
  50. arch/ia64/kernel/mca.c +1 −1
  51. arch/mips/kernel/setup.c +1 −1
  52. arch/mips/kernel/vmlinux.lds.S +1 −1
  53. arch/powerpc/include/asm/cpu_has_feature.h +2 −2
  54. arch/powerpc/kernel/vdso32/gettimeofday.S +11 −0
  55. arch/powerpc/platforms/pseries/lpar.c +2 −1
  56. arch/powerpc/platforms/pseries/mobility.c +44 −4
  57. arch/riscv/Kconfig +3 −3
  58. arch/riscv/Kconfig.socs +2 −0
  59. arch/riscv/include/asm/asm-prototypes.h +16 −0
  60. arch/riscv/include/asm/irq.h +2 −0
  61. arch/riscv/include/asm/processor.h +1 −0
  62. arch/riscv/include/asm/ptrace.h +5 −0
  63. arch/riscv/include/asm/sbi.h +2 −2
  64. arch/riscv/include/asm/timex.h +2 −0
  65. arch/riscv/include/asm/uaccess.h +5 −2
  66. arch/riscv/kernel/Makefile +1 −0
  67. arch/riscv/kernel/entry.S +1 −0
  68. arch/riscv/kernel/probes/ftrace.c +10 −8
  69. arch/riscv/kernel/probes/kprobes.c +1 −2
  70. arch/riscv/kernel/process.c +1 −0
  71. arch/riscv/kernel/sbi.c +1 −1
  72. arch/riscv/kernel/setup.c +2 −1
  73. arch/riscv/kernel/stacktrace.c +1 −1
  74. arch/riscv/kernel/time.c +1 −0
  75. arch/riscv/kernel/traps.c +1 −0
  76. arch/riscv/mm/kasan_init.c +4 −2
  77. arch/s390/include/asm/pci.h +1 −1
  78. arch/s390/include/asm/vdso/data.h +1 −1
  79. arch/s390/kernel/perf_cpum_cf_diag.c +2 −1
  80. arch/s390/kernel/time.c +8 −2
  81. arch/s390/kernel/vtime.c +1 −1
  82. arch/s390/pci/pci.c +24 −4
  83. arch/s390/pci/pci_event.c +6 −12
  84. arch/x86/Makefile +1 −1
  85. arch/x86/events/intel/core.c +3 −0
  86. arch/x86/events/intel/ds.c +1 −1
  87. arch/x86/include/asm/kvm_host.h +26 −8
  88. arch/x86/include/asm/processor.h +0 −9
  89. arch/x86/include/asm/smp.h +1 −0
  90. arch/x86/include/asm/thread_info.h +14 −1
  91. arch/x86/include/asm/xen/page.h +0 −12
  92. arch/x86/kernel/acpi/boot.c +12 −13
  93. arch/x86/kernel/apic/apic.c +5 −0
  94. arch/x86/kernel/apic/io_apic.c +10 −0
  95. arch/x86/kernel/kprobes/ftrace.c +1 −1
  96. arch/x86/kernel/kvm.c +10 −13
  97. arch/x86/kernel/setup.c +3 −5
  98. arch/x86/kernel/signal.c +1 −23
  99. arch/x86/kernel/smpboot.c +1 −1
  100. arch/x86/kvm/Makefile +1 −1
  101. arch/x86/kvm/hyperv.c +81 −10
  102. arch/x86/kvm/hyperv.h +1 −0
  103. arch/x86/kvm/mmu/mmu.c +5 −4
  104. arch/x86/kvm/mmu/mmu_internal.h +5 −0
  105. arch/x86/kvm/mmu/tdp_iter.c +18 −12
  106. arch/x86/kvm/mmu/tdp_iter.h +3 −1
  107. arch/x86/kvm/mmu/tdp_mmu.c +29 −37
  108. arch/x86/kvm/mmu/tdp_mmu.h +23 −1
  109. arch/x86/kvm/svm/nested.c +23 −5
  110. arch/x86/kvm/svm/pmu.c +8 −0
  111. arch/x86/kvm/x86.c +104 −66
  112. arch/x86/kvm/x86.h +0 −1
  113. arch/x86/mm/mem_encrypt.c +1 −1
  114. arch/x86/net/bpf_jit_comp.c +25 −6
  115. arch/x86/platform/iris/iris.c +0 −1
  116. arch/x86/xen/p2m.c +2 −5
  117. arch/x86/xen/setup.c +14 −2
  118. arch/xtensa/kernel/coprocessor.S +33 −31
  119. arch/xtensa/mm/fault.c +4 −1
  120. block/bio.c +19 −4
  121. block/blk-merge.c +8 −0
  122. block/blk-mq-debugfs.c +0 −1
  123. block/partitions/core.c +7 −0
  124. drivers/acpi/acpica/nsaccess.c +1 −2
  125. drivers/acpi/internal.h +5 −1
  126. drivers/acpi/processor_idle.c +7 −0
  127. drivers/acpi/scan.c +39 −6
  128. drivers/acpi/tables.c +39 −3
  129. drivers/acpi/video_detect.c +1 −0
  130. drivers/atm/fore200e.c +0 −2
  131. drivers/auxdisplay/charlcd.c +8 −10
  132. drivers/base/dd.c +3 −0
  133. drivers/base/power/runtime.c +69 −42
  134. drivers/block/floppy.c +0 −1
  135. drivers/block/null_blk/main.c +21 −5
  136. drivers/block/null_blk/null_blk.h +1 −0
  137. drivers/block/xen-blkback/blkback.c +1 −1
  138. drivers/bluetooth/btrsi.c +0 −1
  139. drivers/bus/omap_l3_noc.c +2 −2
  140. drivers/bus/ti-sysc.c +3 −1
  141. drivers/char/applicom.c +0 −3
  142. drivers/char/toshiba.c +0 −1
  143. drivers/clk/qcom/clk-rcg2.c +9 −8
  144. drivers/clk/qcom/clk-rpmh.c +5 −2
  145. drivers/clk/qcom/gcc-sc7180.c +2 −2
  146. drivers/counter/stm32-timer-cnt.c +33 −22
  147. drivers/cpufreq/freq_table.c +2 −2
  148. drivers/extcon/extcon.c +1 −0
  149. drivers/firewire/nosy.c +7 −2
  150. drivers/firmware/efi/efi.c +2 −1
  151. drivers/firmware/efi/vars.c +4 −0
  152. drivers/gpio/gpiolib.c +9 −1
  153. drivers/gpu/drm/amd/amdgpu/amdgpu.h +3 −7
  154. drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +34 −98
  155. drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +89 −0
  156. drivers/gpu/drm/amd/amdgpu/amdgpu_display.h +3 −0
  157. drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +19 −12
  158. drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +2 −2
  159. drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +2 −5
  160. drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +5 −5
  161. drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +8 −1
  162. drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +8 −1
  163. drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +7 −1
  164. drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +8 −1
  165. drivers/gpu/drm/amd/amdgpu/dce_virtual.c +14 −1
  166. drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c +1 −1
  167. drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +3 −3
  168. drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h +1 −1
  169. drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c +1 −1
  170. drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c +1 −1
  171. drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c +1 −1
  172. drivers/gpu/drm/amd/amdkfd/kfd_priv.h +4 −4
  173. drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +2 −32
  174. drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c +1 −2
  175. drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +5 −0
  176. drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c +18 −8
  177. drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +56 −1
  178. drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +63 −11
  179. drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +24 −0
  180. drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +25 −0
  181. drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +3 −2
  182. drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c +5 −0
  183. drivers/gpu/drm/etnaviv/etnaviv_gem.c +2 −1
  184. drivers/gpu/drm/exynos/exynos5433_drm_decon.c +0 −1
  185. drivers/gpu/drm/i915/display/intel_atomic_plane.c +3 −2
  186. drivers/gpu/drm/i915/display/intel_dp.c +1 −3
  187. drivers/gpu/drm/i915/display/intel_dp_aux.c +7 −0
  188. drivers/gpu/drm/i915/display/intel_dp_link_training.c +58 −17
  189. drivers/gpu/drm/i915/display/intel_dp_link_training.h +1 −1
  190. drivers/gpu/drm/i915/display/intel_vdsc.c +2 −8
  191. drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +12 −1
  192. drivers/gpu/drm/i915/i915_perf.c +5 −8
  193. drivers/gpu/drm/i915/i915_reg.h +22 −1
  194. drivers/gpu/drm/i915/intel_pm.c +15 −1
  195. drivers/gpu/drm/i915/intel_runtime_pm.c +24 −5
  196. drivers/gpu/drm/i915/intel_runtime_pm.h +5 −0
  197. drivers/gpu/drm/imx/imx-drm-core.c +1 −1
  198. drivers/gpu/drm/imx/imx-ldb.c +11 −1
  199. drivers/gpu/drm/msm/adreno/a5xx_power.c +1 −1
  200. drivers/gpu/drm/msm/adreno/a6xx_gmu.c +1 −1
  201. drivers/gpu/drm/msm/adreno/a6xx_gpu.c +72 −36
  202. drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +7 −5
  203. drivers/gpu/drm/msm/dp/dp_aux.c +7 −0
  204. drivers/gpu/drm/msm/dsi/pll/dsi_pll.c +1 −1
  205. drivers/gpu/drm/msm/dsi/pll/dsi_pll.h +4 −2
  206. drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c +6 −5
  207. drivers/gpu/drm/msm/msm_atomic.c +5 −2
  208. drivers/gpu/drm/msm/msm_drv.c +12 −0
  209. drivers/gpu/drm/msm/msm_fence.c +1 −1
  210. drivers/gpu/drm/msm/msm_kms.h +2 −6
  211. drivers/gpu/drm/nouveau/dispnv50/disp.c +12 −1
  212. drivers/gpu/drm/nouveau/nouveau_bo.c +8 −0
  213. drivers/gpu/drm/omapdrm/dss/dsi.c +4 −3
  214. drivers/gpu/drm/rcar-du/rcar_du_encoder.c +6 −25
  215. drivers/gpu/drm/tegra/dc.c +13 −17
  216. drivers/gpu/drm/tegra/sor.c +7 −0
  217. drivers/gpu/host1x/bus.c +6 −4
  218. drivers/iio/adc/Kconfig +3 −0
  219. drivers/iio/adc/ab8500-gpadc.c +1 −1
  220. drivers/iio/adc/ad7949.c +1 −1
  221. drivers/iio/adc/qcom-spmi-vadc.c +1 −1
  222. drivers/iio/gyro/mpu3050-core.c +2 −0
  223. drivers/iio/humidity/hid-sensor-humidity.c +7 −5
  224. drivers/iio/imu/adis16400.c +1 −2
  225. drivers/iio/light/hid-sensor-prox.c +11 −2
  226. drivers/iio/temperature/hid-sensor-temperature.c +8 −6
  227. drivers/infiniband/hw/cxgb4/cm.c +2 −2
  228. drivers/infiniband/hw/hns/hns_roce_hw_v2.c +3 −1
  229. drivers/infiniband/hw/mlx5/devx.c +1 −1
  230. drivers/infiniband/hw/mlx5/qp.c +14 −4
  231. drivers/input/joydev.c +0 −1
  232. drivers/interconnect/bulk.c +1 −1
  233. drivers/interconnect/core.c +2 −0
  234. drivers/interconnect/qcom/msm8939.c +8 −8
  235. drivers/iommu/amd/init.c +20 −16
  236. drivers/iommu/tegra-smmu.c +3 −4
  237. drivers/isdn/capi/kcapi.c +2 −2
  238. drivers/isdn/hardware/mISDN/mISDNipac.c +1 −1
  239. drivers/md/dm-ioctl.c +1 −1
  240. drivers/md/dm-table.c +25 −8
  241. drivers/md/dm-verity-target.c +1 −1
  242. drivers/md/dm-zoned-target.c +1 −1
  243. drivers/md/dm.c +4 −1
  244. drivers/media/firewire/firedtv-fw.c +0 −1
  245. drivers/media/pci/cx18/cx18-alsa-main.c +0 −1
  246. drivers/media/pci/cx18/cx18-driver.c +0 −1
  247. drivers/media/pci/cx25821/cx25821-alsa.c +0 −1
  248. drivers/media/pci/cx88/cx88-alsa.c +0 −1
  249. drivers/media/pci/ivtv/ivtv-alsa-main.c +0 −1
  250. drivers/media/pci/ivtv/ivtv-driver.c +0 −3
  251. drivers/media/pci/sta2x11/sta2x11_vip.c +0 −1
  252. drivers/media/platform/atmel/atmel-isi.c +0 −1
  253. drivers/media/platform/atmel/atmel-sama5d2-isc.c +0 −1
  254. drivers/media/platform/marvell-ccic/cafe-driver.c +0 −4
  255. drivers/media/platform/stm32/stm32-dcmi.c +0 −1
  256. drivers/media/usb/cpia2/cpia2_v4l.c +0 −1
  257. drivers/media/usb/tm6000/tm6000-alsa.c +0 −1
  258. drivers/media/usb/tm6000/tm6000-dvb.c +0 −2
  259. drivers/mfd/intel_quark_i2c_gpio.c +4 −2
  260. drivers/misc/mei/client.c +7 −10
  261. drivers/mtd/maps/sun_uflash.c +0 −1
  262. drivers/net/arcnet/com20020-pci.c +19 −15
  263. drivers/net/bonding/bond_main.c +2 −6
  264. drivers/net/can/c_can/c_can.c +1 −23
  265. drivers/net/can/c_can/c_can_pci.c +2 −1
  266. drivers/net/can/c_can/c_can_platform.c +5 −1
  267. drivers/net/can/dev/netlink.c +1 −0
  268. drivers/net/can/flexcan.c +7 −1
  269. drivers/net/can/kvaser_pciefd.c +4 −0
  270. drivers/net/can/m_can/m_can.c +1 −4
  271. drivers/net/can/peak_canfd/peak_pciefd_main.c +0 −1
  272. drivers/net/can/sja1000/ems_pci.c +0 −1
  273. drivers/net/can/sja1000/ems_pcmcia.c +0 −1
  274. drivers/net/can/sja1000/kvaser_pci.c +0 −1
  275. drivers/net/can/sja1000/peak_pci.c +0 −2
  276. drivers/net/can/sja1000/peak_pcmcia.c +0 −1
  277. drivers/net/can/sja1000/plx_pci.c +0 −12
  278. drivers/net/can/usb/Kconfig +1 −0
  279. drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +3 −1
  280. drivers/net/can/usb/peak_usb/pcan_usb.c +0 −2
  281. drivers/net/can/usb/peak_usb/pcan_usb_fd.c +0 −3
  282. drivers/net/can/usb/peak_usb/pcan_usb_pro.c +0 −2
  283. drivers/net/dsa/b53/b53_common.c +7 −7
  284. drivers/net/dsa/bcm_sf2.c +8 −3
  285. drivers/net/dsa/mt7530.c +25 −27
  286. drivers/net/ethernet/broadcom/Kconfig +1 −1
  287. drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +1 −1
  288. drivers/net/ethernet/faraday/ftgmac100.c +1 −0
  289. drivers/net/ethernet/intel/e1000e/82571.c +2 −0
  290. drivers/net/ethernet/intel/e1000e/hw.h +3 −3
  291. drivers/net/ethernet/intel/e1000e/netdev.c +5 −1
  292. drivers/net/ethernet/intel/i40e/i40e_main.c +13 −0
  293. drivers/net/ethernet/intel/i40e/i40e_txrx.c +0 −12
  294. drivers/net/ethernet/intel/ice/ice_base.c +22 −2
  295. drivers/net/ethernet/intel/ice/ice_txrx.c +0 −17
  296. drivers/net/ethernet/intel/ice/ice_xsk.c +5 −5
  297. drivers/net/ethernet/intel/igb/e1000_hw.h +3 −3
  298. drivers/net/ethernet/intel/igb/igb.h +2 −2
  299. drivers/net/ethernet/intel/igb/igb_main.c +21 −12
  300. drivers/net/ethernet/intel/igb/igb_ptp.c +24 −7
  301. drivers/net/ethernet/intel/igc/igc.h +1 −1
  302. drivers/net/ethernet/intel/igc/igc_ethtool.c +4 −3
  303. drivers/net/ethernet/intel/igc/igc_main.c +9 −0
  304. drivers/net/ethernet/intel/igc/igc_ptp.c +40 −32
  305. drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +2 −1
  306. drivers/net/ethernet/marvell/Kconfig +2 −2
  307. drivers/net/ethernet/marvell/mv643xx_eth.c +1 −1
  308. drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h +0 −2
  309. drivers/net/ethernet/marvell/octeontx2/af/rvu.c +4 −2
  310. drivers/net/ethernet/marvell/octeontx2/af/rvu.h +1 −0
  311. drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +16 −2
  312. drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +36 −21
  313. drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +1 −1
  314. drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +1 −1
  315. drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +3 −1
  316. drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +5 −0
  317. drivers/net/ethernet/marvell/pxa168_eth.c +1 −1
  318. drivers/net/ethernet/mellanox/mlx5/core/en.h +4 −3
  319. drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +2 −1
  320. drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c +4 −4
  321. drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +2 −1
  322. drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c +4 −0
  323. drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +10 −1
  324. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +57 −24
  325. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +2 −2
  326. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +45 −12
  327. drivers/net/ethernet/mellanox/mlx5/core/en_tc.h +1 −0
  328. drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +2 −1
  329. drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c +1 −0
  330. drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +3 −1
  331. drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +4 −4
  332. drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c +1 −3
  333. drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c +4 −6
  334. drivers/net/ethernet/mellanox/mlx5/core/sf/mlx5_ifc_vhca_event.h +1 −1
  335. drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c +11 −12
  336. drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.h +3 −4
  337. drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c +1 −0
  338. drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v1.c +2 −2
  339. drivers/net/ethernet/netronome/nfp/flower/metadata.c +17 −7
  340. drivers/net/ethernet/netronome/nfp/flower/offload.c +18 −0
  341. drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +13 −2
  342. drivers/net/ethernet/pensando/ionic/ionic_txrx.c +7 −6
  343. drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +3 −0
  344. drivers/net/ethernet/realtek/r8169_main.c +4 −2
  345. drivers/net/ethernet/socionext/netsec.c +6 −3
  346. drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +2 −0
  347. drivers/net/ethernet/xilinx/xilinx_axienet_main.c +25 −12
  348. drivers/net/hamradio/scc.c +0 −1
  349. drivers/net/ipa/ipa_cmd.c +33 −17
  350. drivers/net/ipa/ipa_qmi.c +2 −0
  351. drivers/net/phy/broadcom.c +9 −0
  352. drivers/net/phy/phylink.c +1 −1
  353. drivers/net/usb/cdc-phonet.c +2 −0
  354. drivers/net/usb/r8152.c +4 −1
  355. drivers/net/veth.c +1 −2
  356. drivers/net/wan/hdlc_x25.c +41 −1
  357. drivers/net/wireless/admtek/adm8211.c +0 −1
  358. drivers/net/wireless/ath/ath5k/base.c +0 −1
  359. drivers/net/wireless/ath/ath9k/hw.c +0 −1
  360. drivers/net/wireless/ath/ath9k/init.c +0 −1
  361. drivers/net/wireless/atmel/atmel.c +0 −1
  362. drivers/net/wireless/atmel/atmel_cs.c +0 −1
  363. drivers/net/wireless/atmel/atmel_pci.c +0 −1
  364. drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c +0 −1
  365. drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c +0 −1
  366. drivers/net/wireless/cisco/airo.c +0 −1
  367. drivers/net/wireless/cisco/airo_cs.c +0 −1
  368. drivers/net/wireless/intersil/hostap/hostap_cs.c +0 −1
  369. drivers/net/wireless/intersil/hostap/hostap_pci.c +0 −1
  370. drivers/net/wireless/intersil/hostap/hostap_plx.c +0 −1
  371. drivers/net/wireless/ralink/rt2x00/rt2400pci.c +0 −1
  372. drivers/net/wireless/ralink/rt2x00/rt2500pci.c +0 −1
  373. drivers/net/wireless/ralink/rt2x00/rt2500usb.c +0 −1
  374. drivers/net/wireless/ralink/rt2x00/rt2800pci.c +0 −1
  375. drivers/net/wireless/ralink/rt2x00/rt2800usb.c +0 −1
  376. drivers/net/wireless/ralink/rt2x00/rt61pci.c +0 −2
  377. drivers/net/wireless/ralink/rt2x00/rt73usb.c +0 −1
  378. drivers/net/wireless/rsi/rsi_91x_main.c +0 −1
  379. drivers/net/wireless/rsi/rsi_91x_sdio.c +0 −1
  380. drivers/net/wireless/rsi/rsi_91x_usb.c +0 −1
  381. drivers/nvme/host/core.c +21 −43
  382. drivers/nvme/host/fabrics.h +7 −0
  383. drivers/nvme/host/fc.c +2 −2
  384. drivers/nvme/host/rdma.c +7 −4
  385. drivers/nvme/host/tcp.c +15 −5
  386. drivers/nvme/target/core.c +14 −3
  387. drivers/nvme/target/loop.c +2 −2
  388. drivers/nvme/target/tcp.c +1 −1
  389. drivers/parport/parport_amiga.c +0 −1
  390. drivers/parport/parport_atari.c +0 −1
  391. drivers/parport/parport_gsc.c +0 −1
  392. drivers/parport/parport_mfc3.c +0 −1
  393. drivers/parport/parport_sunbpp.c +0 −1
  394. drivers/pci/hotplug/rpadlpar_sysfs.c +6 −8
  395. drivers/pci/hotplug/s390_pci_hpc.c +2 −1
  396. drivers/pinctrl/intel/pinctrl-intel.c +8 −1
  397. drivers/pinctrl/pinctrl-microchip-sgpio.c +1 −1
  398. drivers/pinctrl/pinctrl-rockchip.c +8 −5
  399. drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +1 −1
  400. drivers/pinctrl/qcom/pinctrl-sc7280.c +8 −8
  401. drivers/pinctrl/qcom/pinctrl-sdx55.c +1 −1
  402. drivers/platform/x86/Kconfig +8 −3
  403. drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c +3 −0
  404. drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c +3 −0
  405. drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c +3 −0
  406. drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c +3 −0
  407. drivers/platform/x86/dell/dell-wmi-sysman/sysman.c +32 −52
  408. drivers/platform/x86/intel-hid.c +7 −0
  409. drivers/platform/x86/intel-vbtn.c +10 −2
  410. drivers/platform/x86/intel_pmc_core.c +35 −15
  411. drivers/platform/x86/intel_pmt_class.c +1 −1
  412. drivers/platform/x86/intel_pmt_crashlog.c +6 −7
  413. drivers/platform/x86/thinkpad_acpi.c +79 −29
  414. drivers/ptp/ptp_qoriq.c +7 −6
  415. drivers/s390/block/dasd.c +0 −1
  416. drivers/sbus/char/display7seg.c +0 −1
  417. drivers/scsi/hpsa.c +0 −1
  418. drivers/scsi/ibmvscsi/ibmvfc.c +56 −13
  419. drivers/scsi/lpfc/lpfc_debugfs.c +2 −2
  420. drivers/scsi/mpt3sas/mpt3sas_base.c +6 −2
  421. drivers/scsi/mpt3sas/mpt3sas_scsih.c +1 −1
  422. drivers/scsi/myrs.c +1 −1
  423. drivers/scsi/pcmcia/nsp_cs.c +0 −1
  424. drivers/scsi/qedi/qedi_main.c +1 −0
  425. drivers/scsi/qla2xxx/qla_target.c +5 −8
  426. drivers/scsi/qla2xxx/qla_target.h +1 −1
  427. drivers/scsi/qla2xxx/tcm_qla2xxx.c +0 −4
  428. drivers/scsi/scsi_transport_iscsi.c +13 −1
  429. drivers/scsi/sd_zbc.c +11 −8
  430. drivers/scsi/smartpqi/smartpqi_init.c +0 −1
  431. drivers/scsi/st.c +1 −1
  432. drivers/scsi/ufs/ufs-mediatek.c +1 −1
  433. drivers/sh/maple/maple.c +0 −1
  434. drivers/soc/litex/litex_soc_ctrl.c +0 −1
  435. drivers/soc/qcom/qcom-geni-se.c +0 −74
  436. drivers/soc/ti/omap_prm.c +6 −2
  437. drivers/spi/spi-cadence-quadspi.c +1 −0
  438. drivers/staging/comedi/drivers/cb_pcidas.c +1 −1
  439. drivers/staging/comedi/drivers/cb_pcidas64.c +1 −1
  440. drivers/staging/comedi/drivers/vmk80xx.c +0 −1
  441. drivers/staging/rtl8192e/rtllib.h +1 −1
  442. drivers/staging/rtl8192e/rtllib_rx.c +1 −1
  443. drivers/staging/vt6655/rxtx.h +2 −2
  444. drivers/target/target_core_pscsi.c +8 −1
  445. drivers/tee/optee/core.c +0 −1
  446. drivers/thermal/thermal_sysfs.c +3 −0
  447. drivers/thunderbolt/switch.c +8 −10
  448. drivers/thunderbolt/tb.c +4 −0
  449. drivers/tty/serial/icom.c +0 −2
  450. drivers/tty/serial/jsm/jsm_driver.c +0 −1
  451. drivers/tty/serial/qcom_geni_serial.c +0 −7
  452. drivers/usb/cdns3/cdnsp-ring.c +4 −1
  453. drivers/usb/class/cdc-acm.c +70 −50
  454. drivers/usb/core/quirks.c +4 −0
  455. drivers/usb/dwc2/hcd.c +3 −2
  456. drivers/usb/dwc3/dwc3-pci.c +2 −0
  457. drivers/usb/dwc3/dwc3-qcom.c +3 −0
  458. drivers/usb/dwc3/gadget.c +11 −11
  459. drivers/usb/gadget/configfs.c +10 −4
  460. drivers/usb/gadget/udc/amd5536udc_pci.c +5 −5
  461. drivers/usb/host/xhci-mtk.c +9 −1
  462. drivers/usb/misc/ldusb.c +0 −1
  463. drivers/usb/musb/musb_core.c +8 −4
  464. drivers/usb/storage/transport.c +7 −0
  465. drivers/usb/storage/unusual_devs.h +12 −0
  466. drivers/usb/typec/tcpm/tcpm.c +9 −2
  467. drivers/usb/typec/tps6598x.c +0 −1
  468. drivers/usb/usbip/vhci_hcd.c +2 −0
  469. drivers/usb/usbip/vudc_sysfs.c +1 −1
  470. drivers/vdpa/ifcvf/ifcvf_main.c +2 −3
  471. drivers/vdpa/mlx5/net/mlx5_vnet.c +2 −2
  472. drivers/vdpa/vdpa.c +10 −8
  473. drivers/vdpa/vdpa_sim/vdpa_sim.c +1 −1
  474. drivers/vdpa/vdpa_sim/vdpa_sim_net.c +2 −3
  475. drivers/vfio/Kconfig +2 −2
  476. drivers/vfio/pci/Kconfig +1 −1
  477. drivers/vfio/platform/Kconfig +2 −2
  478. drivers/vfio/vfio_iommu_type1.c +18 −8
  479. drivers/vhost/vdpa.c +11 −9
  480. drivers/vhost/vhost.c +1 −1
  481. drivers/video/fbdev/core/fbcon.c +3 −0
  482. drivers/video/fbdev/hyperv_fb.c +0 −3
  483. drivers/virtio/virtio.c +2 −4
  484. drivers/virtio/virtio_mmio.c +1 −2
  485. drivers/watchdog/cpu5wdt.c +0 −1
  486. drivers/watchdog/cpwd.c +0 −1
  487. drivers/watchdog/riowd.c +0 −1
  488. drivers/xen/Kconfig +2 −2
  489. fs/afs/dir.c +0 −1
  490. fs/afs/file.c +0 −1
  491. fs/afs/fs_operation.c +5 −2
  492. fs/afs/inode.c +0 −1
  493. fs/afs/internal.h +0 −1
  494. fs/afs/mntpt.c +0 −1
  495. fs/afs/write.c +1 −2
  496. fs/afs/xattr.c +7 −24
  497. fs/block_dev.c +6 −2
  498. fs/btrfs/Makefile +6 −4
  499. fs/btrfs/ctree.c +2 −0
  500. fs/btrfs/dev-replace.c +3 −0
  501. fs/btrfs/disk-io.c +17 −2
  502. fs/btrfs/extent-tree.c +22 −1
  503. fs/btrfs/extent_io.c +31 −2
  504. fs/btrfs/inode.c +35 −20
  505. fs/btrfs/qgroup.c +10 −2
  506. fs/btrfs/reada.c +18 −17
  507. fs/btrfs/tree-log.c +4 −4
  508. fs/btrfs/volumes.c +3 −0
  509. fs/cachefiles/bind.c +6 −0
  510. fs/cachefiles/rdwr.c +3 −4
  511. fs/cifs/cifs_swn.c +1 −1
  512. fs/cifs/cifsacl.c +5 −3
  513. fs/cifs/cifsglob.h +2 −2
  514. fs/cifs/cifspdu.h +5 −0
  515. fs/cifs/file.c +1 −0
  516. fs/cifs/fs_context.c +4 −2
  517. fs/cifs/inode.c +9 −1
  518. fs/cifs/smb2glob.h +1 −0
  519. fs/cifs/smb2misc.c +2 −2
  520. fs/cifs/smb2ops.c +20 −7
  521. fs/cifs/smb2transport.c +28 −9
  522. fs/cifs/transport.c +6 −1
  523. fs/ext4/balloc.c +26 −12
  524. fs/ext4/ext4.h +3 −0
  525. fs/ext4/extents.c +1 −1
  526. fs/ext4/fast_commit.c +7 −2
  527. fs/ext4/inode.c +10 −8
  528. fs/ext4/mballoc.c +9 −2
  529. fs/ext4/namei.c +39 −11
  530. fs/ext4/super.c +6 −1
  531. fs/ext4/sysfs.c +7 −0
  532. fs/ext4/verity.c +55 −34
  533. fs/ext4/xattr.c +5 −1
  534. fs/fuse/dev.c +16 −10
  535. fs/fuse/fuse_i.h +1 −0
  536. fs/fuse/virtio_fs.c +8 −1
  537. fs/gfs2/super.c +9 −5
  538. fs/io-wq.c +31 −13
  539. fs/io-wq.h +9 −1
  540. fs/io_uring.c +216 −155
  541. fs/iomap/swapfile.c +10 −0
  542. fs/locks.c +0 −3
  543. fs/nfsd/Kconfig +1 −0
  544. fs/nfsd/filecache.c +2 −0
  545. fs/nfsd/nfs4callback.c +1 −0
  546. fs/nfsd/nfs4proc.c +1 −1
  547. fs/nfsd/nfs4state.c +15 −40
  548. fs/reiserfs/xattr.h +1 −1
  549. fs/select.c +4 −6
  550. fs/squashfs/export.c +6 −2
  551. fs/squashfs/id.c +4 −2
  552. fs/squashfs/squashfs_fs.h +1 −0
  553. fs/squashfs/xattr_id.c +4 −2
  554. fs/xfs/xfs_inode.c +8 −6
  555. fs/xfs/xfs_itable.c +6 −0
  556. fs/xfs/xfs_mount.c +44 −46
  557. fs/xfs/xfs_symlink.c +2 −1
  558. fs/zonefs/super.c +87 −14
  559. include/acpi/acpi_bus.h +1 −0
  560. include/drm/ttm/ttm_bo_api.h +4 −2
  561. include/linux/acpi.h +8 −1
  562. include/linux/amba/bus.h +11 −0
  563. include/linux/blkdev.h +0 −2
  564. include/linux/bpf.h +25 −8
  565. include/linux/device-mapper.h +14 −1
  566. include/linux/efi.h +4 −2
  567. include/linux/extcon.h +23 −0
  568. include/linux/firmware/intel/stratix10-svc-client.h +1 −1
  569. include/linux/host1x.h +8 −1
  570. include/linux/hugetlb_cgroup.h +13 −2
  571. include/linux/if_macvlan.h +2 −1
  572. include/linux/io_uring.h +0 −25
  573. include/linux/memblock.h +2 −2
  574. include/linux/mlx5/qp.h +7 −0
  575. include/linux/mm.h +15 −3
  576. include/linux/mmu_notifier.h +5 −5
  577. include/linux/module.h +0 −3
  578. include/linux/mutex.h +1 −1
  579. include/linux/netdevice.h +2 −0
  580. include/linux/netfilter/x_tables.h +2 −5
  581. include/linux/pagemap.h +1 −1
  582. include/linux/qcom-geni-se.h +0 −2
  583. include/linux/restart_block.h +1 −0
  584. include/linux/skbuff.h +1 −0
  585. include/linux/sunrpc/svc_rdma.h +0 −1
  586. include/linux/thread_info.h +13 −0
  587. include/linux/usb_usual.h +2 −0
  588. include/linux/usermode_driver.h +1 −0
  589. include/linux/vdpa.h +5 −5
  590. include/linux/virtio.h +0 −2
  591. include/linux/ww_mutex.h +3 −2
  592. include/linux/xarray.h +3 −1
  593. include/net/dst.h +11 −0
  594. include/net/inet_connection_sock.h +1 −1
  595. include/net/netfilter/nf_tables.h +3 −0
  596. include/net/nexthop.h +24 −0
  597. include/net/red.h +10 −2
  598. include/net/rtnetlink.h +2 −0
  599. include/net/sock.h +1 −1
  600. include/scsi/scsi_transport_iscsi.h +1 −0
  601. include/trace/events/workqueue.h +3 −3
  602. include/uapi/linux/blkpg.h +2 −26
  603. include/uapi/linux/bpf.h +11 −5
  604. include/uapi/linux/fuse.h +2 −1
  605. include/uapi/linux/psample.h +1 −4
  606. kernel/bpf/bpf_inode_storage.c +1 −1
  607. kernel/bpf/bpf_struct_ops.c +1 −1
  608. kernel/bpf/core.c +2 −2
  609. kernel/bpf/preload/bpf_preload_kern.c +15 −4
  610. kernel/bpf/syscall.c +5 −0
  611. kernel/bpf/trampoline.c +168 −50
  612. kernel/bpf/verifier.c +25 −12
  613. kernel/fork.c +8 −9
  614. kernel/futex.c +1 −2
  615. kernel/gcov/clang.c +69 −0
  616. kernel/irq/irq_sim.c +2 −2
  617. kernel/irq/manage.c +4 −0
  618. kernel/jump_label.c +8 −0
  619. kernel/locking/mutex.c +14 −11
  620. kernel/power/energy_model.c +1 −1
  621. kernel/ptrace.c +1 −1
  622. kernel/reboot.c +0 −2
  623. kernel/signal.c +11 −3
  624. kernel/static_call.c +24 −18
  625. kernel/time/alarmtimer.c +1 −1
  626. kernel/time/hrtimer.c +1 −1
  627. kernel/time/posix-cpu-timers.c +1 −1
  628. kernel/trace/ftrace.c +44 −8
  629. kernel/trace/trace.c +2 −1
  630. kernel/usermode_driver.c +15 −6
  631. lib/math/div64.c +1 −0
  632. lib/test_xarray.c +14 −12
  633. lib/xarray.c +6 −5
  634. mm/highmem.c +2 −2
  635. mm/hugetlb.c +37 −4
  636. mm/hugetlb_cgroup.c +8 −2
  637. mm/kfence/core.c +9 −0
  638. mm/kmemleak.c +2 −1
  639. mm/memory.c +1 −1
  640. mm/mmu_notifier.c +23 −0
  641. mm/page-writeback.c +16 −0
  642. mm/z3fold.c +15 −1
  643. net/batman-adv/main.c +0 −1
  644. net/bridge/br_switchdev.c +2 −0
  645. net/can/isotp.c +8 −10
  646. net/core/dev.c +31 −2
  647. net/core/drop_monitor.c +23 −0
  648. net/core/dst.c +42 −17
  649. net/core/filter.c +10 −2
  650. net/core/flow_dissector.c +1 −1
  651. net/core/sock.c +28 −16
  652. net/dccp/ipv6.c +5 −0
  653. net/dsa/dsa2.c +7 −4
  654. net/ipv4/inet_connection_sock.c +5 −2
  655. net/ipv4/ipconfig.c +8 −6
  656. net/ipv4/netfilter/arp_tables.c +8 −8
  657. net/ipv4/netfilter/ip_tables.c +8 −8
  658. net/ipv4/route.c +8 −37
  659. net/ipv4/tcp_minisocks.c +5 −2
  660. net/ipv6/ip6_fib.c +1 −1
  661. net/ipv6/ip6_input.c +0 −10
  662. net/ipv6/netfilter/ip6_tables.c +8 −8
  663. net/ipv6/route.c +9 −27
  664. net/ipv6/tcp_ipv6.c +5 −0
  665. net/mac80211/aead_api.c +3 −2
  666. net/mac80211/aes_gmac.c +3 −2
  667. net/mac80211/cfg.c +2 −2
  668. net/mac80211/ibss.c +2 −0
  669. net/mac80211/main.c +12 −1
  670. net/mac80211/mlme.c +1 −1
  671. net/mac80211/rc80211_minstrel_ht.c +0 −2
  672. net/mac80211/util.c +1 −1
  673. net/mptcp/options.c +14 −10
  674. net/mptcp/protocol.c +2 −2
  675. net/mptcp/subflow.c +5 −0
  676. net/netfilter/nf_conntrack_netlink.c +1 −0
  677. net/netfilter/nf_conntrack_proto_gre.c +0 −3
  678. net/netfilter/nf_flow_table_core.c +1 −1
  679. net/netfilter/nf_tables_api.c +21 −1
  680. net/netfilter/x_tables.c +34 −15
  681. net/openvswitch/conntrack.c +5 −3
  682. net/openvswitch/conntrack.h +4 −2
  683. net/openvswitch/flow.c +3 −1
  684. net/qrtr/qrtr.c +5 −0
  685. net/sched/act_ct.c +4 −2
  686. net/sched/cls_api.c +1 −0
  687. net/sched/cls_flower.c +1 −1
  688. net/sched/sch_choke.c +4 −3
  689. net/sched/sch_gred.c +1 −1
  690. net/sched/sch_htb.c +13 −6
  691. net/sched/sch_red.c +5 −2
  692. net/sched/sch_sfq.c +1 −1
  693. net/sctp/output.c +0 −7
  694. net/sctp/outqueue.c +7 −0
  695. net/sunrpc/auth_gss/svcauth_gss.c +7 −4
  696. net/sunrpc/svc.c +4 −2
  697. net/sunrpc/svc_xprt.c +2 −2
  698. net/sunrpc/xprtrdma/svc_rdma_backchannel.c +3 −3
  699. net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +39 −43
  700. net/tipc/node.c +8 −3
  701. net/vmw_vsock/af_vsock.c +1 −0
  702. net/wireless/nl80211.c +8 −4
  703. scripts/module.lds.S +2 −0
  704. security/integrity/iint.c +8 −0
  705. security/selinux/include/security.h +11 −4
  706. security/selinux/selinuxfs.c +9 −13
  707. security/selinux/ss/services.c +39 −24
  708. security/tomoyo/network.c +1 −1
  709. sound/drivers/aloop.c +0 −1
  710. sound/drivers/dummy.c +0 −1
  711. sound/drivers/mtpav.c +0 −1
  712. sound/drivers/mts64.c +0 −1
  713. sound/drivers/pcsp/pcsp.c +0 −1
  714. sound/drivers/portman2x4.c +0 −1
  715. sound/drivers/serial-u16550.c +0 −1
  716. sound/drivers/virmidi.c +0 −1
  717. sound/firewire/dice/dice-stream.c +2 −3
  718. sound/isa/ad1816a/ad1816a.c +0 −7
  719. sound/isa/ad1848/ad1848.c +0 −3
  720. sound/isa/als100.c +0 −11
  721. sound/isa/azt2320.c +0 −5
  722. sound/isa/cmi8330.c +0 −1
  723. sound/isa/cs423x/cs4231.c +0 −1
  724. sound/isa/cs423x/cs4236.c +0 −34
  725. sound/isa/es1688/es1688.c +0 −5
  726. sound/isa/es18xx.c +1 −9
  727. sound/isa/gus/gusclassic.c +0 −1
  728. sound/isa/gus/gusextreme.c +0 −1
  729. sound/isa/gus/gusmax.c +0 −1
  730. sound/isa/gus/interwave.c +0 −6
  731. sound/isa/opl3sa2.c +0 −5
  732. sound/isa/opti9xx/miro.c +0 −3
  733. sound/isa/opti9xx/opti92x-ad1848.c +0 −6
  734. sound/isa/sb/jazz16.c +0 −3
  735. sound/isa/sb/sb16.c +0 −8
  736. sound/isa/sb/sb8.c +0 −1
  737. sound/isa/sc6000.c +0 −3
  738. sound/isa/wavefront/wavefront.c +0 −1
  739. sound/mips/sgio2audio.c +0 −1
  740. sound/pci/ad1889.c +0 −1
  741. sound/pci/ali5451/ali5451.c +0 −1
  742. sound/pci/als300.c +0 −1
  743. sound/pci/als4000.c +0 −1
  744. sound/pci/atiixp.c +0 −1
  745. sound/pci/atiixp_modem.c +0 −1
  746. sound/pci/au88x0/au88x0.c +0 −2
  747. sound/pci/azt3328.c +0 −1
  748. sound/pci/bt87x.c +0 −2
  749. sound/pci/ca0106/ca0106_main.c +0 −1
  750. sound/pci/cmipci.c +0 −4
  751. sound/pci/cs4281.c +0 −1
  752. sound/pci/cs46xx/cs46xx.c +0 −7
  753. sound/pci/cs5535audio/cs5535audio.c +0 −1
  754. sound/pci/ctxfi/xfi.c +0 −1
  755. sound/pci/echoaudio/echoaudio.c +0 −1
  756. sound/pci/emu10k1/emu10k1.c +0 −2
  757. sound/pci/emu10k1/emu10k1x.c +0 −1
  758. sound/pci/ens1370.c +0 −8
  759. sound/pci/es1938.c +0 −4
  760. sound/pci/es1968.c +0 −4
  761. sound/pci/fm801.c +0 −2
  762. sound/pci/hda/hda_generic.c +1 −1
  763. sound/pci/hda/hda_intel.c +8 −34
  764. sound/pci/hda/patch_realtek.c +19 −1
  765. sound/pci/ice1712/ice1712.c +0 −6
  766. sound/pci/ice1712/ice1724.c +0 −19
  767. sound/pci/intel8x0.c +0 −23
  768. sound/pci/intel8x0m.c +0 −15
  769. sound/pci/korg1212/korg1212.c +0 −1
  770. sound/pci/lola/lola.c +0 −1
  771. sound/pci/lx6464es/lx6464es.c +0 −2
  772. sound/pci/maestro3.c +0 −5
  773. sound/pci/mixart/mixart.c +0 −1
  774. sound/pci/nm256/nm256.c +0 −2
  775. sound/pci/oxygen/oxygen.c +0 −3
  776. sound/pci/oxygen/se6x.c +0 −1
  777. sound/pci/oxygen/virtuoso.c +0 −1
  778. sound/pci/pcxhr/pcxhr.c +0 −1
  779. sound/pci/riptide/riptide.c +0 −1
  780. sound/pci/rme32.c +0 −1
  781. sound/pci/rme96.c +0 −5
  782. sound/pci/rme9652/hdsp.c +0 −3
  783. sound/pci/rme9652/hdspm.c +0 −1
  784. sound/pci/rme9652/rme9652.c +0 −2
  785. sound/pci/sis7019.c +0 −1
  786. sound/pci/sonicvibes.c +0 −1
  787. sound/pci/trident/trident.c +0 −12
  788. sound/pci/via82xx.c +0 −1
  789. sound/pci/via82xx_modem.c +0 −1
  790. sound/pci/vx222/vx222.c +0 −1
  791. sound/pci/ymfpci/ymfpci.c +0 −6
  792. sound/pcmcia/pdaudiocf/pdaudiocf.c +0 −1
  793. sound/pcmcia/vx/vxpocket.c +0 −4
  794. sound/ppc/powermac.c +0 −1
  795. sound/sh/aica.c +0 −1
  796. sound/sh/sh_dac_audio.c +0 −1
  797. sound/soc/codecs/Kconfig +0 −5
  798. sound/soc/codecs/ak4458.c +1 −0
  799. sound/soc/codecs/ak5558.c +1 −0
  800. sound/soc/codecs/cs42l42.c +34 −78
  801. sound/soc/codecs/cs42l42.h +7 −6
  802. sound/soc/codecs/es8316.c +2 −7
  803. sound/soc/codecs/lpass-rx-macro.c +1 −1
  804. sound/soc/codecs/lpass-va-macro.c +13 −15
  805. sound/soc/codecs/lpass-wsa-macro.c +11 −9
  806. sound/soc/codecs/rt1015.c +2 −0
  807. sound/soc/codecs/rt5640.c +2 −2
  808. sound/soc/codecs/rt5651.c +2 −2
  809. sound/soc/codecs/rt5659.c +5 −0
  810. sound/soc/codecs/rt5670.c +96 −14
  811. sound/soc/codecs/rt5670.h +5 −4
  812. sound/soc/codecs/rt711.c +8 −0
  813. sound/soc/codecs/sgtl5000.c +1 −1
  814. sound/soc/codecs/sirf-audio-codec.h +0 −124
  815. sound/soc/codecs/wcd934x.c +6 −0
  816. sound/soc/fsl/fsl_ssi.c +4 −2
  817. sound/soc/generic/simple-card-utils.c +7 −6
  818. sound/soc/intel/boards/bytcr_rt5640.c +1 −1
  819. sound/soc/mediatek/mt8192/mt8192-dai-tdm.c +3 −1
  820. sound/soc/mediatek/mt8192/mt8192-reg.h +5 −3
  821. sound/soc/qcom/lpass-cpu.c +1 −1
  822. sound/soc/qcom/sdm845.c +3 −3
  823. sound/soc/soc-core.c +4 −0
  824. sound/soc/sof/intel/hda-dsp.c +1 −1
  825. sound/soc/sof/intel/hda.c +1 −0
  826. sound/sparc/amd7930.c +0 −1
  827. sound/sparc/cs4231.c +0 −1
  828. sound/sparc/dbri.c +0 −1
  829. sound/usb/6fire/chip.c +0 −1
  830. sound/usb/caiaq/device.c +0 −14
  831. sound/usb/card.c +0 −2
  832. sound/usb/hiface/chip.c +0 −17
  833. sound/usb/misc/ua101.c +0 −1
  834. sound/usb/mixer_quirks.c +2 −2
  835. sound/usb/quirks.c +1 −0
  836. sound/usb/usx2y/usbusx2y.c +0 −1
  837. sound/x86/intel_hdmi_audio.c +0 −1
  838. sound/xen/xen_snd_front.c +0 −1
  839. tools/include/uapi/linux/kvm.h +13 −0
  840. tools/kvm/kvm_stat/kvm_stat.service +1 −0
  841. tools/lib/bpf/Makefile +1 −1
  842. tools/lib/bpf/btf_dump.c +1 −1
  843. tools/lib/bpf/libbpf.c +2 −1
  844. tools/lib/bpf/netlink.c +1 −1
  845. tools/perf/builtin-daemon.c +33 −24
  846. tools/perf/tests/bpf.c +1 −8
  847. tools/perf/tests/shell/daemon.sh +1 −1
  848. tools/perf/util/auxtrace.c +0 −4
  849. tools/perf/util/bpf-event.c +10 −3
  850. tools/perf/util/parse-events.c +3 −0
  851. tools/perf/util/pmu.c +33 −0
  852. tools/perf/util/pmu.h +3 −0
  853. tools/perf/util/synthetic-events.c +6 −5
  854. tools/perf/util/vdso.c +2 −0
  855. tools/testing/kunit/configs/broken_on_uml.config +2 −0
  856. tools/testing/kunit/kunit_config.py +1 −1
  857. tools/testing/radix-tree/idr-test.c +18 −3
  858. tools/testing/radix-tree/linux/compiler_types.h +0 −0
  859. tools/testing/radix-tree/multiorder.c +2 −0
  860. tools/testing/radix-tree/xarray.c +2 −0
  861. tools/testing/selftests/arm64/fp/sve-test.S +17 −5
  862. tools/testing/selftests/bpf/prog_tests/check_mtu.c +4 −0
  863. tools/testing/selftests/bpf/prog_tests/fexit_sleep.c +82 −0
  864. tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c +8 −0
  865. tools/testing/selftests/bpf/progs/fexit_sleep.c +31 −0
  866. tools/testing/selftests/bpf/progs/test_check_mtu.c +92 −0
  867. tools/testing/selftests/bpf/progs/test_tunnel_kern.c +2 −4
  868. tools/testing/selftests/bpf/verifier/bounds_deduction.c +19 −8
  869. tools/testing/selftests/bpf/verifier/map_ptr.c +4 −0
  870. tools/testing/selftests/bpf/verifier/unpriv.c +14 −1
  871. tools/testing/selftests/bpf/verifier/value_ptr_arith.c +22 −1
  872. tools/testing/selftests/kvm/.gitignore +3 −0
  873. tools/testing/selftests/kvm/Makefile +3 −0
  874. tools/testing/selftests/kvm/hardware_disable_test.c +5 −5
  875. tools/testing/selftests/kvm/include/kvm_util.h +2 −0
  876. tools/testing/selftests/kvm/lib/kvm_util.c +6 −1
  877. tools/testing/selftests/kvm/lib/kvm_util_internal.h +0 −2
  878. tools/testing/selftests/kvm/x86_64/get_msr_index_features.c +134 −0
  879. tools/testing/selftests/kvm/x86_64/hyperv_clock.c +269 −0
  880. tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c +166 −0
  881. tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh +1 −1
  882. tools/testing/selftests/net/mptcp/mptcp_join.sh +20 −10
  883. tools/testing/selftests/net/reuseaddr_ports_exhausted.c +16 −16
  884. tools/testing/selftests/vm/Makefile +2 −2
.mailmap+3−0
@@ -36,6 +36,7 @@ Andrew Morton <akpm@linux-foundation.org> · 35 unmodified lines
3636 Andrew Murray <amurray@thegoodpenguin.co.uk> <amurray@embedded-bits.co.uk>
3737 Andrew Murray <amurray@thegoodpenguin.co.uk> <andrew.murray@arm.com>
3838 Andrew Vasquez <andrew.vasquez@qlogic.com>
39+Andrey Konovalov <andreyknvl@gmail.com> <andreyknvl@google.com>
3940 Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com>
4041 Andrey Ryabinin <ryabinin.a.a@gmail.com> <aryabinin@virtuozzo.com>
4142 Andy Adamson <andros@citi.umich.edu>
@@ -65,6 +66,8 @@ Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com> · 23 unmodified lines
6566 Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
6667 Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
6768 Chao Yu <chao@kernel.org> <yuchao0@huawei.com>
69+Chris Chiu <chris.chiu@canonical.com> <chiu@endlessm.com>
70+Chris Chiu <chris.chiu@canonical.com> <chiu@endlessos.org>
6871 Christophe Ricard <christophe.ricard@gmail.com>
6972 Christoph Hellwig <hch@lst.de>
7073 Corey Minyard <minyard@acm.org>
Documentation/ABI/testing/sysfs-fs-xfs+1−1
@@ -33,7 +33,7 @@ Contact: xfs@oss.sgi.com · 32 unmodified lines
3333 Description:
3434 The current state of the log write grant head. It
3535 represents the total log reservation of all currently
36− oustanding transactions, including regrants due to
36+ outstanding transactions, including regrants due to
3737 rolling transactions. The grant head is exported in
3838 "cycle:bytes" format.
3939 Users: xfstests
Documentation/arm64/acpi_object_usage.rst+5−5
@@ -17,12 +17,12 @@ For ACPI on arm64, tables also fall into the following categories: · 16 unmodified lines
1717
1818 - Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT
1919
20− - Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IORT,
21− MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO,
22− TCPA, TPM2, UEFI, XENV
20+ - Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IBFT,
21+ IORT, MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT,
22+ STAO, TCPA, TPM2, UEFI, XENV
2323
24− - Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, LPIT,
25− MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
24+ - Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IVRS, LPIT, MSDM, OEMx,
25+ PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT
2626
2727 ====== ========================================================================
2828 Table Usage for ARMv8 Linux
Documentation/arm64/silicon-errata.rst+3−0
@@ -130,6 +130,9 @@ stable kernels. · 129 unmodified lines
130130 | Marvell | ARM-MMU-500 | #582743 | N/A |
131131 +----------------+-----------------+-----------------+-----------------------------+
132132 +----------------+-----------------+-----------------+-----------------------------+
133+| NVIDIA | Carmel Core | N/A | NVIDIA_CARMEL_CNP_ERRATUM |
134++----------------+-----------------+-----------------+-----------------------------+
135++----------------+-----------------+-----------------+-----------------------------+
133136 | Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
134137 +----------------+-----------------+-----------------+-----------------------------+
135138 +----------------+-----------------+-----------------+-----------------------------+
Documentation/devicetree/bindings/sound/fsl,spdif.yaml+4−0
@@ -21,6 +21,10 @@ properties: · 20 unmodified lines
2121 - fsl,vf610-spdif
2222 - fsl,imx6sx-spdif
2323 - fsl,imx8qm-spdif
24+ - fsl,imx8qxp-spdif
25+ - fsl,imx8mq-spdif
26+ - fsl,imx8mm-spdif
27+ - fsl,imx8mn-spdif
2428
2529 reg:
2630 maxItems: 1
Documentation/networking/device_drivers/ethernet/amazon/ena.rst+1−1
@@ -267,7 +267,7 @@ DATA PATH · 266 unmodified lines
267267 Tx
268268 --
269269
270−end_start_xmit() is called by the stack. This function does the following:
270+ena_start_xmit() is called by the stack. This function does the following:
271271
272272 - Maps data buffers (skb->data and frags).
273273 - Populates ena_buf for the push buffer (if the driver and device are
Documentation/networking/devlink/devlink-dpipe.rst+1−1
@@ -52,7 +52,7 @@ purposes as a standard complementary tool. The system's view from · 51 unmodified lines
5252 ``devlink-dpipe`` should change according to the changes done by the
5353 standard configuration tools.
5454
55−For example, it’s quiet common to implement Access Control Lists (ACL)
55+For example, it’s quite common to implement Access Control Lists (ACL)
5656 using Ternary Content Addressable Memory (TCAM). The TCAM memory can be
5757 divided into TCAM regions. Complex TC filters can have multiple rules with
5858 different priorities and different lookup keys. On the other hand hardware
Documentation/networking/devlink/devlink-port.rst+2−2
@@ -151,7 +151,7 @@ representor netdevice. · 150 unmodified lines
151151 -------------
152152 A subfunction devlink port is created but it is not active yet. That means the
153153 entities are created on devlink side, the e-switch port representor is created,
154−but the subfunction device itself it not created. A user might use e-switch port
154+but the subfunction device itself is not created. A user might use e-switch port
155155 representor to do settings, putting it into bridge, adding TC rules, etc. A user
156156 might as well configure the hardware address (such as MAC address) of the
157157 subfunction while subfunction is inactive.
@@ -173,7 +173,7 @@ Terms and Definitions · 15 unmodified lines
173173 * - Term
174174 - Definitions
175175 * - ``PCI device``
176− - A physical PCI device having one or more PCI bus consists of one or
176+ - A physical PCI device having one or more PCI buses consists of one or
177177 more PCI controllers.
178178 * - ``PCI controller``
179179 - A controller consists of potentially multiple physical functions,
Documentation/networking/xfrm_device.rst+1−1
@@ -50,7 +50,7 @@ Callbacks to implement · 49 unmodified lines
5050
5151 The NIC driver offering ipsec offload will need to implement these
5252 callbacks to make the offload available to the network stack's
53−XFRM subsytem. Additionally, the feature bits NETIF_F_HW_ESP and
53+XFRM subsystem. Additionally, the feature bits NETIF_F_HW_ESP and
5454 NETIF_F_HW_ESP_TX_CSUM will signal the availability of the offload.
5555
5656
Documentation/virt/kvm/api.rst+6−3
@@ -1495,7 +1495,8 @@ Fails if any VCPU has already been created. · 1494 unmodified lines
14951495
14961496 Define which vcpu is the Bootstrap Processor (BSP). Values are the same
14971497 as the vcpu id in KVM_CREATE_VCPU. If this ioctl is not called, the default
1498−is vcpu 0.
1498+is vcpu 0. This ioctl has to be called before vcpu creation,
1499+otherwise it will return EBUSY error.
14991500
15001501
15011502 4.42 KVM_GET_XSAVE
@@ -4806,8 +4807,10 @@ If an MSR access is not permitted through the filtering, it generates a · 3304 unmodified lines
48064807 allows user space to deflect and potentially handle various MSR accesses
48074808 into user space.
48084809
4809−If a vCPU is in running state while this ioctl is invoked, the vCPU may
4810−experience inconsistent filtering behavior on MSR accesses.
4810+Note, invoking this ioctl with a vCPU is running is inherently racy. However,
4811+KVM does guarantee that vCPUs will see either the previous filter or the new
4812+filter, e.g. MSRs with identical settings in both the old and new filter will
4813+have deterministic behavior.
48114814
48124815 4.127 KVM_XEN_HVM_SET_ATTR
48134816 --------------------------
MAINTAINERS+31−35
@@ -1181,7 +1181,7 @@ M: Joel Fernandes <joel@joelfernandes.org> · 1180 unmodified lines
11811181 M: Christian Brauner <christian@brauner.io>
11821182 M: Hridya Valsaraju <hridya@google.com>
11831183 M: Suren Baghdasaryan <surenb@google.com>
1184−L: devel@driverdev.osuosl.org
1184+L: linux-kernel@vger.kernel.org
11851185 S: Supported
11861186 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
11871187 F: drivers/android/
@@ -2489,7 +2489,7 @@ N: sc27xx · 1301 unmodified lines
24892489 N: sc2731
24902490
24912491 ARM/STI ARCHITECTURE
2492−M: Patrice Chotard <patrice.chotard@st.com>
2492+M: Patrice Chotard <patrice.chotard@foss.st.com>
24932493 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
24942494 S: Maintained
24952495 W: http://www.stlinux.com
@@ -2522,7 +2522,7 @@ F: include/linux/remoteproc/st_slim_rproc.h · 26 unmodified lines
25222522
25232523 ARM/STM32 ARCHITECTURE
25242524 M: Maxime Coquelin <mcoquelin.stm32@gmail.com>
2525−M: Alexandre Torgue <alexandre.torgue@st.com>
2525+M: Alexandre Torgue <alexandre.torgue@foss.st.com>
25262526 L: linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
25272527 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
25282528 S: Maintained
@@ -3115,7 +3115,7 @@ C: irc://irc.oftc.net/bcache · 586 unmodified lines
31153115 F: drivers/md/bcache/
31163116
31173117 BDISP ST MEDIA DRIVER
3118−M: Fabien Dessenne <fabien.dessenne@st.com>
3118+M: Fabien Dessenne <fabien.dessenne@foss.st.com>
31193119 L: linux-media@vger.kernel.org
31203120 S: Supported
31213121 W: https://linuxtv.org
@@ -3675,7 +3675,7 @@ M: bcm-kernel-feedback-list@broadcom.com · 553 unmodified lines
36753675 L: linux-pm@vger.kernel.org
36763676 S: Maintained
36773677 T: git git://github.com/broadcom/stblinux.git
3678−F: drivers/soc/bcm/bcm-pmb.c
3678+F: drivers/soc/bcm/bcm63xx/bcm-pmb.c
36793679 F: include/dt-bindings/soc/bcm-pmb.h
36803680
36813681 BROADCOM SPECIFIC AMBA DRIVER (BCMA)
@@ -5080,7 +5080,7 @@ S: Maintained · 1398 unmodified lines
50805080 F: drivers/platform/x86/dell/dell-wmi.c
50815081
50825082 DELTA ST MEDIA DRIVER
5083−M: Hugues Fruchet <hugues.fruchet@st.com>
5083+M: Hugues Fruchet <hugues.fruchet@foss.st.com>
50845084 L: linux-media@vger.kernel.org
50855085 S: Supported
50865086 W: https://linuxtv.org
@@ -6006,7 +6006,6 @@ F: drivers/gpu/drm/rockchip/ · 919 unmodified lines
60066006
60076007 DRM DRIVERS FOR STI
60086008 M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
6009−M: Vincent Abriou <vincent.abriou@st.com>
60106009 L: dri-devel@lists.freedesktop.org
60116010 S: Maintained
60126011 T: git git://anongit.freedesktop.org/drm/drm-misc
@@ -6014,10 +6013,9 @@ F: Documentation/devicetree/bindings/display/st,stih4xx.txt · 1 unmodified line
60146013 F: drivers/gpu/drm/sti
60156014
60166015 DRM DRIVERS FOR STM
6017−M: Yannick Fertre <yannick.fertre@st.com>
6018−M: Philippe Cornu <philippe.cornu@st.com>
6016+M: Yannick Fertre <yannick.fertre@foss.st.com>
6017+M: Philippe Cornu <philippe.cornu@foss.st.com>
60196018 M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
6020−M: Vincent Abriou <vincent.abriou@st.com>
60216019 L: dri-devel@lists.freedesktop.org
60226020 S: Maintained
60236021 T: git git://anongit.freedesktop.org/drm/drm-misc
@@ -7477,8 +7475,9 @@ F: include/uapi/asm-generic/ · 1453 unmodified lines
74777475 GENERIC PHY FRAMEWORK
74787476 M: Kishon Vijay Abraham I <kishon@ti.com>
74797477 M: Vinod Koul <vkoul@kernel.org>
7480−L: linux-kernel@vger.kernel.org
7478+L: linux-phy@lists.infradead.org
74817479 S: Supported
7480+Q: https://patchwork.kernel.org/project/linux-phy/list/
74827481 T: git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
74837482 F: Documentation/devicetree/bindings/phy/
74847483 F: drivers/phy/
@@ -8122,7 +8121,6 @@ F: drivers/crypto/hisilicon/sec2/sec_main.c · 637 unmodified lines
81228121
81238122 HISILICON STAGING DRIVERS FOR HIKEY 960/970
81248123 M: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
8125−L: devel@driverdev.osuosl.org
81268124 S: Maintained
81278125 F: drivers/staging/hikey9xx/
81288126
@@ -8237,7 +8235,7 @@ F: include/linux/hugetlb.h · 108 unmodified lines
82378235 F: mm/hugetlb.c
82388236
82398237 HVA ST MEDIA DRIVER
8240−M: Jean-Christophe Trotin <jean-christophe.trotin@st.com>
8238+M: Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com>
82418239 L: linux-media@vger.kernel.org
82428240 S: Supported
82438241 W: https://linuxtv.org
@@ -8527,6 +8525,7 @@ IBM Power SRIOV Virtual NIC Device Driver · 283 unmodified lines
85278525 M: Dany Madden <drt@linux.ibm.com>
85288526 M: Lijun Pan <ljp@linux.ibm.com>
85298527 M: Sukadev Bhattiprolu <sukadev@linux.ibm.com>
8528+R: Thomas Falcon <tlfalcon@linux.ibm.com>
85308529 L: netdev@vger.kernel.org
85318530 S: Supported
85328531 F: drivers/net/ethernet/ibm/ibmvnic.*
@@ -10037,7 +10036,6 @@ F: scripts/leaking_addresses.pl · 1504 unmodified lines
1003710036
1003810037 LED SUBSYSTEM
1003910038 M: Pavel Machek <pavel@ucw.cz>
10040−R: Dan Murphy <dmurphy@ti.com>
1004110039 L: linux-leds@vger.kernel.org
1004210040 S: Maintained
1004310041 T: git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
@@ -10913,7 +10911,6 @@ T: git git://linuxtv.org/media_tree.git · 869 unmodified lines
1091310911 F: drivers/media/radio/radio-maxiradio*
1091410912
1091510913 MCAN MMIO DEVICE DRIVER
10916−M: Dan Murphy <dmurphy@ti.com>
1091710914 M: Pankaj Sharma <pankj.sharma@samsung.com>
1091810915 L: linux-can@vger.kernel.org
1091910916 S: Maintained
@@ -11174,7 +11171,7 @@ T: git git://linuxtv.org/media_tree.git · 254 unmodified lines
1117411171 F: drivers/media/dvb-frontends/stv6111*
1117511172
1117611173 MEDIA DRIVERS FOR STM32 - DCMI
11177−M: Hugues Fruchet <hugues.fruchet@st.com>
11174+M: Hugues Fruchet <hugues.fruchet@foss.st.com>
1117811175 L: linux-media@vger.kernel.org
1117911176 S: Supported
1118011177 T: git git://linuxtv.org/media_tree.git
@@ -12545,7 +12542,7 @@ NETWORKING [MPTCP] · 1364 unmodified lines
1254512542 M: Mat Martineau <mathew.j.martineau@linux.intel.com>
1254612543 M: Matthieu Baerts <matthieu.baerts@tessares.net>
1254712544 L: netdev@vger.kernel.org
12548−L: mptcp@lists.01.org
12545+L: mptcp@lists.linux.dev
1254912546 S: Maintained
1255012547 W: https://github.com/multipath-tcp/mptcp_net-next/wiki
1255112548 B: https://github.com/multipath-tcp/mptcp_net-next/issues
@@ -14716,15 +14713,11 @@ F: drivers/net/ethernet/qlogic/qlcnic/ · 2164 unmodified lines
1471614713 QLOGIC QLGE 10Gb ETHERNET DRIVER
1471714714 M: Manish Chopra <manishc@marvell.com>
1471814715 M: GR-Linux-NIC-Dev@marvell.com
14719−L: netdev@vger.kernel.org
14720−S: Supported
14721−F: drivers/staging/qlge/
14722−
14723−QLOGIC QLGE 10Gb ETHERNET DRIVER
1472414716 M: Coiby Xu <coiby.xu@gmail.com>
1472514717 L: netdev@vger.kernel.org
14726−S: Maintained
14718+S: Supported
1472714719 F: Documentation/networking/device_drivers/qlogic/qlge.rst
14720+F: drivers/staging/qlge/
1472814721
1472914722 QM1D1B0004 MEDIA DRIVER
1473014723 M: Akihiro Tsukada <tskd08@gmail.com>
@@ -15642,8 +15635,8 @@ F: Documentation/s390/pci.rst · 911 unmodified lines
1564215635
1564315636 S390 VFIO AP DRIVER
1564415637 M: Tony Krowiak <akrowiak@linux.ibm.com>
15645−M: Pierre Morel <pmorel@linux.ibm.com>
1564615638 M: Halil Pasic <pasic@linux.ibm.com>
15639+M: Jason Herne <jjherne@linux.ibm.com>
1564715640 L: linux-s390@vger.kernel.org
1564815641 S: Supported
1564915642 W: http://www.ibm.com/developerworks/linux/linux390/
@@ -15655,6 +15648,7 @@ F: drivers/s390/crypto/vfio_ap_private.h · 5 unmodified lines
1565515648 S390 VFIO-CCW DRIVER
1565615649 M: Cornelia Huck <cohuck@redhat.com>
1565715650 M: Eric Farman <farman@linux.ibm.com>
15651+M: Matthew Rosato <mjrosato@linux.ibm.com>
1565815652 R: Halil Pasic <pasic@linux.ibm.com>
1565915653 L: linux-s390@vger.kernel.org
1566015654 L: kvm@vger.kernel.org
@@ -15665,6 +15659,7 @@ F: include/uapi/linux/vfio_ccw.h · 4 unmodified lines
1566515659
1566615660 S390 VFIO-PCI DRIVER
1566715661 M: Matthew Rosato <mjrosato@linux.ibm.com>
15662+M: Eric Farman <farman@linux.ibm.com>
1566815663 L: linux-s390@vger.kernel.org
1566915664 L: kvm@vger.kernel.org
1567015665 S: Supported
@@ -16894,8 +16889,10 @@ F: tools/spi/ · 1223 unmodified lines
1689416889
1689516890 SPIDERNET NETWORK DRIVER for CELL
1689616891 M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
16892+M: Geoff Levand <geoff@infradead.org>
1689716893 L: netdev@vger.kernel.org
16898−S: Supported
16894+L: linuxppc-dev@lists.ozlabs.org
16895+S: Maintained
1689916896 F: Documentation/networking/device_drivers/ethernet/toshiba/spider_net.rst
1690016897 F: drivers/net/ethernet/toshiba/spider_net*
1690116898
@@ -16949,7 +16946,8 @@ F: Documentation/devicetree/bindings/media/i2c/st,st-mipid02.txt · 47 unmodified lines
1694916946 F: drivers/media/i2c/st-mipid02.c
1695016947
1695116948 ST STM32 I2C/SMBUS DRIVER
16952−M: Pierre-Yves MORDRET <pierre-yves.mordret@st.com>
16949+M: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
16950+M: Alain Volmat <alain.volmat@foss.st.com>
1695316951 L: linux-i2c@vger.kernel.org
1695416952 S: Maintained
1695516953 F: drivers/i2c/busses/i2c-stm32*
@@ -17047,7 +17045,7 @@ F: drivers/staging/vt665?/ · 91 unmodified lines
1704717045
1704817046 STAGING SUBSYSTEM
1704917047 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
17050−L: devel@driverdev.osuosl.org
17048+L: linux-staging@lists.linux.dev
1705117049 S: Supported
1705217050 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
1705317051 F: drivers/staging/
@@ -17074,7 +17072,7 @@ F: kernel/jump_label.c · 20 unmodified lines
1707417072 F: kernel/static_call.c
1707517073
1707617074 STI AUDIO (ASoC) DRIVERS
17077−M: Arnaud Pouliquen <arnaud.pouliquen@st.com>
17075+M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
1707817076 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
1707917077 S: Maintained
1708017078 F: Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt
@@ -17094,15 +17092,15 @@ T: git git://linuxtv.org/media_tree.git · 13 unmodified lines
1709417092 F: drivers/media/usb/stk1160/
1709517093
1709617094 STM32 AUDIO (ASoC) DRIVERS
17097−M: Olivier Moysan <olivier.moysan@st.com>
17098−M: Arnaud Pouliquen <arnaud.pouliquen@st.com>
17095+M: Olivier Moysan <olivier.moysan@foss.st.com>
17096+M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
1709917097 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
1710017098 S: Maintained
1710117099 F: Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml
1710217100 F: sound/soc/stm/
1710317101
1710417102 STM32 TIMER/LPTIMER DRIVERS
17105−M: Fabrice Gasnier <fabrice.gasnier@st.com>
17103+M: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
1710617104 S: Maintained
1710717105 F: Documentation/ABI/testing/*timer-stm32
1710817106 F: Documentation/devicetree/bindings/*/*stm32-*timer*
@@ -17112,7 +17110,7 @@ F: include/linux/*/stm32-*tim* · 3 unmodified lines
1711217110
1711317111 STMMAC ETHERNET DRIVER
1711417112 M: Giuseppe Cavallaro <peppe.cavallaro@st.com>
17115−M: Alexandre Torgue <alexandre.torgue@st.com>
17113+M: Alexandre Torgue <alexandre.torgue@foss.st.com>
1711617114 M: Jose Abreu <joabreu@synopsys.com>
1711717115 L: netdev@vger.kernel.org
1711817116 S: Supported
@@ -17854,7 +17852,6 @@ S: Maintained · 735 unmodified lines
1785417852 F: drivers/thermal/ti-soc-thermal/
1785517853
1785617854 TI BQ27XXX POWER SUPPLY DRIVER
17857−R: Dan Murphy <dmurphy@ti.com>
1785817855 F: drivers/power/supply/bq27xxx_battery.c
1785917856 F: drivers/power/supply/bq27xxx_battery_i2c.c
1786017857 F: include/linux/power/bq27xxx_battery.h
@@ -17989,7 +17986,6 @@ S: Odd Fixes · 128 unmodified lines
1798917986 F: sound/soc/codecs/tas571x*
1799017987
1799117988 TI TCAN4X5X DEVICE DRIVER
17992−M: Dan Murphy <dmurphy@ti.com>
1799317989 L: linux-can@vger.kernel.org
1799417990 S: Maintained
1799517991 F: Documentation/devicetree/bindings/net/can/tcan4x5x.txt
@@ -19142,7 +19138,7 @@ VME SUBSYSTEM · 1146 unmodified lines
1914219138 M: Martyn Welch <martyn@welchs.me.uk>
1914319139 M: Manohar Vanga <manohar.vanga@gmail.com>
1914419140 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
19145−L: devel@driverdev.osuosl.org
19141+L: linux-kernel@vger.kernel.org
1914619142 S: Maintained
1914719143 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
1914819144 F: Documentation/driver-api/vme.rst
Makefile+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22 VERSION = 5
33 PATCHLEVEL = 12
44 SUBLEVEL = 0
5−EXTRAVERSION = -rc3
5+EXTRAVERSION = -rc6
66 NAME = Frozen Wasteland
77
88 # *DOCUMENTATION*
arch/arm/boot/dts/am33xx.dtsi+3−0
@@ -40,6 +40,9 @@ · 39 unmodified lines
4040 ethernet1 = &cpsw_emac1;
4141 spi0 = &spi0;
4242 spi1 = &spi1;
43+ mmc0 = &mmc1;
44+ mmc1 = &mmc2;
45+ mmc2 = &mmc3;
4346 };
4447
4548 cpus {
arch/arm/boot/dts/at91-sam9x60ek.dts+0−8
@@ -334,14 +334,6 @@ · 333 unmodified lines
334334 };
335335
336336 &pinctrl {
337− atmel,mux-mask = <
338− /* A B C */
339− 0xFFFFFE7F 0xC0E0397F 0xEF00019D /* pioA */
340− 0x03FFFFFF 0x02FC7E68 0x00780000 /* pioB */
341− 0xffffffff 0xF83FFFFF 0xB800F3FC /* pioC */
342− 0x003FFFFF 0x003F8000 0x00000000 /* pioD */
343− >;
344−
345337 adc {
346338 pinctrl_adc_default: adc_default {
347339 atmel,pins = <AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
arch/arm/boot/dts/at91-sama5d27_som1.dtsi+2−2
@@ -84,8 +84,8 @@ · 83 unmodified lines
8484 pinctrl-0 = <&pinctrl_macb0_default>;
8585 phy-mode = "rmii";
8686
87− ethernet-phy@0 {
88− reg = <0x0>;
87+ ethernet-phy@7 {
88+ reg = <0x7>;
8989 interrupt-parent = <&pioA>;
9090 interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>;
9191 pinctrl-names = "default";
arch/arm/boot/dts/imx6ul-14x14-evk.dtsi+16−6
@@ -210,9 +210,6 @@ · 209 unmodified lines
210210 micrel,led-mode = <1>;
211211 clocks = <&clks IMX6UL_CLK_ENET_REF>;
212212 clock-names = "rmii-ref";
213− reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
214− reset-assert-us = <10000>;
215− reset-deassert-us = <100>;
216213
217214 };
218215
@@ -222,9 +219,6 @@ · 3 unmodified lines
222219 micrel,led-mode = <1>;
223220 clocks = <&clks IMX6UL_CLK_ENET2_REF>;
224221 clock-names = "rmii-ref";
225− reset-gpios = <&gpio_spi 2 GPIO_ACTIVE_LOW>;
226− reset-assert-us = <10000>;
227− reset-deassert-us = <100>;
228222 };
229223 };
230224 };
@@ -243,6 +237,22 @@ · 12 unmodified lines
243237 status = "okay";
244238 };
245239
240+&gpio_spi {
241+ eth0-phy-hog {
242+ gpio-hog;
243+ gpios = <1 GPIO_ACTIVE_HIGH>;
244+ output-high;
245+ line-name = "eth0-phy";
246+ };
247+
248+ eth1-phy-hog {
249+ gpio-hog;
250+ gpios = <2 GPIO_ACTIVE_HIGH>;
251+ output-high;
252+ line-name = "eth1-phy";
253+ };
254+};
255+
246256 &i2c1 {
247257 clock-frequency = <100000>;
248258 pinctrl-names = "default";
arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts+1−0
@@ -14,5 +14,6 @@ · 13 unmodified lines
1414 };
1515
1616 &gpmi {
17+ fsl,use-minimum-ecc;
1718 status = "okay";
1819 };
arch/arm/boot/dts/sam9x60.dtsi+9−0
@@ -606,6 +606,15 @@ · 605 unmodified lines
606606 compatible = "microchip,sam9x60-pinctrl", "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus";
607607 ranges = <0xfffff400 0xfffff400 0x800>;
608608
609+ /* mux-mask corresponding to sam9x60 SoC in TFBGA228L package */
610+ atmel,mux-mask = <
611+ /* A B C */
612+ 0xffffffff 0xffe03fff 0xef00019d /* pioA */
613+ 0x03ffffff 0x02fc7e7f 0x00780000 /* pioB */
614+ 0xffffffff 0xffffffff 0xf83fffff /* pioC */
615+ 0x003fffff 0x003f8000 0x00000000 /* pioD */
616+ >;
617+
609618 pioA: gpio@fffff400 {
610619 compatible = "microchip,sam9x60-gpio", "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
611620 reg = <0xfffff400 0x200>;
arch/arm/mach-imx/avic.c+15−1
@@ -7,6 +7,7 @@ · 6 unmodified lines
77 #include <linux/module.h>
88 #include <linux/irq.h>
99 #include <linux/irqdomain.h>
10+#include <linux/irqchip.h>
1011 #include <linux/io.h>
1112 #include <linux/of.h>
1213 #include <linux/of_address.h>
@@ -162,7 +163,7 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs) · 149 unmodified lines
162163 * interrupts. It registers the interrupt enable and disable functions
163164 * to the kernel for each interrupt source.
164165 */
165−void __init mxc_init_irq(void __iomem *irqbase)
166+static void __init mxc_init_irq(void __iomem *irqbase)
166167 {
167168 struct device_node *np;
168169 int irq_base;
@@ -220,3 +221,16 @@ void __init mxc_init_irq(void __iomem *irqbase) · 51 unmodified lines
220221
221222 printk(KERN_INFO "MXC IRQ initialized\n");
222223 }
224+
225+static int __init imx_avic_init(struct device_node *node,
226+ struct device_node *parent)
227+{
228+ void __iomem *avic_base;
229+
230+ avic_base = of_iomap(node, 0);
231+ BUG_ON(!avic_base);
232+ mxc_init_irq(avic_base);
233+ return 0;
234+}
235+
236+IRQCHIP_DECLARE(imx_avic, "fsl,avic", imx_avic_init);
arch/arm/mach-imx/common.h+0−1
@@ -22,7 +22,6 @@ void mx35_map_io(void); · 21 unmodified lines
2222 void imx21_init_early(void);
2323 void imx31_init_early(void);
2424 void imx35_init_early(void);
25−void mxc_init_irq(void __iomem *);
2625 void mx31_init_irq(void);
2726 void mx35_init_irq(void);
2827 void mxc_set_cpu_type(unsigned int type);
arch/arm/mach-imx/mach-imx1.c+0−11
@@ -17,16 +17,6 @@ static void __init imx1_init_early(void) · 16 unmodified lines
1717 mxc_set_cpu_type(MXC_CPU_MX1);
1818 }
1919
20−static void __init imx1_init_irq(void)
21−{
22− void __iomem *avic_addr;
23−
24− avic_addr = ioremap(MX1_AVIC_ADDR, SZ_4K);
25− WARN_ON(!avic_addr);
26−
27− mxc_init_irq(avic_addr);
28−}
29−
3020 static const char * const imx1_dt_board_compat[] __initconst = {
3121 "fsl,imx1",
3222 NULL
@@ -34,7 +24,6 @@ static const char * const imx1_dt_board_compat[] __initconst = { · 1 unmodified line
3424
3525 DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)")
3626 .init_early = imx1_init_early,
37− .init_irq = imx1_init_irq,
3827 .dt_compat = imx1_dt_board_compat,
3928 .restart = mxc_restart,
4029 MACHINE_END
arch/arm/mach-imx/mach-imx25.c+0−12
@@ -22,17 +22,6 @@ static void __init imx25_dt_init(void) · 21 unmodified lines
2222 imx_aips_allow_unprivileged_access("fsl,imx25-aips");
2323 }
2424
25−static void __init mx25_init_irq(void)
26−{
27− struct device_node *np;
28− void __iomem *avic_base;
29−
30− np = of_find_compatible_node(NULL, NULL, "fsl,avic");
31− avic_base = of_iomap(np, 0);
32− BUG_ON(!avic_base);
33− mxc_init_irq(avic_base);
34−}
35−
3625 static const char * const imx25_dt_board_compat[] __initconst = {
3726 "fsl,imx25",
3827 NULL
@@ -42,6 +31,5 @@ DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") · 3 unmodified lines
4231 .init_early = imx25_init_early,
4332 .init_machine = imx25_dt_init,
4433 .init_late = imx25_pm_init,
45− .init_irq = mx25_init_irq,
4634 .dt_compat = imx25_dt_board_compat,
4735 MACHINE_END
arch/arm/mach-imx/mach-imx27.c+0−12
@@ -56,17 +56,6 @@ static void __init imx27_init_early(void) · 55 unmodified lines
5656 mxc_set_cpu_type(MXC_CPU_MX27);
5757 }
5858
59−static void __init mx27_init_irq(void)
60−{
61− void __iomem *avic_base;
62− struct device_node *np;
63−
64− np = of_find_compatible_node(NULL, NULL, "fsl,avic");
65− avic_base = of_iomap(np, 0);
66− BUG_ON(!avic_base);
67− mxc_init_irq(avic_base);
68−}
69−
7059 static const char * const imx27_dt_board_compat[] __initconst = {
7160 "fsl,imx27",
7261 NULL
@@ -75,7 +64,6 @@ static const char * const imx27_dt_board_compat[] __initconst = { · 2 unmodified lines
7564 DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")
7665 .map_io = mx27_map_io,
7766 .init_early = imx27_init_early,
78− .init_irq = mx27_init_irq,
7967 .init_late = imx27_pm_init,
8068 .dt_compat = imx27_dt_board_compat,
8169 MACHINE_END
arch/arm/mach-imx/mach-imx31.c+0−1
@@ -14,6 +14,5 @@ static const char * const imx31_dt_board_compat[] __initconst = { · 13 unmodified lines
1414 DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)")
1515 .map_io = mx31_map_io,
1616 .init_early = imx31_init_early,
17− .init_irq = mx31_init_irq,
1817 .dt_compat = imx31_dt_board_compat,
1918 MACHINE_END
arch/arm/mach-imx/mach-imx35.c+0−1
@@ -27,6 +27,5 @@ DT_MACHINE_START(IMX35_DT, "Freescale i.MX35 (Device Tree Support)") · 26 unmodified lines
2727 .l2c_aux_mask = ~0,
2828 .map_io = mx35_map_io,
2929 .init_early = imx35_init_early,
30− .init_irq = mx35_init_irq,
3130 .dt_compat = imx35_dt_board_compat,
3231 MACHINE_END
arch/arm/mach-imx/mm-imx3.c+0−24
@@ -109,18 +109,6 @@ void __init imx31_init_early(void) · 108 unmodified lines
109109 mx3_ccm_base = of_iomap(np, 0);
110110 BUG_ON(!mx3_ccm_base);
111111 }
112−
113−void __init mx31_init_irq(void)
114−{
115− void __iomem *avic_base;
116− struct device_node *np;
117−
118− np = of_find_compatible_node(NULL, NULL, "fsl,imx31-avic");
119− avic_base = of_iomap(np, 0);
120− BUG_ON(!avic_base);
121−
122− mxc_init_irq(avic_base);
123−}
124112 #endif /* ifdef CONFIG_SOC_IMX31 */
125113
126114 #ifdef CONFIG_SOC_IMX35
@@ -158,16 +146,4 @@ void __init imx35_init_early(void) · 31 unmodified lines
158146 mx3_ccm_base = of_iomap(np, 0);
159147 BUG_ON(!mx3_ccm_base);
160148 }
161−
162−void __init mx35_init_irq(void)
163−{
164− void __iomem *avic_base;
165− struct device_node *np;
166−
167− np = of_find_compatible_node(NULL, NULL, "fsl,imx35-avic");
168− avic_base = of_iomap(np, 0);
169− BUG_ON(!avic_base);
170−
171− mxc_init_irq(avic_base);
172−}
173149 #endif /* ifdef CONFIG_SOC_IMX35 */
arch/arm/mach-omap2/sr_device.c+58−17
@@ -88,34 +88,26 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data, · 87 unmodified lines
8888
8989 extern struct omap_sr_data omap_sr_pdata[];
9090
91−static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
91+static int __init sr_init_by_name(const char *name, const char *voltdm)
9292 {
9393 struct omap_sr_data *sr_data = NULL;
9494 struct omap_volt_data *volt_data;
95− struct omap_smartreflex_dev_attr *sr_dev_attr;
9695 static int i;
9796
98− if (!strncmp(oh->name, "smartreflex_mpu_iva", 20) ||
99− !strncmp(oh->name, "smartreflex_mpu", 16))
97+ if (!strncmp(name, "smartreflex_mpu_iva", 20) ||
98+ !strncmp(name, "smartreflex_mpu", 16))
10099 sr_data = &omap_sr_pdata[OMAP_SR_MPU];
101− else if (!strncmp(oh->name, "smartreflex_core", 17))
100+ else if (!strncmp(name, "smartreflex_core", 17))
102101 sr_data = &omap_sr_pdata[OMAP_SR_CORE];
103− else if (!strncmp(oh->name, "smartreflex_iva", 16))
102+ else if (!strncmp(name, "smartreflex_iva", 16))
104103 sr_data = &omap_sr_pdata[OMAP_SR_IVA];
105104
106105 if (!sr_data) {
107− pr_err("%s: Unknown instance %s\n", __func__, oh->name);
106+ pr_err("%s: Unknown instance %s\n", __func__, name);
108107 return -EINVAL;
109108 }
110109
111− sr_dev_attr = (struct omap_smartreflex_dev_attr *)oh->dev_attr;
112− if (!sr_dev_attr || !sr_dev_attr->sensor_voltdm_name) {
113− pr_err("%s: No voltage domain specified for %s. Cannot initialize\n",
114− __func__, oh->name);
115− goto exit;
116− }
117−
118− sr_data->name = oh->name;
110+ sr_data->name = name;
119111 if (cpu_is_omap343x())
120112 sr_data->ip_type = 1;
121113 else
@@ -136,10 +128,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) · 14 unmodified lines
136128 }
137129 }
138130
139− sr_data->voltdm = voltdm_lookup(sr_dev_attr->sensor_voltdm_name);
131+ sr_data->voltdm = voltdm_lookup(voltdm);
140132 if (!sr_data->voltdm) {
141133 pr_err("%s: Unable to get voltage domain pointer for VDD %s\n",
142− __func__, sr_dev_attr->sensor_voltdm_name);
134+ __func__, voltdm);
143135 goto exit;
144136 }
145137
@@ -160,6 +152,20 @@ exit: · 14 unmodified lines
160152 return 0;
161153 }
162154
155+static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
156+{
157+ struct omap_smartreflex_dev_attr *sr_dev_attr;
158+
159+ sr_dev_attr = (struct omap_smartreflex_dev_attr *)oh->dev_attr;
160+ if (!sr_dev_attr || !sr_dev_attr->sensor_voltdm_name) {
161+ pr_err("%s: No voltage domain specified for %s. Cannot initialize\n",
162+ __func__, oh->name);
163+ return 0;
164+ }
165+
166+ return sr_init_by_name(oh->name, sr_dev_attr->sensor_voltdm_name);
167+}
168+
163169 /*
164170 * API to be called from board files to enable smartreflex
165171 * autocompensation at init.
@@ -169,7 +175,42 @@ void __init omap_enable_smartreflex_on_init(void) · 3 unmodified lines
169175 sr_enable_on_init = true;
170176 }
171177
178+static const char * const omap4_sr_instances[] = {
179+ "mpu",
180+ "iva",
181+ "core",
182+};
183+
184+static const char * const dra7_sr_instances[] = {
185+ "mpu",
186+ "core",
187+};
188+
172189 int __init omap_devinit_smartreflex(void)
173190 {
191+ const char * const *sr_inst;
192+ int i, nr_sr = 0;
193+
194+ if (soc_is_omap44xx()) {
195+ sr_inst = omap4_sr_instances;
196+ nr_sr = ARRAY_SIZE(omap4_sr_instances);
197+
198+ } else if (soc_is_dra7xx()) {
199+ sr_inst = dra7_sr_instances;
200+ nr_sr = ARRAY_SIZE(dra7_sr_instances);
201+ }
202+
203+ if (nr_sr) {
204+ const char *name, *voltdm;
205+
206+ for (i = 0; i < nr_sr; i++) {
207+ name = kasprintf(GFP_KERNEL, "smartreflex_%s", sr_inst[i]);
208+ voltdm = sr_inst[i];
209+ sr_init_by_name(name, voltdm);
210+ }
211+
212+ return 0;
213+ }
214+
174215 return omap_hwmod_for_each_by_class("smartreflex", sr_dev_init, NULL);
175216 }
arch/arm64/Kconfig+10−0
@@ -810,6 +810,16 @@ config QCOM_FALKOR_ERRATUM_E1041 · 809 unmodified lines
810810
811811 If unsure, say Y.
812812
813+config NVIDIA_CARMEL_CNP_ERRATUM
814+ bool "NVIDIA Carmel CNP: CNP on Carmel semantically different than ARM cores"
815+ default y
816+ help
817+ If CNP is enabled on Carmel cores, non-sharable TLBIs on a core will not
818+ invalidate shared TLB entries installed by a different core, as it would
819+ on standard ARM cores.
820+
821+ If unsure, say Y.
822+
813823 config SOCIONEXT_SYNQUACER_PREITS
814824 bool "Socionext Synquacer: Workaround for GICv3 pre-ITS"
815825 default y
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi+1−0
@@ -198,6 +198,7 @@ · 197 unmodified lines
198198 ranges = <0x0 0x00 0x1700000 0x100000>;
199199 reg = <0x00 0x1700000 0x0 0x100000>;
200200 interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
201+ dma-coherent;
201202
202203 sec_jr0: jr@10000 {
203204 compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi+1−0
@@ -348,6 +348,7 @@ · 347 unmodified lines
348348 ranges = <0x0 0x00 0x1700000 0x100000>;
349349 reg = <0x00 0x1700000 0x0 0x100000>;
350350 interrupts = <0 75 0x4>;
351+ dma-coherent;
351352
352353 sec_jr0: jr@10000 {
353354 compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi+1−0
@@ -354,6 +354,7 @@ · 353 unmodified lines
354354 ranges = <0x0 0x00 0x1700000 0x100000>;
355355 reg = <0x00 0x1700000 0x0 0x100000>;
356356 interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
357+ dma-coherent;
357358
358359 sec_jr0: jr@10000 {
359360 compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts+1−1
@@ -35,7 +35,7 @@ · 34 unmodified lines
3535
3636 &i2c2 {
3737 clock-frequency = <400000>;
38− pinctrl-names = "default";
38+ pinctrl-names = "default", "gpio";
3939 pinctrl-0 = <&pinctrl_i2c2>;
4040 pinctrl-1 = <&pinctrl_i2c2_gpio>;
4141 sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
arch/arm64/boot/dts/freescale/imx8mp-phycore-som.dtsi+1−1
@@ -67,7 +67,7 @@ · 66 unmodified lines
6767
6868 &i2c1 {
6969 clock-frequency = <400000>;
70− pinctrl-names = "default";
70+ pinctrl-names = "default", "gpio";
7171 pinctrl-0 = <&pinctrl_i2c1>;
7272 pinctrl-1 = <&pinctrl_i2c1_gpio>;
7373 sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
arch/arm64/include/asm/checksum.h+1−1
@@ -37,7 +37,7 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl) · 36 unmodified lines
3737 } while (--n > 0);
3838
3939 sum += ((sum >> 32) | (sum << 32));
40− return csum_fold((__force u32)(sum >> 32));
40+ return csum_fold((__force __wsum)(sum >> 32));
4141 }
4242 #define ip_fast_csum ip_fast_csum
4343
arch/arm64/include/asm/cpucaps.h+2−1
@@ -66,7 +66,8 @@ · 65 unmodified lines
6666 #define ARM64_WORKAROUND_1508412 58
6767 #define ARM64_HAS_LDAPR 59
6868 #define ARM64_KVM_PROTECTED_MODE 60
69+#define ARM64_WORKAROUND_NVIDIA_CARMEL_CNP 61
6970
70−#define ARM64_NCAPS 61
71+#define ARM64_NCAPS 62
7172
7273 #endif /* __ASM_CPUCAPS_H */
arch/arm64/include/asm/kvm_arm.h+1−0
@@ -278,6 +278,7 @@ · 277 unmodified lines
278278 #define CPTR_EL2_DEFAULT CPTR_EL2_RES1
279279
280280 /* Hyp Debug Configuration Register bits */
281+#define MDCR_EL2_TTRF (1 << 19)
281282 #define MDCR_EL2_TPMS (1 << 14)
282283 #define MDCR_EL2_E2PB_MASK (UL(0x3))
283284 #define MDCR_EL2_E2PB_SHIFT (UL(12))
arch/arm64/include/asm/processor.h+2−0
@@ -251,6 +251,8 @@ unsigned long get_wchan(struct task_struct *p); · 250 unmodified lines
251251 extern struct task_struct *cpu_switch_to(struct task_struct *prev,
252252 struct task_struct *next);
253253
254+asmlinkage void arm64_preempt_schedule_irq(void);
255+
254256 #define task_pt_regs(p) \
255257 ((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1)
256258
arch/arm64/include/asm/thread_info.h+2−0
@@ -55,6 +55,8 @@ void arch_setup_new_exec(void); · 54 unmodified lines
5555 #define arch_setup_new_exec arch_setup_new_exec
5656
5757 void arch_release_task_struct(struct task_struct *tsk);
58+int arch_dup_task_struct(struct task_struct *dst,
59+ struct task_struct *src);
5860
5961 #endif
6062
arch/arm64/kernel/cpu_errata.c+8−0
@@ -525,6 +525,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = { · 524 unmodified lines
525525 0, 0,
526526 1, 0),
527527 },
528+#endif
529+#ifdef CONFIG_NVIDIA_CARMEL_CNP_ERRATUM
530+ {
531+ /* NVIDIA Carmel */
532+ .desc = "NVIDIA Carmel CNP erratum",
533+ .capability = ARM64_WORKAROUND_NVIDIA_CARMEL_CNP,
534+ ERRATA_MIDR_ALL_VERSIONS(MIDR_NVIDIA_CARMEL),
535+ },
528536 #endif
529537 {
530538 }
arch/arm64/kernel/cpufeature.c+4−2
@@ -383,7 +383,6 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { · 382 unmodified lines
383383 * of support.
384384 */
385385 S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64DFR0_PMUVER_SHIFT, 4, 0),
386− ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64DFR0_TRACEVER_SHIFT, 4, 0),
387386 ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64DFR0_DEBUGVER_SHIFT, 4, 0x6),
388387 ARM64_FTR_END,
389388 };
@@ -1321,7 +1320,10 @@ has_useable_cnp(const struct arm64_cpu_capabilities *entry, int scope) · 931 unmodified lines
13211320 * may share TLB entries with a CPU stuck in the crashed
13221321 * kernel.
13231322 */
1324− if (is_kdump_kernel())
1323+ if (is_kdump_kernel())
1324+ return false;
1325+
1326+ if (cpus_have_const_cap(ARM64_WORKAROUND_NVIDIA_CARMEL_CNP))
13251327 return false;
13261328
13271329 return has_cpuid_feature(entry, scope);
arch/arm64/kernel/cpuinfo.c+1−1
@@ -353,7 +353,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) · 352 unmodified lines
353353 * with the CLIDR_EL1 fields to avoid triggering false warnings
354354 * when there is a mismatch across the CPUs. Keep track of the
355355 * effective value of the CTR_EL0 in our internal records for
356− * acurate sanity check and feature enablement.
356+ * accurate sanity check and feature enablement.
357357 */
358358 info->reg_ctr = read_cpuid_effective_cachetype();
359359 info->reg_dczid = read_cpuid(DCZID_EL0);
arch/arm64/kernel/crash_dump.c+2−0
@@ -64,5 +64,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, · 63 unmodified lines
6464 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos)
6565 {
6666 memcpy(buf, phys_to_virt((phys_addr_t)*ppos), count);
67+ *ppos += count;
68+
6769 return count;
6870 }
arch/arm64/kernel/process.c+2−0
@@ -57,6 +57,8 @@ · 56 unmodified lines
5757 #include <asm/processor.h>
5858 #include <asm/pointer_auth.h>
5959 #include <asm/stacktrace.h>
60+#include <asm/switch_to.h>
61+#include <asm/system_misc.h>
6062
6163 #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
6264 #include <linux/stackprotector.h>
arch/arm64/kernel/stacktrace.c+5−4
@@ -194,8 +194,9 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl) · 193 unmodified lines
194194
195195 #ifdef CONFIG_STACKTRACE
196196
197−void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
198− struct task_struct *task, struct pt_regs *regs)
197+noinline void arch_stack_walk(stack_trace_consume_fn consume_entry,
198+ void *cookie, struct task_struct *task,
199+ struct pt_regs *regs)
199200 {
200201 struct stackframe frame;
201202
@@ -203,8 +204,8 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie, · 1 unmodified line
203204 start_backtrace(&frame, regs->regs[29], regs->pc);
204205 else if (task == current)
205206 start_backtrace(&frame,
206− (unsigned long)__builtin_frame_address(0),
207− (unsigned long)arch_stack_walk);
207+ (unsigned long)__builtin_frame_address(1),
208+ (unsigned long)__builtin_return_address(0));
208209 else
209210 start_backtrace(&frame, thread_saved_fp(task),
210211 thread_saved_pc(task));
arch/arm64/kvm/debug.c+2−0
@@ -89,6 +89,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) · 88 unmodified lines
8989 * - Debug ROM Address (MDCR_EL2_TDRA)
9090 * - OS related registers (MDCR_EL2_TDOSA)
9191 * - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB)
92+ * - Self-hosted Trace Filter controls (MDCR_EL2_TTRF)
9293 *
9394 * Additionally, KVM only traps guest accesses to the debug registers if
9495 * the guest is not actively using them (see the KVM_ARM64_DEBUG_DIRTY
@@ -112,6 +113,7 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) · 17 unmodified lines
112113 vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK;
113114 vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |
114115 MDCR_EL2_TPMS |
116+ MDCR_EL2_TTRF |
115117 MDCR_EL2_TPMCR |
116118 MDCR_EL2_TDRA |
117119 MDCR_EL2_TDOSA);
arch/arm64/kvm/hyp/vgic-v3-sr.c+9−0
@@ -429,6 +429,13 @@ u64 __vgic_v3_get_gic_config(void) · 428 unmodified lines
429429 if (has_vhe())
430430 flags = local_daif_save();
431431
432+ /*
433+ * Table 11-2 "Permitted ICC_SRE_ELx.SRE settings" indicates
434+ * that to be able to set ICC_SRE_EL1.SRE to 0, all the
435+ * interrupt overrides must be set. You've got to love this.
436+ */
437+ sysreg_clear_set(hcr_el2, 0, HCR_AMO | HCR_FMO | HCR_IMO);
438+ isb();
432439 write_gicreg(0, ICC_SRE_EL1);
433440 isb();
434441
@@ -436,6 +443,8 @@ u64 __vgic_v3_get_gic_config(void) · 1 unmodified line
436443
437444 write_gicreg(sre, ICC_SRE_EL1);
438445 isb();
446+ sysreg_clear_set(hcr_el2, HCR_AMO | HCR_FMO | HCR_IMO, 0);
447+ isb();
439448
440449 if (has_vhe())
441450 local_daif_restore(flags);
arch/arm64/mm/mmu.c+19−2
@@ -1448,6 +1448,22 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size) · 1447 unmodified lines
14481448 struct range arch_get_mappable_range(void)
14491449 {
14501450 struct range mhp_range;
1451+ u64 start_linear_pa = __pa(_PAGE_OFFSET(vabits_actual));
1452+ u64 end_linear_pa = __pa(PAGE_END - 1);
1453+
1454+ if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) {
1455+ /*
1456+ * Check for a wrap, it is possible because of randomized linear
1457+ * mapping the start physical address is actually bigger than
1458+ * the end physical address. In this case set start to zero
1459+ * because [0, end_linear_pa] range must still be able to cover
1460+ * all addressable physical addresses.
1461+ */
1462+ if (start_linear_pa > end_linear_pa)
1463+ start_linear_pa = 0;
1464+ }
1465+
1466+ WARN_ON(start_linear_pa > end_linear_pa);
14511467
14521468 /*
14531469 * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
@@ -1455,8 +1471,9 @@ struct range arch_get_mappable_range(void) · 1 unmodified line
14551471 * range which can be mapped inside this linear mapping range, must
14561472 * also be derived from its end points.
14571473 */
1458− mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
1459− mhp_range.end = __pa(PAGE_END - 1);
1474+ mhp_range.start = start_linear_pa;
1475+ mhp_range.end = end_linear_pa;
1476+
14601477 return mhp_range;
14611478 }
14621479
arch/csky/kernel/probes/ftrace.c+1−1
@@ -9,7 +9,7 @@ int arch_check_ftrace_location(struct kprobe *p) · 8 unmodified lines
99 return 0;
1010 }
1111
12−/* Ftrace callback handler for kprobes -- called under preepmt disabed */
12+/* Ftrace callback handler for kprobes -- called under preepmt disabled */
1313 void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
1414 struct ftrace_ops *ops, struct ftrace_regs *fregs)
1515 {
arch/ia64/kernel/err_inject.c+11−11
@@ -59,7 +59,7 @@ show_##name(struct device *dev, struct device_attribute *attr, \ · 58 unmodified lines
5959 char *buf) \
6060 { \
6161 u32 cpu=dev->id; \
62− return sprintf(buf, "%lx\n", name[cpu]); \
62+ return sprintf(buf, "%llx\n", name[cpu]); \
6363 }
6464
6565 #define store(name) \
@@ -86,9 +86,9 @@ store_call_start(struct device *dev, struct device_attribute *attr, · 20 unmodified lines
8686
8787 #ifdef ERR_INJ_DEBUG
8888 printk(KERN_DEBUG "pal_mc_err_inject for cpu%d:\n", cpu);
89− printk(KERN_DEBUG "err_type_info=%lx,\n", err_type_info[cpu]);
90− printk(KERN_DEBUG "err_struct_info=%lx,\n", err_struct_info[cpu]);
91− printk(KERN_DEBUG "err_data_buffer=%lx, %lx, %lx.\n",
89+ printk(KERN_DEBUG "err_type_info=%llx,\n", err_type_info[cpu]);
90+ printk(KERN_DEBUG "err_struct_info=%llx,\n", err_struct_info[cpu]);
91+ printk(KERN_DEBUG "err_data_buffer=%llx, %llx, %llx.\n",
9292 err_data_buffer[cpu].data1,
9393 err_data_buffer[cpu].data2,
9494 err_data_buffer[cpu].data3);
@@ -117,8 +117,8 @@ store_call_start(struct device *dev, struct device_attribute *attr, · 22 unmodified lines
117117
118118 #ifdef ERR_INJ_DEBUG
119119 printk(KERN_DEBUG "Returns: status=%d,\n", (int)status[cpu]);
120− printk(KERN_DEBUG "capabilities=%lx,\n", capabilities[cpu]);
121− printk(KERN_DEBUG "resources=%lx\n", resources[cpu]);
120+ printk(KERN_DEBUG "capabilities=%llx,\n", capabilities[cpu]);
121+ printk(KERN_DEBUG "resources=%llx\n", resources[cpu]);
122122 #endif
123123 return size;
124124 }
@@ -131,7 +131,7 @@ show_virtual_to_phys(struct device *dev, struct device_attribute *attr, · 6 unmodified lines
131131 char *buf)
132132 {
133133 unsigned int cpu=dev->id;
134− return sprintf(buf, "%lx\n", phys_addr[cpu]);
134+ return sprintf(buf, "%llx\n", phys_addr[cpu]);
135135 }
136136
137137 static ssize_t
@@ -145,7 +145,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr, · 7 unmodified lines
145145 ret = get_user_pages_fast(virt_addr, 1, FOLL_WRITE, NULL);
146146 if (ret<=0) {
147147 #ifdef ERR_INJ_DEBUG
148− printk("Virtual address %lx is not existing.\n",virt_addr);
148+ printk("Virtual address %llx is not existing.\n", virt_addr);
149149 #endif
150150 return -EINVAL;
151151 }
@@ -163,7 +163,7 @@ show_err_data_buffer(struct device *dev, · 11 unmodified lines
163163 {
164164 unsigned int cpu=dev->id;
165165
166− return sprintf(buf, "%lx, %lx, %lx\n",
166+ return sprintf(buf, "%llx, %llx, %llx\n",
167167 err_data_buffer[cpu].data1,
168168 err_data_buffer[cpu].data2,
169169 err_data_buffer[cpu].data3);
@@ -178,13 +178,13 @@ store_err_data_buffer(struct device *dev, · 8 unmodified lines
178178 int ret;
179179
180180 #ifdef ERR_INJ_DEBUG
181− printk("write err_data_buffer=[%lx,%lx,%lx] on cpu%d\n",
181+ printk("write err_data_buffer=[%llx,%llx,%llx] on cpu%d\n",
182182 err_data_buffer[cpu].data1,
183183 err_data_buffer[cpu].data2,
184184 err_data_buffer[cpu].data3,
185185 cpu);
186186 #endif
187− ret=sscanf(buf, "%lx, %lx, %lx",
187+ ret = sscanf(buf, "%llx, %llx, %llx",
188188 &err_data_buffer[cpu].data1,
189189 &err_data_buffer[cpu].data2,
190190 &err_data_buffer[cpu].data3);
arch/ia64/kernel/mca.c+1−1
@@ -1824,7 +1824,7 @@ ia64_mca_cpu_init(void *cpu_data) · 1823 unmodified lines
18241824 data = mca_bootmem();
18251825 first_time = 0;
18261826 } else
1827− data = (void *)__get_free_pages(GFP_KERNEL,
1827+ data = (void *)__get_free_pages(GFP_ATOMIC,
18281828 get_order(sz));
18291829 if (!data)
18301830 panic("Could not allocate MCA memory for cpu %d\n",
arch/mips/kernel/setup.c+1−1
@@ -43,7 +43,7 @@ · 42 unmodified lines
4343 #include <asm/prom.h>
4444
4545 #ifdef CONFIG_MIPS_ELF_APPENDED_DTB
46−const char __section(".appended_dtb") __appended_dtb[0x100000];
46+char __section(".appended_dtb") __appended_dtb[0x100000];
4747 #endif /* CONFIG_MIPS_ELF_APPENDED_DTB */
4848
4949 struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
arch/mips/kernel/vmlinux.lds.S+1−1
@@ -176,7 +176,7 @@ SECTIONS · 175 unmodified lines
176176 .fill : {
177177 FILL(0);
178178 BYTE(0);
179− . = ALIGN(8);
179+ STRUCT_ALIGN();
180180 }
181181 __appended_dtb = .;
182182 /* leave space for appended DTB */
arch/powerpc/include/asm/cpu_has_feature.h+2−2
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 #include <linux/bug.h>
88 #include <asm/cputable.h>
99
10−static inline bool early_cpu_has_feature(unsigned long feature)
10+static __always_inline bool early_cpu_has_feature(unsigned long feature)
1111 {
1212 return !!((CPU_FTRS_ALWAYS & feature) ||
1313 (CPU_FTRS_POSSIBLE & cur_cpu_spec->cpu_features & feature));
@@ -46,7 +46,7 @@ static __always_inline bool cpu_has_feature(unsigned long feature) · 32 unmodified lines
4646 return static_branch_likely(&cpu_feature_keys[i]);
4747 }
4848 #else
49−static inline bool cpu_has_feature(unsigned long feature)
49+static __always_inline bool cpu_has_feature(unsigned long feature)
5050 {
5151 return early_cpu_has_feature(feature);
5252 }
arch/powerpc/kernel/vdso32/gettimeofday.S+11−0
@@ -65,3 +65,14 @@ V_FUNCTION_END(__kernel_clock_getres) · 64 unmodified lines
6565 V_FUNCTION_BEGIN(__kernel_time)
6666 cvdso_call_time __c_kernel_time
6767 V_FUNCTION_END(__kernel_time)
68+
69+/* Routines for restoring integer registers, called by the compiler. */
70+/* Called with r11 pointing to the stack header word of the caller of the */
71+/* function, just beyond the end of the integer restore area. */
72+_GLOBAL(_restgpr_31_x)
73+_GLOBAL(_rest32gpr_31_x)
74+ lwz r0,4(r11)
75+ lwz r31,-4(r11)
76+ mtlr r0
77+ mr r1,r11
78+ blr
arch/powerpc/platforms/pseries/lpar.c+2−1
@@ -887,7 +887,8 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot, · 886 unmodified lines
887887
888888 want_v = hpte_encode_avpn(vpn, psize, ssize);
889889
890− flags = (newpp & 7) | H_AVPN;
890+ flags = (newpp & (HPTE_R_PP | HPTE_R_N | HPTE_R_KEY_LO)) | H_AVPN;
891+ flags |= (newpp & HPTE_R_KEY_HI) >> 48;
891892 if (mmu_has_feature(MMU_FTR_KERNEL_RO))
892893 /* Move pp0 into bit 8 (IBM 55) */
893894 flags |= (newpp & HPTE_R_PP0) >> 55;
arch/powerpc/platforms/pseries/mobility.c+44−4
@@ -452,12 +452,28 @@ static int do_suspend(void) · 451 unmodified lines
452452 return ret;
453453 }
454454
455+/**
456+ * struct pseries_suspend_info - State shared between CPUs for join/suspend.
457+ * @counter: Threads are to increment this upon resuming from suspend
458+ * or if an error is received from H_JOIN. The thread which performs
459+ * the first increment (i.e. sets it to 1) is responsible for
460+ * waking the other threads.
461+ * @done: False if join/suspend is in progress. True if the operation is
462+ * complete (successful or not).
463+ */
464+struct pseries_suspend_info {
465+ atomic_t counter;
466+ bool done;
467+};
468+
455469 static int do_join(void *arg)
456470 {
457− atomic_t *counter = arg;
471+ struct pseries_suspend_info *info = arg;
472+ atomic_t *counter = &info->counter;
458473 long hvrc;
459474 int ret;
460475
476+retry:
461477 /* Must ensure MSR.EE off for H_JOIN. */
462478 hard_irq_disable();
463479 hvrc = plpar_hcall_norets(H_JOIN);
@@ -473,8 +489,20 @@ static int do_join(void *arg) · 9 unmodified lines
473489 case H_SUCCESS:
474490 /*
475491 * The suspend is complete and this cpu has received a
476− * prod.
492+ * prod, or we've received a stray prod from unrelated
493+ * code (e.g. paravirt spinlocks) and we need to join
494+ * again.
495+ *
496+ * This barrier orders the return from H_JOIN above vs
497+ * the load of info->done. It pairs with the barrier
498+ * in the wakeup/prod path below.
477499 */
500+ smp_mb();
501+ if (READ_ONCE(info->done) == false) {
502+ pr_info_ratelimited("premature return from H_JOIN on CPU %i, retrying",
503+ smp_processor_id());
504+ goto retry;
505+ }
478506 ret = 0;
479507 break;
480508 case H_BAD_MODE:
@@ -488,6 +516,13 @@ static int do_join(void *arg) · 7 unmodified lines
488516
489517 if (atomic_inc_return(counter) == 1) {
490518 pr_info("CPU %u waking all threads\n", smp_processor_id());
519+ WRITE_ONCE(info->done, true);
520+ /*
521+ * This barrier orders the store to info->done vs subsequent
522+ * H_PRODs to wake the other CPUs. It pairs with the barrier
523+ * in the H_SUCCESS case above.
524+ */
525+ smp_mb();
491526 prod_others();
492527 }
493528 /*
@@ -535,11 +570,16 @@ static int pseries_suspend(u64 handle) · 41 unmodified lines
535570 int ret;
536571
537572 while (true) {
538− atomic_t counter = ATOMIC_INIT(0);
573+ struct pseries_suspend_info info;
539574 unsigned long vasi_state;
540575 int vasi_err;
541576
542− ret = stop_machine(do_join, &counter, cpu_online_mask);
577+ info = (struct pseries_suspend_info) {
578+ .counter = ATOMIC_INIT(0),
579+ .done = false,
580+ };
581+
582+ ret = stop_machine(do_join, &info, cpu_online_mask);
543583 if (ret == 0)
544584 break;
545585 /*
arch/riscv/Kconfig+3−3
@@ -93,7 +93,6 @@ config RISCV · 92 unmodified lines
9393 select PCI_MSI if PCI
9494 select RISCV_INTC
9595 select RISCV_TIMER if RISCV_SBI
96− select SPARSEMEM_STATIC if 32BIT
9796 select SPARSE_IRQ
9897 select SYSCTL_EXCEPTION_TRACE
9998 select THREAD_INFO_IN_TASK
@@ -154,7 +153,8 @@ config ARCH_FLATMEM_ENABLE · 54 unmodified lines
154153 config ARCH_SPARSEMEM_ENABLE
155154 def_bool y
156155 depends on MMU
157− select SPARSEMEM_VMEMMAP_ENABLE
156+ select SPARSEMEM_STATIC if 32BIT && SPARSMEM
157+ select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
158158
159159 config ARCH_SELECT_MEMORY_MODEL
160160 def_bool ARCH_SPARSEMEM_ENABLE
@@ -314,7 +314,7 @@ endchoice · 153 unmodified lines
314314 # Common NUMA Features
315315 config NUMA
316316 bool "NUMA Memory Allocation and Scheduler Support"
317− depends on SMP
317+ depends on SMP && MMU
318318 select GENERIC_ARCH_NUMA
319319 select OF_NUMA
320320 select ARCH_SUPPORTS_NUMA_BALANCING
arch/riscv/Kconfig.socs+2−0
@@ -31,6 +31,8 @@ config SOC_CANAAN · 30 unmodified lines
3131 select SIFIVE_PLIC
3232 select ARCH_HAS_RESET_CONTROLLER
3333 select PINCTRL
34+ select COMMON_CLK
35+ select COMMON_CLK_K210
3436 help
3537 This enables support for Canaan Kendryte K210 SoC platform hardware.
3638
arch/riscv/include/asm/asm-prototypes.h+16−0
@@ -9,4 +9,20 @@ long long __lshrti3(long long a, int b); · 8 unmodified lines
99 long long __ashrti3(long long a, int b);
1010 long long __ashlti3(long long a, int b);
1111
12+
13+#define DECLARE_DO_ERROR_INFO(name) asmlinkage void name(struct pt_regs *regs)
14+
15+DECLARE_DO_ERROR_INFO(do_trap_unknown);
16+DECLARE_DO_ERROR_INFO(do_trap_insn_misaligned);
17+DECLARE_DO_ERROR_INFO(do_trap_insn_fault);
18+DECLARE_DO_ERROR_INFO(do_trap_insn_illegal);
19+DECLARE_DO_ERROR_INFO(do_trap_load_fault);
20+DECLARE_DO_ERROR_INFO(do_trap_load_misaligned);
21+DECLARE_DO_ERROR_INFO(do_trap_store_misaligned);
22+DECLARE_DO_ERROR_INFO(do_trap_store_fault);
23+DECLARE_DO_ERROR_INFO(do_trap_ecall_u);
24+DECLARE_DO_ERROR_INFO(do_trap_ecall_s);
25+DECLARE_DO_ERROR_INFO(do_trap_ecall_m);
26+DECLARE_DO_ERROR_INFO(do_trap_break);
27+
1228 #endif /* _ASM_RISCV_PROTOTYPES_H */
arch/riscv/include/asm/irq.h+2−0
@@ -12,4 +12,6 @@ · 11 unmodified lines
1212
1313 #include <asm-generic/irq.h>
1414
15+extern void __init init_IRQ(void);
16+
1517 #endif /* _ASM_RISCV_IRQ_H */
arch/riscv/include/asm/processor.h+1−0
@@ -71,6 +71,7 @@ int riscv_of_processor_hartid(struct device_node *node); · 70 unmodified lines
7171 int riscv_of_parent_hartid(struct device_node *node);
7272
7373 extern void riscv_fill_hwcap(void);
74+extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
7475
7576 #endif /* __ASSEMBLY__ */
7677
arch/riscv/include/asm/ptrace.h+5−0
@@ -119,6 +119,11 @@ extern int regs_query_register_offset(const char *name); · 118 unmodified lines
119119 extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
120120 unsigned int n);
121121
122+void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
123+ unsigned long frame_pointer);
124+int do_syscall_trace_enter(struct pt_regs *regs);
125+void do_syscall_trace_exit(struct pt_regs *regs);
126+
122127 /**
123128 * regs_get_register() - get register value from its offset
124129 * @regs: pt_regs from which register value is gotten
arch/riscv/include/asm/sbi.h+2−2
@@ -51,10 +51,10 @@ enum sbi_ext_rfence_fid { · 50 unmodified lines
5151 SBI_EXT_RFENCE_REMOTE_FENCE_I = 0,
5252 SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,
5353 SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,
54− SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
5554 SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID,
56− SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
55+ SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
5756 SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID,
57+ SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
5858 };
5959
6060 enum sbi_ext_hsm_fid {
arch/riscv/include/asm/timex.h+2−0
@@ -88,4 +88,6 @@ static inline int read_current_timer(unsigned long *timer_val) · 87 unmodified lines
8888 return 0;
8989 }
9090
91+extern void time_init(void);
92+
9193 #endif /* _ASM_RISCV_TIMEX_H */
arch/riscv/include/asm/uaccess.h+5−2
@@ -306,7 +306,9 @@ do { \ · 305 unmodified lines
306306 * data types like structures or arrays.
307307 *
308308 * @ptr must have pointer-to-simple-variable type, and @x must be assignable
309− * to the result of dereferencing @ptr.
309+ * to the result of dereferencing @ptr. The value of @x is copied to avoid
310+ * re-ordering where @x is evaluated inside the block that enables user-space
311+ * access (thus bypassing user space protection if @x is a function).
310312 *
311313 * Caller must check the pointer with access_ok() before calling this
312314 * function.
@@ -316,12 +318,13 @@ do { \ · 3 unmodified lines
316318 #define __put_user(x, ptr) \
317319 ({ \
318320 __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
321+ __typeof__(*__gu_ptr) __val = (x); \
319322 long __pu_err = 0; \
320323 \
321324 __chk_user_ptr(__gu_ptr); \
322325 \
323326 __enable_user_access(); \
324− __put_user_nocheck(x, __gu_ptr, __pu_err); \
327+ __put_user_nocheck(__val, __gu_ptr, __pu_err); \
325328 __disable_user_access(); \
326329 \
327330 __pu_err; \
arch/riscv/kernel/Makefile+1−0
@@ -8,6 +8,7 @@ CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE) · 7 unmodified lines
88 CFLAGS_REMOVE_patch.o = $(CC_FLAGS_FTRACE)
99 CFLAGS_REMOVE_sbi.o = $(CC_FLAGS_FTRACE)
1010 endif
11+CFLAGS_syscall_table.o += $(call cc-option,-Wno-override-init,)
1112
1213 extra-y += head.o
1314 extra-y += vmlinux.lds
arch/riscv/kernel/entry.S+1−0
@@ -447,6 +447,7 @@ ENDPROC(__switch_to) · 446 unmodified lines
447447 #endif
448448
449449 .section ".rodata"
450+ .align LGREG
450451 /* Exception vector table */
451452 ENTRY(excp_vect_table)
452453 RISCV_PTR do_trap_insn_misaligned
arch/riscv/kernel/probes/ftrace.c+10−8
@@ -2,39 +2,41 @@ · 1 unmodified line
22
33 #include <linux/kprobes.h>
44
5−/* Ftrace callback handler for kprobes -- called under preepmt disabed */
5+/* Ftrace callback handler for kprobes -- called under preepmt disabled */
66 void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
7− struct ftrace_ops *ops, struct ftrace_regs *regs)
7+ struct ftrace_ops *ops, struct ftrace_regs *fregs)
88 {
99 struct kprobe *p;
10+ struct pt_regs *regs;
1011 struct kprobe_ctlblk *kcb;
1112
1213 p = get_kprobe((kprobe_opcode_t *)ip);
1314 if (unlikely(!p) || kprobe_disabled(p))
1415 return;
1516
17+ regs = ftrace_get_regs(fregs);
1618 kcb = get_kprobe_ctlblk();
1719 if (kprobe_running()) {
1820 kprobes_inc_nmissed_count(p);
1921 } else {
20− unsigned long orig_ip = instruction_pointer(&(regs->regs));
22+ unsigned long orig_ip = instruction_pointer(regs);
2123
22− instruction_pointer_set(&(regs->regs), ip);
24+ instruction_pointer_set(regs, ip);
2325
2426 __this_cpu_write(current_kprobe, p);
2527 kcb->kprobe_status = KPROBE_HIT_ACTIVE;
26− if (!p->pre_handler || !p->pre_handler(p, &(regs->regs))) {
28+ if (!p->pre_handler || !p->pre_handler(p, regs)) {
2729 /*
2830 * Emulate singlestep (and also recover regs->pc)
2931 * as if there is a nop
3032 */
31− instruction_pointer_set(&(regs->regs),
33+ instruction_pointer_set(regs,
3234 (unsigned long)p->addr + MCOUNT_INSN_SIZE);
3335 if (unlikely(p->post_handler)) {
3436 kcb->kprobe_status = KPROBE_HIT_SSDONE;
35− p->post_handler(p, &(regs->regs), 0);
37+ p->post_handler(p, regs, 0);
3638 }
37− instruction_pointer_set(&(regs->regs), orig_ip);
39+ instruction_pointer_set(regs, orig_ip);
3840 }
3941
4042 /*
arch/riscv/kernel/probes/kprobes.c+1−2
@@ -256,8 +256,7 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, unsigned int trapnr) · 255 unmodified lines
256256 * normal page fault.
257257 */
258258 regs->epc = (unsigned long) cur->addr;
259− if (!instruction_pointer(regs))
260− BUG();
259+ BUG_ON(!instruction_pointer(regs));
261260
262261 if (kcb->kprobe_status == KPROBE_REENTER)
263262 restore_previous_kprobe(kcb);
arch/riscv/kernel/process.c+1−0
@@ -10,6 +10,7 @@ · 9 unmodified lines
1010 #include <linux/cpu.h>
1111 #include <linux/kernel.h>
1212 #include <linux/sched.h>
13+#include <linux/sched/debug.h>
1314 #include <linux/sched/task_stack.h>
1415 #include <linux/tick.h>
1516 #include <linux/ptrace.h>
arch/riscv/kernel/sbi.c+1−1
@@ -116,7 +116,7 @@ void sbi_clear_ipi(void) · 115 unmodified lines
116116 EXPORT_SYMBOL(sbi_clear_ipi);
117117
118118 /**
119− * sbi_set_timer_v01() - Program the timer for next timer event.
119+ * __sbi_set_timer_v01() - Program the timer for next timer event.
120120 * @stime_value: The value after which next timer event should fire.
121121 *
122122 * Return: None
arch/riscv/kernel/setup.c+2−1
@@ -147,7 +147,8 @@ static void __init init_resources(void) · 146 unmodified lines
147147 bss_res.end = __pa_symbol(__bss_stop) - 1;
148148 bss_res.flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
149149
150− mem_res_sz = (memblock.memory.cnt + memblock.reserved.cnt) * sizeof(*mem_res);
150+ /* + 1 as memblock_alloc() might increase memblock.reserved.cnt */
151+ mem_res_sz = (memblock.memory.cnt + memblock.reserved.cnt + 1) * sizeof(*mem_res);
151152 mem_res = memblock_alloc(mem_res_sz, SMP_CACHE_BYTES);
152153 if (!mem_res)
153154 panic("%s: Failed to allocate %zu bytes\n", __func__, mem_res_sz);
arch/riscv/kernel/stacktrace.c+1−1
@@ -14,7 +14,7 @@ · 13 unmodified lines
1414
1515 #include <asm/stacktrace.h>
1616
17−register const unsigned long sp_in_global __asm__("sp");
17+register unsigned long sp_in_global __asm__("sp");
1818
1919 #ifdef CONFIG_FRAME_POINTER
2020
arch/riscv/kernel/time.c+1−0
@@ -9,6 +9,7 @@ · 8 unmodified lines
99 #include <linux/delay.h>
1010 #include <asm/sbi.h>
1111 #include <asm/processor.h>
12+#include <asm/timex.h>
1213
1314 unsigned long riscv_timebase;
1415 EXPORT_SYMBOL_GPL(riscv_timebase);
arch/riscv/kernel/traps.c+1−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
1717 #include <linux/module.h>
1818 #include <linux/irq.h>
1919
20+#include <asm/asm-prototypes.h>
2021 #include <asm/bug.h>
2122 #include <asm/processor.h>
2223 #include <asm/ptrace.h>
arch/riscv/mm/kasan_init.c+4−2
@@ -155,7 +155,7 @@ static void __init kasan_populate(void *start, void *end) · 154 unmodified lines
155155 memset(start, KASAN_SHADOW_INIT, end - start);
156156 }
157157
158−void __init kasan_shallow_populate(void *start, void *end)
158+static void __init kasan_shallow_populate(void *start, void *end)
159159 {
160160 unsigned long vaddr = (unsigned long)start & PAGE_MASK;
161161 unsigned long vend = PAGE_ALIGN((unsigned long)end);
@@ -187,6 +187,8 @@ void __init kasan_shallow_populate(void *start, void *end) · 25 unmodified lines
187187 }
188188 vaddr += PAGE_SIZE;
189189 }
190+
191+ local_flush_tlb_all();
190192 }
191193
192194 void __init kasan_init(void)
@@ -214,7 +216,7 @@ void __init kasan_init(void) · 21 unmodified lines
214216 break;
215217
216218 kasan_populate(kasan_mem_to_shadow(start), kasan_mem_to_shadow(end));
217− };
219+ }
218220
219221 for (i = 0; i < PTRS_PER_PTE; i++)
220222 set_pte(&kasan_early_shadow_pte[i],
arch/s390/include/asm/pci.h+1−1
@@ -202,7 +202,7 @@ extern unsigned int s390_pci_no_rid; · 201 unmodified lines
202202 ----------------------------------------------------------------------------- */
203203 /* Base stuff */
204204 int zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
205−void zpci_remove_device(struct zpci_dev *zdev);
205+void zpci_remove_device(struct zpci_dev *zdev, bool set_error);
206206 int zpci_enable_device(struct zpci_dev *);
207207 int zpci_disable_device(struct zpci_dev *);
208208 int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
arch/s390/include/asm/vdso/data.h+1−1
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 #include <vdso/datapage.h>
77
88 struct arch_vdso_data {
9− __u64 tod_steering_delta;
9+ __s64 tod_steering_delta;
1010 __u64 tod_steering_end;
1111 };
1212
arch/s390/kernel/perf_cpum_cf_diag.c+2−1
@@ -968,7 +968,7 @@ static int cf_diag_all_start(void) · 967 unmodified lines
968968 */
969969 static size_t cf_diag_needspace(unsigned int sets)
970970 {
971− struct cpu_cf_events *cpuhw = this_cpu_ptr(&cpu_cf_events);
971+ struct cpu_cf_events *cpuhw = get_cpu_ptr(&cpu_cf_events);
972972 size_t bytes = 0;
973973 int i;
974974
@@ -984,6 +984,7 @@ static size_t cf_diag_needspace(unsigned int sets) · 9 unmodified lines
984984 sizeof(((struct s390_ctrset_cpudata *)0)->no_sets));
985985 debug_sprintf_event(cf_diag_dbg, 5, "%s bytes %ld\n", __func__,
986986 bytes);
987+ put_cpu_ptr(&cpu_cf_events);
987988 return bytes;
988989 }
989990
arch/s390/kernel/time.c+8−2
@@ -80,10 +80,12 @@ void __init time_early_init(void) · 79 unmodified lines
8080 {
8181 struct ptff_qto qto;
8282 struct ptff_qui qui;
83+ int cs;
8384
8485 /* Initialize TOD steering parameters */
8586 tod_steering_end = tod_clock_base.tod;
86− vdso_data->arch_data.tod_steering_end = tod_steering_end;
87+ for (cs = 0; cs < CS_BASES; cs++)
88+ vdso_data[cs].arch_data.tod_steering_end = tod_steering_end;
8789
8890 if (!test_facility(28))
8991 return;
@@ -366,6 +368,7 @@ static void clock_sync_global(unsigned long delta) · 276 unmodified lines
366368 {
367369 unsigned long now, adj;
368370 struct ptff_qto qto;
371+ int cs;
369372
370373 /* Fixup the monotonic sched clock. */
371374 tod_clock_base.eitod += delta;
@@ -381,7 +384,10 @@ static void clock_sync_global(unsigned long delta) · 9 unmodified lines
381384 panic("TOD clock sync offset %li is too large to drift\n",
382385 tod_steering_delta);
383386 tod_steering_end = now + (abs(tod_steering_delta) << 15);
384− vdso_data->arch_data.tod_steering_end = tod_steering_end;
387+ for (cs = 0; cs < CS_BASES; cs++) {
388+ vdso_data[cs].arch_data.tod_steering_end = tod_steering_end;
389+ vdso_data[cs].arch_data.tod_steering_delta = tod_steering_delta;
390+ }
385391
386392 /* Update LPAR offset. */
387393 if (ptff_query(PTFF_QTO) && ptff(&qto, sizeof(qto), PTFF_QTO) == 0)
arch/s390/kernel/vtime.c+1−1
@@ -214,7 +214,7 @@ void vtime_flush(struct task_struct *tsk) · 213 unmodified lines
214214 avg_steal = S390_lowcore.avg_steal_timer / 2;
215215 if ((s64) steal > 0) {
216216 S390_lowcore.steal_timer = 0;
217− account_steal_time(steal);
217+ account_steal_time(cputime_to_nsecs(steal));
218218 avg_steal += steal;
219219 }
220220 S390_lowcore.avg_steal_timer = avg_steal;
arch/s390/pci/pci.c+24−4
@@ -682,16 +682,36 @@ int zpci_disable_device(struct zpci_dev *zdev) · 681 unmodified lines
682682 }
683683 EXPORT_SYMBOL_GPL(zpci_disable_device);
684684
685−void zpci_remove_device(struct zpci_dev *zdev)
685+/* zpci_remove_device - Removes the given zdev from the PCI core
686+ * @zdev: the zdev to be removed from the PCI core
687+ * @set_error: if true the device's error state is set to permanent failure
688+ *
689+ * Sets a zPCI device to a configured but offline state; the zPCI
690+ * device is still accessible through its hotplug slot and the zPCI
691+ * API but is removed from the common code PCI bus, making it
692+ * no longer available to drivers.
693+ */
694+void zpci_remove_device(struct zpci_dev *zdev, bool set_error)
686695 {
687696 struct zpci_bus *zbus = zdev->zbus;
688697 struct pci_dev *pdev;
689698
699+ if (!zdev->zbus->bus)
700+ return;
701+
690702 pdev = pci_get_slot(zbus->bus, zdev->devfn);
691703 if (pdev) {
692− if (pdev->is_virtfn)
693− return zpci_iov_remove_virtfn(pdev, zdev->vfn);
704+ if (set_error)
705+ pdev->error_state = pci_channel_io_perm_failure;
706+ if (pdev->is_virtfn) {
707+ zpci_iov_remove_virtfn(pdev, zdev->vfn);
708+ /* balance pci_get_slot */
709+ pci_dev_put(pdev);
710+ return;
711+ }
694712 pci_stop_and_remove_bus_device_locked(pdev);
713+ /* balance pci_get_slot */
714+ pci_dev_put(pdev);
695715 }
696716 }
697717
@@ -765,7 +785,7 @@ void zpci_release_device(struct kref *kref) · 67 unmodified lines
765785 struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
766786
767787 if (zdev->zbus->bus)
768− zpci_remove_device(zdev);
788+ zpci_remove_device(zdev, false);
769789
770790 switch (zdev->state) {
771791 case ZPCI_FN_STATE_ONLINE:
arch/s390/pci/pci_event.c+6−12
@@ -76,13 +76,10 @@ void zpci_event_error(void *data) · 75 unmodified lines
7676 static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
7777 {
7878 struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid);
79− struct pci_dev *pdev = NULL;
8079 enum zpci_state state;
80+ struct pci_dev *pdev;
8181 int ret;
8282
83− if (zdev && zdev->zbus->bus)
84− pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
85−
8683 zpci_err("avail CCDF:\n");
8784 zpci_err_hex(ccdf, sizeof(*ccdf));
8885
@@ -124,8 +121,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) · 35 unmodified lines
124121 case 0x0303: /* Deconfiguration requested */
125122 if (!zdev)
126123 break;
127− if (pdev)
128− zpci_remove_device(zdev);
124+ zpci_remove_device(zdev, false);
129125
130126 ret = zpci_disable_device(zdev);
131127 if (ret)
@@ -140,12 +136,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) · 8 unmodified lines
140136 case 0x0304: /* Configured -> Standby|Reserved */
141137 if (!zdev)
142138 break;
143− if (pdev) {
144− /* Give the driver a hint that the function is
145− * already unusable. */
146− pdev->error_state = pci_channel_io_perm_failure;
147− zpci_remove_device(zdev);
148− }
139+ /* Give the driver a hint that the function is
140+ * already unusable.
141+ */
142+ zpci_remove_device(zdev, true);
149143
150144 zdev->fh = ccdf->fh;
151145 zpci_disable_device(zdev);
arch/x86/Makefile+1−1
@@ -27,7 +27,7 @@ endif · 26 unmodified lines
2727 REALMODE_CFLAGS := -m16 -g -Os -DDISABLE_BRANCH_PROFILING \
2828 -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
2929 -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
30− -mno-mmx -mno-sse
30+ -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
3131
3232 REALMODE_CFLAGS += -ffreestanding
3333 REALMODE_CFLAGS += -fno-stack-protector
arch/x86/events/intel/core.c+3−0
@@ -3659,6 +3659,9 @@ static int intel_pmu_hw_config(struct perf_event *event) · 3658 unmodified lines
36593659 return ret;
36603660
36613661 if (event->attr.precise_ip) {
3662+ if ((event->attr.config & INTEL_ARCH_EVENT_MASK) == INTEL_FIXED_VLBR_EVENT)
3663+ return -EINVAL;
3664+
36623665 if (!(event->attr.freq || (event->attr.wakeup_events && !event->attr.watermark))) {
36633666 event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD;
36643667 if (!(event->attr.sample_type &
arch/x86/events/intel/ds.c+1−1
@@ -2010,7 +2010,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d · 2009 unmodified lines
20102010 */
20112011 if (!pebs_status && cpuc->pebs_enabled &&
20122012 !(cpuc->pebs_enabled & (cpuc->pebs_enabled-1)))
2013− pebs_status = cpuc->pebs_enabled;
2013+ pebs_status = p->status = cpuc->pebs_enabled;
20142014
20152015 bit = find_first_bit((unsigned long *)&pebs_status,
20162016 x86_pmu.max_pebs_events);
arch/x86/include/asm/kvm_host.h+26−8
@@ -884,12 +884,29 @@ struct kvm_hv_syndbg { · 883 unmodified lines
884884 u64 options;
885885 };
886886
887+/* Current state of Hyper-V TSC page clocksource */
888+enum hv_tsc_page_status {
889+ /* TSC page was not set up or disabled */
890+ HV_TSC_PAGE_UNSET = 0,
891+ /* TSC page MSR was written by the guest, update pending */
892+ HV_TSC_PAGE_GUEST_CHANGED,
893+ /* TSC page MSR was written by KVM userspace, update pending */
894+ HV_TSC_PAGE_HOST_CHANGED,
895+ /* TSC page was properly set up and is currently active */
896+ HV_TSC_PAGE_SET,
897+ /* TSC page is currently being updated and therefore is inactive */
898+ HV_TSC_PAGE_UPDATING,
899+ /* TSC page was set up with an inaccessible GPA */
900+ HV_TSC_PAGE_BROKEN,
901+};
902+
887903 /* Hyper-V emulation context */
888904 struct kvm_hv {
889905 struct mutex hv_lock;
890906 u64 hv_guest_os_id;
891907 u64 hv_hypercall;
892908 u64 hv_tsc_page;
909+ enum hv_tsc_page_status hv_tsc_page_status;
893910
894911 /* Hyper-v based guest crash (NT kernel bugcheck) parameters */
895912 u64 hv_crash_param[HV_X64_MSR_CRASH_PARAMS];
@@ -931,6 +948,12 @@ enum kvm_irqchip_mode { · 35 unmodified lines
931948 KVM_IRQCHIP_SPLIT, /* created with KVM_CAP_SPLIT_IRQCHIP */
932949 };
933950
951+struct kvm_x86_msr_filter {
952+ u8 count;
953+ bool default_allow:1;
954+ struct msr_bitmap_range ranges[16];
955+};
956+
934957 #define APICV_INHIBIT_REASON_DISABLE 0
935958 #define APICV_INHIBIT_REASON_HYPERV 1
936959 #define APICV_INHIBIT_REASON_NESTED 2
@@ -1025,16 +1048,11 @@ struct kvm_arch { · 88 unmodified lines
10251048 bool guest_can_read_msr_platform_info;
10261049 bool exception_payload_enabled;
10271050
1051+ bool bus_lock_detection_enabled;
1052+
10281053 /* Deflect RDMSR and WRMSR to user space when they trigger a #GP */
10291054 u32 user_space_msr_mask;
1030−
1031− struct {
1032− u8 count;
1033− bool default_allow:1;
1034− struct msr_bitmap_range ranges[16];
1035− } msr_filter;
1036−
1037− bool bus_lock_detection_enabled;
1055+ struct kvm_x86_msr_filter __rcu *msr_filter;
10381056
10391057 struct kvm_pmu_event_filter __rcu *pmu_event_filter;
10401058 struct task_struct *nx_lpage_recovery_thread;
arch/x86/include/asm/processor.h+0−9
@@ -551,15 +551,6 @@ static inline void arch_thread_struct_whitelist(unsigned long *offset, · 550 unmodified lines
551551 *size = fpu_kernel_xstate_size;
552552 }
553553
554−/*
555− * Thread-synchronous status.
556− *
557− * This is different from the flags in that nobody else
558− * ever touches our thread-synchronous status, so we don't
559− * have to worry about atomic accesses.
560− */
561−#define TS_COMPAT 0x0002 /* 32bit syscall active (64BIT)*/
562−
563554 static inline void
564555 native_load_sp0(unsigned long sp0)
565556 {
arch/x86/include/asm/smp.h+1−0
@@ -132,6 +132,7 @@ void native_play_dead(void); · 131 unmodified lines
132132 void play_dead_common(void);
133133 void wbinvd_on_cpu(int cpu);
134134 int wbinvd_on_all_cpus(void);
135+bool wakeup_cpu0(void);
135136
136137 void native_smp_send_reschedule(int cpu);
137138 void native_send_call_func_ipi(const struct cpumask *mask);
arch/x86/include/asm/thread_info.h+14−1
@@ -205,10 +205,23 @@ static inline int arch_within_stack_frames(const void * const stack, · 204 unmodified lines
205205
206206 #endif
207207
208+/*
209+ * Thread-synchronous status.
210+ *
211+ * This is different from the flags in that nobody else
212+ * ever touches our thread-synchronous status, so we don't
213+ * have to worry about atomic accesses.
214+ */
215+#define TS_COMPAT 0x0002 /* 32bit syscall active (64BIT)*/
216+
217+#ifndef __ASSEMBLY__
208218 #ifdef CONFIG_COMPAT
209219 #define TS_I386_REGS_POKED 0x0004 /* regs poked by 32-bit ptracer */
220+
221+#define arch_set_restart_data(restart) \
222+ do { restart->arch_data = current_thread_info()->status; } while (0)
223+
210224 #endif
211−#ifndef __ASSEMBLY__
212225
213226 #ifdef CONFIG_X86_32
214227 #define in_ia32_syscall() true
arch/x86/include/asm/xen/page.h+0−12
@@ -86,18 +86,6 @@ clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, · 85 unmodified lines
8686 }
8787 #endif
8888
89−/*
90− * The maximum amount of extra memory compared to the base size. The
91− * main scaling factor is the size of struct page. At extreme ratios
92− * of base:extra, all the base memory can be filled with page
93− * structures for the extra memory, leaving no space for anything
94− * else.
95− *
96− * 10x seems like a reasonable balance between scaling flexibility and
97− * leaving a practically usable system.
98− */
99−#define XEN_EXTRA_MEM_RATIO (10)
100−
10189 /*
10290 * Helper functions to write or read unsigned long values to/from
10391 * memory, when the access may fault.
arch/x86/kernel/acpi/boot.c+12−13
@@ -1554,10 +1554,18 @@ void __init acpi_boot_table_init(void) · 1553 unmodified lines
15541554 /*
15551555 * Initialize the ACPI boot-time table parser.
15561556 */
1557− if (acpi_table_init()) {
1557+ if (acpi_locate_initial_tables())
15581558 disable_acpi();
1559− return;
1560− }
1559+ else
1560+ acpi_reserve_initial_tables();
1561+}
1562+
1563+int __init early_acpi_boot_init(void)
1564+{
1565+ if (acpi_disabled)
1566+ return 1;
1567+
1568+ acpi_table_init_complete();
15611569
15621570 acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf);
15631571
@@ -1570,18 +1578,9 @@ void __init acpi_boot_table_init(void) · 6 unmodified lines
15701578 } else {
15711579 printk(KERN_WARNING PREFIX "Disabling ACPI support\n");
15721580 disable_acpi();
1573− return;
1581+ return 1;
15741582 }
15751583 }
1576−}
1577−
1578−int __init early_acpi_boot_init(void)
1579−{
1580− /*
1581− * If acpi_disabled, bail out
1582− */
1583− if (acpi_disabled)
1584− return 1;
15851584
15861585 /*
15871586 * Process the Multiple APIC Description Table (MADT), if present
arch/x86/kernel/apic/apic.c+5−0
@@ -2342,6 +2342,11 @@ static int cpuid_to_apicid[] = { · 2341 unmodified lines
23422342 [0 ... NR_CPUS - 1] = -1,
23432343 };
23442344
2345+bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
2346+{
2347+ return phys_id == cpuid_to_apicid[cpu];
2348+}
2349+
23452350 #ifdef CONFIG_SMP
23462351 /**
23472352 * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
arch/x86/kernel/apic/io_apic.c+10−0
@@ -1032,6 +1032,16 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin, · 1031 unmodified lines
10321032 if (idx >= 0 && test_bit(mp_irqs[idx].srcbus, mp_bus_not_pci)) {
10331033 irq = mp_irqs[idx].srcbusirq;
10341034 legacy = mp_is_legacy_irq(irq);
1035+ /*
1036+ * IRQ2 is unusable for historical reasons on systems which
1037+ * have a legacy PIC. See the comment vs. IRQ2 further down.
1038+ *
1039+ * If this gets removed at some point then the related code
1040+ * in lapic_assign_system_vectors() needs to be adjusted as
1041+ * well.
1042+ */
1043+ if (legacy && irq == PIC_CASCADE_IR)
1044+ return -EINVAL;
10351045 }
10361046
10371047 mutex_lock(&ioapic_mutex);
arch/x86/kernel/kprobes/ftrace.c+1−1
@@ -12,7 +12,7 @@ · 11 unmodified lines
1212
1313 #include "common.h"
1414
15−/* Ftrace callback handler for kprobes -- called under preepmt disabed */
15+/* Ftrace callback handler for kprobes -- called under preepmt disabled */
1616 void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
1717 struct ftrace_ops *ops, struct ftrace_regs *fregs)
1818 {
arch/x86/kernel/kvm.c+10−13
@@ -836,28 +836,25 @@ static void kvm_kick_cpu(int cpu) · 835 unmodified lines
836836
837837 static void kvm_wait(u8 *ptr, u8 val)
838838 {
839− unsigned long flags;
840−
841839 if (in_nmi())
842840 return;
843841
844− local_irq_save(flags);
845−
846− if (READ_ONCE(*ptr) != val)
847− goto out;
848−
849842 /*
850843 * halt until it's our turn and kicked. Note that we do safe halt
851844 * for irq enabled case to avoid hang when lock info is overwritten
852845 * in irq spinlock slowpath and no spurious interrupt occur to save us.
853846 */
854− if (arch_irqs_disabled_flags(flags))
855− halt();
856− else
857− safe_halt();
847+ if (irqs_disabled()) {
848+ if (READ_ONCE(*ptr) == val)
849+ halt();
850+ } else {
851+ local_irq_disable();
858852
859−out:
860− local_irq_restore(flags);
853+ if (READ_ONCE(*ptr) == val)
854+ safe_halt();
855+
856+ local_irq_enable();
857+ }
861858 }
862859
863860 #ifdef CONFIG_X86_32
arch/x86/kernel/setup.c+3−5
@@ -1045,6 +1045,9 @@ void __init setup_arch(char **cmdline_p) · 1044 unmodified lines
10451045
10461046 cleanup_highmap();
10471047
1048+ /* Look for ACPI tables and reserve memory occupied by them. */
1049+ acpi_boot_table_init();
1050+
10481051 memblock_set_current_limit(ISA_END_ADDRESS);
10491052 e820__memblock_setup();
10501053
@@ -1136,11 +1139,6 @@ void __init setup_arch(char **cmdline_p) · 85 unmodified lines
11361139
11371140 early_platform_quirks();
11381141
1139− /*
1140− * Parse the ACPI tables for possible boot-time SMP configuration.
1141− */
1142− acpi_boot_table_init();
1143−
11441142 early_acpi_boot_init();
11451143
11461144 initmem_init();
arch/x86/kernel/signal.c+1−23
@@ -766,30 +766,8 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 765 unmodified lines
766766
767767 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
768768 {
769− /*
770− * This function is fundamentally broken as currently
771− * implemented.
772− *
773− * The idea is that we want to trigger a call to the
774− * restart_block() syscall and that we want in_ia32_syscall(),
775− * in_x32_syscall(), etc. to match whatever they were in the
776− * syscall being restarted. We assume that the syscall
777− * instruction at (regs->ip - 2) matches whatever syscall
778− * instruction we used to enter in the first place.
779− *
780− * The problem is that we can get here when ptrace pokes
781− * syscall-like values into regs even if we're not in a syscall
782− * at all.
783− *
784− * For now, we maintain historical behavior and guess based on
785− * stored state. We could do better by saving the actual
786− * syscall arch in restart_block or (with caveats on x32) by
787− * checking if regs->ip points to 'int $0x80'. The current
788− * behavior is incorrect if a tracer has a different bitness
789− * than the tracee.
790− */
791769 #ifdef CONFIG_IA32_EMULATION
792− if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED))
770+ if (current->restart_block.arch_data & TS_COMPAT)
793771 return __NR_ia32_restart_syscall;
794772 #endif
795773 #ifdef CONFIG_X86_X32_ABI
arch/x86/kernel/smpboot.c+1−1
@@ -1659,7 +1659,7 @@ void play_dead_common(void) · 1658 unmodified lines
16591659 local_irq_disable();
16601660 }
16611661
1662−static bool wakeup_cpu0(void)
1662+bool wakeup_cpu0(void)
16631663 {
16641664 if (smp_processor_id() == 0 && enable_start_cpu0)
16651665 return true;
arch/x86/kvm/Makefile+1−1
@@ -1,6 +1,6 @@
11 # SPDX-License-Identifier: GPL-2.0
22
3−ccflags-y += -Iarch/x86/kvm
3+ccflags-y += -I $(srctree)/arch/x86/kvm
44 ccflags-$(CONFIG_KVM_WERROR) += -Werror
55
66 ifeq ($(CONFIG_FRAME_POINTER),y)
arch/x86/kvm/hyperv.c+81−10
@@ -520,10 +520,10 @@ static u64 get_time_ref_counter(struct kvm *kvm) · 519 unmodified lines
520520 u64 tsc;
521521
522522 /*
523− * The guest has not set up the TSC page or the clock isn't
524− * stable, fall back to get_kvmclock_ns.
523+ * Fall back to get_kvmclock_ns() when TSC page hasn't been set up,
524+ * is broken, disabled or being updated.
525525 */
526− if (!hv->tsc_ref.tsc_sequence)
526+ if (hv->hv_tsc_page_status != HV_TSC_PAGE_SET)
527527 return div_u64(get_kvmclock_ns(kvm), 100);
528528
529529 vcpu = kvm_get_vcpu(kvm, 0);
@@ -1077,6 +1077,21 @@ static bool compute_tsc_page_parameters(struct pvclock_vcpu_time_info *hv_clock, · 547 unmodified lines
10771077 return true;
10781078 }
10791079
1080+/*
1081+ * Don't touch TSC page values if the guest has opted for TSC emulation after
1082+ * migration. KVM doesn't fully support reenlightenment notifications and TSC
1083+ * access emulation and Hyper-V is known to expect the values in TSC page to
1084+ * stay constant before TSC access emulation is disabled from guest side
1085+ * (HV_X64_MSR_TSC_EMULATION_STATUS). KVM userspace is expected to preserve TSC
1086+ * frequency and guest visible TSC value across migration (and prevent it when
1087+ * TSC scaling is unsupported).
1088+ */
1089+static inline bool tsc_page_update_unsafe(struct kvm_hv *hv)
1090+{
1091+ return (hv->hv_tsc_page_status != HV_TSC_PAGE_GUEST_CHANGED) &&
1092+ hv->hv_tsc_emulation_control;
1093+}
1094+
10801095 void kvm_hv_setup_tsc_page(struct kvm *kvm,
10811096 struct pvclock_vcpu_time_info *hv_clock)
10821097 {
@@ -1087,7 +1102,8 @@ void kvm_hv_setup_tsc_page(struct kvm *kvm, · 4 unmodified lines
10871102 BUILD_BUG_ON(sizeof(tsc_seq) != sizeof(hv->tsc_ref.tsc_sequence));
10881103 BUILD_BUG_ON(offsetof(struct ms_hyperv_tsc_page, tsc_sequence) != 0);
10891104
1090− if (!(hv->hv_tsc_page & HV_X64_MSR_TSC_REFERENCE_ENABLE))
1105+ if (hv->hv_tsc_page_status == HV_TSC_PAGE_BROKEN ||
1106+ hv->hv_tsc_page_status == HV_TSC_PAGE_UNSET)
10911107 return;
10921108
10931109 mutex_lock(&hv->hv_lock);
@@ -1101,7 +1117,15 @@ void kvm_hv_setup_tsc_page(struct kvm *kvm, · 7 unmodified lines
11011117 */
11021118 if (unlikely(kvm_read_guest(kvm, gfn_to_gpa(gfn),
11031119 &tsc_seq, sizeof(tsc_seq))))
1120+ goto out_err;
1121+
1122+ if (tsc_seq && tsc_page_update_unsafe(hv)) {
1123+ if (kvm_read_guest(kvm, gfn_to_gpa(gfn), &hv->tsc_ref, sizeof(hv->tsc_ref)))
1124+ goto out_err;
1125+
1126+ hv->hv_tsc_page_status = HV_TSC_PAGE_SET;
11041127 goto out_unlock;
1128+ }
11051129
11061130 /*
11071131 * While we're computing and writing the parameters, force the
@@ -1110,15 +1134,15 @@ void kvm_hv_setup_tsc_page(struct kvm *kvm, · 2 unmodified lines
11101134 hv->tsc_ref.tsc_sequence = 0;
11111135 if (kvm_write_guest(kvm, gfn_to_gpa(gfn),
11121136 &hv->tsc_ref, sizeof(hv->tsc_ref.tsc_sequence)))
1113− goto out_unlock;
1137+ goto out_err;
11141138
11151139 if (!compute_tsc_page_parameters(hv_clock, &hv->tsc_ref))
1116− goto out_unlock;
1140+ goto out_err;
11171141
11181142 /* Ensure sequence is zero before writing the rest of the struct. */
11191143 smp_wmb();
11201144 if (kvm_write_guest(kvm, gfn_to_gpa(gfn), &hv->tsc_ref, sizeof(hv->tsc_ref)))
1121− goto out_unlock;
1145+ goto out_err;
11221146
11231147 /*
11241148 * Now switch to the TSC page mechanism by writing the sequence.
@@ -1131,8 +1155,45 @@ void kvm_hv_setup_tsc_page(struct kvm *kvm, · 6 unmodified lines
11311155 smp_wmb();
11321156
11331157 hv->tsc_ref.tsc_sequence = tsc_seq;
1134− kvm_write_guest(kvm, gfn_to_gpa(gfn),
1135− &hv->tsc_ref, sizeof(hv->tsc_ref.tsc_sequence));
1158+ if (kvm_write_guest(kvm, gfn_to_gpa(gfn),
1159+ &hv->tsc_ref, sizeof(hv->tsc_ref.tsc_sequence)))
1160+ goto out_err;
1161+
1162+ hv->hv_tsc_page_status = HV_TSC_PAGE_SET;
1163+ goto out_unlock;
1164+
1165+out_err:
1166+ hv->hv_tsc_page_status = HV_TSC_PAGE_BROKEN;
1167+out_unlock:
1168+ mutex_unlock(&hv->hv_lock);
1169+}
1170+
1171+void kvm_hv_invalidate_tsc_page(struct kvm *kvm)
1172+{
1173+ struct kvm_hv *hv = to_kvm_hv(kvm);
1174+ u64 gfn;
1175+
1176+ if (hv->hv_tsc_page_status == HV_TSC_PAGE_BROKEN ||
1177+ hv->hv_tsc_page_status == HV_TSC_PAGE_UNSET ||
1178+ tsc_page_update_unsafe(hv))
1179+ return;
1180+
1181+ mutex_lock(&hv->hv_lock);
1182+
1183+ if (!(hv->hv_tsc_page & HV_X64_MSR_TSC_REFERENCE_ENABLE))
1184+ goto out_unlock;
1185+
1186+ /* Preserve HV_TSC_PAGE_GUEST_CHANGED/HV_TSC_PAGE_HOST_CHANGED states */
1187+ if (hv->hv_tsc_page_status == HV_TSC_PAGE_SET)
1188+ hv->hv_tsc_page_status = HV_TSC_PAGE_UPDATING;
1189+
1190+ gfn = hv->hv_tsc_page >> HV_X64_MSR_TSC_REFERENCE_ADDRESS_SHIFT;
1191+
1192+ hv->tsc_ref.tsc_sequence = 0;
1193+ if (kvm_write_guest(kvm, gfn_to_gpa(gfn),
1194+ &hv->tsc_ref, sizeof(hv->tsc_ref.tsc_sequence)))
1195+ hv->hv_tsc_page_status = HV_TSC_PAGE_BROKEN;
1196+
11361197 out_unlock:
11371198 mutex_unlock(&hv->hv_lock);
11381199 }
@@ -1193,8 +1254,15 @@ static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data, · 54 unmodified lines
11931254 }
11941255 case HV_X64_MSR_REFERENCE_TSC:
11951256 hv->hv_tsc_page = data;
1196− if (hv->hv_tsc_page & HV_X64_MSR_TSC_REFERENCE_ENABLE)
1257+ if (hv->hv_tsc_page & HV_X64_MSR_TSC_REFERENCE_ENABLE) {
1258+ if (!host)
1259+ hv->hv_tsc_page_status = HV_TSC_PAGE_GUEST_CHANGED;
1260+ else
1261+ hv->hv_tsc_page_status = HV_TSC_PAGE_HOST_CHANGED;
11971262 kvm_make_request(KVM_REQ_MASTERCLOCK_UPDATE, vcpu);
1263+ } else {
1264+ hv->hv_tsc_page_status = HV_TSC_PAGE_UNSET;
1265+ }
11981266 break;
11991267 case HV_X64_MSR_CRASH_P0 ... HV_X64_MSR_CRASH_P4:
12001268 return kvm_hv_msr_set_crash_data(kvm,
@@ -1229,6 +1297,9 @@ static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data, · 28 unmodified lines
12291297 hv->hv_tsc_emulation_control = data;
12301298 break;
12311299 case HV_X64_MSR_TSC_EMULATION_STATUS:
1300+ if (data && !host)
1301+ return 1;
1302+
12321303 hv->hv_tsc_emulation_status = data;
12331304 break;
12341305 case HV_X64_MSR_TIME_REF_COUNT:
arch/x86/kvm/hyperv.h+1−0
@@ -133,6 +133,7 @@ void kvm_hv_process_stimers(struct kvm_vcpu *vcpu); · 132 unmodified lines
133133
134134 void kvm_hv_setup_tsc_page(struct kvm *kvm,
135135 struct pvclock_vcpu_time_info *hv_clock);
136+void kvm_hv_invalidate_tsc_page(struct kvm *kvm);
136137
137138 void kvm_hv_init_vm(struct kvm *kvm);
138139 void kvm_hv_destroy_vm(struct kvm *kvm);
arch/x86/kvm/mmu/mmu.c+5−4
@@ -5884,6 +5884,7 @@ static void kvm_recover_nx_lpages(struct kvm *kvm) · 5883 unmodified lines
58845884 struct kvm_mmu_page *sp;
58855885 unsigned int ratio;
58865886 LIST_HEAD(invalid_list);
5887+ bool flush = false;
58875888 ulong to_zap;
58885889
58895890 rcu_idx = srcu_read_lock(&kvm->srcu);
@@ -5905,19 +5906,19 @@ static void kvm_recover_nx_lpages(struct kvm *kvm) · 15 unmodified lines
59055906 lpage_disallowed_link);
59065907 WARN_ON_ONCE(!sp->lpage_disallowed);
59075908 if (is_tdp_mmu_page(sp)) {
5908− kvm_tdp_mmu_zap_gfn_range(kvm, sp->gfn,
5909− sp->gfn + KVM_PAGES_PER_HPAGE(sp->role.level));
5909+ flush = kvm_tdp_mmu_zap_sp(kvm, sp);
59105910 } else {
59115911 kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list);
59125912 WARN_ON_ONCE(sp->lpage_disallowed);
59135913 }
59145914
59155915 if (need_resched() || rwlock_needbreak(&kvm->mmu_lock)) {
5916− kvm_mmu_commit_zap_page(kvm, &invalid_list);
5916+ kvm_mmu_remote_flush_or_zap(kvm, &invalid_list, flush);
59175917 cond_resched_rwlock_write(&kvm->mmu_lock);
5918+ flush = false;
59185919 }
59195920 }
5920− kvm_mmu_commit_zap_page(kvm, &invalid_list);
5921+ kvm_mmu_remote_flush_or_zap(kvm, &invalid_list, flush);
59215922
59225923 write_unlock(&kvm->mmu_lock);
59235924 srcu_read_unlock(&kvm->srcu, rcu_idx);
arch/x86/kvm/mmu/mmu_internal.h+5−0
@@ -78,6 +78,11 @@ static inline struct kvm_mmu_page *sptep_to_sp(u64 *sptep) · 77 unmodified lines
7878 return to_shadow_page(__pa(sptep));
7979 }
8080
81+static inline int kvm_mmu_page_as_id(struct kvm_mmu_page *sp)
82+{
83+ return sp->role.smm ? 1 : 0;
84+}
85+
8186 static inline bool kvm_vcpu_ad_need_write_protect(struct kvm_vcpu *vcpu)
8287 {
8388 /*
arch/x86/kvm/mmu/tdp_iter.c+18−12
@@ -20,6 +20,21 @@ static gfn_t round_gfn_for_level(gfn_t gfn, int level) · 19 unmodified lines
2020 return gfn & -KVM_PAGES_PER_HPAGE(level);
2121 }
2222
23+/*
24+ * Return the TDP iterator to the root PT and allow it to continue its
25+ * traversal over the paging structure from there.
26+ */
27+void tdp_iter_restart(struct tdp_iter *iter)
28+{
29+ iter->yielded_gfn = iter->next_last_level_gfn;
30+ iter->level = iter->root_level;
31+
32+ iter->gfn = round_gfn_for_level(iter->next_last_level_gfn, iter->level);
33+ tdp_iter_refresh_sptep(iter);
34+
35+ iter->valid = true;
36+}
37+
2338 /*
2439 * Sets a TDP iterator to walk a pre-order traversal of the paging structure
2540 * rooted at root_pt, starting with the walk to translate next_last_level_gfn.
@@ -31,16 +46,12 @@ void tdp_iter_start(struct tdp_iter *iter, u64 *root_pt, int root_level, · 5 unmodified lines
3146 WARN_ON(root_level > PT64_ROOT_MAX_LEVEL);
3247
3348 iter->next_last_level_gfn = next_last_level_gfn;
34− iter->yielded_gfn = iter->next_last_level_gfn;
3549 iter->root_level = root_level;
3650 iter->min_level = min_level;
37− iter->level = root_level;
38− iter->pt_path[iter->level - 1] = (tdp_ptep_t)root_pt;
39−
40− iter->gfn = round_gfn_for_level(iter->next_last_level_gfn, iter->level);
41− tdp_iter_refresh_sptep(iter);
51+ iter->pt_path[iter->root_level - 1] = (tdp_ptep_t)root_pt;
52+ iter->as_id = kvm_mmu_page_as_id(sptep_to_sp(root_pt));
4253
43− iter->valid = true;
54+ tdp_iter_restart(iter);
4455 }
4556
4657 /*
@@ -159,8 +170,3 @@ void tdp_iter_next(struct tdp_iter *iter) · 112 unmodified lines
159170 iter->valid = false;
160171 }
161172
162−tdp_ptep_t tdp_iter_root_pt(struct tdp_iter *iter)
163−{
164− return iter->pt_path[iter->root_level - 1];
165−}
166−
arch/x86/kvm/mmu/tdp_iter.h+3−1
@@ -36,6 +36,8 @@ struct tdp_iter { · 35 unmodified lines
3636 int min_level;
3737 /* The iterator's current level within the paging structure */
3838 int level;
39+ /* The address space ID, i.e. SMM vs. regular. */
40+ int as_id;
3941 /* A snapshot of the value at sptep */
4042 u64 old_spte;
4143 /*
@@ -62,6 +64,6 @@ tdp_ptep_t spte_to_child_pt(u64 pte, int level); · 20 unmodified lines
6264 void tdp_iter_start(struct tdp_iter *iter, u64 *root_pt, int root_level,
6365 int min_level, gfn_t next_last_level_gfn);
6466 void tdp_iter_next(struct tdp_iter *iter);
65−tdp_ptep_t tdp_iter_root_pt(struct tdp_iter *iter);
67+void tdp_iter_restart(struct tdp_iter *iter);
6668
6769 #endif /* __KVM_X86_MMU_TDP_ITER_H */
arch/x86/kvm/mmu/tdp_mmu.c+29−37
@@ -86,7 +86,7 @@ static inline struct kvm_mmu_page *tdp_mmu_next_root(struct kvm *kvm, · 85 unmodified lines
8686 list_for_each_entry(_root, &_kvm->arch.tdp_mmu_roots, link)
8787
8888 static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
89− gfn_t start, gfn_t end, bool can_yield);
89+ gfn_t start, gfn_t end, bool can_yield, bool flush);
9090
9191 void kvm_tdp_mmu_free_root(struct kvm *kvm, struct kvm_mmu_page *root)
9292 {
@@ -99,7 +99,7 @@ void kvm_tdp_mmu_free_root(struct kvm *kvm, struct kvm_mmu_page *root) · 6 unmodified lines
9999
100100 list_del(&root->link);
101101
102− zap_gfn_range(kvm, root, 0, max_gfn, false);
102+ zap_gfn_range(kvm, root, 0, max_gfn, false, false);
103103
104104 free_page((unsigned long)root->spt);
105105 kmem_cache_free(mmu_page_header_cache, root);
@@ -203,11 +203,6 @@ static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn, · 97 unmodified lines
203203 u64 old_spte, u64 new_spte, int level,
204204 bool shared);
205205
206−static int kvm_mmu_page_as_id(struct kvm_mmu_page *sp)
207−{
208− return sp->role.smm ? 1 : 0;
209−}
210−
211206 static void handle_changed_spte_acc_track(u64 old_spte, u64 new_spte, int level)
212207 {
213208 bool pfn_changed = spte_to_pfn(old_spte) != spte_to_pfn(new_spte);
@@ -301,11 +296,16 @@ static void tdp_mmu_unlink_page(struct kvm *kvm, struct kvm_mmu_page *sp, · 87 unmodified lines
301296 *
302297 * Given a page table that has been removed from the TDP paging structure,
303298 * iterates through the page table to clear SPTEs and free child page tables.
299+ *
300+ * Note that pt is passed in as a tdp_ptep_t, but it does not need RCU
301+ * protection. Since this thread removed it from the paging structure,
302+ * this thread will be responsible for ensuring the page is freed. Hence the
303+ * early rcu_dereferences in the function.
304304 */
305−static void handle_removed_tdp_mmu_page(struct kvm *kvm, u64 *pt,
305+static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,
306306 bool shared)
307307 {
308− struct kvm_mmu_page *sp = sptep_to_sp(pt);
308+ struct kvm_mmu_page *sp = sptep_to_sp(rcu_dereference(pt));
309309 int level = sp->role.level;
310310 gfn_t base_gfn = sp->gfn;
311311 u64 old_child_spte;
@@ -318,7 +318,7 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, u64 *pt, · 6 unmodified lines
318318 tdp_mmu_unlink_page(kvm, sp, shared);
319319
320320 for (i = 0; i < PT64_ENT_PER_PAGE; i++) {
321− sptep = pt + i;
321+ sptep = rcu_dereference(pt) + i;
322322 gfn = base_gfn + (i * KVM_PAGES_PER_HPAGE(level - 1));
323323
324324 if (shared) {
@@ -492,10 +492,6 @@ static inline bool tdp_mmu_set_spte_atomic(struct kvm *kvm, · 167 unmodified lines
492492 struct tdp_iter *iter,
493493 u64 new_spte)
494494 {
495− u64 *root_pt = tdp_iter_root_pt(iter);
496− struct kvm_mmu_page *root = sptep_to_sp(root_pt);
497− int as_id = kvm_mmu_page_as_id(root);
498−
499495 lockdep_assert_held_read(&kvm->mmu_lock);
500496
501497 /*
@@ -509,8 +505,8 @@ static inline bool tdp_mmu_set_spte_atomic(struct kvm *kvm, · 7 unmodified lines
509505 new_spte) != iter->old_spte)
510506 return false;
511507
512− handle_changed_spte(kvm, as_id, iter->gfn, iter->old_spte, new_spte,
513− iter->level, true);
508+ handle_changed_spte(kvm, iter->as_id, iter->gfn, iter->old_spte,
509+ new_spte, iter->level, true);
514510
515511 return true;
516512 }
@@ -538,7 +534,7 @@ static inline bool tdp_mmu_zap_spte_atomic(struct kvm *kvm, · 21 unmodified lines
538534 * here since the SPTE is going from non-present
539535 * to non-present.
540536 */
541− WRITE_ONCE(*iter->sptep, 0);
537+ WRITE_ONCE(*rcu_dereference(iter->sptep), 0);
542538
543539 return true;
544540 }
@@ -564,10 +560,6 @@ static inline void __tdp_mmu_set_spte(struct kvm *kvm, struct tdp_iter *iter, · 19 unmodified lines
564560 u64 new_spte, bool record_acc_track,
565561 bool record_dirty_log)
566562 {
567− tdp_ptep_t root_pt = tdp_iter_root_pt(iter);
568− struct kvm_mmu_page *root = sptep_to_sp(root_pt);
569− int as_id = kvm_mmu_page_as_id(root);
570−
571563 lockdep_assert_held_write(&kvm->mmu_lock);
572564
573565 /*
@@ -581,13 +573,13 @@ static inline void __tdp_mmu_set_spte(struct kvm *kvm, struct tdp_iter *iter, · 7 unmodified lines
581573
582574 WRITE_ONCE(*rcu_dereference(iter->sptep), new_spte);
583575
584− __handle_changed_spte(kvm, as_id, iter->gfn, iter->old_spte, new_spte,
585− iter->level, false);
576+ __handle_changed_spte(kvm, iter->as_id, iter->gfn, iter->old_spte,
577+ new_spte, iter->level, false);
586578 if (record_acc_track)
587579 handle_changed_spte_acc_track(iter->old_spte, new_spte,
588580 iter->level);
589581 if (record_dirty_log)
590− handle_changed_spte_dirty_log(kvm, as_id, iter->gfn,
582+ handle_changed_spte_dirty_log(kvm, iter->as_id, iter->gfn,
591583 iter->old_spte, new_spte,
592584 iter->level);
593585 }
@@ -659,9 +651,7 @@ static inline bool tdp_mmu_iter_cond_resched(struct kvm *kvm, · 65 unmodified lines
659651
660652 WARN_ON(iter->gfn > iter->next_last_level_gfn);
661653
662− tdp_iter_start(iter, iter->pt_path[iter->root_level - 1],
663− iter->root_level, iter->min_level,
664− iter->next_last_level_gfn);
654+ tdp_iter_restart(iter);
665655
666656 return true;
667657 }
@@ -678,20 +668,21 @@ static inline bool tdp_mmu_iter_cond_resched(struct kvm *kvm, · 10 unmodified lines
678668 * scheduler needs the CPU or there is contention on the MMU lock. If this
679669 * function cannot yield, it will not release the MMU lock or reschedule and
680670 * the caller must ensure it does not supply too large a GFN range, or the
681− * operation can cause a soft lockup.
671+ * operation can cause a soft lockup. Note, in some use cases a flush may be
672+ * required by prior actions. Ensure the pending flush is performed prior to
673+ * yielding.
682674 */
683675 static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
684− gfn_t start, gfn_t end, bool can_yield)
676+ gfn_t start, gfn_t end, bool can_yield, bool flush)
685677 {
686678 struct tdp_iter iter;
687− bool flush_needed = false;
688679
689680 rcu_read_lock();
690681
691682 tdp_root_for_each_pte(iter, root, start, end) {
692683 if (can_yield &&
693− tdp_mmu_iter_cond_resched(kvm, &iter, flush_needed)) {
694− flush_needed = false;
684+ tdp_mmu_iter_cond_resched(kvm, &iter, flush)) {
685+ flush = false;
695686 continue;
696687 }
697688
@@ -709,11 +700,11 @@ static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, · 11 unmodified lines
709700 continue;
710701
711702 tdp_mmu_set_spte(kvm, &iter, 0);
712− flush_needed = true;
703+ flush = true;
713704 }
714705
715706 rcu_read_unlock();
716− return flush_needed;
707+ return flush;
717708 }
718709
719710 /*
@@ -722,13 +713,14 @@ static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, · 2 unmodified lines
722713 * SPTEs have been cleared and a TLB flush is needed before releasing the
723714 * MMU lock.
724715 */
725−bool kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, gfn_t start, gfn_t end)
716+bool __kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, gfn_t start, gfn_t end,
717+ bool can_yield)
726718 {
727719 struct kvm_mmu_page *root;
728720 bool flush = false;
729721
730722 for_each_tdp_mmu_root_yield_safe(kvm, root)
731− flush |= zap_gfn_range(kvm, root, start, end, true);
723+ flush = zap_gfn_range(kvm, root, start, end, can_yield, flush);
732724
733725 return flush;
734726 }
@@ -940,7 +932,7 @@ static int zap_gfn_range_hva_wrapper(struct kvm *kvm, · 205 unmodified lines
940932 struct kvm_mmu_page *root, gfn_t start,
941933 gfn_t end, unsigned long unused)
942934 {
943− return zap_gfn_range(kvm, root, start, end, false);
935+ return zap_gfn_range(kvm, root, start, end, false, false);
944936 }
945937
946938 int kvm_tdp_mmu_zap_hva_range(struct kvm *kvm, unsigned long start,
arch/x86/kvm/mmu/tdp_mmu.h+23−1
@@ -8,7 +8,29 @@ · 7 unmodified lines
88 hpa_t kvm_tdp_mmu_get_vcpu_root_hpa(struct kvm_vcpu *vcpu);
99 void kvm_tdp_mmu_free_root(struct kvm *kvm, struct kvm_mmu_page *root);
1010
11−bool kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, gfn_t start, gfn_t end);
11+bool __kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, gfn_t start, gfn_t end,
12+ bool can_yield);
13+static inline bool kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, gfn_t start,
14+ gfn_t end)
15+{
16+ return __kvm_tdp_mmu_zap_gfn_range(kvm, start, end, true);
17+}
18+static inline bool kvm_tdp_mmu_zap_sp(struct kvm *kvm, struct kvm_mmu_page *sp)
19+{
20+ gfn_t end = sp->gfn + KVM_PAGES_PER_HPAGE(sp->role.level);
21+
22+ /*
23+ * Don't allow yielding, as the caller may have a flush pending. Note,
24+ * if mmu_lock is held for write, zapping will never yield in this case,
25+ * but explicitly disallow it for safety. The TDP MMU does not yield
26+ * until it has made forward progress (steps sideways), and when zapping
27+ * a single shadow page that it's guaranteed to see (thus the mmu_lock
28+ * requirement), its "step sideways" will always step beyond the bounds
29+ * of the shadow page's gfn range and stop iterating before yielding.
30+ */
31+ lockdep_assert_held_write(&kvm->mmu_lock);
32+ return __kvm_tdp_mmu_zap_gfn_range(kvm, sp->gfn, end, false);
33+}
1234 void kvm_tdp_mmu_zap_all(struct kvm *kvm);
1335
1436 int kvm_tdp_mmu_map(struct kvm_vcpu *vcpu, gpa_t gpa, u32 error_code,
arch/x86/kvm/svm/nested.c+23−5
@@ -246,11 +246,18 @@ static bool nested_vmcb_check_controls(struct vmcb_control_area *control) · 245 unmodified lines
246246 return true;
247247 }
248248
249−static bool nested_vmcb_checks(struct vcpu_svm *svm, struct vmcb *vmcb12)
249+static bool nested_vmcb_check_save(struct vcpu_svm *svm, struct vmcb *vmcb12)
250250 {
251251 struct kvm_vcpu *vcpu = &svm->vcpu;
252252 bool vmcb12_lma;
253253
254+ /*
255+ * FIXME: these should be done after copying the fields,
256+ * to avoid TOC/TOU races. For these save area checks
257+ * the possible damage is limited since kvm_set_cr0 and
258+ * kvm_set_cr4 handle failure; EFER_SVME is an exception
259+ * so it is force-set later in nested_prepare_vmcb_save.
260+ */
254261 if ((vmcb12->save.efer & EFER_SVME) == 0)
255262 return false;
256263
@@ -271,7 +278,7 @@ static bool nested_vmcb_checks(struct vcpu_svm *svm, struct vmcb *vmcb12) · 14 unmodified lines
271278 if (!kvm_is_valid_cr4(&svm->vcpu, vmcb12->save.cr4))
272279 return false;
273280
274− return nested_vmcb_check_controls(&vmcb12->control);
281+ return true;
275282 }
276283
277284 static void load_nested_vmcb_control(struct vcpu_svm *svm,
@@ -396,7 +403,14 @@ static void nested_prepare_vmcb_save(struct vcpu_svm *svm, struct vmcb *vmcb12) · 118 unmodified lines
396403 svm->vmcb->save.gdtr = vmcb12->save.gdtr;
397404 svm->vmcb->save.idtr = vmcb12->save.idtr;
398405 kvm_set_rflags(&svm->vcpu, vmcb12->save.rflags | X86_EFLAGS_FIXED);
399− svm_set_efer(&svm->vcpu, vmcb12->save.efer);
406+
407+ /*
408+ * Force-set EFER_SVME even though it is checked earlier on the
409+ * VMCB12, because the guest can flip the bit between the check
410+ * and now. Clearing EFER_SVME would call svm_free_nested.
411+ */
412+ svm_set_efer(&svm->vcpu, vmcb12->save.efer | EFER_SVME);
413+
400414 svm_set_cr0(&svm->vcpu, vmcb12->save.cr0);
401415 svm_set_cr4(&svm->vcpu, vmcb12->save.cr4);
402416 svm->vmcb->save.cr2 = svm->vcpu.arch.cr2 = vmcb12->save.cr2;
@@ -468,7 +482,6 @@ int enter_svm_guest_mode(struct vcpu_svm *svm, u64 vmcb12_gpa, · 65 unmodified lines
468482
469483
470484 svm->nested.vmcb12_gpa = vmcb12_gpa;
471− load_nested_vmcb_control(svm, &vmcb12->control);
472485 nested_prepare_vmcb_control(svm);
473486 nested_prepare_vmcb_save(svm, vmcb12);
474487
@@ -515,7 +528,10 @@ int nested_svm_vmrun(struct vcpu_svm *svm) · 40 unmodified lines
515528 if (WARN_ON_ONCE(!svm->nested.initialized))
516529 return -EINVAL;
517530
518− if (!nested_vmcb_checks(svm, vmcb12)) {
531+ load_nested_vmcb_control(svm, &vmcb12->control);
532+
533+ if (!nested_vmcb_check_save(svm, vmcb12) ||
534+ !nested_vmcb_check_controls(&svm->nested.ctl)) {
519535 vmcb12->control.exit_code = SVM_EXIT_ERR;
520536 vmcb12->control.exit_code_hi = 0;
521537 vmcb12->control.exit_info_1 = 0;
@@ -1209,6 +1225,8 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu, · 687 unmodified lines
12091225 */
12101226 if (!(save->cr0 & X86_CR0_PG))
12111227 goto out_free;
1228+ if (!(save->efer & EFER_SVME))
1229+ goto out_free;
12121230
12131231 /*
12141232 * All checks done, we can enter guest mode. L1 control fields
arch/x86/kvm/svm/pmu.c+8−0
@@ -98,6 +98,8 @@ static enum index msr_to_index(u32 msr) · 97 unmodified lines
9898 static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr,
9999 enum pmu_type type)
100100 {
101+ struct kvm_vcpu *vcpu = pmu_to_vcpu(pmu);
102+
101103 switch (msr) {
102104 case MSR_F15H_PERF_CTL0:
103105 case MSR_F15H_PERF_CTL1:
@@ -105,6 +107,9 @@ static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr, · 1 unmodified line
105107 case MSR_F15H_PERF_CTL3:
106108 case MSR_F15H_PERF_CTL4:
107109 case MSR_F15H_PERF_CTL5:
110+ if (!guest_cpuid_has(vcpu, X86_FEATURE_PERFCTR_CORE))
111+ return NULL;
112+ fallthrough;
108113 case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3:
109114 if (type != PMU_TYPE_EVNTSEL)
110115 return NULL;
@@ -115,6 +120,9 @@ static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr, · 4 unmodified lines
115120 case MSR_F15H_PERF_CTR3:
116121 case MSR_F15H_PERF_CTR4:
117122 case MSR_F15H_PERF_CTR5:
123+ if (!guest_cpuid_has(vcpu, X86_FEATURE_PERFCTR_CORE))
124+ return NULL;
125+ fallthrough;
118126 case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3:
119127 if (type != PMU_TYPE_COUNTER)
120128 return NULL;
arch/x86/kvm/x86.c+104−66
@@ -271,8 +271,7 @@ static struct kmem_cache *x86_emulator_cache; · 270 unmodified lines
271271 * When called, it means the previous get/set msr reached an invalid msr.
272272 * Return true if we want to ignore/silent this failed msr access.
273273 */
274−static bool kvm_msr_ignored_check(struct kvm_vcpu *vcpu, u32 msr,
275− u64 data, bool write)
274+static bool kvm_msr_ignored_check(u32 msr, u64 data, bool write)
276275 {
277276 const char *op = write ? "wrmsr" : "rdmsr";
278277
@@ -1445,7 +1444,7 @@ static int do_get_msr_feature(struct kvm_vcpu *vcpu, unsigned index, u64 *data) · 1166 unmodified lines
14451444 if (r == KVM_MSR_RET_INVALID) {
14461445 /* Unconditionally clear the output for simplicity */
14471446 *data = 0;
1448− if (kvm_msr_ignored_check(vcpu, index, 0, false))
1447+ if (kvm_msr_ignored_check(index, 0, false))
14491448 r = 0;
14501449 }
14511450
@@ -1526,35 +1525,44 @@ EXPORT_SYMBOL_GPL(kvm_enable_efer_bits); · 74 unmodified lines
15261525
15271526 bool kvm_msr_allowed(struct kvm_vcpu *vcpu, u32 index, u32 type)
15281527 {
1528+ struct kvm_x86_msr_filter *msr_filter;
1529+ struct msr_bitmap_range *ranges;
15291530 struct kvm *kvm = vcpu->kvm;
1530− struct msr_bitmap_range *ranges = kvm->arch.msr_filter.ranges;
1531− u32 count = kvm->arch.msr_filter.count;
1532− u32 i;
1533− bool r = kvm->arch.msr_filter.default_allow;
1531+ bool allowed;
15341532 int idx;
1533+ u32 i;
15351534
1536− /* MSR filtering not set up or x2APIC enabled, allow everything */
1537− if (!count || (index >= 0x800 && index <= 0x8ff))
1535+ /* x2APIC MSRs do not support filtering. */
1536+ if (index >= 0x800 && index <= 0x8ff)
15381537 return true;
15391538
1540− /* Prevent collision with set_msr_filter */
15411539 idx = srcu_read_lock(&kvm->srcu);
15421540
1543− for (i = 0; i < count; i++) {
1541+ msr_filter = srcu_dereference(kvm->arch.msr_filter, &kvm->srcu);
1542+ if (!msr_filter) {
1543+ allowed = true;
1544+ goto out;
1545+ }
1546+
1547+ allowed = msr_filter->default_allow;
1548+ ranges = msr_filter->ranges;
1549+
1550+ for (i = 0; i < msr_filter->count; i++) {
15441551 u32 start = ranges[i].base;
15451552 u32 end = start + ranges[i].nmsrs;
15461553 u32 flags = ranges[i].flags;
15471554 unsigned long *bitmap = ranges[i].bitmap;
15481555
15491556 if ((index >= start) && (index < end) && (flags & type)) {
1550− r = !!test_bit(index - start, bitmap);
1557+ allowed = !!test_bit(index - start, bitmap);
15511558 break;
15521559 }
15531560 }
15541561
1562+out:
15551563 srcu_read_unlock(&kvm->srcu, idx);
15561564
1557− return r;
1565+ return allowed;
15581566 }
15591567 EXPORT_SYMBOL_GPL(kvm_msr_allowed);
15601568
@@ -1611,7 +1619,7 @@ static int kvm_set_msr_ignored_check(struct kvm_vcpu *vcpu, · 50 unmodified lines
16111619 int ret = __kvm_set_msr(vcpu, index, data, host_initiated);
16121620
16131621 if (ret == KVM_MSR_RET_INVALID)
1614− if (kvm_msr_ignored_check(vcpu, index, data, true))
1622+ if (kvm_msr_ignored_check(index, data, true))
16151623 ret = 0;
16161624
16171625 return ret;
@@ -1649,7 +1657,7 @@ static int kvm_get_msr_ignored_check(struct kvm_vcpu *vcpu, · 31 unmodified lines
16491657 if (ret == KVM_MSR_RET_INVALID) {
16501658 /* Unconditionally clear *data for simplicity */
16511659 *data = 0;
1652− if (kvm_msr_ignored_check(vcpu, index, 0, false))
1660+ if (kvm_msr_ignored_check(index, 0, false))
16531661 ret = 0;
16541662 }
16551663
@@ -2320,7 +2328,7 @@ static void kvm_synchronize_tsc(struct kvm_vcpu *vcpu, u64 data) · 664 unmodified lines
23202328 kvm_vcpu_write_tsc_offset(vcpu, offset);
23212329 raw_spin_unlock_irqrestore(&kvm->arch.tsc_write_lock, flags);
23222330
2323− spin_lock(&kvm->arch.pvclock_gtod_sync_lock);
2331+ spin_lock_irqsave(&kvm->arch.pvclock_gtod_sync_lock, flags);
23242332 if (!matched) {
23252333 kvm->arch.nr_vcpus_matched_tsc = 0;
23262334 } else if (!already_matched) {
@@ -2328,7 +2336,7 @@ static void kvm_synchronize_tsc(struct kvm_vcpu *vcpu, u64 data) · 1 unmodified line
23282336 }
23292337
23302338 kvm_track_tsc_matching(vcpu);
2331− spin_unlock(&kvm->arch.pvclock_gtod_sync_lock);
2339+ spin_unlock_irqrestore(&kvm->arch.pvclock_gtod_sync_lock, flags);
23322340 }
23332341
23342342 static inline void adjust_tsc_offset_guest(struct kvm_vcpu *vcpu,
@@ -2550,11 +2558,16 @@ static void kvm_gen_update_masterclock(struct kvm *kvm) · 215 unmodified lines
25502558 int i;
25512559 struct kvm_vcpu *vcpu;
25522560 struct kvm_arch *ka = &kvm->arch;
2561+ unsigned long flags;
2562+
2563+ kvm_hv_invalidate_tsc_page(kvm);
25532564
2554− spin_lock(&ka->pvclock_gtod_sync_lock);
25552565 kvm_make_mclock_inprogress_request(kvm);
2566+
25562567 /* no guest entries from this point */
2568+ spin_lock_irqsave(&ka->pvclock_gtod_sync_lock, flags);
25572569 pvclock_update_vm_gtod_copy(kvm);
2570+ spin_unlock_irqrestore(&ka->pvclock_gtod_sync_lock, flags);
25582571
25592572 kvm_for_each_vcpu(i, vcpu, kvm)
25602573 kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
@@ -2562,8 +2575,6 @@ static void kvm_gen_update_masterclock(struct kvm *kvm) · 1 unmodified line
25622575 /* guest entries allowed */
25632576 kvm_for_each_vcpu(i, vcpu, kvm)
25642577 kvm_clear_request(KVM_REQ_MCLOCK_INPROGRESS, vcpu);
2565−
2566− spin_unlock(&ka->pvclock_gtod_sync_lock);
25672578 #endif
25682579 }
25692580
@@ -2571,17 +2582,18 @@ u64 get_kvmclock_ns(struct kvm *kvm) · 1 unmodified line
25712582 {
25722583 struct kvm_arch *ka = &kvm->arch;
25732584 struct pvclock_vcpu_time_info hv_clock;
2585+ unsigned long flags;
25742586 u64 ret;
25752587
2576− spin_lock(&ka->pvclock_gtod_sync_lock);
2588+ spin_lock_irqsave(&ka->pvclock_gtod_sync_lock, flags);
25772589 if (!ka->use_master_clock) {
2578− spin_unlock(&ka->pvclock_gtod_sync_lock);
2590+ spin_unlock_irqrestore(&ka->pvclock_gtod_sync_lock, flags);
25792591 return get_kvmclock_base_ns() + ka->kvmclock_offset;
25802592 }
25812593
25822594 hv_clock.tsc_timestamp = ka->master_cycle_now;
25832595 hv_clock.system_time = ka->master_kernel_ns + ka->kvmclock_offset;
2584− spin_unlock(&ka->pvclock_gtod_sync_lock);
2596+ spin_unlock_irqrestore(&ka->pvclock_gtod_sync_lock, flags);
25852597
25862598 /* both __this_cpu_read() and rdtsc() should be on the same cpu */
25872599 get_cpu();
@@ -2675,13 +2687,13 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) · 87 unmodified lines
26752687 * If the host uses TSC clock, then passthrough TSC as stable
26762688 * to the guest.
26772689 */
2678− spin_lock(&ka->pvclock_gtod_sync_lock);
2690+ spin_lock_irqsave(&ka->pvclock_gtod_sync_lock, flags);
26792691 use_master_clock = ka->use_master_clock;
26802692 if (use_master_clock) {
26812693 host_tsc = ka->master_cycle_now;
26822694 kernel_ns = ka->master_kernel_ns;
26832695 }
2684− spin_unlock(&ka->pvclock_gtod_sync_lock);
2696+ spin_unlock_irqrestore(&ka->pvclock_gtod_sync_lock, flags);
26852697
26862698 /* Keep irq disabled to prevent changes to the clock */
26872699 local_irq_save(flags);
@@ -5352,25 +5364,34 @@ split_irqchip_unlock: · 2664 unmodified lines
53525364 return r;
53535365 }
53545366
5355−static void kvm_clear_msr_filter(struct kvm *kvm)
5367+static struct kvm_x86_msr_filter *kvm_alloc_msr_filter(bool default_allow)
5368+{
5369+ struct kvm_x86_msr_filter *msr_filter;
5370+
5371+ msr_filter = kzalloc(sizeof(*msr_filter), GFP_KERNEL_ACCOUNT);
5372+ if (!msr_filter)
5373+ return NULL;
5374+
5375+ msr_filter->default_allow = default_allow;
5376+ return msr_filter;
5377+}
5378+
5379+static void kvm_free_msr_filter(struct kvm_x86_msr_filter *msr_filter)
53565380 {
53575381 u32 i;
5358− u32 count = kvm->arch.msr_filter.count;
5359− struct msr_bitmap_range ranges[16];
53605382
5361− mutex_lock(&kvm->lock);
5362− kvm->arch.msr_filter.count = 0;
5363− memcpy(ranges, kvm->arch.msr_filter.ranges, count * sizeof(ranges[0]));
5364− mutex_unlock(&kvm->lock);
5365− synchronize_srcu(&kvm->srcu);
5383+ if (!msr_filter)
5384+ return;
53665385
5367− for (i = 0; i < count; i++)
5368− kfree(ranges[i].bitmap);
5386+ for (i = 0; i < msr_filter->count; i++)
5387+ kfree(msr_filter->ranges[i].bitmap);
5388+
5389+ kfree(msr_filter);
53695390 }
53705391
5371−static int kvm_add_msr_filter(struct kvm *kvm, struct kvm_msr_filter_range *user_range)
5392+static int kvm_add_msr_filter(struct kvm_x86_msr_filter *msr_filter,
5393+ struct kvm_msr_filter_range *user_range)
53725394 {
5373− struct msr_bitmap_range *ranges = kvm->arch.msr_filter.ranges;
53745395 struct msr_bitmap_range range;
53755396 unsigned long *bitmap = NULL;
53765397 size_t bitmap_size;
@@ -5404,11 +5425,9 @@ static int kvm_add_msr_filter(struct kvm *kvm, struct kvm_msr_filter_range *user · 27 unmodified lines
54045425 goto err;
54055426 }
54065427
5407− /* Everything ok, add this range identifier to our global pool */
5408− ranges[kvm->arch.msr_filter.count] = range;
5409− /* Make sure we filled the array before we tell anyone to walk it */
5410− smp_wmb();
5411− kvm->arch.msr_filter.count++;
5428+ /* Everything ok, add this range identifier. */
5429+ msr_filter->ranges[msr_filter->count] = range;
5430+ msr_filter->count++;
54125431
54135432 return 0;
54145433 err:
@@ -5419,10 +5438,11 @@ err: · 4 unmodified lines
54195438 static int kvm_vm_ioctl_set_msr_filter(struct kvm *kvm, void __user *argp)
54205439 {
54215440 struct kvm_msr_filter __user *user_msr_filter = argp;
5441+ struct kvm_x86_msr_filter *new_filter, *old_filter;
54225442 struct kvm_msr_filter filter;
54235443 bool default_allow;
5424− int r = 0;
54255444 bool empty = true;
5445+ int r = 0;
54265446 u32 i;
54275447
54285448 if (copy_from_user(&filter, user_msr_filter, sizeof(filter)))
@@ -5435,25 +5455,32 @@ static int kvm_vm_ioctl_set_msr_filter(struct kvm *kvm, void __user *argp) · 6 unmodified lines
54355455 if (empty && !default_allow)
54365456 return -EINVAL;
54375457
5438− kvm_clear_msr_filter(kvm);
5439−
5440− kvm->arch.msr_filter.default_allow = default_allow;
5458+ new_filter = kvm_alloc_msr_filter(default_allow);
5459+ if (!new_filter)
5460+ return -ENOMEM;
54415461
5442− /*
5443− * Protect from concurrent calls to this function that could trigger
5444− * a TOCTOU violation on kvm->arch.msr_filter.count.
5445− */
5446− mutex_lock(&kvm->lock);
54475462 for (i = 0; i < ARRAY_SIZE(filter.ranges); i++) {
5448− r = kvm_add_msr_filter(kvm, &filter.ranges[i]);
5449− if (r)
5450− break;
5463+ r = kvm_add_msr_filter(new_filter, &filter.ranges[i]);
5464+ if (r) {
5465+ kvm_free_msr_filter(new_filter);
5466+ return r;
5467+ }
54515468 }
54525469
5470+ mutex_lock(&kvm->lock);
5471+
5472+ /* The per-VM filter is protected by kvm->lock... */
5473+ old_filter = srcu_dereference_check(kvm->arch.msr_filter, &kvm->srcu, 1);
5474+
5475+ rcu_assign_pointer(kvm->arch.msr_filter, new_filter);
5476+ synchronize_srcu(&kvm->srcu);
5477+
5478+ kvm_free_msr_filter(old_filter);
5479+
54535480 kvm_make_all_cpus_request(kvm, KVM_REQ_MSR_FILTER_CHANGED);
54545481 mutex_unlock(&kvm->lock);
54555482
5456− return r;
5483+ return 0;
54575484 }
54585485
54595486 long kvm_arch_vm_ioctl(struct file *filp,
@@ -5700,6 +5727,7 @@ set_pit2_out: · 240 unmodified lines
57005727 }
57015728 #endif
57025729 case KVM_SET_CLOCK: {
5730+ struct kvm_arch *ka = &kvm->arch;
57035731 struct kvm_clock_data user_ns;
57045732 u64 now_ns;
57055733
@@ -5718,8 +5746,22 @@ set_pit2_out: · 12 unmodified lines
57185746 * pvclock_update_vm_gtod_copy().
57195747 */
57205748 kvm_gen_update_masterclock(kvm);
5721− now_ns = get_kvmclock_ns(kvm);
5722− kvm->arch.kvmclock_offset += user_ns.clock - now_ns;
5749+
5750+ /*
5751+ * This pairs with kvm_guest_time_update(): when masterclock is
5752+ * in use, we use master_kernel_ns + kvmclock_offset to set
5753+ * unsigned 'system_time' so if we use get_kvmclock_ns() (which
5754+ * is slightly ahead) here we risk going negative on unsigned
5755+ * 'system_time' when 'user_ns.clock' is very small.
5756+ */
5757+ spin_lock_irq(&ka->pvclock_gtod_sync_lock);
5758+ if (kvm->arch.use_master_clock)
5759+ now_ns = ka->master_kernel_ns;
5760+ else
5761+ now_ns = get_kvmclock_base_ns();
5762+ ka->kvmclock_offset = user_ns.clock - now_ns;
5763+ spin_unlock_irq(&ka->pvclock_gtod_sync_lock);
5764+
57235765 kvm_make_all_cpus_request(kvm, KVM_REQ_CLOCK_UPDATE);
57245766 break;
57255767 }
@@ -6603,7 +6645,7 @@ static int kvm_emulate_wbinvd_noskip(struct kvm_vcpu *vcpu) · 877 unmodified lines
66036645 int cpu = get_cpu();
66046646
66056647 cpumask_set_cpu(cpu, vcpu->arch.wbinvd_dirty_mask);
6606− smp_call_function_many(vcpu->arch.wbinvd_dirty_mask,
6648+ on_each_cpu_mask(vcpu->arch.wbinvd_dirty_mask,
66076649 wbinvd_ipi, NULL, 1);
66086650 put_cpu();
66096651 cpumask_clear(vcpu->arch.wbinvd_dirty_mask);
@@ -7698,6 +7740,7 @@ static void kvm_hyperv_tsc_notifier(void) · 1088 unmodified lines
76987740 struct kvm *kvm;
76997741 struct kvm_vcpu *vcpu;
77007742 int cpu;
7743+ unsigned long flags;
77017744
77027745 mutex_lock(&kvm_lock);
77037746 list_for_each_entry(kvm, &vm_list, vm_list)
@@ -7713,17 +7756,15 @@ static void kvm_hyperv_tsc_notifier(void) · 9 unmodified lines
77137756 list_for_each_entry(kvm, &vm_list, vm_list) {
77147757 struct kvm_arch *ka = &kvm->arch;
77157758
7716− spin_lock(&ka->pvclock_gtod_sync_lock);
7717−
7759+ spin_lock_irqsave(&ka->pvclock_gtod_sync_lock, flags);
77187760 pvclock_update_vm_gtod_copy(kvm);
7761+ spin_unlock_irqrestore(&ka->pvclock_gtod_sync_lock, flags);
77197762
77207763 kvm_for_each_vcpu(cpu, vcpu, kvm)
77217764 kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
77227765
77237766 kvm_for_each_vcpu(cpu, vcpu, kvm)
77247767 kvm_clear_request(KVM_REQ_MCLOCK_INPROGRESS, vcpu);
7725−
7726− spin_unlock(&ka->pvclock_gtod_sync_lock);
77277768 }
77287769 mutex_unlock(&kvm_lock);
77297770 }
@@ -10634,8 +10675,6 @@ void kvm_arch_pre_destroy_vm(struct kvm *kvm) · 2904 unmodified lines
1063410675
1063510676 void kvm_arch_destroy_vm(struct kvm *kvm)
1063610677 {
10637− u32 i;
10638−
1063910678 if (current->mm == kvm->mm) {
1064010679 /*
1064110680 * Free memory regions allocated on behalf of userspace,
@@ -10651,8 +10690,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm) · 9 unmodified lines
1065110690 mutex_unlock(&kvm->slots_lock);
1065210691 }
1065310692 static_call_cond(kvm_x86_vm_destroy)(kvm);
10654− for (i = 0; i < kvm->arch.msr_filter.count; i++)
10655− kfree(kvm->arch.msr_filter.ranges[i].bitmap);
10693+ kvm_free_msr_filter(srcu_dereference_check(kvm->arch.msr_filter, &kvm->srcu, 1));
1065610694 kvm_pic_destroy(kvm);
1065710695 kvm_ioapic_destroy(kvm);
1065810696 kvm_free_vcpus(kvm);
arch/x86/kvm/x86.h+0−1
@@ -250,7 +250,6 @@ static inline bool kvm_vcpu_latch_init(struct kvm_vcpu *vcpu) · 249 unmodified lines
250250 void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock, int sec_hi_ofs);
251251 void kvm_inject_realmode_interrupt(struct kvm_vcpu *vcpu, int irq, int inc_eip);
252252
253−void kvm_write_tsc(struct kvm_vcpu *vcpu, struct msr_data *msr);
254253 u64 get_kvmclock_ns(struct kvm *kvm);
255254
256255 int kvm_read_guest_virt(struct kvm_vcpu *vcpu,
arch/x86/mm/mem_encrypt.c+1−1
@@ -262,7 +262,7 @@ static void __init __set_clr_pte_enc(pte_t *kpte, int level, bool enc) · 261 unmodified lines
262262 if (pgprot_val(old_prot) == pgprot_val(new_prot))
263263 return;
264264
265− pa = pfn << page_level_shift(level);
265+ pa = pfn << PAGE_SHIFT;
266266 size = page_level_size(level);
267267
268268 /*
arch/x86/net/bpf_jit_comp.c+25−6
@@ -1936,7 +1936,7 @@ static int invoke_bpf_mod_ret(const struct btf_func_model *m, u8 **pprog, · 1935 unmodified lines
19361936 * add rsp, 8 // skip eth_type_trans's frame
19371937 * ret // return to its caller
19381938 */
1939−int arch_prepare_bpf_trampoline(void *image, void *image_end,
1939+int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image, void *image_end,
19401940 const struct btf_func_model *m, u32 flags,
19411941 struct bpf_tramp_progs *tprogs,
19421942 void *orig_call)
@@ -1975,6 +1975,15 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, · 32 unmodified lines
19751975
19761976 save_regs(m, &prog, nr_args, stack_size);
19771977
1978+ if (flags & BPF_TRAMP_F_CALL_ORIG) {
1979+ /* arg1: mov rdi, im */
1980+ emit_mov_imm64(&prog, BPF_REG_1, (long) im >> 32, (u32) (long) im);
1981+ if (emit_call(&prog, __bpf_tramp_enter, prog)) {
1982+ ret = -EINVAL;
1983+ goto cleanup;
1984+ }
1985+ }
1986+
19781987 if (fentry->nr_progs)
19791988 if (invoke_bpf(m, &prog, fentry, stack_size))
19801989 return -EINVAL;
@@ -1993,8 +2002,7 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, · 12 unmodified lines
19932002 }
19942003
19952004 if (flags & BPF_TRAMP_F_CALL_ORIG) {
1996− if (fentry->nr_progs || fmod_ret->nr_progs)
1997− restore_regs(m, &prog, nr_args, stack_size);
2005+ restore_regs(m, &prog, nr_args, stack_size);
19982006
19992007 /* call original function */
20002008 if (emit_call(&prog, orig_call, prog)) {
@@ -2003,6 +2011,9 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, · 2 unmodified lines
20032011 }
20042012 /* remember return value in a stack for bpf prog to access */
20052013 emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -8);
2014+ im->ip_after_call = prog;
2015+ memcpy(prog, ideal_nops[NOP_ATOMIC5], X86_PATCH_SIZE);
2016+ prog += X86_PATCH_SIZE;
20062017 }
20072018
20082019 if (fmod_ret->nr_progs) {
@@ -2033,9 +2044,17 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, · 24 unmodified lines
20332044 * the return value is only updated on the stack and still needs to be
20342045 * restored to R0.
20352046 */
2036− if (flags & BPF_TRAMP_F_CALL_ORIG)
2047+ if (flags & BPF_TRAMP_F_CALL_ORIG) {
2048+ im->ip_epilogue = prog;
2049+ /* arg1: mov rdi, im */
2050+ emit_mov_imm64(&prog, BPF_REG_1, (long) im >> 32, (u32) (long) im);
2051+ if (emit_call(&prog, __bpf_tramp_exit, prog)) {
2052+ ret = -EINVAL;
2053+ goto cleanup;
2054+ }
20372055 /* restore original return value back into RAX */
20382056 emit_ldx(&prog, BPF_DW, BPF_REG_0, BPF_REG_FP, -8);
2057+ }
20392058
20402059 EMIT1(0x5B); /* pop rbx */
20412060 EMIT1(0xC9); /* leave */
@@ -2225,7 +2244,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) · 183 unmodified lines
22252244 padding = true;
22262245 goto skip_init_addrs;
22272246 }
2228− addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
2247+ addrs = kvmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
22292248 if (!addrs) {
22302249 prog = orig_prog;
22312250 goto out_addrs;
@@ -2317,7 +2336,7 @@ out_image: · 85 unmodified lines
23172336 if (image)
23182337 bpf_prog_fill_jited_linfo(prog, addrs + 1);
23192338 out_addrs:
2320− kfree(addrs);
2339+ kvfree(addrs);
23212340 kfree(jit_data);
23222341 prog->aux->jit_data = NULL;
23232342 }
arch/x86/platform/iris/iris.c+0−1
@@ -27,7 +27,6 @@ · 26 unmodified lines
2727 MODULE_LICENSE("GPL");
2828 MODULE_AUTHOR("Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>");
2929 MODULE_DESCRIPTION("A power_off handler for Iris devices from EuroBraille");
30−MODULE_SUPPORTED_DEVICE("Eurobraille/Iris");
3130
3231 static bool force;
3332
arch/x86/xen/p2m.c+2−5
@@ -98,8 +98,8 @@ EXPORT_SYMBOL_GPL(xen_p2m_size); · 97 unmodified lines
9898 unsigned long xen_max_p2m_pfn __read_mostly;
9999 EXPORT_SYMBOL_GPL(xen_max_p2m_pfn);
100100
101−#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT
102−#define P2M_LIMIT CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT
101+#ifdef CONFIG_XEN_MEMORY_HOTPLUG_LIMIT
102+#define P2M_LIMIT CONFIG_XEN_MEMORY_HOTPLUG_LIMIT
103103 #else
104104 #define P2M_LIMIT 0
105105 #endif
@@ -416,9 +416,6 @@ void __init xen_vmalloc_p2m_tree(void) · 310 unmodified lines
416416 xen_p2m_last_pfn = xen_max_p2m_pfn;
417417
418418 p2m_limit = (phys_addr_t)P2M_LIMIT * 1024 * 1024 * 1024 / PAGE_SIZE;
419− if (!p2m_limit && IS_ENABLED(CONFIG_XEN_UNPOPULATED_ALLOC))
420− p2m_limit = xen_start_info->nr_pages * XEN_EXTRA_MEM_RATIO;
421−
422419 vm.flags = VM_ALLOC;
423420 vm.size = ALIGN(sizeof(unsigned long) * max(xen_max_p2m_pfn, p2m_limit),
424421 PMD_SIZE * PMDS_PER_MID_PAGE);
arch/x86/xen/setup.c+14−2
@@ -59,6 +59,18 @@ static struct { · 58 unmodified lines
5959 } xen_remap_buf __initdata __aligned(PAGE_SIZE);
6060 static unsigned long xen_remap_mfn __initdata = INVALID_P2M_ENTRY;
6161
62+/*
63+ * The maximum amount of extra memory compared to the base size. The
64+ * main scaling factor is the size of struct page. At extreme ratios
65+ * of base:extra, all the base memory can be filled with page
66+ * structures for the extra memory, leaving no space for anything
67+ * else.
68+ *
69+ * 10x seems like a reasonable balance between scaling flexibility and
70+ * leaving a practically usable system.
71+ */
72+#define EXTRA_MEM_RATIO (10)
73+
6274 static bool xen_512gb_limit __initdata = IS_ENABLED(CONFIG_XEN_512GB);
6375
6476 static void __init xen_parse_512gb(void)
@@ -778,13 +790,13 @@ char * __init xen_memory_setup(void) · 713 unmodified lines
778790 extra_pages += max_pages - max_pfn;
779791
780792 /*
781− * Clamp the amount of extra memory to a XEN_EXTRA_MEM_RATIO
793+ * Clamp the amount of extra memory to a EXTRA_MEM_RATIO
782794 * factor the base size.
783795 *
784796 * Make sure we have no memory above max_pages, as this area
785797 * isn't handled by the p2m management.
786798 */
787− extra_pages = min3(XEN_EXTRA_MEM_RATIO * min(max_pfn, PFN_DOWN(MAXMEM)),
799+ extra_pages = min3(EXTRA_MEM_RATIO * min(max_pfn, PFN_DOWN(MAXMEM)),
788800 extra_pages, max_pages - max_pfn);
789801 i = 0;
790802 addr = xen_e820_table.entries[0].addr;
arch/xtensa/kernel/coprocessor.S+33−31
@@ -99,37 +99,6 @@ · 98 unmodified lines
9999 LOAD_CP_REGS_TAB(6)
100100 LOAD_CP_REGS_TAB(7)
101101
102−/*
103− * coprocessor_flush(struct thread_info*, index)
104− * a2 a3
105− *
106− * Save coprocessor registers for coprocessor 'index'.
107− * The register values are saved to or loaded from the coprocessor area
108− * inside the task_info structure.
109− *
110− * Note that this function doesn't update the coprocessor_owner information!
111− *
112− */
113−
114−ENTRY(coprocessor_flush)
115−
116− /* reserve 4 bytes on stack to save a0 */
117− abi_entry(4)
118−
119− s32i a0, a1, 0
120− movi a0, .Lsave_cp_regs_jump_table
121− addx8 a3, a3, a0
122− l32i a4, a3, 4
123− l32i a3, a3, 0
124− add a2, a2, a4
125− beqz a3, 1f
126− callx0 a3
127−1: l32i a0, a1, 0
128−
129− abi_ret(4)
130−
131−ENDPROC(coprocessor_flush)
132−
133102 /*
134103 * Entry condition:
135104 *
@@ -245,6 +214,39 @@ ENTRY(fast_coprocessor) · 109 unmodified lines
245214
246215 ENDPROC(fast_coprocessor)
247216
217+ .text
218+
219+/*
220+ * coprocessor_flush(struct thread_info*, index)
221+ * a2 a3
222+ *
223+ * Save coprocessor registers for coprocessor 'index'.
224+ * The register values are saved to or loaded from the coprocessor area
225+ * inside the task_info structure.
226+ *
227+ * Note that this function doesn't update the coprocessor_owner information!
228+ *
229+ */
230+
231+ENTRY(coprocessor_flush)
232+
233+ /* reserve 4 bytes on stack to save a0 */
234+ abi_entry(4)
235+
236+ s32i a0, a1, 0
237+ movi a0, .Lsave_cp_regs_jump_table
238+ addx8 a3, a3, a0
239+ l32i a4, a3, 4
240+ l32i a3, a3, 0
241+ add a2, a2, a4
242+ beqz a3, 1f
243+ callx0 a3
244+1: l32i a0, a1, 0
245+
246+ abi_ret(4)
247+
248+ENDPROC(coprocessor_flush)
249+
248250 .data
249251
250252 ENTRY(coprocessor_owner)
arch/xtensa/mm/fault.c+4−1
@@ -112,8 +112,11 @@ good_area: · 111 unmodified lines
112112 */
113113 fault = handle_mm_fault(vma, address, flags, regs);
114114
115− if (fault_signal_pending(fault, regs))
115+ if (fault_signal_pending(fault, regs)) {
116+ if (!user_mode(regs))
117+ goto bad_page_fault;
116118 return;
119+ }
117120
118121 if (unlikely(fault & VM_FAULT_ERROR)) {
119122 if (fault & VM_FAULT_OOM)
block/bio.c+19−4
@@ -277,7 +277,7 @@ static struct bio *__bio_chain_endio(struct bio *bio) · 276 unmodified lines
277277 {
278278 struct bio *parent = bio->bi_private;
279279
280− if (!parent->bi_status)
280+ if (bio->bi_status && !parent->bi_status)
281281 parent->bi_status = bio->bi_status;
282282 bio_put(bio);
283283 return parent;
@@ -949,7 +949,7 @@ void bio_release_pages(struct bio *bio, bool mark_dirty) · 665 unmodified lines
949949 }
950950 EXPORT_SYMBOL_GPL(bio_release_pages);
951951
952−static int bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter)
952+static void __bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter)
953953 {
954954 WARN_ON_ONCE(bio->bi_max_vecs);
955955
@@ -959,11 +959,26 @@ static int bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter) · 3 unmodified lines
959959 bio->bi_iter.bi_size = iter->count;
960960 bio_set_flag(bio, BIO_NO_PAGE_REF);
961961 bio_set_flag(bio, BIO_CLONED);
962+}
962963
964+static int bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter)
965+{
966+ __bio_iov_bvec_set(bio, iter);
963967 iov_iter_advance(iter, iter->count);
964968 return 0;
965969 }
966970
971+static int bio_iov_bvec_set_append(struct bio *bio, struct iov_iter *iter)
972+{
973+ struct request_queue *q = bio->bi_bdev->bd_disk->queue;
974+ struct iov_iter i = *iter;
975+
976+ iov_iter_truncate(&i, queue_max_zone_append_sectors(q) << 9);
977+ __bio_iov_bvec_set(bio, &i);
978+ iov_iter_advance(iter, i.count);
979+ return 0;
980+}
981+
967982 #define PAGE_PTRS_PER_BVEC (sizeof(struct bio_vec) / sizeof(struct page *))
968983
969984 /**
@@ -1094,8 +1109,8 @@ int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) · 124 unmodified lines
10941109 int ret = 0;
10951110
10961111 if (iov_iter_is_bvec(iter)) {
1097− if (WARN_ON_ONCE(bio_op(bio) == REQ_OP_ZONE_APPEND))
1098− return -EINVAL;
1112+ if (bio_op(bio) == REQ_OP_ZONE_APPEND)
1113+ return bio_iov_bvec_set_append(bio, iter);
10991114 return bio_iov_bvec_set(bio, iter);
11001115 }
11011116
block/blk-merge.c+8−0
@@ -382,6 +382,14 @@ unsigned int blk_recalc_rq_segments(struct request *rq) · 381 unmodified lines
382382 switch (bio_op(rq->bio)) {
383383 case REQ_OP_DISCARD:
384384 case REQ_OP_SECURE_ERASE:
385+ if (queue_max_discard_segments(rq->q) > 1) {
386+ struct bio *bio = rq->bio;
387+
388+ for_each_bio(bio)
389+ nr_phys_segs++;
390+ return nr_phys_segs;
391+ }
392+ return 1;
385393 case REQ_OP_WRITE_ZEROES:
386394 return 0;
387395 case REQ_OP_WRITE_SAME:
block/blk-mq-debugfs.c+0−1
@@ -302,7 +302,6 @@ static const char *const rqf_name[] = { · 301 unmodified lines
302302 RQF_NAME(QUIET),
303303 RQF_NAME(ELVPRIV),
304304 RQF_NAME(IO_STAT),
305− RQF_NAME(ALLOCED),
306305 RQF_NAME(PM),
307306 RQF_NAME(HASHED),
308307 RQF_NAME(STATS),
block/partitions/core.c+7−0
@@ -322,6 +322,13 @@ static struct block_device *add_partition(struct gendisk *disk, int partno, · 321 unmodified lines
322322 const char *dname;
323323 int err;
324324
325+ /*
326+ * disk_max_parts() won't be zero, either GENHD_FL_EXT_DEVT is set
327+ * or 'minors' is passed to alloc_disk().
328+ */
329+ if (partno >= disk_max_parts(disk))
330+ return ERR_PTR(-EINVAL);
331+
325332 /*
326333 * Partitions are not supported on zoned block devices that are used as
327334 * such.
drivers/acpi/acpica/nsaccess.c+1−2
@@ -99,13 +99,12 @@ acpi_status acpi_ns_root_initialize(void) · 98 unmodified lines
9999 * just create and link the new node(s) here.
100100 */
101101 new_node =
102− ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_namespace_node));
102+ acpi_ns_create_node(*ACPI_CAST_PTR(u32, init_val->name));
103103 if (!new_node) {
104104 status = AE_NO_MEMORY;
105105 goto unlock_and_exit;
106106 }
107107
108− ACPI_COPY_NAMESEG(new_node->name.ascii, init_val->name);
109108 new_node->descriptor_type = ACPI_DESC_TYPE_NAMED;
110109 new_node->type = init_val->type;
111110
drivers/acpi/internal.h+5−1
@@ -9,6 +9,8 @@ · 8 unmodified lines
99 #ifndef _ACPI_INTERNAL_H_
1010 #define _ACPI_INTERNAL_H_
1111
12+#include <linux/idr.h>
13+
1214 #define PREFIX "ACPI: "
1315
1416 int early_acpi_osi_init(void);
@@ -96,9 +98,11 @@ void acpi_scan_table_handler(u32 event, void *table, void *context); · 81 unmodified lines
9698
9799 extern struct list_head acpi_bus_id_list;
98100
101+#define ACPI_MAX_DEVICE_INSTANCES 4096
102+
99103 struct acpi_device_bus_id {
100104 const char *bus_id;
101− unsigned int instance_no;
105+ struct ida instance_ida;
102106 struct list_head node;
103107 };
104108
drivers/acpi/processor_idle.c+7−0
@@ -29,6 +29,7 @@ · 28 unmodified lines
2929 */
3030 #ifdef CONFIG_X86
3131 #include <asm/apic.h>
32+#include <asm/cpu.h>
3233 #endif
3334
3435 #define _COMPONENT ACPI_PROCESSOR_COMPONENT
@@ -541,6 +542,12 @@ static int acpi_idle_play_dead(struct cpuidle_device *dev, int index) · 506 unmodified lines
541542 wait_for_freeze();
542543 } else
543544 return -ENODEV;
545+
546+#if defined(CONFIG_X86) && defined(CONFIG_HOTPLUG_CPU)
547+ /* If NMI wants to wake up CPU0, start CPU0. */
548+ if (wakeup_cpu0())
549+ start_cpu0();
550+#endif
544551 }
545552
546553 /* Never reached */
drivers/acpi/scan.c+39−6
@@ -479,9 +479,8 @@ static void acpi_device_del(struct acpi_device *device) · 478 unmodified lines
479479 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node)
480480 if (!strcmp(acpi_device_bus_id->bus_id,
481481 acpi_device_hid(device))) {
482− if (acpi_device_bus_id->instance_no > 0)
483− acpi_device_bus_id->instance_no--;
484− else {
482+ ida_simple_remove(&acpi_device_bus_id->instance_ida, device->pnp.instance_no);
483+ if (ida_is_empty(&acpi_device_bus_id->instance_ida)) {
485484 list_del(&acpi_device_bus_id->node);
486485 kfree_const(acpi_device_bus_id->bus_id);
487486 kfree(acpi_device_bus_id);
@@ -631,6 +630,21 @@ static struct acpi_device_bus_id *acpi_device_bus_id_match(const char *dev_id) · 143 unmodified lines
631630 return NULL;
632631 }
633632
633+static int acpi_device_set_name(struct acpi_device *device,
634+ struct acpi_device_bus_id *acpi_device_bus_id)
635+{
636+ struct ida *instance_ida = &acpi_device_bus_id->instance_ida;
637+ int result;
638+
639+ result = ida_simple_get(instance_ida, 0, ACPI_MAX_DEVICE_INSTANCES, GFP_KERNEL);
640+ if (result < 0)
641+ return result;
642+
643+ device->pnp.instance_no = result;
644+ dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, result);
645+ return 0;
646+}
647+
634648 int acpi_device_add(struct acpi_device *device,
635649 void (*release)(struct device *))
636650 {
@@ -665,7 +679,9 @@ int acpi_device_add(struct acpi_device *device, · 28 unmodified lines
665679
666680 acpi_device_bus_id = acpi_device_bus_id_match(acpi_device_hid(device));
667681 if (acpi_device_bus_id) {
668− acpi_device_bus_id->instance_no++;
682+ result = acpi_device_set_name(device, acpi_device_bus_id);
683+ if (result)
684+ goto err_unlock;
669685 } else {
670686 acpi_device_bus_id = kzalloc(sizeof(*acpi_device_bus_id),
671687 GFP_KERNEL);
@@ -681,9 +697,16 @@ int acpi_device_add(struct acpi_device *device, · 9 unmodified lines
681697 goto err_unlock;
682698 }
683699
700+ ida_init(&acpi_device_bus_id->instance_ida);
701+
702+ result = acpi_device_set_name(device, acpi_device_bus_id);
703+ if (result) {
704+ kfree(acpi_device_bus_id);
705+ goto err_unlock;
706+ }
707+
684708 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list);
685709 }
686− dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no);
687710
688711 if (device->parent)
689712 list_add_tail(&device->node, &device->parent->children);
@@ -1647,6 +1670,8 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, · 957 unmodified lines
16471670 device_initialize(&device->dev);
16481671 dev_set_uevent_suppress(&device->dev, true);
16491672 acpi_init_coherency(device);
1673+ /* Assume there are unmet deps to start with. */
1674+ device->dep_unmet = 1;
16501675 }
16511676
16521677 void acpi_device_add_finalize(struct acpi_device *device)
@@ -1910,6 +1935,8 @@ static void acpi_scan_dep_init(struct acpi_device *adev) · 257 unmodified lines
19101935 {
19111936 struct acpi_dep_data *dep;
19121937
1938+ adev->dep_unmet = 0;
1939+
19131940 mutex_lock(&acpi_dep_list_lock);
19141941
19151942 list_for_each_entry(dep, &acpi_dep_list, node) {
@@ -1957,7 +1984,13 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, bool check_dep, · 41 unmodified lines
19571984 return AE_CTRL_DEPTH;
19581985
19591986 acpi_scan_init_hotplug(device);
1960− if (!check_dep)
1987+ /*
1988+ * If check_dep is true at this point, the device has no dependencies,
1989+ * or the creation of the device object would have been postponed above.
1990+ */
1991+ if (check_dep)
1992+ device->dep_unmet = 0;
1993+ else
19611994 acpi_scan_dep_init(device);
19621995
19631996 out:
drivers/acpi/tables.c+39−3
@@ -780,7 +780,7 @@ acpi_status acpi_os_table_override(struct acpi_table_header *existing_table, · 779 unmodified lines
780780 }
781781
782782 /*
783− * acpi_table_init()
783+ * acpi_locate_initial_tables()
784784 *
785785 * find RSDP, find and checksum SDT/XSDT.
786786 * checksum all tables, print SDT/XSDT
@@ -788,7 +788,7 @@ acpi_status acpi_os_table_override(struct acpi_table_header *existing_table, · 1 unmodified line
788788 * result: sdt_entry[] is initialized
789789 */
790790
791−int __init acpi_table_init(void)
791+int __init acpi_locate_initial_tables(void)
792792 {
793793 acpi_status status;
794794
@@ -803,9 +803,45 @@ int __init acpi_table_init(void) · 8 unmodified lines
803803 status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
804804 if (ACPI_FAILURE(status))
805805 return -EINVAL;
806− acpi_table_initrd_scan();
807806
807+ return 0;
808+}
809+
810+void __init acpi_reserve_initial_tables(void)
811+{
812+ int i;
813+
814+ for (i = 0; i < ACPI_MAX_TABLES; i++) {
815+ struct acpi_table_desc *table_desc = &initial_tables[i];
816+ u64 start = table_desc->address;
817+ u64 size = table_desc->length;
818+
819+ if (!start || !size)
820+ break;
821+
822+ pr_info("Reserving %4s table memory at [mem 0x%llx-0x%llx]\n",
823+ table_desc->signature.ascii, start, start + size - 1);
824+
825+ memblock_reserve(start, size);
826+ }
827+}
828+
829+void __init acpi_table_init_complete(void)
830+{
831+ acpi_table_initrd_scan();
808832 check_multiple_madt();
833+}
834+
835+int __init acpi_table_init(void)
836+{
837+ int ret;
838+
839+ ret = acpi_locate_initial_tables();
840+ if (ret)
841+ return ret;
842+
843+ acpi_table_init_complete();
844+
809845 return 0;
810846 }
811847
drivers/acpi/video_detect.c+1−0
@@ -147,6 +147,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { · 146 unmodified lines
147147 },
148148 },
149149 {
150+ .callback = video_detect_force_vendor,
150151 .ident = "Sony VPCEH3U1E",
151152 .matches = {
152153 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
drivers/atm/fore200e.c+0−2
@@ -100,8 +100,6 @@ static LIST_HEAD(fore200e_boards); · 99 unmodified lines
100100
101101 MODULE_AUTHOR("Christophe Lizzi - credits to Uwe Dannowski and Heikki Vatiainen");
102102 MODULE_DESCRIPTION("FORE Systems 200E-series ATM driver - version " FORE200E_VERSION);
103−MODULE_SUPPORTED_DEVICE("PCA-200E, SBA-200E");
104−
105103
106104 static const int fore200e_rx_buf_nbr[ BUFFER_SCHEME_NBR ][ BUFFER_MAGN_NBR ] = {
107105 { BUFFER_S1_NBR, BUFFER_L1_NBR },
drivers/auxdisplay/charlcd.c+8−10
@@ -470,12 +470,14 @@ static ssize_t charlcd_write(struct file *file, const char __user *buf, · 469 unmodified lines
470470 char c;
471471
472472 for (; count-- > 0; (*ppos)++, tmp++) {
473− if (!in_interrupt() && (((count + 1) & 0x1f) == 0))
473+ if (((count + 1) & 0x1f) == 0) {
474474 /*
475− * let's be a little nice with other processes
476− * that need some CPU
475+ * charlcd_write() is invoked as a VFS->write() callback
476+ * and as such it is always invoked from preemptible
477+ * context and may sleep.
477478 */
478− schedule();
479+ cond_resched();
480+ }
479481
480482 if (get_user(c, tmp))
481483 return -EFAULT;
@@ -537,12 +539,8 @@ static void charlcd_puts(struct charlcd *lcd, const char *s) · 55 unmodified lines
537539 int count = strlen(s);
538540
539541 for (; count-- > 0; tmp++) {
540− if (!in_interrupt() && (((count + 1) & 0x1f) == 0))
541− /*
542− * let's be a little nice with other processes
543− * that need some CPU
544− */
545− schedule();
542+ if (((count + 1) & 0x1f) == 0)
543+ cond_resched();
546544
547545 charlcd_write_char(lcd, *tmp);
548546 }
drivers/base/dd.c+3−0
@@ -97,6 +97,9 @@ static void deferred_probe_work_func(struct work_struct *work) · 96 unmodified lines
9797
9898 get_device(dev);
9999
100+ kfree(dev->p->deferred_probe_reason);
101+ dev->p->deferred_probe_reason = NULL;
102+
100103 /*
101104 * Drop the mutex while probing each device; the probe path may
102105 * manipulate the deferred list
drivers/base/power/runtime.c+69−42
@@ -305,7 +305,7 @@ static int rpm_get_suppliers(struct device *dev) · 304 unmodified lines
305305 return 0;
306306 }
307307
308−static void rpm_put_suppliers(struct device *dev)
308+static void __rpm_put_suppliers(struct device *dev, bool try_to_suspend)
309309 {
310310 struct device_link *link;
311311
@@ -313,10 +313,30 @@ static void rpm_put_suppliers(struct device *dev) · 1 unmodified line
313313 device_links_read_lock_held()) {
314314
315315 while (refcount_dec_not_one(&link->rpm_active))
316− pm_runtime_put(link->supplier);
316+ pm_runtime_put_noidle(link->supplier);
317+
318+ if (try_to_suspend)
319+ pm_request_idle(link->supplier);
317320 }
318321 }
319322
323+static void rpm_put_suppliers(struct device *dev)
324+{
325+ __rpm_put_suppliers(dev, true);
326+}
327+
328+static void rpm_suspend_suppliers(struct device *dev)
329+{
330+ struct device_link *link;
331+ int idx = device_links_read_lock();
332+
333+ list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
334+ device_links_read_lock_held())
335+ pm_request_idle(link->supplier);
336+
337+ device_links_read_unlock(idx);
338+}
339+
320340 /**
321341 * __rpm_callback - Run a given runtime PM callback for a given device.
322342 * @cb: Runtime PM callback to run.
@@ -325,27 +345,29 @@ static void rpm_put_suppliers(struct device *dev) · 2 unmodified lines
325345 static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
326346 __releases(&dev->power.lock) __acquires(&dev->power.lock)
327347 {
328− bool use_links = dev->power.links_count > 0;
329− bool get = false;
330348 int retval, idx;
331− bool put;
349+ bool use_links = dev->power.links_count > 0;
332350
333351 if (dev->power.irq_safe) {
334352 spin_unlock(&dev->power.lock);
335− } else if (!use_links) {
336− spin_unlock_irq(&dev->power.lock);
337353 } else {
338− get = dev->power.runtime_status == RPM_RESUMING;
339−
340354 spin_unlock_irq(&dev->power.lock);
341355
342− /* Resume suppliers if necessary. */
343− if (get) {
356+ /*
357+ * Resume suppliers if necessary.
358+ *
359+ * The device's runtime PM status cannot change until this
360+ * routine returns, so it is safe to read the status outside of
361+ * the lock.
362+ */
363+ if (use_links && dev->power.runtime_status == RPM_RESUMING) {
344364 idx = device_links_read_lock();
345365
346366 retval = rpm_get_suppliers(dev);
347− if (retval)
367+ if (retval) {
368+ rpm_put_suppliers(dev);
348369 goto fail;
370+ }
349371
350372 device_links_read_unlock(idx);
351373 }
@@ -355,36 +377,24 @@ static int __rpm_callback(int (*cb)(struct device *), struct device *dev) · 3 unmodified lines
355377
356378 if (dev->power.irq_safe) {
357379 spin_lock(&dev->power.lock);
358− return retval;
359− }
360−
361− spin_lock_irq(&dev->power.lock);
362−
363− if (!use_links)
364− return retval;
365−
366− /*
367− * If the device is suspending and the callback has returned success,
368− * drop the usage counters of the suppliers that have been reference
369− * counted on its resume.
370− *
371− * Do that if the resume fails too.
372− */
373− put = dev->power.runtime_status == RPM_SUSPENDING && !retval;
374− if (put)
375− __update_runtime_status(dev, RPM_SUSPENDED);
376− else
377− put = get && retval;
378−
379− if (put) {
380− spin_unlock_irq(&dev->power.lock);
380+ } else {
381+ /*
382+ * If the device is suspending and the callback has returned
383+ * success, drop the usage counters of the suppliers that have
384+ * been reference counted on its resume.
385+ *
386+ * Do that if resume fails too.
387+ */
388+ if (use_links
389+ && ((dev->power.runtime_status == RPM_SUSPENDING && !retval)
390+ || (dev->power.runtime_status == RPM_RESUMING && retval))) {
391+ idx = device_links_read_lock();
381392
382− idx = device_links_read_lock();
393+ __rpm_put_suppliers(dev, false);
383394
384395 fail:
385− rpm_put_suppliers(dev);
386−
387− device_links_read_unlock(idx);
396+ device_links_read_unlock(idx);
397+ }
388398
389399 spin_lock_irq(&dev->power.lock);
390400 }
@@ -654,8 +664,11 @@ static int rpm_suspend(struct device *dev, int rpmflags) · 263 unmodified lines
654664 goto out;
655665 }
656666
667+ if (dev->power.irq_safe)
668+ goto out;
669+
657670 /* Maybe the parent is now able to suspend. */
658− if (parent && !parent->power.ignore_children && !dev->power.irq_safe) {
671+ if (parent && !parent->power.ignore_children) {
659672 spin_unlock(&dev->power.lock);
660673
661674 spin_lock(&parent->power.lock);
@@ -664,6 +677,14 @@ static int rpm_suspend(struct device *dev, int rpmflags) · 2 unmodified lines
664677
665678 spin_lock(&dev->power.lock);
666679 }
680+ /* Maybe the suppliers are now able to suspend. */
681+ if (dev->power.links_count > 0) {
682+ spin_unlock_irq(&dev->power.lock);
683+
684+ rpm_suspend_suppliers(dev);
685+
686+ spin_lock_irq(&dev->power.lock);
687+ }
667688
668689 out:
669690 trace_rpm_return_int_rcuidle(dev, _THIS_IP_, retval);
@@ -1669,8 +1690,8 @@ void pm_runtime_get_suppliers(struct device *dev) · 999 unmodified lines
16691690 device_links_read_lock_held())
16701691 if (link->flags & DL_FLAG_PM_RUNTIME) {
16711692 link->supplier_preactivated = true;
1672− refcount_inc(&link->rpm_active);
16731693 pm_runtime_get_sync(link->supplier);
1694+ refcount_inc(&link->rpm_active);
16741695 }
16751696
16761697 device_links_read_unlock(idx);
@@ -1683,6 +1704,8 @@ void pm_runtime_get_suppliers(struct device *dev) · 6 unmodified lines
16831704 void pm_runtime_put_suppliers(struct device *dev)
16841705 {
16851706 struct device_link *link;
1707+ unsigned long flags;
1708+ bool put;
16861709 int idx;
16871710
16881711 idx = device_links_read_lock();
@@ -1691,7 +1714,11 @@ void pm_runtime_put_suppliers(struct device *dev) · 2 unmodified lines
16911714 device_links_read_lock_held())
16921715 if (link->supplier_preactivated) {
16931716 link->supplier_preactivated = false;
1694− if (refcount_dec_not_one(&link->rpm_active))
1717+ spin_lock_irqsave(&dev->power.lock, flags);
1718+ put = pm_runtime_status_suspended(dev) &&
1719+ refcount_dec_not_one(&link->rpm_active);
1720+ spin_unlock_irqrestore(&dev->power.lock, flags);
1721+ if (put)
16951722 pm_runtime_put(link->supplier);
16961723 }
16971724
drivers/block/floppy.c+0−1
@@ -5091,7 +5091,6 @@ module_param(floppy, charp, 0); · 5090 unmodified lines
50915091 module_param(FLOPPY_IRQ, int, 0);
50925092 module_param(FLOPPY_DMA, int, 0);
50935093 MODULE_AUTHOR("Alain L. Knaff");
5094−MODULE_SUPPORTED_DEVICE("fd");
50955094 MODULE_LICENSE("GPL");
50965095
50975096 /* This doesn't actually get used other than for module information */
drivers/block/null_blk/main.c+21−5
@@ -1369,10 +1369,13 @@ static blk_status_t null_handle_cmd(struct nullb_cmd *cmd, sector_t sector, · 1368 unmodified lines
13691369 }
13701370
13711371 if (dev->zoned)
1372− cmd->error = null_process_zoned_cmd(cmd, op,
1373− sector, nr_sectors);
1372+ sts = null_process_zoned_cmd(cmd, op, sector, nr_sectors);
13741373 else
1375− cmd->error = null_process_cmd(cmd, op, sector, nr_sectors);
1374+ sts = null_process_cmd(cmd, op, sector, nr_sectors);
1375+
1376+ /* Do not overwrite errors (e.g. timeout errors) */
1377+ if (cmd->error == BLK_STS_OK)
1378+ cmd->error = sts;
13761379
13771380 out:
13781381 nullb_complete_cmd(cmd);
@@ -1451,8 +1454,20 @@ static bool should_requeue_request(struct request *rq) · 72 unmodified lines
14511454
14521455 static enum blk_eh_timer_return null_timeout_rq(struct request *rq, bool res)
14531456 {
1457+ struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq);
1458+
14541459 pr_info("rq %p timed out\n", rq);
1455− blk_mq_complete_request(rq);
1460+
1461+ /*
1462+ * If the device is marked as blocking (i.e. memory backed or zoned
1463+ * device), the submission path may be blocked waiting for resources
1464+ * and cause real timeouts. For these real timeouts, the submission
1465+ * path will complete the request using blk_mq_complete_request().
1466+ * Only fake timeouts need to execute blk_mq_complete_request() here.
1467+ */
1468+ cmd->error = BLK_STS_TIMEOUT;
1469+ if (cmd->fake_timeout)
1470+ blk_mq_complete_request(rq);
14561471 return BLK_EH_DONE;
14571472 }
14581473
@@ -1473,6 +1488,7 @@ static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx, · 14 unmodified lines
14731488 cmd->rq = bd->rq;
14741489 cmd->error = BLK_STS_OK;
14751490 cmd->nq = nq;
1491+ cmd->fake_timeout = should_timeout_request(bd->rq);
14761492
14771493 blk_mq_start_request(bd->rq);
14781494
@@ -1489,7 +1505,7 @@ static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx, · 10 unmodified lines
14891505 return BLK_STS_OK;
14901506 }
14911507 }
1492− if (should_timeout_request(bd->rq))
1508+ if (cmd->fake_timeout)
14931509 return BLK_STS_OK;
14941510
14951511 return null_handle_cmd(cmd, sector, nr_sectors, req_op(bd->rq));
drivers/block/null_blk/null_blk.h+1−0
@@ -22,6 +22,7 @@ struct nullb_cmd { · 21 unmodified lines
2222 blk_status_t error;
2323 struct nullb_queue *nq;
2424 struct hrtimer timer;
25+ bool fake_timeout;
2526 };
2627
2728 struct nullb_queue {
drivers/block/xen-blkback/blkback.c+1−1
@@ -891,7 +891,7 @@ next: · 890 unmodified lines
891891 out:
892892 for (i = last_map; i < num; i++) {
893893 /* Don't zap current batch's valid persistent grants. */
894− if(i >= last_map + segs_to_map)
894+ if(i >= map_until)
895895 pages[i]->persistent_gnt = NULL;
896896 pages[i]->handle = BLKBACK_INVALID_HANDLE;
897897 }
drivers/bluetooth/btrsi.c+0−1
@@ -194,5 +194,4 @@ module_init(rsi_91x_bt_module_init); · 193 unmodified lines
194194 module_exit(rsi_91x_bt_module_exit);
195195 MODULE_AUTHOR("Redpine Signals Inc");
196196 MODULE_DESCRIPTION("RSI BT driver");
197−MODULE_SUPPORTED_DEVICE("RSI-BT");
198197 MODULE_LICENSE("Dual BSD/GPL");
drivers/bus/omap_l3_noc.c+2−2
@@ -285,7 +285,7 @@ static int omap_l3_probe(struct platform_device *pdev) · 284 unmodified lines
285285 */
286286 l3->debug_irq = platform_get_irq(pdev, 0);
287287 ret = devm_request_irq(l3->dev, l3->debug_irq, l3_interrupt_handler,
288− 0x0, "l3-dbg-irq", l3);
288+ IRQF_NO_THREAD, "l3-dbg-irq", l3);
289289 if (ret) {
290290 dev_err(l3->dev, "request_irq failed for %d\n",
291291 l3->debug_irq);
@@ -294,7 +294,7 @@ static int omap_l3_probe(struct platform_device *pdev) · 2 unmodified lines
294294
295295 l3->app_irq = platform_get_irq(pdev, 1);
296296 ret = devm_request_irq(l3->dev, l3->app_irq, l3_interrupt_handler,
297− 0x0, "l3-app-irq", l3);
297+ IRQF_NO_THREAD, "l3-app-irq", l3);
298298 if (ret)
299299 dev_err(l3->dev, "request_irq failed for %d\n", l3->app_irq);
300300
drivers/bus/ti-sysc.c+3−1
@@ -3053,7 +3053,9 @@ static int sysc_remove(struct platform_device *pdev) · 3052 unmodified lines
30533053
30543054 pm_runtime_put_sync(&pdev->dev);
30553055 pm_runtime_disable(&pdev->dev);
3056− reset_control_assert(ddata->rsts);
3056+
3057+ if (!reset_control_status(ddata->rsts))
3058+ reset_control_assert(ddata->rsts);
30573059
30583060 unprepare:
30593061 sysc_unprepare(ddata);
drivers/char/applicom.c+0−3
@@ -81,9 +81,6 @@ MODULE_DESCRIPTION("Driver for Applicom Profibus card"); · 80 unmodified lines
8181 MODULE_LICENSE("GPL");
8282 MODULE_ALIAS_MISCDEV(AC_MINOR);
8383
84−MODULE_SUPPORTED_DEVICE("ac");
85−
86−
8784 static struct applicom_board {
8885 unsigned long PhysIO;
8986 void __iomem *RamIO;
drivers/char/toshiba.c+0−1
@@ -64,7 +64,6 @@ · 63 unmodified lines
6464 MODULE_LICENSE("GPL");
6565 MODULE_AUTHOR("Jonathan Buzzard <jonathan@buzzard.org.uk>");
6666 MODULE_DESCRIPTION("Toshiba laptop SMM driver");
67−MODULE_SUPPORTED_DEVICE("toshiba");
6867
6968 static DEFINE_MUTEX(tosh_mutex);
7069 static int tosh_fn;
drivers/clk/qcom/clk-rcg2.c+9−8
@@ -730,7 +730,8 @@ static int clk_gfx3d_determine_rate(struct clk_hw *hw, · 729 unmodified lines
730730 struct clk_rate_request parent_req = { };
731731 struct clk_rcg2_gfx3d *cgfx = to_clk_rcg2_gfx3d(hw);
732732 struct clk_hw *xo, *p0, *p1, *p2;
733− unsigned long request, p0_rate;
733+ unsigned long p0_rate;
734+ u8 mux_div = cgfx->div;
734735 int ret;
735736
736737 p0 = cgfx->hws[0];
@@ -750,14 +751,15 @@ static int clk_gfx3d_determine_rate(struct clk_hw *hw, · 13 unmodified lines
750751 return 0;
751752 }
752753
753− request = req->rate;
754− if (cgfx->div > 1)
755− parent_req.rate = request = request * cgfx->div;
754+ if (mux_div == 0)
755+ mux_div = 1;
756+
757+ parent_req.rate = req->rate * mux_div;
756758
757759 /* This has to be a fixed rate PLL */
758760 p0_rate = clk_hw_get_rate(p0);
759761
760− if (request == p0_rate) {
762+ if (parent_req.rate == p0_rate) {
761763 req->rate = req->best_parent_rate = p0_rate;
762764 req->best_parent_hw = p0;
763765 return 0;
@@ -765,7 +767,7 @@ static int clk_gfx3d_determine_rate(struct clk_hw *hw, · 1 unmodified line
765767
766768 if (req->best_parent_hw == p0) {
767769 /* Are we going back to a previously used rate? */
768− if (clk_hw_get_rate(p2) == request)
770+ if (clk_hw_get_rate(p2) == parent_req.rate)
769771 req->best_parent_hw = p2;
770772 else
771773 req->best_parent_hw = p1;
@@ -780,8 +782,7 @@ static int clk_gfx3d_determine_rate(struct clk_hw *hw, · 8 unmodified lines
780782 return ret;
781783
782784 req->rate = req->best_parent_rate = parent_req.rate;
783− if (cgfx->div > 1)
784− req->rate /= cgfx->div;
785+ req->rate /= mux_div;
785786
786787 return 0;
787788 }
drivers/clk/qcom/clk-rpmh.c+5−2
@@ -510,9 +510,12 @@ static const struct clk_rpmh_desc clk_rpmh_sm8350 = { · 509 unmodified lines
510510 .num_clks = ARRAY_SIZE(sm8350_rpmh_clocks),
511511 };
512512
513+/* Resource name must match resource id present in cmd-db */
514+DEFINE_CLK_RPMH_ARC(sc7280, bi_tcxo, bi_tcxo_ao, "xo.lvl", 0x3, 4);
515+
513516 static struct clk_hw *sc7280_rpmh_clocks[] = {
514− [RPMH_CXO_CLK] = &sdm845_bi_tcxo.hw,
515− [RPMH_CXO_CLK_A] = &sdm845_bi_tcxo_ao.hw,
517+ [RPMH_CXO_CLK] = &sc7280_bi_tcxo.hw,
518+ [RPMH_CXO_CLK_A] = &sc7280_bi_tcxo_ao.hw,
516519 [RPMH_LN_BB_CLK2] = &sdm845_ln_bb_clk2.hw,
517520 [RPMH_LN_BB_CLK2_A] = &sdm845_ln_bb_clk2_ao.hw,
518521 [RPMH_RF_CLK1] = &sdm845_rf_clk1.hw,
drivers/clk/qcom/gcc-sc7180.c+2−2
@@ -620,7 +620,7 @@ static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { · 619 unmodified lines
620620 .name = "gcc_sdcc1_apps_clk_src",
621621 .parent_data = gcc_parent_data_1,
622622 .num_parents = 5,
623− .ops = &clk_rcg2_ops,
623+ .ops = &clk_rcg2_floor_ops,
624624 },
625625 };
626626
@@ -642,7 +642,7 @@ static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { · 15 unmodified lines
642642 .name = "gcc_sdcc1_ice_core_clk_src",
643643 .parent_data = gcc_parent_data_0,
644644 .num_parents = 4,
645− .ops = &clk_rcg2_floor_ops,
645+ .ops = &clk_rcg2_ops,
646646 },
647647 };
648648
drivers/counter/stm32-timer-cnt.c+33−22
@@ -31,7 +31,7 @@ struct stm32_timer_cnt { · 30 unmodified lines
3131 struct counter_device counter;
3232 struct regmap *regmap;
3333 struct clk *clk;
34− u32 ceiling;
34+ u32 max_arr;
3535 bool enabled;
3636 struct stm32_timer_regs bak;
3737 };
@@ -44,13 +44,14 @@ struct stm32_timer_cnt { · 6 unmodified lines
4444 * @STM32_COUNT_ENCODER_MODE_3: counts on both TI1FP1 and TI2FP2 edges
4545 */
4646 enum stm32_count_function {
47− STM32_COUNT_SLAVE_MODE_DISABLED = -1,
47+ STM32_COUNT_SLAVE_MODE_DISABLED,
4848 STM32_COUNT_ENCODER_MODE_1,
4949 STM32_COUNT_ENCODER_MODE_2,
5050 STM32_COUNT_ENCODER_MODE_3,
5151 };
5252
5353 static enum counter_count_function stm32_count_functions[] = {
54+ [STM32_COUNT_SLAVE_MODE_DISABLED] = COUNTER_COUNT_FUNCTION_INCREASE,
5455 [STM32_COUNT_ENCODER_MODE_1] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_A,
5556 [STM32_COUNT_ENCODER_MODE_2] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_B,
5657 [STM32_COUNT_ENCODER_MODE_3] = COUNTER_COUNT_FUNCTION_QUADRATURE_X4,
@@ -73,8 +74,10 @@ static int stm32_count_write(struct counter_device *counter, · 16 unmodified lines
7374 const unsigned long val)
7475 {
7576 struct stm32_timer_cnt *const priv = counter->priv;
77+ u32 ceiling;
7678
77− if (val > priv->ceiling)
79+ regmap_read(priv->regmap, TIM_ARR, &ceiling);
80+ if (val > ceiling)
7881 return -EINVAL;
7982
8083 return regmap_write(priv->regmap, TIM_CNT, val);
@@ -90,6 +93,9 @@ static int stm32_count_function_get(struct counter_device *counter, · 9 unmodified lines
9093 regmap_read(priv->regmap, TIM_SMCR, &smcr);
9194
9295 switch (smcr & TIM_SMCR_SMS) {
96+ case 0:
97+ *function = STM32_COUNT_SLAVE_MODE_DISABLED;
98+ return 0;
9399 case 1:
94100 *function = STM32_COUNT_ENCODER_MODE_1;
95101 return 0;
@@ -99,9 +105,9 @@ static int stm32_count_function_get(struct counter_device *counter, · 3 unmodified lines
99105 case 3:
100106 *function = STM32_COUNT_ENCODER_MODE_3;
101107 return 0;
108+ default:
109+ return -EINVAL;
102110 }
103−
104− return -EINVAL;
105111 }
106112
107113 static int stm32_count_function_set(struct counter_device *counter,
@@ -112,6 +118,9 @@ static int stm32_count_function_set(struct counter_device *counter, · 4 unmodified lines
112118 u32 cr1, sms;
113119
114120 switch (function) {
121+ case STM32_COUNT_SLAVE_MODE_DISABLED:
122+ sms = 0;
123+ break;
115124 case STM32_COUNT_ENCODER_MODE_1:
116125 sms = 1;
117126 break;
@@ -122,8 +131,7 @@ static int stm32_count_function_set(struct counter_device *counter, · 4 unmodified lines
122131 sms = 3;
123132 break;
124133 default:
125− sms = 0;
126− break;
134+ return -EINVAL;
127135 }
128136
129137 /* Store enable status */
@@ -131,10 +139,6 @@ static int stm32_count_function_set(struct counter_device *counter, · 1 unmodified line
131139
132140 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
133141
134− /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
135− regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
136− regmap_write(priv->regmap, TIM_ARR, priv->ceiling);
137−
138142 regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
139143
140144 /* Make sure that registers are updated */
@@ -185,11 +189,13 @@ static ssize_t stm32_count_ceiling_write(struct counter_device *counter, · 44 unmodified lines
185189 if (ret)
186190 return ret;
187191
192+ if (ceiling > priv->max_arr)
193+ return -ERANGE;
194+
188195 /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
189196 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
190197 regmap_write(priv->regmap, TIM_ARR, ceiling);
191198
192− priv->ceiling = ceiling;
193199 return len;
194200 }
195201
@@ -274,31 +280,36 @@ static int stm32_action_get(struct counter_device *counter, · 78 unmodified lines
274280 size_t function;
275281 int err;
276282
277− /* Default action mode (e.g. STM32_COUNT_SLAVE_MODE_DISABLED) */
278− *action = STM32_SYNAPSE_ACTION_NONE;
279−
280283 err = stm32_count_function_get(counter, count, &function);
281284 if (err)
282− return 0;
285+ return err;
283286
284287 switch (function) {
288+ case STM32_COUNT_SLAVE_MODE_DISABLED:
289+ /* counts on internal clock when CEN=1 */
290+ *action = STM32_SYNAPSE_ACTION_NONE;
291+ return 0;
285292 case STM32_COUNT_ENCODER_MODE_1:
286293 /* counts up/down on TI1FP1 edge depending on TI2FP2 level */
287294 if (synapse->signal->id == count->synapses[0].signal->id)
288295 *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
289− break;
296+ else
297+ *action = STM32_SYNAPSE_ACTION_NONE;
298+ return 0;
290299 case STM32_COUNT_ENCODER_MODE_2:
291300 /* counts up/down on TI2FP2 edge depending on TI1FP1 level */
292301 if (synapse->signal->id == count->synapses[1].signal->id)
293302 *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
294− break;
303+ else
304+ *action = STM32_SYNAPSE_ACTION_NONE;
305+ return 0;
295306 case STM32_COUNT_ENCODER_MODE_3:
296307 /* counts up/down on both TI1FP1 and TI2FP2 edges */
297308 *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
298− break;
309+ return 0;
310+ default:
311+ return -EINVAL;
299312 }
300−
301− return 0;
302313 }
303314
304315 static const struct counter_ops stm32_timer_cnt_ops = {
@@ -359,7 +370,7 @@ static int stm32_timer_cnt_probe(struct platform_device *pdev) · 54 unmodified lines
359370
360371 priv->regmap = ddata->regmap;
361372 priv->clk = ddata->clk;
362− priv->ceiling = ddata->max_arr;
373+ priv->max_arr = ddata->max_arr;
363374
364375 priv->counter.name = dev_name(dev);
365376 priv->counter.parent = dev;
drivers/cpufreq/freq_table.c+2−2
@@ -267,7 +267,7 @@ struct freq_attr cpufreq_freq_attr_##_name##_freqs = \ · 266 unmodified lines
267267 __ATTR_RO(_name##_frequencies)
268268
269269 /*
270− * show_scaling_available_frequencies - show available normal frequencies for
270+ * scaling_available_frequencies_show - show available normal frequencies for
271271 * the specified CPU
272272 */
273273 static ssize_t scaling_available_frequencies_show(struct cpufreq_policy *policy,
@@ -279,7 +279,7 @@ cpufreq_attr_available_freq(scaling_available); · 5 unmodified lines
279279 EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_available_freqs);
280280
281281 /*
282− * show_available_boost_freqs - show available boost frequencies for
282+ * scaling_boost_frequencies_show - show available boost frequencies for
283283 * the specified CPU
284284 */
285285 static ssize_t scaling_boost_frequencies_show(struct cpufreq_policy *policy,
drivers/extcon/extcon.c+1−0
@@ -1241,6 +1241,7 @@ int extcon_dev_register(struct extcon_dev *edev) · 1240 unmodified lines
12411241 sizeof(*edev->nh), GFP_KERNEL);
12421242 if (!edev->nh) {
12431243 ret = -ENOMEM;
1244+ device_unregister(&edev->dev);
12441245 goto err_dev;
12451246 }
12461247
drivers/firewire/nosy.c+7−2
@@ -346,6 +346,7 @@ nosy_ioctl(struct file *file, unsigned int cmd, unsigned long arg) · 345 unmodified lines
346346 struct client *client = file->private_data;
347347 spinlock_t *client_list_lock = &client->lynx->client_list_lock;
348348 struct nosy_stats stats;
349+ int ret;
349350
350351 switch (cmd) {
351352 case NOSY_IOC_GET_STATS:
@@ -360,11 +361,15 @@ nosy_ioctl(struct file *file, unsigned int cmd, unsigned long arg) · 8 unmodified lines
360361 return 0;
361362
362363 case NOSY_IOC_START:
364+ ret = -EBUSY;
363365 spin_lock_irq(client_list_lock);
364− list_add_tail(&client->link, &client->lynx->client_list);
366+ if (list_empty(&client->link)) {
367+ list_add_tail(&client->link, &client->lynx->client_list);
368+ ret = 0;
369+ }
365370 spin_unlock_irq(client_list_lock);
366371
367− return 0;
372+ return ret;
368373
369374 case NOSY_IOC_STOP:
370375 spin_lock_irq(client_list_lock);
drivers/firmware/efi/efi.c+2−1
@@ -927,7 +927,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) · 926 unmodified lines
927927 }
928928
929929 /* first try to find a slot in an existing linked list entry */
930− for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) {
930+ for (prsv = efi_memreserve_root->next; prsv; ) {
931931 rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
932932 index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
933933 if (index < rsv->size) {
@@ -937,6 +937,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) · 3 unmodified lines
937937 memunmap(rsv);
938938 return efi_mem_reserve_iomem(addr, size);
939939 }
940+ prsv = rsv->next;
940941 memunmap(rsv);
941942 }
942943
drivers/firmware/efi/vars.c+4−0
@@ -484,6 +484,10 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), · 483 unmodified lines
484484 }
485485 }
486486
487+ break;
488+ case EFI_UNSUPPORTED:
489+ err = -EOPNOTSUPP;
490+ status = EFI_NOT_FOUND;
487491 break;
488492 case EFI_NOT_FOUND:
489493 break;
drivers/gpio/gpiolib.c+9−1
@@ -571,6 +571,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data, · 570 unmodified lines
571571 struct lock_class_key *lock_key,
572572 struct lock_class_key *request_key)
573573 {
574+ struct fwnode_handle *fwnode = gc->parent ? dev_fwnode(gc->parent) : NULL;
574575 unsigned long flags;
575576 int ret = 0;
576577 unsigned i;
@@ -594,6 +595,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data, · 17 unmodified lines
594595
595596 of_gpio_dev_init(gc, gdev);
596597
598+ /*
599+ * Assign fwnode depending on the result of the previous calls,
600+ * if none of them succeed, assign it to the parent's one.
601+ */
602+ gdev->dev.fwnode = dev_fwnode(&gdev->dev) ?: fwnode;
603+
597604 gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
598605 if (gdev->id < 0) {
599606 ret = gdev->id;
@@ -4256,7 +4263,8 @@ static int __init gpiolib_dev_init(void) · 3656 unmodified lines
42564263 return ret;
42574264 }
42584265
4259− if (driver_register(&gpio_stub_drv) < 0) {
4266+ ret = driver_register(&gpio_stub_drv);
4267+ if (ret < 0) {
42604268 pr_err("gpiolib: could not register GPIO stub driver\n");
42614269 bus_unregister(&gpio_bus_type);
42624270 return ret;
drivers/gpu/drm/amd/amdgpu/amdgpu.h+3−7
@@ -1007,13 +1007,9 @@ struct amdgpu_device { · 1006 unmodified lines
10071007
10081008 /* s3/s4 mask */
10091009 bool in_suspend;
1010− bool in_hibernate;
1011−
1012− /*
1013− * The combination flag in_poweroff_reboot_com used to identify the poweroff
1014− * and reboot opt in the s0i3 system-wide suspend.
1015− */
1016− bool in_poweroff_reboot_com;
1010+ bool in_s3;
1011+ bool in_s4;
1012+ bool in_s0ix;
10171013
10181014 atomic_t in_gpu_reset;
10191015 enum pp_mp1_state mp1_state;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c+34−98
@@ -2371,6 +2371,10 @@ static int amdgpu_device_set_cg_state(struct amdgpu_device *adev, · 2370 unmodified lines
23712371 i = state == AMD_CG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
23722372 if (!adev->ip_blocks[i].status.late_initialized)
23732373 continue;
2374+ /* skip CG for GFX on S0ix */
2375+ if (adev->in_s0ix &&
2376+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX)
2377+ continue;
23742378 /* skip CG for VCE/UVD, it's handled specially */
23752379 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
23762380 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
@@ -2402,6 +2406,10 @@ static int amdgpu_device_set_pg_state(struct amdgpu_device *adev, enum amd_power · 25 unmodified lines
24022406 i = state == AMD_PG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
24032407 if (!adev->ip_blocks[i].status.late_initialized)
24042408 continue;
2409+ /* skip PG for GFX on S0ix */
2410+ if (adev->in_s0ix &&
2411+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX)
2412+ continue;
24052413 /* skip CG for VCE/UVD, it's handled specially */
24062414 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
24072415 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
@@ -2678,11 +2686,8 @@ static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev) · 270 unmodified lines
26782686 {
26792687 int i, r;
26802688
2681− if (adev->in_poweroff_reboot_com ||
2682− !amdgpu_acpi_is_s0ix_supported(adev) || amdgpu_in_reset(adev)) {
2683− amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2684− amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
2685− }
2689+ amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2690+ amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
26862691
26872692 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
26882693 if (!adev->ip_blocks[i].status.valid)
@@ -2722,6 +2727,9 @@ static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev) · 33 unmodified lines
27222727 {
27232728 int i, r;
27242729
2730+ if (adev->in_s0ix)
2731+ amdgpu_gfx_state_change_set(adev, sGpuChangeState_D3Entry);
2732+
27252733 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
27262734 if (!adev->ip_blocks[i].status.valid)
27272735 continue;
@@ -2734,6 +2742,17 @@ static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev) · 6 unmodified lines
27342742 adev->ip_blocks[i].status.hw = false;
27352743 continue;
27362744 }
2745+
2746+ /* skip suspend of gfx and psp for S0ix
2747+ * gfx is in gfxoff state, so on resume it will exit gfxoff just
2748+ * like at runtime. PSP is also part of the always on hardware
2749+ * so no need to suspend it.
2750+ */
2751+ if (adev->in_s0ix &&
2752+ (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP ||
2753+ adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX))
2754+ continue;
2755+
27372756 /* XXX handle errors */
27382757 r = adev->ip_blocks[i].version->funcs->suspend(adev);
27392758 /* XXX handle errors */
@@ -3673,14 +3692,9 @@ void amdgpu_device_fini(struct amdgpu_device *adev) · 933 unmodified lines
36733692 */
36743693 int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
36753694 {
3676− struct amdgpu_device *adev;
3677− struct drm_crtc *crtc;
3678− struct drm_connector *connector;
3679− struct drm_connector_list_iter iter;
3695+ struct amdgpu_device *adev = drm_to_adev(dev);
36803696 int r;
36813697
3682− adev = drm_to_adev(dev);
3683−
36843698 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
36853699 return 0;
36863700
@@ -3692,61 +3706,19 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon) · 5 unmodified lines
36923706
36933707 cancel_delayed_work_sync(&adev->delayed_init_work);
36943708
3695− if (!amdgpu_device_has_dc_support(adev)) {
3696− /* turn off display hw */
3697− drm_modeset_lock_all(dev);
3698− drm_connector_list_iter_begin(dev, &iter);
3699− drm_for_each_connector_iter(connector, &iter)
3700− drm_helper_connector_dpms(connector,
3701− DRM_MODE_DPMS_OFF);
3702− drm_connector_list_iter_end(&iter);
3703− drm_modeset_unlock_all(dev);
3704− /* unpin the front buffers and cursors */
3705− list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
3706− struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
3707− struct drm_framebuffer *fb = crtc->primary->fb;
3708− struct amdgpu_bo *robj;
3709−
3710− if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
3711− struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
3712− r = amdgpu_bo_reserve(aobj, true);
3713− if (r == 0) {
3714− amdgpu_bo_unpin(aobj);
3715− amdgpu_bo_unreserve(aobj);
3716− }
3717− }
3718−
3719− if (fb == NULL || fb->obj[0] == NULL) {
3720− continue;
3721− }
3722− robj = gem_to_amdgpu_bo(fb->obj[0]);
3723− /* don't unpin kernel fb objects */
3724− if (!amdgpu_fbdev_robj_is_fb(adev, robj)) {
3725− r = amdgpu_bo_reserve(robj, true);
3726− if (r == 0) {
3727− amdgpu_bo_unpin(robj);
3728− amdgpu_bo_unreserve(robj);
3729− }
3730− }
3731− }
3732− }
3733−
37343709 amdgpu_ras_suspend(adev);
37353710
37363711 r = amdgpu_device_ip_suspend_phase1(adev);
37373712
3738− amdgpu_amdkfd_suspend(adev, adev->in_runpm);
3713+ if (!adev->in_s0ix)
3714+ amdgpu_amdkfd_suspend(adev, adev->in_runpm);
37393715
37403716 /* evict vram memory */
37413717 amdgpu_bo_evict_vram(adev);
37423718
37433719 amdgpu_fence_driver_suspend(adev);
37443720
3745− if (adev->in_poweroff_reboot_com ||
3746− !amdgpu_acpi_is_s0ix_supported(adev) || amdgpu_in_reset(adev))
3747− r = amdgpu_device_ip_suspend_phase2(adev);
3748− else
3749− amdgpu_gfx_state_change_set(adev, sGpuChangeState_D3Entry);
3721+ r = amdgpu_device_ip_suspend_phase2(adev);
37503722 /* evict remaining vram memory
37513723 * This second call to evict vram is to evict the gart page table
37523724 * using the CPU.
@@ -3768,16 +3740,13 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon) · 15 unmodified lines
37683740 */
37693741 int amdgpu_device_resume(struct drm_device *dev, bool fbcon)
37703742 {
3771− struct drm_connector *connector;
3772− struct drm_connector_list_iter iter;
37733743 struct amdgpu_device *adev = drm_to_adev(dev);
3774− struct drm_crtc *crtc;
37753744 int r = 0;
37763745
37773746 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
37783747 return 0;
37793748
3780− if (amdgpu_acpi_is_s0ix_supported(adev))
3749+ if (adev->in_s0ix)
37813750 amdgpu_gfx_state_change_set(adev, sGpuChangeState_D0Entry);
37823751
37833752 /* post card */
@@ -3802,50 +3771,17 @@ int amdgpu_device_resume(struct drm_device *dev, bool fbcon) · 18 unmodified lines
38023771 queue_delayed_work(system_wq, &adev->delayed_init_work,
38033772 msecs_to_jiffies(AMDGPU_RESUME_MS));
38043773
3805− if (!amdgpu_device_has_dc_support(adev)) {
3806− /* pin cursors */
3807− list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
3808− struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
3809−
3810− if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
3811− struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
3812− r = amdgpu_bo_reserve(aobj, true);
3813− if (r == 0) {
3814− r = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
3815− if (r != 0)
3816− dev_err(adev->dev, "Failed to pin cursor BO (%d)\n", r);
3817− amdgpu_crtc->cursor_addr = amdgpu_bo_gpu_offset(aobj);
3818− amdgpu_bo_unreserve(aobj);
3819− }
3820− }
3821− }
3774+ if (!adev->in_s0ix) {
3775+ r = amdgpu_amdkfd_resume(adev, adev->in_runpm);
3776+ if (r)
3777+ return r;
38223778 }
3823− r = amdgpu_amdkfd_resume(adev, adev->in_runpm);
3824− if (r)
3825− return r;
38263779
38273780 /* Make sure IB tests flushed */
38283781 flush_delayed_work(&adev->delayed_init_work);
38293782
3830− /* blat the mode back in */
3831− if (fbcon) {
3832− if (!amdgpu_device_has_dc_support(adev)) {
3833− /* pre DCE11 */
3834− drm_helper_resume_force_mode(dev);
3835−
3836− /* turn on display hw */
3837− drm_modeset_lock_all(dev);
3838−
3839− drm_connector_list_iter_begin(dev, &iter);
3840− drm_for_each_connector_iter(connector, &iter)
3841− drm_helper_connector_dpms(connector,
3842− DRM_MODE_DPMS_ON);
3843− drm_connector_list_iter_end(&iter);
3844−
3845− drm_modeset_unlock_all(dev);
3846− }
3783+ if (fbcon)
38473784 amdgpu_fbdev_set_suspend(adev, 0);
3848− }
38493785
38503786 drm_kms_helper_poll_enable(dev);
38513787
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c+89−0
@@ -1310,3 +1310,92 @@ bool amdgpu_crtc_get_scanout_position(struct drm_crtc *crtc, · 1309 unmodified lines
13101310 return amdgpu_display_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos,
13111311 stime, etime, mode);
13121312 }
1313+
1314+int amdgpu_display_suspend_helper(struct amdgpu_device *adev)
1315+{
1316+ struct drm_device *dev = adev_to_drm(adev);
1317+ struct drm_crtc *crtc;
1318+ struct drm_connector *connector;
1319+ struct drm_connector_list_iter iter;
1320+ int r;
1321+
1322+ /* turn off display hw */
1323+ drm_modeset_lock_all(dev);
1324+ drm_connector_list_iter_begin(dev, &iter);
1325+ drm_for_each_connector_iter(connector, &iter)
1326+ drm_helper_connector_dpms(connector,
1327+ DRM_MODE_DPMS_OFF);
1328+ drm_connector_list_iter_end(&iter);
1329+ drm_modeset_unlock_all(dev);
1330+ /* unpin the front buffers and cursors */
1331+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
1332+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
1333+ struct drm_framebuffer *fb = crtc->primary->fb;
1334+ struct amdgpu_bo *robj;
1335+
1336+ if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
1337+ struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
1338+ r = amdgpu_bo_reserve(aobj, true);
1339+ if (r == 0) {
1340+ amdgpu_bo_unpin(aobj);
1341+ amdgpu_bo_unreserve(aobj);
1342+ }
1343+ }
1344+
1345+ if (fb == NULL || fb->obj[0] == NULL) {
1346+ continue;
1347+ }
1348+ robj = gem_to_amdgpu_bo(fb->obj[0]);
1349+ /* don't unpin kernel fb objects */
1350+ if (!amdgpu_fbdev_robj_is_fb(adev, robj)) {
1351+ r = amdgpu_bo_reserve(robj, true);
1352+ if (r == 0) {
1353+ amdgpu_bo_unpin(robj);
1354+ amdgpu_bo_unreserve(robj);
1355+ }
1356+ }
1357+ }
1358+ return r;
1359+}
1360+
1361+int amdgpu_display_resume_helper(struct amdgpu_device *adev)
1362+{
1363+ struct drm_device *dev = adev_to_drm(adev);
1364+ struct drm_connector *connector;
1365+ struct drm_connector_list_iter iter;
1366+ struct drm_crtc *crtc;
1367+ int r;
1368+
1369+ /* pin cursors */
1370+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
1371+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
1372+
1373+ if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
1374+ struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
1375+ r = amdgpu_bo_reserve(aobj, true);
1376+ if (r == 0) {
1377+ r = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
1378+ if (r != 0)
1379+ dev_err(adev->dev, "Failed to pin cursor BO (%d)\n", r);
1380+ amdgpu_crtc->cursor_addr = amdgpu_bo_gpu_offset(aobj);
1381+ amdgpu_bo_unreserve(aobj);
1382+ }
1383+ }
1384+ }
1385+
1386+ drm_helper_resume_force_mode(dev);
1387+
1388+ /* turn on display hw */
1389+ drm_modeset_lock_all(dev);
1390+
1391+ drm_connector_list_iter_begin(dev, &iter);
1392+ drm_for_each_connector_iter(connector, &iter)
1393+ drm_helper_connector_dpms(connector,
1394+ DRM_MODE_DPMS_ON);
1395+ drm_connector_list_iter_end(&iter);
1396+
1397+ drm_modeset_unlock_all(dev);
1398+
1399+ return 0;
1400+}
1401+
drivers/gpu/drm/amd/amdgpu/amdgpu_display.h+3−0
@@ -47,4 +47,7 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev, · 46 unmodified lines
4747 const struct drm_format_info *
4848 amdgpu_lookup_format_info(u32 format, uint64_t modifier);
4949
50+int amdgpu_display_suspend_helper(struct amdgpu_device *adev);
51+int amdgpu_display_resume_helper(struct amdgpu_device *adev);
52+
5053 #endif
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c+19−12
@@ -1107,6 +1107,7 @@ static const struct pci_device_id pciidlist[] = { · 1106 unmodified lines
11071107 {0x1002, 0x73A3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID},
11081108 {0x1002, 0x73AB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID},
11091109 {0x1002, 0x73AE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID},
1110+ {0x1002, 0x73AF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID},
11101111 {0x1002, 0x73BF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID},
11111112
11121113 /* Van Gogh */
@@ -1274,24 +1275,35 @@ amdgpu_pci_shutdown(struct pci_dev *pdev) · 161 unmodified lines
12741275 */
12751276 if (!amdgpu_passthrough(adev))
12761277 adev->mp1_state = PP_MP1_STATE_UNLOAD;
1277− adev->in_poweroff_reboot_com = true;
12781278 amdgpu_device_ip_suspend(adev);
1279− adev->in_poweroff_reboot_com = false;
12801279 adev->mp1_state = PP_MP1_STATE_NONE;
12811280 }
12821281
12831282 static int amdgpu_pmops_suspend(struct device *dev)
12841283 {
12851284 struct drm_device *drm_dev = dev_get_drvdata(dev);
1285+ struct amdgpu_device *adev = drm_to_adev(drm_dev);
1286+ int r;
12861287
1287− return amdgpu_device_suspend(drm_dev, true);
1288+ if (amdgpu_acpi_is_s0ix_supported(adev))
1289+ adev->in_s0ix = true;
1290+ adev->in_s3 = true;
1291+ r = amdgpu_device_suspend(drm_dev, true);
1292+ adev->in_s3 = false;
1293+
1294+ return r;
12881295 }
12891296
12901297 static int amdgpu_pmops_resume(struct device *dev)
12911298 {
12921299 struct drm_device *drm_dev = dev_get_drvdata(dev);
1300+ struct amdgpu_device *adev = drm_to_adev(drm_dev);
1301+ int r;
12931302
1294− return amdgpu_device_resume(drm_dev, true);
1303+ r = amdgpu_device_resume(drm_dev, true);
1304+ if (amdgpu_acpi_is_s0ix_supported(adev))
1305+ adev->in_s0ix = false;
1306+ return r;
12951307 }
12961308
12971309 static int amdgpu_pmops_freeze(struct device *dev)
@@ -1300,9 +1312,9 @@ static int amdgpu_pmops_freeze(struct device *dev) · 2 unmodified lines
13001312 struct amdgpu_device *adev = drm_to_adev(drm_dev);
13011313 int r;
13021314
1303− adev->in_hibernate = true;
1315+ adev->in_s4 = true;
13041316 r = amdgpu_device_suspend(drm_dev, true);
1305− adev->in_hibernate = false;
1317+ adev->in_s4 = false;
13061318 if (r)
13071319 return r;
13081320 return amdgpu_asic_reset(adev);
@@ -1318,13 +1330,8 @@ static int amdgpu_pmops_thaw(struct device *dev) · 9 unmodified lines
13181330 static int amdgpu_pmops_poweroff(struct device *dev)
13191331 {
13201332 struct drm_device *drm_dev = dev_get_drvdata(dev);
1321− struct amdgpu_device *adev = drm_to_adev(drm_dev);
1322− int r;
13231333
1324− adev->in_poweroff_reboot_com = true;
1325− r = amdgpu_device_suspend(drm_dev, true);
1326− adev->in_poweroff_reboot_com = false;
1327− return r;
1334+ return amdgpu_device_suspend(drm_dev, true);
13281335 }
13291336
13301337 static int amdgpu_pmops_restore(struct device *dev)
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c+2−2
@@ -778,9 +778,9 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) · 777 unmodified lines
778778 dev_info->high_va_offset = AMDGPU_GMC_HOLE_END;
779779 dev_info->high_va_max = AMDGPU_GMC_HOLE_END | vm_size;
780780 }
781− dev_info->virtual_address_alignment = max((int)PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
781+ dev_info->virtual_address_alignment = max_t(u32, PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
782782 dev_info->pte_fragment_size = (1 << adev->vm_manager.fragment_size) * AMDGPU_GPU_PAGE_SIZE;
783− dev_info->gart_page_size = AMDGPU_GPU_PAGE_SIZE;
783+ dev_info->gart_page_size = max_t(u32, PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
784784 dev_info->cu_active_number = adev->gfx.cu_info.number;
785785 dev_info->cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
786786 dev_info->ce_ram_size = adev->gfx.ce_ram_size;
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c+2−5
@@ -1028,13 +1028,10 @@ int amdgpu_bo_evict_vram(struct amdgpu_device *adev) · 1027 unmodified lines
10281028 {
10291029 struct ttm_resource_manager *man;
10301030
1031− /* late 2.6.33 fix IGP hibernate - we need pm ops to do this correct */
1032−#ifndef CONFIG_HIBERNATION
1033− if (adev->flags & AMD_IS_APU) {
1034− /* Useless to evict on IGP chips */
1031+ if (adev->in_s3 && (adev->flags & AMD_IS_APU)) {
1032+ /* No need to evict vram on APUs for suspend to ram */
10351033 return 0;
10361034 }
1037−#endif
10381035
10391036 man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
10401037 return ttm_resource_manager_evict_all(&adev->mman.bdev, man);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c+5−5
@@ -2197,8 +2197,8 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, · 2196 unmodified lines
21972197 uint64_t eaddr;
21982198
21992199 /* validate the parameters */
2200− if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK ||
2201− size == 0 || size & AMDGPU_GPU_PAGE_MASK)
2200+ if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK ||
2201+ size == 0 || size & ~PAGE_MASK)
22022202 return -EINVAL;
22032203
22042204 /* make sure object fit at this offset */
@@ -2263,8 +2263,8 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev, · 58 unmodified lines
22632263 int r;
22642264
22652265 /* validate the parameters */
2266− if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK ||
2267− size == 0 || size & AMDGPU_GPU_PAGE_MASK)
2266+ if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK ||
2267+ size == 0 || size & ~PAGE_MASK)
22682268 return -EINVAL;
22692269
22702270 /* make sure object fit at this offset */
@@ -2409,7 +2409,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, · 138 unmodified lines
24092409 after->start = eaddr + 1;
24102410 after->last = tmp->last;
24112411 after->offset = tmp->offset;
2412− after->offset += after->start - tmp->start;
2412+ after->offset += (after->start - tmp->start) << PAGE_SHIFT;
24132413 after->flags = tmp->flags;
24142414 after->bo_va = tmp->bo_va;
24152415 list_add(&after->list, &tmp->bo_va->invalids);
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c+8−1
@@ -2897,6 +2897,11 @@ static int dce_v10_0_hw_fini(void *handle) · 2896 unmodified lines
28972897 static int dce_v10_0_suspend(void *handle)
28982898 {
28992899 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2900+ int r;
2901+
2902+ r = amdgpu_display_suspend_helper(adev);
2903+ if (r)
2904+ return r;
29002905
29012906 adev->mode_info.bl_level =
29022907 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
@@ -2921,8 +2926,10 @@ static int dce_v10_0_resume(void *handle) · 18 unmodified lines
29212926 amdgpu_display_backlight_set_level(adev, adev->mode_info.bl_encoder,
29222927 bl_level);
29232928 }
2929+ if (ret)
2930+ return ret;
29242931
2925− return ret;
2932+ return amdgpu_display_resume_helper(adev);
29262933 }
29272934
29282935 static bool dce_v10_0_is_idle(void *handle)
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c+8−1
@@ -3027,6 +3027,11 @@ static int dce_v11_0_hw_fini(void *handle) · 3026 unmodified lines
30273027 static int dce_v11_0_suspend(void *handle)
30283028 {
30293029 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
3030+ int r;
3031+
3032+ r = amdgpu_display_suspend_helper(adev);
3033+ if (r)
3034+ return r;
30303035
30313036 adev->mode_info.bl_level =
30323037 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
@@ -3051,8 +3056,10 @@ static int dce_v11_0_resume(void *handle) · 18 unmodified lines
30513056 amdgpu_display_backlight_set_level(adev, adev->mode_info.bl_encoder,
30523057 bl_level);
30533058 }
3059+ if (ret)
3060+ return ret;
30543061
3055− return ret;
3062+ return amdgpu_display_resume_helper(adev);
30563063 }
30573064
30583065 static bool dce_v11_0_is_idle(void *handle)
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c+7−1
@@ -2770,7 +2770,11 @@ static int dce_v6_0_hw_fini(void *handle) · 2769 unmodified lines
27702770 static int dce_v6_0_suspend(void *handle)
27712771 {
27722772 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2773+ int r;
27732774
2775+ r = amdgpu_display_suspend_helper(adev);
2776+ if (r)
2777+ return r;
27742778 adev->mode_info.bl_level =
27752779 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
27762780
@@ -2794,8 +2798,10 @@ static int dce_v6_0_resume(void *handle) · 17 unmodified lines
27942798 amdgpu_display_backlight_set_level(adev, adev->mode_info.bl_encoder,
27952799 bl_level);
27962800 }
2801+ if (ret)
2802+ return ret;
27972803
2798− return ret;
2804+ return amdgpu_display_resume_helper(adev);
27992805 }
28002806
28012807 static bool dce_v6_0_is_idle(void *handle)
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c+8−1
@@ -2796,6 +2796,11 @@ static int dce_v8_0_hw_fini(void *handle) · 2795 unmodified lines
27962796 static int dce_v8_0_suspend(void *handle)
27972797 {
27982798 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2799+ int r;
2800+
2801+ r = amdgpu_display_suspend_helper(adev);
2802+ if (r)
2803+ return r;
27992804
28002805 adev->mode_info.bl_level =
28012806 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
@@ -2820,8 +2825,10 @@ static int dce_v8_0_resume(void *handle) · 18 unmodified lines
28202825 amdgpu_display_backlight_set_level(adev, adev->mode_info.bl_encoder,
28212826 bl_level);
28222827 }
2828+ if (ret)
2829+ return ret;
28232830
2824− return ret;
2831+ return amdgpu_display_resume_helper(adev);
28252832 }
28262833
28272834 static bool dce_v8_0_is_idle(void *handle)
drivers/gpu/drm/amd/amdgpu/dce_virtual.c+14−1
@@ -39,6 +39,7 @@ · 38 unmodified lines
3939 #include "dce_v11_0.h"
4040 #include "dce_virtual.h"
4141 #include "ivsrcid/ivsrcid_vislands30.h"
42+#include "amdgpu_display.h"
4243
4344 #define DCE_VIRTUAL_VBLANK_PERIOD 16666666
4445
@@ -491,12 +492,24 @@ static int dce_virtual_hw_fini(void *handle) · 446 unmodified lines
491492
492493 static int dce_virtual_suspend(void *handle)
493494 {
495+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
496+ int r;
497+
498+ r = amdgpu_display_suspend_helper(adev);
499+ if (r)
500+ return r;
494501 return dce_virtual_hw_fini(handle);
495502 }
496503
497504 static int dce_virtual_resume(void *handle)
498505 {
499− return dce_virtual_hw_init(handle);
506+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
507+ int r;
508+
509+ r = dce_virtual_hw_init(handle);
510+ if (r)
511+ return r;
512+ return amdgpu_display_resume_helper(adev);
500513 }
501514
502515 static bool dce_virtual_is_idle(void *handle)
drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c+1−1
@@ -155,7 +155,7 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev, · 154 unmodified lines
155155
156156 /* Wait till CP writes sync code: */
157157 status = amdkfd_fence_wait_timeout(
158− (unsigned int *) rm_state,
158+ rm_state,
159159 QUEUESTATE__ACTIVE, 1500);
160160
161161 kfd_gtt_sa_free(dbgdev->dev, mem_obj);
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c+3−3
@@ -1167,7 +1167,7 @@ static int start_cpsch(struct device_queue_manager *dqm) · 1166 unmodified lines
11671167 if (retval)
11681168 goto fail_allocate_vidmem;
11691169
1170− dqm->fence_addr = dqm->fence_mem->cpu_ptr;
1170+ dqm->fence_addr = (uint64_t *)dqm->fence_mem->cpu_ptr;
11711171 dqm->fence_gpu_addr = dqm->fence_mem->gpu_addr;
11721172
11731173 init_interrupts(dqm);
@@ -1340,8 +1340,8 @@ out: · 166 unmodified lines
13401340 return retval;
13411341 }
13421342
1343−int amdkfd_fence_wait_timeout(unsigned int *fence_addr,
1344− unsigned int fence_value,
1343+int amdkfd_fence_wait_timeout(uint64_t *fence_addr,
1344+ uint64_t fence_value,
13451345 unsigned int timeout_ms)
13461346 {
13471347 unsigned long end_jiffies = msecs_to_jiffies(timeout_ms) + jiffies;
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h+1−1
@@ -192,7 +192,7 @@ struct device_queue_manager { · 191 unmodified lines
192192 uint16_t vmid_pasid[VMID_NUM];
193193 uint64_t pipelines_addr;
194194 uint64_t fence_gpu_addr;
195− unsigned int *fence_addr;
195+ uint64_t *fence_addr;
196196 struct kfd_mem_obj *fence_mem;
197197 bool active_runlist;
198198 int sched_policy;
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c+1−1
@@ -347,7 +347,7 @@ fail_create_runlist_ib: · 346 unmodified lines
347347 }
348348
349349 int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address,
350− uint32_t fence_value)
350+ uint64_t fence_value)
351351 {
352352 uint32_t *buffer, size;
353353 int retval = 0;
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c+1−1
@@ -283,7 +283,7 @@ static int pm_unmap_queues_v9(struct packet_manager *pm, uint32_t *buffer, · 282 unmodified lines
283283 }
284284
285285 static int pm_query_status_v9(struct packet_manager *pm, uint32_t *buffer,
286− uint64_t fence_address, uint32_t fence_value)
286+ uint64_t fence_address, uint64_t fence_value)
287287 {
288288 struct pm4_mes_query_status *packet;
289289
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c+1−1
@@ -263,7 +263,7 @@ static int pm_unmap_queues_vi(struct packet_manager *pm, uint32_t *buffer, · 262 unmodified lines
263263 }
264264
265265 static int pm_query_status_vi(struct packet_manager *pm, uint32_t *buffer,
266− uint64_t fence_address, uint32_t fence_value)
266+ uint64_t fence_address, uint64_t fence_value)
267267 {
268268 struct pm4_mes_query_status *packet;
269269
drivers/gpu/drm/amd/amdkfd/kfd_priv.h+4−4
@@ -1003,8 +1003,8 @@ int pqm_get_wave_state(struct process_queue_manager *pqm, · 1002 unmodified lines
10031003 u32 *ctl_stack_used_size,
10041004 u32 *save_area_used_size);
10051005
1006−int amdkfd_fence_wait_timeout(unsigned int *fence_addr,
1007− unsigned int fence_value,
1006+int amdkfd_fence_wait_timeout(uint64_t *fence_addr,
1007+ uint64_t fence_value,
10081008 unsigned int timeout_ms);
10091009
10101010 /* Packet Manager */
@@ -1040,7 +1040,7 @@ struct packet_manager_funcs { · 29 unmodified lines
10401040 uint32_t filter_param, bool reset,
10411041 unsigned int sdma_engine);
10421042 int (*query_status)(struct packet_manager *pm, uint32_t *buffer,
1043− uint64_t fence_address, uint32_t fence_value);
1043+ uint64_t fence_address, uint64_t fence_value);
10441044 int (*release_mem)(uint64_t gpu_addr, uint32_t *buffer);
10451045
10461046 /* Packet sizes */
@@ -1062,7 +1062,7 @@ int pm_send_set_resources(struct packet_manager *pm, · 15 unmodified lines
10621062 struct scheduling_resources *res);
10631063 int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues);
10641064 int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address,
1065− uint32_t fence_value);
1065+ uint64_t fence_value);
10661066
10671067 int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type,
10681068 enum kfd_unmap_queues_filter mode,
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c+2−32
@@ -1507,38 +1507,8 @@ static void dcn20_update_dchubp_dpp( · 1506 unmodified lines
15071507 if (pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed
15081508 || pipe_ctx->stream->update_flags.bits.gamut_remap
15091509 || pipe_ctx->stream->update_flags.bits.out_csc) {
1510− struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
1511−
1512− if (mpc->funcs->set_gamut_remap) {
1513− int i;
1514− int mpcc_id = hubp->inst;
1515− struct mpc_grph_gamut_adjustment adjust;
1516− bool enable_remap_dpp = false;
1517−
1518− memset(&adjust, 0, sizeof(adjust));
1519− adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
1520−
1521− /* save the enablement of gamut remap for dpp */
1522− enable_remap_dpp = pipe_ctx->stream->gamut_remap_matrix.enable_remap;
1523−
1524− /* force bypass gamut remap for dpp/cm */
1525− pipe_ctx->stream->gamut_remap_matrix.enable_remap = false;
1526− dc->hwss.program_gamut_remap(pipe_ctx);
1527−
1528− /* restore gamut remap flag and use this remap into mpc */
1529− pipe_ctx->stream->gamut_remap_matrix.enable_remap = enable_remap_dpp;
1530−
1531− /* build remap matrix for top plane if enabled */
1532− if (enable_remap_dpp && pipe_ctx->top_pipe == NULL) {
1533− adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
1534− for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
1535− adjust.temperature_matrix[i] =
1536− pipe_ctx->stream->gamut_remap_matrix.matrix[i];
1537− }
1538− mpc->funcs->set_gamut_remap(mpc, mpcc_id, &adjust);
1539− } else
1540− /* dpp/cm gamut remap*/
1541− dc->hwss.program_gamut_remap(pipe_ctx);
1510+ /* dpp/cm gamut remap*/
1511+ dc->hwss.program_gamut_remap(pipe_ctx);
15421512
15431513 /*call the dcn2 method which uses mpc csc*/
15441514 dc->hwss.program_output_csc(dc,
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c+1−2
@@ -341,8 +341,7 @@ void enc2_hw_init(struct link_encoder *enc) · 340 unmodified lines
341341 } else {
342342 AUX_REG_WRITE(AUX_DPHY_RX_CONTROL0, 0x103d1110);
343343
344− AUX_REG_WRITE(AUX_DPHY_TX_CONTROL, 0x21c4d);
345−
344+ AUX_REG_WRITE(AUX_DPHY_TX_CONTROL, 0x21c7a);
346345 }
347346
348347 //AUX_DPHY_TX_REF_CONTROL'AUX_TX_REF_DIV HW default is 0x32;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c+5−0
@@ -1595,6 +1595,11 @@ static void update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param · 1594 unmodified lines
15951595 dcn2_1_soc.num_chans = bw_params->num_channels;
15961596
15971597 ASSERT(clk_table->num_entries);
1598+ /* Copy dcn2_1_soc.clock_limits to clock_limits to avoid copying over null states later */
1599+ for (i = 0; i < dcn2_1_soc.num_states + 1; i++) {
1600+ clock_limits[i] = dcn2_1_soc.clock_limits[i];
1601+ }
1602+
15981603 for (i = 0; i < clk_table->num_entries; i++) {
15991604 /* loop backwards*/
16001605 for (closest_clk_lvl = 0, j = dcn2_1_soc.num_states - 1; j >= 0; j--) {
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c+18−8
@@ -113,6 +113,7 @@ bool cm3_helper_translate_curve_to_hw_format( · 112 unmodified lines
113113 struct pwl_result_data *rgb_resulted;
114114 struct pwl_result_data *rgb;
115115 struct pwl_result_data *rgb_plus_1;
116+ struct pwl_result_data *rgb_minus_1;
116117 struct fixed31_32 end_value;
117118
118119 int32_t region_start, region_end;
@@ -140,7 +141,7 @@ bool cm3_helper_translate_curve_to_hw_format( · 21 unmodified lines
140141 region_start = -MAX_LOW_POINT;
141142 region_end = NUMBER_REGIONS - MAX_LOW_POINT;
142143 } else {
143− /* 10 segments
144+ /* 11 segments
144145 * segment is from 2^-10 to 2^0
145146 * There are less than 256 points, for optimization
146147 */
@@ -154,9 +155,10 @@ bool cm3_helper_translate_curve_to_hw_format( · 7 unmodified lines
154155 seg_distr[7] = 4;
155156 seg_distr[8] = 4;
156157 seg_distr[9] = 4;
158+ seg_distr[10] = 1;
157159
158160 region_start = -10;
159− region_end = 0;
161+ region_end = 1;
160162 }
161163
162164 for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
@@ -189,6 +191,10 @@ bool cm3_helper_translate_curve_to_hw_format( · 26 unmodified lines
189191 rgb_resulted[hw_points - 1].green = output_tf->tf_pts.green[start_index];
190192 rgb_resulted[hw_points - 1].blue = output_tf->tf_pts.blue[start_index];
191193
194+ rgb_resulted[hw_points].red = rgb_resulted[hw_points - 1].red;
195+ rgb_resulted[hw_points].green = rgb_resulted[hw_points - 1].green;
196+ rgb_resulted[hw_points].blue = rgb_resulted[hw_points - 1].blue;
197+
192198 // All 3 color channels have same x
193199 corner_points[0].red.x = dc_fixpt_pow(dc_fixpt_from_int(2),
194200 dc_fixpt_from_int(region_start));
@@ -259,15 +265,18 @@ bool cm3_helper_translate_curve_to_hw_format( · 64 unmodified lines
259265
260266 rgb = rgb_resulted;
261267 rgb_plus_1 = rgb_resulted + 1;
268+ rgb_minus_1 = rgb;
262269
263270 i = 1;
264271 while (i != hw_points + 1) {
265− if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
266− rgb_plus_1->red = rgb->red;
267− if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
268− rgb_plus_1->green = rgb->green;
269− if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
270− rgb_plus_1->blue = rgb->blue;
272+ if (i >= hw_points - 1) {
273+ if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
274+ rgb_plus_1->red = dc_fixpt_add(rgb->red, rgb_minus_1->delta_red);
275+ if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
276+ rgb_plus_1->green = dc_fixpt_add(rgb->green, rgb_minus_1->delta_green);
277+ if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
278+ rgb_plus_1->blue = dc_fixpt_add(rgb->blue, rgb_minus_1->delta_blue);
279+ }
271280
272281 rgb->delta_red = dc_fixpt_sub(rgb_plus_1->red, rgb->red);
273282 rgb->delta_green = dc_fixpt_sub(rgb_plus_1->green, rgb->green);
@@ -283,6 +292,7 @@ bool cm3_helper_translate_curve_to_hw_format( · 9 unmodified lines
283292 }
284293
285294 ++rgb_plus_1;
295+ rgb_minus_1 = rgb;
286296 ++rgb;
287297 ++i;
288298 }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c+56−1
@@ -587,6 +587,48 @@ static int smu7_force_switch_to_arbf0(struct pp_hwmgr *hwmgr) · 586 unmodified lines
587587 tmp, MC_CG_ARB_FREQ_F0);
588588 }
589589
590+static uint16_t smu7_override_pcie_speed(struct pp_hwmgr *hwmgr)
591+{
592+ struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
593+ uint16_t pcie_gen = 0;
594+
595+ if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 &&
596+ adev->pm.pcie_gen_mask & CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4)
597+ pcie_gen = 3;
598+ else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 &&
599+ adev->pm.pcie_gen_mask & CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3)
600+ pcie_gen = 2;
601+ else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 &&
602+ adev->pm.pcie_gen_mask & CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2)
603+ pcie_gen = 1;
604+ else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 &&
605+ adev->pm.pcie_gen_mask & CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1)
606+ pcie_gen = 0;
607+
608+ return pcie_gen;
609+}
610+
611+static uint16_t smu7_override_pcie_width(struct pp_hwmgr *hwmgr)
612+{
613+ struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
614+ uint16_t pcie_width = 0;
615+
616+ if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X16)
617+ pcie_width = 16;
618+ else if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X12)
619+ pcie_width = 12;
620+ else if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X8)
621+ pcie_width = 8;
622+ else if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X4)
623+ pcie_width = 4;
624+ else if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X2)
625+ pcie_width = 2;
626+ else if (adev->pm.pcie_mlw_mask & CAIL_PCIE_LINK_WIDTH_SUPPORT_X1)
627+ pcie_width = 1;
628+
629+ return pcie_width;
630+}
631+
590632 static int smu7_setup_default_pcie_table(struct pp_hwmgr *hwmgr)
591633 {
592634 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
@@ -683,6 +725,11 @@ static int smu7_setup_default_pcie_table(struct pp_hwmgr *hwmgr) · 90 unmodified lines
683725 PP_Min_PCIEGen),
684726 get_pcie_lane_support(data->pcie_lane_cap,
685727 PP_Max_PCIELane));
728+
729+ if (data->pcie_dpm_key_disabled)
730+ phm_setup_pcie_table_entry(&data->dpm_table.pcie_speed_table,
731+ data->dpm_table.pcie_speed_table.count,
732+ smu7_override_pcie_speed(hwmgr), smu7_override_pcie_width(hwmgr));
686733 }
687734 return 0;
688735 }
@@ -1248,6 +1295,13 @@ static int smu7_start_dpm(struct pp_hwmgr *hwmgr) · 559 unmodified lines
12481295 NULL)),
12491296 "Failed to enable pcie DPM during DPM Start Function!",
12501297 return -EINVAL);
1298+ } else {
1299+ PP_ASSERT_WITH_CODE(
1300+ (0 == smum_send_msg_to_smc(hwmgr,
1301+ PPSMC_MSG_PCIeDPM_Disable,
1302+ NULL)),
1303+ "Failed to disble pcie DPM during DPM Start Function!",
1304+ return -EINVAL);
12511305 }
12521306
12531307 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
@@ -3276,7 +3330,8 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, · 2022 unmodified lines
32763330
32773331 disable_mclk_switching_for_display = ((1 < hwmgr->display_config->num_display) &&
32783332 !hwmgr->display_config->multi_monitor_in_sync) ||
3279− smu7_vblank_too_short(hwmgr, hwmgr->display_config->min_vblank_time);
3333+ (hwmgr->display_config->num_display &&
3334+ smu7_vblank_too_short(hwmgr, hwmgr->display_config->min_vblank_time));
32803335
32813336 disable_mclk_switching = disable_mclk_switching_for_frame_lock ||
32823337 disable_mclk_switching_for_display;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c+63−11
@@ -54,6 +54,9 @@ · 53 unmodified lines
5454 #include "smuio/smuio_9_0_offset.h"
5555 #include "smuio/smuio_9_0_sh_mask.h"
5656
57+#define smnPCIE_LC_SPEED_CNTL 0x11140290
58+#define smnPCIE_LC_LINK_WIDTH_CNTL 0x11140288
59+
5760 #define HBM_MEMORY_CHANNEL_WIDTH 128
5861
5962 static const uint32_t channel_number[] = {1, 2, 0, 4, 0, 8, 0, 16, 2};
@@ -443,8 +446,7 @@ static void vega10_init_dpm_defaults(struct pp_hwmgr *hwmgr) · 383 unmodified lines
443446 if (PP_CAP(PHM_PlatformCaps_VCEDPM))
444447 data->smu_features[GNLD_DPM_VCE].supported = true;
445448
446− if (!data->registry_data.pcie_dpm_key_disabled)
447− data->smu_features[GNLD_DPM_LINK].supported = true;
449+ data->smu_features[GNLD_DPM_LINK].supported = true;
448450
449451 if (!data->registry_data.dcefclk_dpm_key_disabled)
450452 data->smu_features[GNLD_DPM_DCEFCLK].supported = true;
@@ -1544,6 +1546,13 @@ static int vega10_override_pcie_parameters(struct pp_hwmgr *hwmgr) · 1093 unmodified lines
15441546 pp_table->PcieLaneCount[i] = pcie_width;
15451547 }
15461548
1549+ if (data->registry_data.pcie_dpm_key_disabled) {
1550+ for (i = 0; i < NUM_LINK_LEVELS; i++) {
1551+ pp_table->PcieGenSpeed[i] = pcie_gen;
1552+ pp_table->PcieLaneCount[i] = pcie_width;
1553+ }
1554+ }
1555+
15471556 return 0;
15481557 }
15491558
@@ -2966,6 +2975,14 @@ static int vega10_start_dpm(struct pp_hwmgr *hwmgr, uint32_t bitmap) · 1416 unmodified lines
29662975 }
29672976 }
29682977
2978+ if (data->registry_data.pcie_dpm_key_disabled) {
2979+ PP_ASSERT_WITH_CODE(!vega10_enable_smc_features(hwmgr,
2980+ false, data->smu_features[GNLD_DPM_LINK].smu_feature_bitmap),
2981+ "Attempt to Disable Link DPM feature Failed!", return -EINVAL);
2982+ data->smu_features[GNLD_DPM_LINK].enabled = false;
2983+ data->smu_features[GNLD_DPM_LINK].supported = false;
2984+ }
2985+
29692986 return 0;
29702987 }
29712988
@@ -4584,6 +4601,24 @@ static int vega10_set_ppfeature_status(struct pp_hwmgr *hwmgr, uint64_t new_ppfe · 1612 unmodified lines
45844601 return 0;
45854602 }
45864603
4604+static int vega10_get_current_pcie_link_width_level(struct pp_hwmgr *hwmgr)
4605+{
4606+ struct amdgpu_device *adev = hwmgr->adev;
4607+
4608+ return (RREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL) &
4609+ PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD_MASK)
4610+ >> PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD__SHIFT;
4611+}
4612+
4613+static int vega10_get_current_pcie_link_speed_level(struct pp_hwmgr *hwmgr)
4614+{
4615+ struct amdgpu_device *adev = hwmgr->adev;
4616+
4617+ return (RREG32_PCIE(smnPCIE_LC_SPEED_CNTL) &
4618+ PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK)
4619+ >> PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT;
4620+}
4621+
45874622 static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,
45884623 enum pp_clock_type type, char *buf)
45894624 {
@@ -4592,8 +4627,9 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr, · 2 unmodified lines
45924627 struct vega10_single_dpm_table *mclk_table = &(data->dpm_table.mem_table);
45934628 struct vega10_single_dpm_table *soc_table = &(data->dpm_table.soc_table);
45944629 struct vega10_single_dpm_table *dcef_table = &(data->dpm_table.dcef_table);
4595− struct vega10_pcie_table *pcie_table = &(data->dpm_table.pcie_table);
45964630 struct vega10_odn_clock_voltage_dependency_table *podn_vdd_dep = NULL;
4631+ uint32_t gen_speed, lane_width, current_gen_speed, current_lane_width;
4632+ PPTable_t *pptable = &(data->smc_state_table.pp_table);
45974633
45984634 int i, now, size = 0, count = 0;
45994635
@@ -4650,15 +4686,31 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr, · 50 unmodified lines
46504686 "*" : "");
46514687 break;
46524688 case PP_PCIE:
4653− smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentLinkIndex, &now);
4654−
4655− for (i = 0; i < pcie_table->count; i++)
4656− size += sprintf(buf + size, "%d: %s %s\n", i,
4657− (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s, x1" :
4658− (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s, x16" :
4659− (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s, x16" : "",
4660− (i == now) ? "*" : "");
4689+ current_gen_speed =
4690+ vega10_get_current_pcie_link_speed_level(hwmgr);
4691+ current_lane_width =
4692+ vega10_get_current_pcie_link_width_level(hwmgr);
4693+ for (i = 0; i < NUM_LINK_LEVELS; i++) {
4694+ gen_speed = pptable->PcieGenSpeed[i];
4695+ lane_width = pptable->PcieLaneCount[i];
4696+
4697+ size += sprintf(buf + size, "%d: %s %s %s\n", i,
4698+ (gen_speed == 0) ? "2.5GT/s," :
4699+ (gen_speed == 1) ? "5.0GT/s," :
4700+ (gen_speed == 2) ? "8.0GT/s," :
4701+ (gen_speed == 3) ? "16.0GT/s," : "",
4702+ (lane_width == 1) ? "x1" :
4703+ (lane_width == 2) ? "x2" :
4704+ (lane_width == 3) ? "x4" :
4705+ (lane_width == 4) ? "x8" :
4706+ (lane_width == 5) ? "x12" :
4707+ (lane_width == 6) ? "x16" : "",
4708+ (current_gen_speed == gen_speed) &&
4709+ (current_lane_width == lane_width) ?
4710+ "*" : "");
4711+ }
46614712 break;
4713+
46624714 case OD_SCLK:
46634715 if (hwmgr->od_enabled) {
46644716 size = sprintf(buf, "%s:\n", "OD_SCLK");
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c+24−0
@@ -133,6 +133,7 @@ static void vega12_set_default_registry_data(struct pp_hwmgr *hwmgr) · 132 unmodified lines
133133 data->registry_data.auto_wattman_debug = 0;
134134 data->registry_data.auto_wattman_sample_period = 100;
135135 data->registry_data.auto_wattman_threshold = 50;
136+ data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask & PP_PCIE_DPM_MASK);
136137 }
137138
138139 static int vega12_set_features_platform_caps(struct pp_hwmgr *hwmgr)
@@ -539,6 +540,29 @@ static int vega12_override_pcie_parameters(struct pp_hwmgr *hwmgr) · 400 unmodified lines
539540 pp_table->PcieLaneCount[i] = pcie_width_arg;
540541 }
541542
543+ /* override to the highest if it's disabled from ppfeaturmask */
544+ if (data->registry_data.pcie_dpm_key_disabled) {
545+ for (i = 0; i < NUM_LINK_LEVELS; i++) {
546+ smu_pcie_arg = (i << 16) | (pcie_gen << 8) | pcie_width;
547+ ret = smum_send_msg_to_smc_with_parameter(hwmgr,
548+ PPSMC_MSG_OverridePcieParameters, smu_pcie_arg,
549+ NULL);
550+ PP_ASSERT_WITH_CODE(!ret,
551+ "[OverridePcieParameters] Attempt to override pcie params failed!",
552+ return ret);
553+
554+ pp_table->PcieGenSpeed[i] = pcie_gen;
555+ pp_table->PcieLaneCount[i] = pcie_width;
556+ }
557+ ret = vega12_enable_smc_features(hwmgr,
558+ false,
559+ data->smu_features[GNLD_DPM_LINK].smu_feature_bitmap);
560+ PP_ASSERT_WITH_CODE(!ret,
561+ "Attempt to Disable DPM LINK Failed!",
562+ return ret);
563+ data->smu_features[GNLD_DPM_LINK].enabled = false;
564+ data->smu_features[GNLD_DPM_LINK].supported = false;
565+ }
542566 return 0;
543567 }
544568
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c+25−0
@@ -171,6 +171,7 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) · 170 unmodified lines
171171 data->registry_data.gfxoff_controlled_by_driver = 1;
172172 data->gfxoff_allowed = false;
173173 data->counter_gfxoff = 0;
174+ data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask & PP_PCIE_DPM_MASK);
174175 }
175176
176177 static int vega20_set_features_platform_caps(struct pp_hwmgr *hwmgr)
@@ -884,6 +885,30 @@ static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) · 707 unmodified lines
884885 pp_table->PcieLaneCount[i] = pcie_width_arg;
885886 }
886887
888+ /* override to the highest if it's disabled from ppfeaturmask */
889+ if (data->registry_data.pcie_dpm_key_disabled) {
890+ for (i = 0; i < NUM_LINK_LEVELS; i++) {
891+ smu_pcie_arg = (i << 16) | (pcie_gen << 8) | pcie_width;
892+ ret = smum_send_msg_to_smc_with_parameter(hwmgr,
893+ PPSMC_MSG_OverridePcieParameters, smu_pcie_arg,
894+ NULL);
895+ PP_ASSERT_WITH_CODE(!ret,
896+ "[OverridePcieParameters] Attempt to override pcie params failed!",
897+ return ret);
898+
899+ pp_table->PcieGenSpeed[i] = pcie_gen;
900+ pp_table->PcieLaneCount[i] = pcie_width;
901+ }
902+ ret = vega20_enable_smc_features(hwmgr,
903+ false,
904+ data->smu_features[GNLD_DPM_LINK].smu_feature_bitmap);
905+ PP_ASSERT_WITH_CODE(!ret,
906+ "Attempt to Disable DPM LINK Failed!",
907+ return ret);
908+ data->smu_features[GNLD_DPM_LINK].enabled = false;
909+ data->smu_features[GNLD_DPM_LINK].supported = false;
910+ }
911+
887912 return 0;
888913 }
889914
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c+3−2
@@ -1294,7 +1294,7 @@ static int smu_disable_dpms(struct smu_context *smu) · 1293 unmodified lines
12941294 bool use_baco = !smu->is_apu &&
12951295 ((amdgpu_in_reset(adev) &&
12961296 (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO)) ||
1297− ((adev->in_runpm || adev->in_hibernate) && amdgpu_asic_supports_baco(adev)));
1297+ ((adev->in_runpm || adev->in_s4) && amdgpu_asic_supports_baco(adev)));
12981298
12991299 /*
13001300 * For custom pptable uploading, skip the DPM features
@@ -1431,7 +1431,8 @@ static int smu_suspend(void *handle) · 130 unmodified lines
14311431
14321432 smu->watermarks_bitmap &= ~(WATERMARKS_LOADED);
14331433
1434− if (smu->is_apu)
1434+ /* skip CGPG when in S0ix */
1435+ if (smu->is_apu && !adev->in_s0ix)
14351436 smu_set_gfx_cgpg(&adev->smu, false);
14361437
14371438 return 0;
drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c+5−0
@@ -384,10 +384,15 @@ static int vangogh_dpm_set_jpeg_enable(struct smu_context *smu, bool enable) · 383 unmodified lines
384384
385385 static bool vangogh_is_dpm_running(struct smu_context *smu)
386386 {
387+ struct amdgpu_device *adev = smu->adev;
387388 int ret = 0;
388389 uint32_t feature_mask[2];
389390 uint64_t feature_enabled;
390391
392+ /* we need to re-init after suspend so return false */
393+ if (adev->in_suspend)
394+ return false;
395+
391396 ret = smu_cmn_get_enabled_32_bits_mask(smu, feature_mask, 2);
392397
393398 if (ret)
drivers/gpu/drm/etnaviv/etnaviv_gem.c+2−1
@@ -689,7 +689,8 @@ static int etnaviv_gem_userptr_get_pages(struct etnaviv_gem_object *etnaviv_obj) · 688 unmodified lines
689689 struct page **pages = pvec + pinned;
690690
691691 ret = pin_user_pages_fast(ptr, num_pages,
692− !userptr->ro ? FOLL_WRITE : 0, pages);
692+ FOLL_WRITE | FOLL_FORCE | FOLL_LONGTERM,
693+ pages);
693694 if (ret < 0) {
694695 unpin_user_pages(pvec, pinned);
695696 kvfree(pvec);
drivers/gpu/drm/exynos/exynos5433_drm_decon.c+0−1
@@ -13,7 +13,6 @@ · 12 unmodified lines
1313 #include <linux/irq.h>
1414 #include <linux/mfd/syscon.h>
1515 #include <linux/of_device.h>
16−#include <linux/of_gpio.h>
1716 #include <linux/platform_device.h>
1817 #include <linux/pm_runtime.h>
1918 #include <linux/regmap.h>
drivers/gpu/drm/i915/display/intel_atomic_plane.c+3−2
@@ -317,12 +317,13 @@ int intel_plane_atomic_check_with_state(const struct intel_crtc_state *old_crtc_ · 316 unmodified lines
317317 if (!new_plane_state->hw.crtc && !old_plane_state->hw.crtc)
318318 return 0;
319319
320− new_crtc_state->enabled_planes |= BIT(plane->id);
321−
322320 ret = plane->check_plane(new_crtc_state, new_plane_state);
323321 if (ret)
324322 return ret;
325323
324+ if (fb)
325+ new_crtc_state->enabled_planes |= BIT(plane->id);
326+
326327 /* FIXME pre-g4x don't work like this */
327328 if (new_plane_state->uapi.visible)
328329 new_crtc_state->active_planes |= BIT(plane->id);
drivers/gpu/drm/i915/display/intel_dp.c+1−3
@@ -3619,9 +3619,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) · 3618 unmodified lines
36193619 {
36203620 int ret;
36213621
3622− intel_dp_lttpr_init(intel_dp);
3623−
3624− if (drm_dp_read_dpcd_caps(&intel_dp->aux, intel_dp->dpcd))
3622+ if (intel_dp_init_lttpr_and_dprx_caps(intel_dp) < 0)
36253623 return false;
36263624
36273625 /*
drivers/gpu/drm/i915/display/intel_dp_aux.c+7−0
@@ -133,6 +133,7 @@ static u32 g4x_get_aux_send_ctl(struct intel_dp *intel_dp, · 132 unmodified lines
133133 else
134134 precharge = 5;
135135
136+ /* Max timeout value on G4x-BDW: 1.6ms */
136137 if (IS_BROADWELL(dev_priv))
137138 timeout = DP_AUX_CH_CTL_TIME_OUT_600us;
138139 else
@@ -159,6 +160,12 @@ static u32 skl_get_aux_send_ctl(struct intel_dp *intel_dp, · 20 unmodified lines
159160 enum phy phy = intel_port_to_phy(i915, dig_port->base.port);
160161 u32 ret;
161162
163+ /*
164+ * Max timeout values:
165+ * SKL-GLK: 1.6ms
166+ * CNL: 3.2ms
167+ * ICL+: 4ms
168+ */
162169 ret = DP_AUX_CH_CTL_SEND_BUSY |
163170 DP_AUX_CH_CTL_DONE |
164171 DP_AUX_CH_CTL_INTERRUPT |
drivers/gpu/drm/i915/display/intel_dp_link_training.c+58−17
@@ -34,6 +34,11 @@ intel_dp_dump_link_status(const u8 link_status[DP_LINK_STATUS_SIZE]) · 33 unmodified lines
3434 link_status[3], link_status[4], link_status[5]);
3535 }
3636
37+static void intel_dp_reset_lttpr_common_caps(struct intel_dp *intel_dp)
38+{
39+ memset(&intel_dp->lttpr_common_caps, 0, sizeof(intel_dp->lttpr_common_caps));
40+}
41+
3742 static void intel_dp_reset_lttpr_count(struct intel_dp *intel_dp)
3843 {
3944 intel_dp->lttpr_common_caps[DP_PHY_REPEATER_CNT -
@@ -81,19 +86,36 @@ static void intel_dp_read_lttpr_phy_caps(struct intel_dp *intel_dp, · 41 unmodified lines
8186
8287 static bool intel_dp_read_lttpr_common_caps(struct intel_dp *intel_dp)
8388 {
84− if (drm_dp_read_lttpr_common_caps(&intel_dp->aux,
85− intel_dp->lttpr_common_caps) < 0) {
86− memset(intel_dp->lttpr_common_caps, 0,
87− sizeof(intel_dp->lttpr_common_caps));
89+ struct drm_i915_private *i915 = dp_to_i915(intel_dp);
90+
91+ if (intel_dp_is_edp(intel_dp))
8892 return false;
89− }
93+
94+ /*
95+ * Detecting LTTPRs must be avoided on platforms with an AUX timeout
96+ * period < 3.2ms. (see DP Standard v2.0, 2.11.2, 3.6.6.1).
97+ */
98+ if (INTEL_GEN(i915) < 10)
99+ return false;
100+
101+ if (drm_dp_read_lttpr_common_caps(&intel_dp->aux,
102+ intel_dp->lttpr_common_caps) < 0)
103+ goto reset_caps;
90104
91105 drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
92106 "LTTPR common capabilities: %*ph\n",
93107 (int)sizeof(intel_dp->lttpr_common_caps),
94108 intel_dp->lttpr_common_caps);
95109
110+ /* The minimum value of LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV is 1.4 */
111+ if (intel_dp->lttpr_common_caps[0] < 0x14)
112+ goto reset_caps;
113+
96114 return true;
115+
116+reset_caps:
117+ intel_dp_reset_lttpr_common_caps(intel_dp);
118+ return false;
97119 }
98120
99121 static bool
@@ -106,33 +128,49 @@ intel_dp_set_lttpr_transparent_mode(struct intel_dp *intel_dp, bool enable) · 6 unmodified lines
106128 }
107129
108130 /**
109− * intel_dp_lttpr_init - detect LTTPRs and init the LTTPR link training mode
131+ * intel_dp_init_lttpr_and_dprx_caps - detect LTTPR and DPRX caps, init the LTTPR link training mode
110132 * @intel_dp: Intel DP struct
111133 *
112− * Read the LTTPR common capabilities, switch to non-transparent link training
113− * mode if any is detected and read the PHY capabilities for all detected
114− * LTTPRs. In case of an LTTPR detection error or if the number of
134+ * Read the LTTPR common and DPRX capabilities and switch to non-transparent
135+ * link training mode if any is detected and read the PHY capabilities for all
136+ * detected LTTPRs. In case of an LTTPR detection error or if the number of
115137 * LTTPRs is more than is supported (8), fall back to the no-LTTPR,
116138 * transparent mode link training mode.
117139 *
118140 * Returns:
119− * >0 if LTTPRs were detected and the non-transparent LT mode was set
141+ * >0 if LTTPRs were detected and the non-transparent LT mode was set. The
142+ * DPRX capabilities are read out.
120143 * 0 if no LTTPRs or more than 8 LTTPRs were detected or in case of a
121− * detection failure and the transparent LT mode was set
144+ * detection failure and the transparent LT mode was set. The DPRX
145+ * capabilities are read out.
146+ * <0 Reading out the DPRX capabilities failed.
122147 */
123−int intel_dp_lttpr_init(struct intel_dp *intel_dp)
148+int intel_dp_init_lttpr_and_dprx_caps(struct intel_dp *intel_dp)
124149 {
125150 int lttpr_count;
126151 bool ret;
127152 int i;
128153
129− if (intel_dp_is_edp(intel_dp))
130− return 0;
131−
132154 ret = intel_dp_read_lttpr_common_caps(intel_dp);
155+
156+ /* The DPTX shall read the DPRX caps after LTTPR detection. */
157+ if (drm_dp_read_dpcd_caps(&intel_dp->aux, intel_dp->dpcd)) {
158+ intel_dp_reset_lttpr_common_caps(intel_dp);
159+ return -EIO;
160+ }
161+
133162 if (!ret)
134163 return 0;
135164
165+ /*
166+ * The 0xF0000-0xF02FF range is only valid if the DPCD revision is
167+ * at least 1.4.
168+ */
169+ if (intel_dp->dpcd[DP_DPCD_REV] < 0x14) {
170+ intel_dp_reset_lttpr_common_caps(intel_dp);
171+ return 0;
172+ }
173+
136174 lttpr_count = drm_dp_lttpr_count(intel_dp->lttpr_common_caps);
137175 /*
138176 * Prevent setting LTTPR transparent mode explicitly if no LTTPRs are
@@ -172,7 +210,7 @@ int intel_dp_lttpr_init(struct intel_dp *intel_dp) · 33 unmodified lines
172210
173211 return lttpr_count;
174212 }
175−EXPORT_SYMBOL(intel_dp_lttpr_init);
213+EXPORT_SYMBOL(intel_dp_init_lttpr_and_dprx_caps);
176214
177215 static u8 dp_voltage_max(u8 preemph)
178216 {
@@ -807,7 +845,10 @@ void intel_dp_start_link_train(struct intel_dp *intel_dp, · 628 unmodified lines
807845 * TODO: Reiniting LTTPRs here won't be needed once proper connector
808846 * HW state readout is added.
809847 */
810− int lttpr_count = intel_dp_lttpr_init(intel_dp);
848+ int lttpr_count = intel_dp_init_lttpr_and_dprx_caps(intel_dp);
849+
850+ if (lttpr_count < 0)
851+ return;
811852
812853 if (!intel_dp_link_train_all_phys(intel_dp, crtc_state, lttpr_count))
813854 intel_dp_schedule_fallback_link_training(intel_dp, crtc_state);
drivers/gpu/drm/i915/display/intel_dp_link_training.h+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
1111 struct intel_crtc_state;
1212 struct intel_dp;
1313
14−int intel_dp_lttpr_init(struct intel_dp *intel_dp);
14+int intel_dp_init_lttpr_and_dprx_caps(struct intel_dp *intel_dp);
1515
1616 void intel_dp_get_adjust_train(struct intel_dp *intel_dp,
1717 const struct intel_crtc_state *crtc_state,
drivers/gpu/drm/i915/display/intel_vdsc.c+2−8
@@ -1014,20 +1014,14 @@ static i915_reg_t dss_ctl1_reg(const struct intel_crtc_state *crtc_state) · 1013 unmodified lines
10141014 {
10151015 enum pipe pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
10161016
1017− if (crtc_state->cpu_transcoder == TRANSCODER_EDP)
1018− return DSS_CTL1;
1019−
1020− return ICL_PIPE_DSS_CTL1(pipe);
1017+ return is_pipe_dsc(crtc_state) ? ICL_PIPE_DSS_CTL1(pipe) : DSS_CTL1;
10211018 }
10221019
10231020 static i915_reg_t dss_ctl2_reg(const struct intel_crtc_state *crtc_state)
10241021 {
10251022 enum pipe pipe = to_intel_crtc(crtc_state->uapi.crtc)->pipe;
10261023
1027− if (crtc_state->cpu_transcoder == TRANSCODER_EDP)
1028− return DSS_CTL2;
1029−
1030− return ICL_PIPE_DSS_CTL2(pipe);
1024+ return is_pipe_dsc(crtc_state) ? ICL_PIPE_DSS_CTL2(pipe) : DSS_CTL2;
10311025 }
10321026
10331027 void intel_dsc_enable(struct intel_encoder *encoder,
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c+12−1
@@ -316,7 +316,18 @@ void i915_vma_revoke_fence(struct i915_vma *vma) · 315 unmodified lines
316316 WRITE_ONCE(fence->vma, NULL);
317317 vma->fence = NULL;
318318
319− with_intel_runtime_pm_if_in_use(fence_to_uncore(fence)->rpm, wakeref)
319+ /*
320+ * Skip the write to HW if and only if the device is currently
321+ * suspended.
322+ *
323+ * If the driver does not currently hold a wakeref (if_in_use == 0),
324+ * the device may currently be runtime suspended, or it may be woken
325+ * up before the suspend takes place. If the device is not suspended
326+ * (powered down) and we skip clearing the fence register, the HW is
327+ * left in an undefined state where we may end up with multiple
328+ * registers overlapping.
329+ */
330+ with_intel_runtime_pm_if_active(fence_to_uncore(fence)->rpm, wakeref)
320331 fence_write(fence);
321332 }
322333
drivers/gpu/drm/i915/i915_perf.c+5−8
@@ -603,7 +603,6 @@ static int append_oa_sample(struct i915_perf_stream *stream, · 602 unmodified lines
603603 {
604604 int report_size = stream->oa_buffer.format_size;
605605 struct drm_i915_perf_record_header header;
606− u32 sample_flags = stream->sample_flags;
607606
608607 header.type = DRM_I915_PERF_RECORD_SAMPLE;
609608 header.pad = 0;
@@ -617,10 +616,8 @@ static int append_oa_sample(struct i915_perf_stream *stream, · 7 unmodified lines
617616 return -EFAULT;
618617 buf += sizeof(header);
619618
620− if (sample_flags & SAMPLE_OA_REPORT) {
621− if (copy_to_user(buf, report, report_size))
622− return -EFAULT;
623− }
619+ if (copy_to_user(buf, report, report_size))
620+ return -EFAULT;
624621
625622 (*offset) += header.size;
626623
@@ -2682,7 +2679,7 @@ static void i915_oa_stream_enable(struct i915_perf_stream *stream) · 2055 unmodified lines
26822679
26832680 stream->perf->ops.oa_enable(stream);
26842681
2685− if (stream->periodic)
2682+ if (stream->sample_flags & SAMPLE_OA_REPORT)
26862683 hrtimer_start(&stream->poll_check_timer,
26872684 ns_to_ktime(stream->poll_oa_period),
26882685 HRTIMER_MODE_REL_PINNED);
@@ -2745,7 +2742,7 @@ static void i915_oa_stream_disable(struct i915_perf_stream *stream) · 56 unmodified lines
27452742 {
27462743 stream->perf->ops.oa_disable(stream);
27472744
2748− if (stream->periodic)
2745+ if (stream->sample_flags & SAMPLE_OA_REPORT)
27492746 hrtimer_cancel(&stream->poll_check_timer);
27502747 }
27512748
@@ -3028,7 +3025,7 @@ static ssize_t i915_perf_read(struct file *file, · 276 unmodified lines
30283025 * disabled stream as an error. In particular it might otherwise lead
30293026 * to a deadlock for blocking file descriptors...
30303027 */
3031− if (!stream->enabled)
3028+ if (!stream->enabled || !(stream->sample_flags & SAMPLE_OA_REPORT))
30323029 return -EIO;
30333030
30343031 if (!(file->f_flags & O_NONBLOCK)) {
drivers/gpu/drm/i915/i915_reg.h+22−1
@@ -3316,7 +3316,18 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg) · 3315 unmodified lines
33163316
33173317 #define ILK_DISPLAY_CHICKEN1 _MMIO(0x42000)
33183318 #define ILK_FBCQ_DIS (1 << 22)
3319−#define ILK_PABSTRETCH_DIS (1 << 21)
3319+#define ILK_PABSTRETCH_DIS REG_BIT(21)
3320+#define ILK_SABSTRETCH_DIS REG_BIT(20)
3321+#define IVB_PRI_STRETCH_MAX_MASK REG_GENMASK(21, 20)
3322+#define IVB_PRI_STRETCH_MAX_X8 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 0)
3323+#define IVB_PRI_STRETCH_MAX_X4 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 1)
3324+#define IVB_PRI_STRETCH_MAX_X2 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 2)
3325+#define IVB_PRI_STRETCH_MAX_X1 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 3)
3326+#define IVB_SPR_STRETCH_MAX_MASK REG_GENMASK(19, 18)
3327+#define IVB_SPR_STRETCH_MAX_X8 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 0)
3328+#define IVB_SPR_STRETCH_MAX_X4 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 1)
3329+#define IVB_SPR_STRETCH_MAX_X2 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 2)
3330+#define IVB_SPR_STRETCH_MAX_X1 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 3)
33203331
33213332
33223333 /*
@@ -8039,6 +8050,16 @@ enum { · 4716 unmodified lines
80398050
80408051 #define _CHICKEN_PIPESL_1_A 0x420b0
80418052 #define _CHICKEN_PIPESL_1_B 0x420b4
8053+#define HSW_PRI_STRETCH_MAX_MASK REG_GENMASK(28, 27)
8054+#define HSW_PRI_STRETCH_MAX_X8 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 0)
8055+#define HSW_PRI_STRETCH_MAX_X4 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 1)
8056+#define HSW_PRI_STRETCH_MAX_X2 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 2)
8057+#define HSW_PRI_STRETCH_MAX_X1 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 3)
8058+#define HSW_SPR_STRETCH_MAX_MASK REG_GENMASK(26, 25)
8059+#define HSW_SPR_STRETCH_MAX_X8 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 0)
8060+#define HSW_SPR_STRETCH_MAX_X4 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 1)
8061+#define HSW_SPR_STRETCH_MAX_X2 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 2)
8062+#define HSW_SPR_STRETCH_MAX_X1 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 3)
80428063 #define HSW_FBCQ_DIS (1 << 22)
80438064 #define BDW_DPRS_MASK_VBLANK_SRD (1 << 0)
80448065 #define CHICKEN_PIPESL_1(pipe) _MMIO_PIPE(pipe, _CHICKEN_PIPESL_1_A, _CHICKEN_PIPESL_1_B)
drivers/gpu/drm/i915/intel_pm.c+15−1
@@ -7245,11 +7245,16 @@ static void bdw_init_clock_gating(struct drm_i915_private *dev_priv) · 7244 unmodified lines
72457245 intel_uncore_write(&dev_priv->uncore, CHICKEN_PAR1_1,
72467246 intel_uncore_read(&dev_priv->uncore, CHICKEN_PAR1_1) | DPA_MASK_VBLANK_SRD);
72477247
7248− /* WaPsrDPRSUnmaskVBlankInSRD:bdw */
72497248 for_each_pipe(dev_priv, pipe) {
7249+ /* WaPsrDPRSUnmaskVBlankInSRD:bdw */
72507250 intel_uncore_write(&dev_priv->uncore, CHICKEN_PIPESL_1(pipe),
72517251 intel_uncore_read(&dev_priv->uncore, CHICKEN_PIPESL_1(pipe)) |
72527252 BDW_DPRS_MASK_VBLANK_SRD);
7253+
7254+ /* Undocumented but fixes async flip + VT-d corruption */
7255+ if (intel_vtd_active())
7256+ intel_uncore_rmw(&dev_priv->uncore, CHICKEN_PIPESL_1(pipe),
7257+ HSW_PRI_STRETCH_MAX_MASK, HSW_PRI_STRETCH_MAX_X1);
72537258 }
72547259
72557260 /* WaVSRefCountFullforceMissDisable:bdw */
@@ -7285,11 +7290,20 @@ static void bdw_init_clock_gating(struct drm_i915_private *dev_priv) · 29 unmodified lines
72857290
72867291 static void hsw_init_clock_gating(struct drm_i915_private *dev_priv)
72877292 {
7293+ enum pipe pipe;
7294+
72887295 /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
72897296 intel_uncore_write(&dev_priv->uncore, CHICKEN_PIPESL_1(PIPE_A),
72907297 intel_uncore_read(&dev_priv->uncore, CHICKEN_PIPESL_1(PIPE_A)) |
72917298 HSW_FBCQ_DIS);
72927299
7300+ for_each_pipe(dev_priv, pipe) {
7301+ /* Undocumented but fixes async flip + VT-d corruption */
7302+ if (intel_vtd_active())
7303+ intel_uncore_rmw(&dev_priv->uncore, CHICKEN_PIPESL_1(pipe),
7304+ HSW_PRI_STRETCH_MAX_MASK, HSW_PRI_STRETCH_MAX_X1);
7305+ }
7306+
72937307 /* This is required by WaCatErrorRejectionIssue:hsw */
72947308 intel_uncore_write(&dev_priv->uncore, GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
72957309 intel_uncore_read(&dev_priv->uncore, GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
drivers/gpu/drm/i915/intel_runtime_pm.c+24−5
@@ -412,12 +412,20 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm) · 411 unmodified lines
412412 }
413413
414414 /**
415− * intel_runtime_pm_get_if_in_use - grab a runtime pm reference if device in use
415+ * __intel_runtime_pm_get_if_active - grab a runtime pm reference if device is active
416416 * @rpm: the intel_runtime_pm structure
417+ * @ignore_usecount: get a ref even if dev->power.usage_count is 0
417418 *
418419 * This function grabs a device-level runtime pm reference if the device is
419− * already in use and ensures that it is powered up. It is illegal to try
420− * and access the HW should intel_runtime_pm_get_if_in_use() report failure.
420+ * already active and ensures that it is powered up. It is illegal to try
421+ * and access the HW should intel_runtime_pm_get_if_active() report failure.
422+ *
423+ * If @ignore_usecount=true, a reference will be acquired even if there is no
424+ * user requiring the device to be powered up (dev->power.usage_count == 0).
425+ * If the function returns false in this case then it's guaranteed that the
426+ * device's runtime suspend hook has been called already or that it will be
427+ * called (and hence it's also guaranteed that the device's runtime resume
428+ * hook will be called eventually).
421429 *
422430 * Any runtime pm reference obtained by this function must have a symmetric
423431 * call to intel_runtime_pm_put() to release the reference again.
@@ -425,7 +433,8 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm) · 1 unmodified line
425433 * Returns: the wakeref cookie to pass to intel_runtime_pm_put(), evaluates
426434 * as True if the wakeref was acquired, or False otherwise.
427435 */
428−intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)
436+static intel_wakeref_t __intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm,
437+ bool ignore_usecount)
429438 {
430439 if (IS_ENABLED(CONFIG_PM)) {
431440 /*
@@ -434,7 +443,7 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm) · 2 unmodified lines
434443 * function, since the power state is undefined. This applies
435444 * atm to the late/early system suspend/resume handlers.
436445 */
437− if (pm_runtime_get_if_in_use(rpm->kdev) <= 0)
446+ if (pm_runtime_get_if_active(rpm->kdev, ignore_usecount) <= 0)
438447 return 0;
439448 }
440449
@@ -443,6 +452,16 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm) · 2 unmodified lines
443452 return track_intel_runtime_pm_wakeref(rpm);
444453 }
445454
455+intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)
456+{
457+ return __intel_runtime_pm_get_if_active(rpm, false);
458+}
459+
460+intel_wakeref_t intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm)
461+{
462+ return __intel_runtime_pm_get_if_active(rpm, true);
463+}
464+
446465 /**
447466 * intel_runtime_pm_get_noresume - grab a runtime pm reference
448467 * @rpm: the intel_runtime_pm structure
drivers/gpu/drm/i915/intel_runtime_pm.h+5−0
@@ -177,6 +177,7 @@ void intel_runtime_pm_driver_release(struct intel_runtime_pm *rpm); · 176 unmodified lines
177177
178178 intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm);
179179 intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm);
180+intel_wakeref_t intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm);
180181 intel_wakeref_t intel_runtime_pm_get_noresume(struct intel_runtime_pm *rpm);
181182 intel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm);
182183
@@ -188,6 +189,10 @@ intel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm); · 5 unmodified lines
188189 for ((wf) = intel_runtime_pm_get_if_in_use(rpm); (wf); \
189190 intel_runtime_pm_put((rpm), (wf)), (wf) = 0)
190191
192+#define with_intel_runtime_pm_if_active(rpm, wf) \
193+ for ((wf) = intel_runtime_pm_get_if_active(rpm); (wf); \
194+ intel_runtime_pm_put((rpm), (wf)), (wf) = 0)
195+
191196 void intel_runtime_pm_put_unchecked(struct intel_runtime_pm *rpm);
192197 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_RUNTIME_PM)
193198 void intel_runtime_pm_put(struct intel_runtime_pm *rpm, intel_wakeref_t wref);
drivers/gpu/drm/imx/imx-drm-core.c+1−1
@@ -215,7 +215,7 @@ static int imx_drm_bind(struct device *dev) · 214 unmodified lines
215215
216216 ret = drmm_mode_config_init(drm);
217217 if (ret)
218− return ret;
218+ goto err_kms;
219219
220220 ret = drm_vblank_init(drm, MAX_CRTC);
221221 if (ret)
drivers/gpu/drm/imx/imx-ldb.c+11−1
@@ -197,6 +197,11 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) · 196 unmodified lines
197197 int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
198198 int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
199199
200+ if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
201+ dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
202+ return;
203+ }
204+
200205 drm_panel_prepare(imx_ldb_ch->panel);
201206
202207 if (dual) {
@@ -255,6 +260,11 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder, · 52 unmodified lines
255260 int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
256261 u32 bus_format = imx_ldb_ch->bus_format;
257262
263+ if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
264+ dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
265+ return;
266+ }
267+
258268 if (mode->clock > 170000) {
259269 dev_warn(ldb->dev,
260270 "%s: mode exceeds 170 MHz pixel clock\n", __func__);
@@ -583,7 +593,7 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data) · 322 unmodified lines
583593 struct imx_ldb_channel *channel = &imx_ldb->channel[i];
584594
585595 if (!channel->ldb)
586− break;
596+ continue;
587597
588598 ret = imx_ldb_register(drm, channel);
589599 if (ret)
drivers/gpu/drm/msm/adreno/a5xx_power.c+1−1
@@ -304,7 +304,7 @@ int a5xx_power_init(struct msm_gpu *gpu) · 303 unmodified lines
304304 /* Set up the limits management */
305305 if (adreno_is_a530(adreno_gpu))
306306 a530_lm_setup(gpu);
307− else
307+ else if (adreno_is_a540(adreno_gpu))
308308 a540_lm_setup(gpu);
309309
310310 /* Set up SP/TP power collpase */
drivers/gpu/drm/msm/adreno/a6xx_gmu.c+1−1
@@ -339,7 +339,7 @@ void a6xx_gmu_clear_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state) · 338 unmodified lines
339339 else
340340 bit = a6xx_gmu_oob_bits[state].ack_new;
341341
342− gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, bit);
342+ gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, 1 << bit);
343343 }
344344
345345 /* Enable CPU control of SPTP power power collapse */
drivers/gpu/drm/msm/adreno/a6xx_gpu.c+72−36
@@ -522,28 +522,73 @@ static int a6xx_cp_init(struct msm_gpu *gpu) · 521 unmodified lines
522522 return a6xx_idle(gpu, ring) ? 0 : -EINVAL;
523523 }
524524
525−static void a6xx_ucode_check_version(struct a6xx_gpu *a6xx_gpu,
525+/*
526+ * Check that the microcode version is new enough to include several key
527+ * security fixes. Return true if the ucode is safe.
528+ */
529+static bool a6xx_ucode_check_version(struct a6xx_gpu *a6xx_gpu,
526530 struct drm_gem_object *obj)
527531 {
532+ struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
533+ struct msm_gpu *gpu = &adreno_gpu->base;
528534 u32 *buf = msm_gem_get_vaddr(obj);
535+ bool ret = false;
529536
530537 if (IS_ERR(buf))
531− return;
538+ return false;
532539
533540 /*
534− * If the lowest nibble is 0xa that is an indication that this microcode
535− * has been patched. The actual version is in dword [3] but we only care
536− * about the patchlevel which is the lowest nibble of dword [3]
537− *
538− * Otherwise check that the firmware is greater than or equal to 1.90
539− * which was the first version that had this fix built in
541+ * Targets up to a640 (a618, a630 and a640) need to check for a
542+ * microcode version that is patched to support the whereami opcode or
543+ * one that is new enough to include it by default.
540544 */
541− if (((buf[0] & 0xf) == 0xa) && (buf[2] & 0xf) >= 1)
542− a6xx_gpu->has_whereami = true;
543− else if ((buf[0] & 0xfff) > 0x190)
544− a6xx_gpu->has_whereami = true;
545+ if (adreno_is_a618(adreno_gpu) || adreno_is_a630(adreno_gpu) ||
546+ adreno_is_a640(adreno_gpu)) {
547+ /*
548+ * If the lowest nibble is 0xa that is an indication that this
549+ * microcode has been patched. The actual version is in dword
550+ * [3] but we only care about the patchlevel which is the lowest
551+ * nibble of dword [3]
552+ *
553+ * Otherwise check that the firmware is greater than or equal
554+ * to 1.90 which was the first version that had this fix built
555+ * in
556+ */
557+ if ((((buf[0] & 0xf) == 0xa) && (buf[2] & 0xf) >= 1) ||
558+ (buf[0] & 0xfff) >= 0x190) {
559+ a6xx_gpu->has_whereami = true;
560+ ret = true;
561+ goto out;
562+ }
563+
564+ DRM_DEV_ERROR(&gpu->pdev->dev,
565+ "a630 SQE ucode is too old. Have version %x need at least %x\n",
566+ buf[0] & 0xfff, 0x190);
567+ } else {
568+ /*
569+ * a650 tier targets don't need whereami but still need to be
570+ * equal to or newer than 1.95 for other security fixes
571+ */
572+ if (adreno_is_a650(adreno_gpu)) {
573+ if ((buf[0] & 0xfff) >= 0x195) {
574+ ret = true;
575+ goto out;
576+ }
577+
578+ DRM_DEV_ERROR(&gpu->pdev->dev,
579+ "a650 SQE ucode is too old. Have version %x need at least %x\n",
580+ buf[0] & 0xfff, 0x195);
581+ }
545582
583+ /*
584+ * When a660 is added those targets should return true here
585+ * since those have all the critical security fixes built in
586+ * from the start
587+ */
588+ }
589+out:
546590 msm_gem_put_vaddr(obj);
591+ return ret;
547592 }
548593
549594 static int a6xx_ucode_init(struct msm_gpu *gpu)
@@ -566,7 +611,13 @@ static int a6xx_ucode_init(struct msm_gpu *gpu) · 16 unmodified lines
566611 }
567612
568613 msm_gem_object_set_name(a6xx_gpu->sqe_bo, "sqefw");
569− a6xx_ucode_check_version(a6xx_gpu, a6xx_gpu->sqe_bo);
614+ if (!a6xx_ucode_check_version(a6xx_gpu, a6xx_gpu->sqe_bo)) {
615+ msm_gem_unpin_iova(a6xx_gpu->sqe_bo, gpu->aspace);
616+ drm_gem_object_put(a6xx_gpu->sqe_bo);
617+
618+ a6xx_gpu->sqe_bo = NULL;
619+ return -EPERM;
620+ }
570621 }
571622
572623 gpu_write64(gpu, REG_A6XX_CP_SQE_INSTR_BASE_LO,
@@ -1350,35 +1401,20 @@ static int a6xx_set_supported_hw(struct device *dev, struct a6xx_gpu *a6xx_gpu, · 777 unmodified lines
13501401 u32 revn)
13511402 {
13521403 struct opp_table *opp_table;
1353− struct nvmem_cell *cell;
13541404 u32 supp_hw = UINT_MAX;
1355− void *buf;
1356−
1357− cell = nvmem_cell_get(dev, "speed_bin");
1358− /*
1359− * -ENOENT means that the platform doesn't support speedbin which is
1360− * fine
1361− */
1362− if (PTR_ERR(cell) == -ENOENT)
1363− return 0;
1364− else if (IS_ERR(cell)) {
1365− DRM_DEV_ERROR(dev,
1366− "failed to read speed-bin. Some OPPs may not be supported by hardware");
1367− goto done;
1368− }
1405+ u16 speedbin;
1406+ int ret;
13691407
1370− buf = nvmem_cell_read(cell, NULL);
1371− if (IS_ERR(buf)) {
1372− nvmem_cell_put(cell);
1408+ ret = nvmem_cell_read_u16(dev, "speed_bin", &speedbin);
1409+ if (ret) {
13731410 DRM_DEV_ERROR(dev,
1374− "failed to read speed-bin. Some OPPs may not be supported by hardware");
1411+ "failed to read speed-bin (%d). Some OPPs may not be supported by hardware",
1412+ ret);
13751413 goto done;
13761414 }
1415+ speedbin = le16_to_cpu(speedbin);
13771416
1378− supp_hw = fuse_to_supp_hw(dev, revn, *((u32 *) buf));
1379−
1380− kfree(buf);
1381− nvmem_cell_put(cell);
1417+ supp_hw = fuse_to_supp_hw(dev, revn, speedbin);
13821418
13831419 done:
13841420 opp_table = dev_pm_opp_set_supported_hw(dev, &supp_hw, 1);
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c+7−5
@@ -43,6 +43,8 @@ · 42 unmodified lines
4343 #define DPU_DEBUGFS_DIR "msm_dpu"
4444 #define DPU_DEBUGFS_HWMASKNAME "hw_log_mask"
4545
46+#define MIN_IB_BW 400000000ULL /* Min ib vote 400MB */
47+
4648 static int dpu_kms_hw_init(struct msm_kms *kms);
4749 static void _dpu_kms_mmu_destroy(struct dpu_kms *dpu_kms);
4850
@@ -931,6 +933,9 @@ static int dpu_kms_hw_init(struct msm_kms *kms) · 882 unmodified lines
931933 DPU_DEBUG("REG_DMA is not defined");
932934 }
933935
936+ if (of_device_is_compatible(dev->dev->of_node, "qcom,sc7180-mdss"))
937+ dpu_kms_parse_data_bus_icc_path(dpu_kms);
938+
934939 pm_runtime_get_sync(&dpu_kms->pdev->dev);
935940
936941 dpu_kms->core_rev = readl_relaxed(dpu_kms->mmio + 0x0);
@@ -1032,9 +1037,6 @@ static int dpu_kms_hw_init(struct msm_kms *kms) · 95 unmodified lines
10321037
10331038 dpu_vbif_init_memtypes(dpu_kms);
10341039
1035− if (of_device_is_compatible(dev->dev->of_node, "qcom,sc7180-mdss"))
1036− dpu_kms_parse_data_bus_icc_path(dpu_kms);
1037−
10381040 pm_runtime_put_sync(&dpu_kms->pdev->dev);
10391041
10401042 return 0;
@@ -1191,10 +1193,10 @@ static int __maybe_unused dpu_runtime_resume(struct device *dev) · 150 unmodified lines
11911193
11921194 ddev = dpu_kms->dev;
11931195
1196+ WARN_ON(!(dpu_kms->num_paths));
11941197 /* Min vote of BW is required before turning on AXI clk */
11951198 for (i = 0; i < dpu_kms->num_paths; i++)
1196− icc_set_bw(dpu_kms->path[i], 0,
1197− dpu_kms->catalog->perf.min_dram_ib);
1199+ icc_set_bw(dpu_kms->path[i], 0, Bps_to_icc(MIN_IB_BW));
11981200
11991201 rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, true);
12001202 if (rc) {
drivers/gpu/drm/msm/dp/dp_aux.c+7−0
@@ -32,6 +32,8 @@ struct dp_aux_private { · 31 unmodified lines
3232 struct drm_dp_aux dp_aux;
3333 };
3434
35+#define MAX_AUX_RETRIES 5
36+
3537 static const char *dp_aux_get_error(u32 aux_error)
3638 {
3739 switch (aux_error) {
@@ -377,6 +379,11 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux, · 339 unmodified lines
377379 ret = dp_aux_cmd_fifo_tx(aux, msg);
378380
379381 if (ret < 0) {
382+ if (aux->native) {
383+ aux->retry_cnt++;
384+ if (!(aux->retry_cnt % MAX_AUX_RETRIES))
385+ dp_catalog_aux_update_cfg(aux->catalog);
386+ }
380387 usleep_range(400, 500); /* at least 400us to next try */
381388 goto unlock_exit;
382389 }
drivers/gpu/drm/msm/dsi/pll/dsi_pll.c+1−1
@@ -163,7 +163,7 @@ struct msm_dsi_pll *msm_dsi_pll_init(struct platform_device *pdev, · 162 unmodified lines
163163 break;
164164 case MSM_DSI_PHY_7NM:
165165 case MSM_DSI_PHY_7NM_V4_1:
166− pll = msm_dsi_pll_7nm_init(pdev, id);
166+ pll = msm_dsi_pll_7nm_init(pdev, type, id);
167167 break;
168168 default:
169169 pll = ERR_PTR(-ENXIO);
drivers/gpu/drm/msm/dsi/pll/dsi_pll.h+4−2
@@ -117,10 +117,12 @@ msm_dsi_pll_10nm_init(struct platform_device *pdev, int id) · 116 unmodified lines
117117 }
118118 #endif
119119 #ifdef CONFIG_DRM_MSM_DSI_7NM_PHY
120−struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev, int id);
120+struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev,
121+ enum msm_dsi_phy_type type, int id);
121122 #else
122123 static inline struct msm_dsi_pll *
123−msm_dsi_pll_7nm_init(struct platform_device *pdev, int id)
124+msm_dsi_pll_7nm_init(struct platform_device *pdev,
125+ enum msm_dsi_phy_type type, int id)
124126 {
125127 return ERR_PTR(-ENODEV);
126128 }
drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c+6−5
@@ -325,7 +325,7 @@ static void dsi_pll_commit(struct dsi_pll_7nm *pll) · 324 unmodified lines
325325 pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_LOW_1, reg->frac_div_start_low);
326326 pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_MID_1, reg->frac_div_start_mid);
327327 pll_write(base + REG_DSI_7nm_PHY_PLL_FRAC_DIV_START_HIGH_1, reg->frac_div_start_high);
328− pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCKDET_RATE_1, 0x40);
328+ pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCKDET_RATE_1, reg->pll_lockdet_rate);
329329 pll_write(base + REG_DSI_7nm_PHY_PLL_PLL_LOCK_DELAY, 0x06);
330330 pll_write(base + REG_DSI_7nm_PHY_PLL_CMODE_1, 0x10); /* TODO: 0x00 for CPHY */
331331 pll_write(base + REG_DSI_7nm_PHY_PLL_CLOCK_INVERTERS, reg->pll_clock_inverters);
@@ -509,6 +509,7 @@ static unsigned long dsi_pll_7nm_vco_recalc_rate(struct clk_hw *hw, · 177 unmodified lines
509509 {
510510 struct msm_dsi_pll *pll = hw_clk_to_pll(hw);
511511 struct dsi_pll_7nm *pll_7nm = to_pll_7nm(pll);
512+ struct dsi_pll_config *config = &pll_7nm->pll_configuration;
512513 void __iomem *base = pll_7nm->mmio;
513514 u64 ref_clk = pll_7nm->vco_ref_clk_rate;
514515 u64 vco_rate = 0x0;
@@ -529,9 +530,8 @@ static unsigned long dsi_pll_7nm_vco_recalc_rate(struct clk_hw *hw, · 14 unmodified lines
529530 /*
530531 * TODO:
531532 * 1. Assumes prescaler is disabled
532− * 2. Multiplier is 2^18. it should be 2^(num_of_frac_bits)
533533 */
534− multiplier = 1 << 18;
534+ multiplier = 1 << config->frac_bits;
535535 pll_freq = dec * (ref_clk * 2);
536536 tmp64 = (ref_clk * 2 * frac);
537537 pll_freq += div_u64(tmp64, multiplier);
@@ -852,7 +852,8 @@ err_base_clk_hw: · 314 unmodified lines
852852 return ret;
853853 }
854854
855−struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev, int id)
855+struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev,
856+ enum msm_dsi_phy_type type, int id)
856857 {
857858 struct dsi_pll_7nm *pll_7nm;
858859 struct msm_dsi_pll *pll;
@@ -885,7 +886,7 @@ struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev, int id) · 26 unmodified lines
885886 pll = &pll_7nm->base;
886887 pll->min_rate = 1000000000UL;
887888 pll->max_rate = 3500000000UL;
888− if (pll->type == MSM_DSI_PHY_7NM_V4_1) {
889+ if (type == MSM_DSI_PHY_7NM_V4_1) {
889890 pll->min_rate = 600000000UL;
890891 pll->max_rate = (unsigned long)5000000000ULL;
891892 /* workaround for max rate overflowing on 32-bit builds: */
drivers/gpu/drm/msm/msm_atomic.c+5−2
@@ -57,10 +57,13 @@ static void vblank_put(struct msm_kms *kms, unsigned crtc_mask) · 56 unmodified lines
5757
5858 static void lock_crtcs(struct msm_kms *kms, unsigned int crtc_mask)
5959 {
60+ int crtc_index;
6061 struct drm_crtc *crtc;
6162
62− for_each_crtc_mask(kms->dev, crtc, crtc_mask)
63− mutex_lock(&kms->commit_lock[drm_crtc_index(crtc)]);
63+ for_each_crtc_mask(kms->dev, crtc, crtc_mask) {
64+ crtc_index = drm_crtc_index(crtc);
65+ mutex_lock_nested(&kms->commit_lock[crtc_index], crtc_index);
66+ }
6467 }
6568
6669 static void unlock_crtcs(struct msm_kms *kms, unsigned int crtc_mask)
drivers/gpu/drm/msm/msm_drv.c+12−0
@@ -1072,6 +1072,10 @@ static int __maybe_unused msm_pm_resume(struct device *dev) · 1071 unmodified lines
10721072 static int __maybe_unused msm_pm_prepare(struct device *dev)
10731073 {
10741074 struct drm_device *ddev = dev_get_drvdata(dev);
1075+ struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
1076+
1077+ if (!priv || !priv->kms)
1078+ return 0;
10751079
10761080 return drm_mode_config_helper_suspend(ddev);
10771081 }
@@ -1079,6 +1083,10 @@ static int __maybe_unused msm_pm_prepare(struct device *dev) · 1 unmodified line
10791083 static void __maybe_unused msm_pm_complete(struct device *dev)
10801084 {
10811085 struct drm_device *ddev = dev_get_drvdata(dev);
1086+ struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
1087+
1088+ if (!priv || !priv->kms)
1089+ return;
10821090
10831091 drm_mode_config_helper_resume(ddev);
10841092 }
@@ -1311,6 +1319,10 @@ static int msm_pdev_remove(struct platform_device *pdev) · 226 unmodified lines
13111319 static void msm_pdev_shutdown(struct platform_device *pdev)
13121320 {
13131321 struct drm_device *drm = platform_get_drvdata(pdev);
1322+ struct msm_drm_private *priv = drm ? drm->dev_private : NULL;
1323+
1324+ if (!priv || !priv->kms)
1325+ return;
13141326
13151327 drm_atomic_helper_shutdown(drm);
13161328 }
drivers/gpu/drm/msm/msm_fence.c+1−1
@@ -45,7 +45,7 @@ int msm_wait_fence(struct msm_fence_context *fctx, uint32_t fence, · 44 unmodified lines
4545 int ret;
4646
4747 if (fence > fctx->last_fence) {
48− DRM_ERROR("%s: waiting on invalid fence: %u (of %u)\n",
48+ DRM_ERROR_RATELIMITED("%s: waiting on invalid fence: %u (of %u)\n",
4949 fctx->name, fence, fctx->last_fence);
5050 return -EINVAL;
5151 }
drivers/gpu/drm/msm/msm_kms.h+2−6
@@ -157,7 +157,6 @@ struct msm_kms { · 156 unmodified lines
157157 * from the crtc's pending_timer close to end of the frame:
158158 */
159159 struct mutex commit_lock[MAX_CRTCS];
160− struct lock_class_key commit_lock_keys[MAX_CRTCS];
161160 unsigned pending_crtc_mask;
162161 struct msm_pending_timer pending_timers[MAX_CRTCS];
163162 };
@@ -167,11 +166,8 @@ static inline int msm_kms_init(struct msm_kms *kms, · 3 unmodified lines
167166 {
168167 unsigned i, ret;
169168
170− for (i = 0; i < ARRAY_SIZE(kms->commit_lock); i++) {
171− lockdep_register_key(&kms->commit_lock_keys[i]);
172− __mutex_init(&kms->commit_lock[i], "&kms->commit_lock[i]",
173− &kms->commit_lock_keys[i]);
174− }
169+ for (i = 0; i < ARRAY_SIZE(kms->commit_lock); i++)
170+ mutex_init(&kms->commit_lock[i]);
175171
176172 kms->funcs = funcs;
177173
drivers/gpu/drm/nouveau/dispnv50/disp.c+12−1
@@ -2693,9 +2693,20 @@ nv50_display_create(struct drm_device *dev) · 2692 unmodified lines
26932693 else
26942694 nouveau_display(dev)->format_modifiers = disp50xx_modifiers;
26952695
2696− if (disp->disp->object.oclass >= GK104_DISP) {
2696+ /* FIXME: 256x256 cursors are supported on Kepler, however unlike Maxwell and later
2697+ * generations Kepler requires that we use small pages (4K) for cursor scanout surfaces. The
2698+ * proper fix for this is to teach nouveau to migrate fbs being used for the cursor plane to
2699+ * small page allocations in prepare_fb(). When this is implemented, we should also force
2700+ * large pages (128K) for ovly fbs in order to fix Kepler ovlys.
2701+ * But until then, just limit cursors to 128x128 - which is small enough to avoid ever using
2702+ * large pages.
2703+ */
2704+ if (disp->disp->object.oclass >= GM107_DISP) {
26972705 dev->mode_config.cursor_width = 256;
26982706 dev->mode_config.cursor_height = 256;
2707+ } else if (disp->disp->object.oclass >= GK104_DISP) {
2708+ dev->mode_config.cursor_width = 128;
2709+ dev->mode_config.cursor_height = 128;
26992710 } else {
27002711 dev->mode_config.cursor_width = 64;
27012712 dev->mode_config.cursor_height = 64;
drivers/gpu/drm/nouveau/nouveau_bo.c+8−0
@@ -551,6 +551,10 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo) · 550 unmodified lines
551551
552552 if (!ttm_dma)
553553 return;
554+ if (!ttm_dma->pages) {
555+ NV_DEBUG(drm, "ttm_dma 0x%p: pages NULL\n", ttm_dma);
556+ return;
557+ }
554558
555559 /* Don't waste time looping if the object is coherent */
556560 if (nvbo->force_coherent)
@@ -583,6 +587,10 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo) · 26 unmodified lines
583587
584588 if (!ttm_dma)
585589 return;
590+ if (!ttm_dma->pages) {
591+ NV_DEBUG(drm, "ttm_dma 0x%p: pages NULL\n", ttm_dma);
592+ return;
593+ }
586594
587595 /* Don't waste time looping if the object is coherent */
588596 if (nvbo->force_coherent)
drivers/gpu/drm/omapdrm/dss/dsi.c+4−3
@@ -2149,11 +2149,12 @@ static int dsi_vc_send_short(struct dsi_data *dsi, int vc, · 2148 unmodified lines
21492149 const struct mipi_dsi_msg *msg)
21502150 {
21512151 struct mipi_dsi_packet pkt;
2152+ int ret;
21522153 u32 r;
21532154
2154− r = mipi_dsi_create_packet(&pkt, msg);
2155− if (r < 0)
2156− return r;
2155+ ret = mipi_dsi_create_packet(&pkt, msg);
2156+ if (ret < 0)
2157+ return ret;
21572158
21582159 WARN_ON(!dsi_bus_is_locked(dsi));
21592160
drivers/gpu/drm/rcar-du/rcar_du_encoder.c+6−25
@@ -48,21 +48,12 @@ static unsigned int rcar_du_encoder_count_ports(struct device_node *node) · 47 unmodified lines
4848 static const struct drm_encoder_funcs rcar_du_encoder_funcs = {
4949 };
5050
51−static void rcar_du_encoder_release(struct drm_device *dev, void *res)
52−{
53− struct rcar_du_encoder *renc = res;
54−
55− drm_encoder_cleanup(&renc->base);
56− kfree(renc);
57−}
58−
5951 int rcar_du_encoder_init(struct rcar_du_device *rcdu,
6052 enum rcar_du_output output,
6153 struct device_node *enc_node)
6254 {
6355 struct rcar_du_encoder *renc;
6456 struct drm_bridge *bridge;
65− int ret;
6657
6758 /*
6859 * Locate the DRM bridge from the DT node. For the DPAD outputs, if the
@@ -101,26 +92,16 @@ int rcar_du_encoder_init(struct rcar_du_device *rcdu, · 32 unmodified lines
10192 return -ENOLINK;
10293 }
10394
104− renc = kzalloc(sizeof(*renc), GFP_KERNEL);
105− if (renc == NULL)
106− return -ENOMEM;
107−
108− renc->output = output;
109−
11095 dev_dbg(rcdu->dev, "initializing encoder %pOF for output %u\n",
11196 enc_node, output);
11297
113− ret = drm_encoder_init(&rcdu->ddev, &renc->base, &rcar_du_encoder_funcs,
114− DRM_MODE_ENCODER_NONE, NULL);
115− if (ret < 0) {
116− kfree(renc);
117− return ret;
118− }
98+ renc = drmm_encoder_alloc(&rcdu->ddev, struct rcar_du_encoder, base,
99+ &rcar_du_encoder_funcs, DRM_MODE_ENCODER_NONE,
100+ NULL);
101+ if (!renc)
102+ return -ENOMEM;
119103
120− ret = drmm_add_action_or_reset(&rcdu->ddev, rcar_du_encoder_release,
121− renc);
122− if (ret)
123− return ret;
104+ renc->output = output;
124105
125106 /*
126107 * Attach the bridge to the encoder. The bridge will create the
drivers/gpu/drm/tegra/dc.c+13−17
@@ -1688,6 +1688,11 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, · 1687 unmodified lines
16881688 dev_err(dc->dev,
16891689 "failed to set clock rate to %lu Hz\n",
16901690 state->pclk);
1691+
1692+ err = clk_set_rate(dc->clk, state->pclk);
1693+ if (err < 0)
1694+ dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n",
1695+ dc->clk, state->pclk, err);
16911696 }
16921697
16931698 DRM_DEBUG_KMS("rate: %lu, div: %u\n", clk_get_rate(dc->clk),
@@ -1698,11 +1703,6 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, · 4 unmodified lines
16981703 value = SHIFT_CLK_DIVIDER(state->div) | PIXEL_CLK_DIVIDER_PCD1;
16991704 tegra_dc_writel(dc, value, DC_DISP_DISP_CLOCK_CONTROL);
17001705 }
1701−
1702− err = clk_set_rate(dc->clk, state->pclk);
1703− if (err < 0)
1704− dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n",
1705− dc->clk, state->pclk, err);
17061706 }
17071707
17081708 static void tegra_dc_stop(struct tegra_dc *dc)
@@ -2501,22 +2501,18 @@ static int tegra_dc_couple(struct tegra_dc *dc) · 792 unmodified lines
25012501 * POWER_CONTROL registers during CRTC enabling.
25022502 */
25032503 if (dc->soc->coupled_pm && dc->pipe == 1) {
2504− u32 flags = DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_CONSUMER;
2505− struct device_link *link;
2506− struct device *partner;
2504+ struct device *companion;
2505+ struct tegra_dc *parent;
25072506
2508− partner = driver_find_device(dc->dev->driver, NULL, NULL,
2509− tegra_dc_match_by_pipe);
2510− if (!partner)
2507+ companion = driver_find_device(dc->dev->driver, NULL, (const void *)0,
2508+ tegra_dc_match_by_pipe);
2509+ if (!companion)
25112510 return -EPROBE_DEFER;
25122511
2513− link = device_link_add(dc->dev, partner, flags);
2514− if (!link) {
2515− dev_err(dc->dev, "failed to link controllers\n");
2516− return -EINVAL;
2517− }
2512+ parent = dev_get_drvdata(companion);
2513+ dc->client.parent = &parent->client;
25182514
2519− dev_dbg(dc->dev, "coupled to %s\n", dev_name(partner));
2515+ dev_dbg(dc->dev, "coupled to %s\n", dev_name(companion));
25202516 }
25212517
25222518 return 0;
drivers/gpu/drm/tegra/sor.c+7−0
@@ -3115,6 +3115,12 @@ static int tegra_sor_init(struct host1x_client *client) · 3114 unmodified lines
31153115 * kernel is possible.
31163116 */
31173117 if (sor->rst) {
3118+ err = pm_runtime_resume_and_get(sor->dev);
3119+ if (err < 0) {
3120+ dev_err(sor->dev, "failed to get runtime PM: %d\n", err);
3121+ return err;
3122+ }
3123+
31183124 err = reset_control_acquire(sor->rst);
31193125 if (err < 0) {
31203126 dev_err(sor->dev, "failed to acquire SOR reset: %d\n",
@@ -3148,6 +3154,7 @@ static int tegra_sor_init(struct host1x_client *client) · 27 unmodified lines
31483154 }
31493155
31503156 reset_control_release(sor->rst);
3157+ pm_runtime_put(sor->dev);
31513158 }
31523159
31533160 err = clk_prepare_enable(sor->clk_safe);
drivers/gpu/host1x/bus.c+6−4
@@ -705,8 +705,9 @@ void host1x_driver_unregister(struct host1x_driver *driver) · 704 unmodified lines
705705 EXPORT_SYMBOL(host1x_driver_unregister);
706706
707707 /**
708− * host1x_client_register() - register a host1x client
708+ * __host1x_client_register() - register a host1x client
709709 * @client: host1x client
710+ * @key: lock class key for the client-specific mutex
710711 *
711712 * Registers a host1x client with each host1x controller instance. Note that
712713 * each client will only match their parent host1x controller and will only be
@@ -715,13 +716,14 @@ EXPORT_SYMBOL(host1x_driver_unregister); · 2 unmodified lines
715716 * device and call host1x_device_init(), which will in turn call each client's
716717 * &host1x_client_ops.init implementation.
717718 */
718−int host1x_client_register(struct host1x_client *client)
719+int __host1x_client_register(struct host1x_client *client,
720+ struct lock_class_key *key)
719721 {
720722 struct host1x *host1x;
721723 int err;
722724
723725 INIT_LIST_HEAD(&client->list);
724− mutex_init(&client->lock);
726+ __mutex_init(&client->lock, "host1x client lock", key);
725727 client->usecount = 0;
726728
727729 mutex_lock(&devices_lock);
@@ -742,7 +744,7 @@ int host1x_client_register(struct host1x_client *client) · 14 unmodified lines
742744
743745 return 0;
744746 }
745−EXPORT_SYMBOL(host1x_client_register);
747+EXPORT_SYMBOL(__host1x_client_register);
746748
747749 /**
748750 * host1x_client_unregister() - unregister a host1x client
drivers/iio/adc/Kconfig+3−0
@@ -266,6 +266,8 @@ config ADI_AXI_ADC · 265 unmodified lines
266266 select IIO_BUFFER
267267 select IIO_BUFFER_HW_CONSUMER
268268 select IIO_BUFFER_DMAENGINE
269+ depends on HAS_IOMEM
270+ depends on OF
269271 help
270272 Say yes here to build support for Analog Devices Generic
271273 AXI ADC IP core. The IP core is used for interfacing with
@@ -923,6 +925,7 @@ config STM32_ADC_CORE · 651 unmodified lines
923925 depends on ARCH_STM32 || COMPILE_TEST
924926 depends on OF
925927 depends on REGULATOR
928+ depends on HAS_IOMEM
926929 select IIO_BUFFER
927930 select MFD_STM32_TIMERS
928931 select IIO_STM32_TIMER_TRIGGER
drivers/iio/adc/ab8500-gpadc.c+1−1
@@ -918,7 +918,7 @@ static int ab8500_gpadc_read_raw(struct iio_dev *indio_dev, · 917 unmodified lines
918918 return processed;
919919
920920 /* Return millivolt or milliamps or millicentigrades */
921− *val = processed * 1000;
921+ *val = processed;
922922 return IIO_VAL_INT;
923923 }
924924
drivers/iio/adc/ad7949.c+1−1
@@ -91,7 +91,7 @@ static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val, · 90 unmodified lines
9191 int ret;
9292 int i;
9393 int bits_per_word = ad7949_adc->resolution;
94− int mask = GENMASK(ad7949_adc->resolution, 0);
94+ int mask = GENMASK(ad7949_adc->resolution - 1, 0);
9595 struct spi_message msg;
9696 struct spi_transfer tx[] = {
9797 {
drivers/iio/adc/qcom-spmi-vadc.c+1−1
@@ -597,7 +597,7 @@ static const struct vadc_channels vadc_chans[] = { · 596 unmodified lines
597597 VADC_CHAN_NO_SCALE(P_MUX16_1_3, 1)
598598
599599 VADC_CHAN_NO_SCALE(LR_MUX1_BAT_THERM, 0)
600− VADC_CHAN_NO_SCALE(LR_MUX2_BAT_ID, 0)
600+ VADC_CHAN_VOLT(LR_MUX2_BAT_ID, 0, SCALE_DEFAULT)
601601 VADC_CHAN_NO_SCALE(LR_MUX3_XO_THERM, 0)
602602 VADC_CHAN_NO_SCALE(LR_MUX4_AMUX_THM1, 0)
603603 VADC_CHAN_NO_SCALE(LR_MUX5_AMUX_THM2, 0)
drivers/iio/gyro/mpu3050-core.c+2−0
@@ -551,6 +551,8 @@ static irqreturn_t mpu3050_trigger_handler(int irq, void *p) · 550 unmodified lines
551551 MPU3050_FIFO_R,
552552 &fifo_values[offset],
553553 toread);
554+ if (ret)
555+ goto out_trigger_unlock;
554556
555557 dev_dbg(mpu3050->dev,
556558 "%04x %04x %04x %04x %04x\n",
drivers/iio/humidity/hid-sensor-humidity.c+7−5
@@ -15,7 +15,10 @@ · 14 unmodified lines
1515 struct hid_humidity_state {
1616 struct hid_sensor_common common_attributes;
1717 struct hid_sensor_hub_attribute_info humidity_attr;
18− s32 humidity_data;
18+ struct {
19+ s32 humidity_data;
20+ u64 timestamp __aligned(8);
21+ } scan;
1922 int scale_pre_decml;
2023 int scale_post_decml;
2124 int scale_precision;
@@ -125,9 +128,8 @@ static int humidity_proc_event(struct hid_sensor_hub_device *hsdev, · 103 unmodified lines
125128 struct hid_humidity_state *humid_st = iio_priv(indio_dev);
126129
127130 if (atomic_read(&humid_st->common_attributes.data_ready))
128− iio_push_to_buffers_with_timestamp(indio_dev,
129− &humid_st->humidity_data,
130− iio_get_time_ns(indio_dev));
131+ iio_push_to_buffers_with_timestamp(indio_dev, &humid_st->scan,
132+ iio_get_time_ns(indio_dev));
131133
132134 return 0;
133135 }
@@ -142,7 +144,7 @@ static int humidity_capture_sample(struct hid_sensor_hub_device *hsdev, · 8 unmodified lines
142144
143145 switch (usage_id) {
144146 case HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY:
145− humid_st->humidity_data = *(s32 *)raw_data;
147+ humid_st->scan.humidity_data = *(s32 *)raw_data;
146148
147149 return 0;
148150 default:
drivers/iio/imu/adis16400.c+1−2
@@ -462,8 +462,7 @@ static int adis16400_initial_setup(struct iio_dev *indio_dev) · 461 unmodified lines
462462 if (ret)
463463 goto err_ret;
464464
465− ret = sscanf(indio_dev->name, "adis%u\n", &device_id);
466− if (ret != 1) {
465+ if (sscanf(indio_dev->name, "adis%u\n", &device_id) != 1) {
467466 ret = -EINVAL;
468467 goto err_ret;
469468 }
drivers/iio/light/hid-sensor-prox.c+11−2
@@ -23,6 +23,9 @@ struct prox_state { · 22 unmodified lines
2323 struct hid_sensor_common common_attributes;
2424 struct hid_sensor_hub_attribute_info prox_attr;
2525 u32 human_presence;
26+ int scale_pre_decml;
27+ int scale_post_decml;
28+ int scale_precision;
2629 };
2730
2831 /* Channel definitions */
@@ -93,8 +96,9 @@ static int prox_read_raw(struct iio_dev *indio_dev, · 64 unmodified lines
9396 ret_type = IIO_VAL_INT;
9497 break;
9598 case IIO_CHAN_INFO_SCALE:
96− *val = prox_state->prox_attr.units;
97− ret_type = IIO_VAL_INT;
99+ *val = prox_state->scale_pre_decml;
100+ *val2 = prox_state->scale_post_decml;
101+ ret_type = prox_state->scale_precision;
98102 break;
99103 case IIO_CHAN_INFO_OFFSET:
100104 *val = hid_sensor_convert_exponent(
@@ -234,6 +238,11 @@ static int prox_parse_report(struct platform_device *pdev, · 133 unmodified lines
234238 HID_USAGE_SENSOR_HUMAN_PRESENCE,
235239 &st->common_attributes.sensitivity);
236240
241+ st->scale_precision = hid_sensor_format_scale(
242+ hsdev->usage,
243+ &st->prox_attr,
244+ &st->scale_pre_decml, &st->scale_post_decml);
245+
237246 return ret;
238247 }
239248
drivers/iio/temperature/hid-sensor-temperature.c+8−6
@@ -15,7 +15,10 @@ · 14 unmodified lines
1515 struct temperature_state {
1616 struct hid_sensor_common common_attributes;
1717 struct hid_sensor_hub_attribute_info temperature_attr;
18− s32 temperature_data;
18+ struct {
19+ s32 temperature_data;
20+ u64 timestamp __aligned(8);
21+ } scan;
1922 int scale_pre_decml;
2023 int scale_post_decml;
2124 int scale_precision;
@@ -32,7 +35,7 @@ static const struct iio_chan_spec temperature_channels[] = { · 10 unmodified lines
3235 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
3336 BIT(IIO_CHAN_INFO_HYSTERESIS),
3437 },
35− IIO_CHAN_SOFT_TIMESTAMP(3),
38+ IIO_CHAN_SOFT_TIMESTAMP(1),
3639 };
3740
3841 /* Adjust channel real bits based on report descriptor */
@@ -123,9 +126,8 @@ static int temperature_proc_event(struct hid_sensor_hub_device *hsdev, · 84 unmodified lines
123126 struct temperature_state *temp_st = iio_priv(indio_dev);
124127
125128 if (atomic_read(&temp_st->common_attributes.data_ready))
126− iio_push_to_buffers_with_timestamp(indio_dev,
127− &temp_st->temperature_data,
128− iio_get_time_ns(indio_dev));
129+ iio_push_to_buffers_with_timestamp(indio_dev, &temp_st->scan,
130+ iio_get_time_ns(indio_dev));
129131
130132 return 0;
131133 }
@@ -140,7 +142,7 @@ static int temperature_capture_sample(struct hid_sensor_hub_device *hsdev, · 8 unmodified lines
140142
141143 switch (usage_id) {
142144 case HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE:
143− temp_st->temperature_data = *(s32 *)raw_data;
145+ temp_st->scan.temperature_data = *(s32 *)raw_data;
144146 return 0;
145147 default:
146148 return -EINVAL;
drivers/infiniband/hw/cxgb4/cm.c+2−2
@@ -3610,13 +3610,13 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id) · 3609 unmodified lines
36103610 ep->com.local_addr.ss_family == AF_INET) {
36113611 err = cxgb4_remove_server_filter(
36123612 ep->com.dev->rdev.lldi.ports[0], ep->stid,
3613− ep->com.dev->rdev.lldi.rxq_ids[0], 0);
3613+ ep->com.dev->rdev.lldi.rxq_ids[0], false);
36143614 } else {
36153615 struct sockaddr_in6 *sin6;
36163616 c4iw_init_wr_wait(ep->com.wr_waitp);
36173617 err = cxgb4_remove_server(
36183618 ep->com.dev->rdev.lldi.ports[0], ep->stid,
3619− ep->com.dev->rdev.lldi.rxq_ids[0], 0);
3619+ ep->com.dev->rdev.lldi.rxq_ids[0], true);
36203620 if (err)
36213621 goto done;
36223622 err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
drivers/infiniband/hw/hns/hns_roce_hw_v2.c+3−1
@@ -1194,8 +1194,10 @@ static void hns_roce_cmq_init_regs(struct hns_roce_dev *hr_dev, bool ring_type) · 1193 unmodified lines
11941194 upper_32_bits(dma));
11951195 roce_write(hr_dev, ROCEE_TX_CMQ_DEPTH_REG,
11961196 (u32)ring->desc_num >> HNS_ROCE_CMQ_DESC_NUM_S);
1197− roce_write(hr_dev, ROCEE_TX_CMQ_HEAD_REG, 0);
1197+
1198+ /* Make sure to write tail first and then head */
11981199 roce_write(hr_dev, ROCEE_TX_CMQ_TAIL_REG, 0);
1200+ roce_write(hr_dev, ROCEE_TX_CMQ_HEAD_REG, 0);
11991201 } else {
12001202 roce_write(hr_dev, ROCEE_RX_CMQ_BASEADDR_L_REG, (u32)dma);
12011203 roce_write(hr_dev, ROCEE_RX_CMQ_BASEADDR_H_REG,
drivers/infiniband/hw/mlx5/devx.c+1−1
@@ -1116,7 +1116,7 @@ static void devx_obj_build_destroy_cmd(void *in, void *out, void *din, · 1115 unmodified lines
11161116 case MLX5_CMD_OP_CREATE_MKEY:
11171117 MLX5_SET(destroy_mkey_in, din, opcode,
11181118 MLX5_CMD_OP_DESTROY_MKEY);
1119− MLX5_SET(destroy_mkey_in, in, mkey_index, *obj_id);
1119+ MLX5_SET(destroy_mkey_in, din, mkey_index, *obj_id);
11201120 break;
11211121 case MLX5_CMD_OP_CREATE_CQ:
11221122 MLX5_SET(destroy_cq_in, din, opcode, MLX5_CMD_OP_DESTROY_CQ);
drivers/infiniband/hw/mlx5/qp.c+14−4
@@ -1078,7 +1078,7 @@ static int _create_kernel_qp(struct mlx5_ib_dev *dev, · 1077 unmodified lines
10781078
10791079 qpc = MLX5_ADDR_OF(create_qp_in, *in, qpc);
10801080 MLX5_SET(qpc, qpc, uar_page, uar_index);
1081− MLX5_SET(qpc, qpc, ts_format, MLX5_QPC_TIMESTAMP_FORMAT_DEFAULT);
1081+ MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(dev->mdev));
10821082 MLX5_SET(qpc, qpc, log_page_size, qp->buf.page_shift - MLX5_ADAPTER_PAGE_SHIFT);
10831083
10841084 /* Set "fast registration enabled" for all kernel QPs */
@@ -1188,7 +1188,8 @@ static int get_rq_ts_format(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *send_cq) · 103 unmodified lines
11881188 }
11891189 return MLX5_RQC_TIMESTAMP_FORMAT_FREE_RUNNING;
11901190 }
1191− return MLX5_RQC_TIMESTAMP_FORMAT_DEFAULT;
1191+ return fr_supported ? MLX5_RQC_TIMESTAMP_FORMAT_FREE_RUNNING :
1192+ MLX5_RQC_TIMESTAMP_FORMAT_DEFAULT;
11921193 }
11931194
11941195 static int get_sq_ts_format(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *send_cq)
@@ -1206,7 +1207,8 @@ static int get_sq_ts_format(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *send_cq) · 11 unmodified lines
12061207 }
12071208 return MLX5_SQC_TIMESTAMP_FORMAT_FREE_RUNNING;
12081209 }
1209− return MLX5_SQC_TIMESTAMP_FORMAT_DEFAULT;
1210+ return fr_supported ? MLX5_SQC_TIMESTAMP_FORMAT_FREE_RUNNING :
1211+ MLX5_SQC_TIMESTAMP_FORMAT_DEFAULT;
12101212 }
12111213
12121214 static int get_qp_ts_format(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *send_cq,
@@ -1217,7 +1219,8 @@ static int get_qp_ts_format(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *send_cq, · 4 unmodified lines
12171219 MLX5_QP_TIMESTAMP_FORMAT_CAP_FREE_RUNNING ||
12181220 MLX5_CAP_ROCE(dev->mdev, qp_ts_format) ==
12191221 MLX5_QP_TIMESTAMP_FORMAT_CAP_FREE_RUNNING_AND_REAL_TIME;
1220− int ts_format = MLX5_QPC_TIMESTAMP_FORMAT_DEFAULT;
1222+ int ts_format = fr_supported ? MLX5_QPC_TIMESTAMP_FORMAT_FREE_RUNNING :
1223+ MLX5_QPC_TIMESTAMP_FORMAT_DEFAULT;
12211224
12221225 if (recv_cq &&
12231226 recv_cq->create_flags & IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION)
@@ -1930,6 +1933,7 @@ static int create_xrc_tgt_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, · 706 unmodified lines
19301933 if (qp->flags & IB_QP_CREATE_MANAGED_RECV)
19311934 MLX5_SET(qpc, qpc, cd_slave_receive, 1);
19321935
1936+ MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(dev->mdev));
19331937 MLX5_SET(qpc, qpc, rq_type, MLX5_SRQ_RQ);
19341938 MLX5_SET(qpc, qpc, no_sq, 1);
19351939 MLX5_SET(qpc, qpc, cqn_rcv, to_mcq(devr->c0)->mcq.cqn);
@@ -4873,6 +4877,7 @@ static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, · 2937 unmodified lines
48734877 struct mlx5_ib_dev *dev;
48744878 int has_net_offloads;
48754879 __be64 *rq_pas0;
4880+ int ts_format;
48764881 void *in;
48774882 void *rqc;
48784883 void *wq;
@@ -4881,6 +4886,10 @@ static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, · 2 unmodified lines
48814886
48824887 dev = to_mdev(pd->device);
48834888
4889+ ts_format = get_rq_ts_format(dev, to_mcq(init_attr->cq));
4890+ if (ts_format < 0)
4891+ return ts_format;
4892+
48844893 inlen = MLX5_ST_SZ_BYTES(create_rq_in) + sizeof(u64) * rwq->rq_num_pas;
48854894 in = kvzalloc(inlen, GFP_KERNEL);
48864895 if (!in)
@@ -4890,6 +4899,7 @@ static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, · 3 unmodified lines
48904899 rqc = MLX5_ADDR_OF(create_rq_in, in, ctx);
48914900 MLX5_SET(rqc, rqc, mem_rq_type,
48924901 MLX5_RQC_MEM_RQ_TYPE_MEMORY_RQ_INLINE);
4902+ MLX5_SET(rqc, rqc, ts_format, ts_format);
48934903 MLX5_SET(rqc, rqc, user_index, rwq->user_index);
48944904 MLX5_SET(rqc, rqc, cqn, to_mcq(init_attr->cq)->mcq.cqn);
48954905 MLX5_SET(rqc, rqc, state, MLX5_RQC_STATE_RST);
drivers/input/joydev.c+0−1
@@ -26,7 +26,6 @@ · 25 unmodified lines
2626
2727 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
2828 MODULE_DESCRIPTION("Joystick device interfaces");
29−MODULE_SUPPORTED_DEVICE("input/js");
3029 MODULE_LICENSE("GPL");
3130
3231 #define JOYDEV_MINOR_BASE 0
drivers/interconnect/bulk.c+1−1
@@ -53,7 +53,7 @@ void icc_bulk_put(int num_paths, struct icc_bulk_data *paths) · 52 unmodified lines
5353 EXPORT_SYMBOL_GPL(icc_bulk_put);
5454
5555 /**
56− * icc_bulk_set() - set bandwidth to a set of paths
56+ * icc_bulk_set_bw() - set bandwidth to a set of paths
5757 * @num_paths: the number of icc_bulk_data
5858 * @paths: the icc_bulk_data table containing the paths and bandwidth
5959 *
drivers/interconnect/core.c+2−0
@@ -942,6 +942,8 @@ int icc_link_destroy(struct icc_node *src, struct icc_node *dst) · 941 unmodified lines
942942 GFP_KERNEL);
943943 if (new)
944944 src->links = new;
945+ else
946+ ret = -ENOMEM;
945947
946948 out:
947949 mutex_unlock(&icc_lock);
drivers/interconnect/qcom/msm8939.c+8−8
@@ -131,7 +131,7 @@ DEFINE_QNODE(mas_pcnoc_sdcc_1, MSM8939_MASTER_SDCC_1, 8, -1, -1, MSM8939_PNOC_IN · 130 unmodified lines
131131 DEFINE_QNODE(mas_pcnoc_sdcc_2, MSM8939_MASTER_SDCC_2, 8, -1, -1, MSM8939_PNOC_INT_1);
132132 DEFINE_QNODE(mas_qdss_bam, MSM8939_MASTER_QDSS_BAM, 8, -1, -1, MSM8939_SNOC_QDSS_INT);
133133 DEFINE_QNODE(mas_qdss_etr, MSM8939_MASTER_QDSS_ETR, 8, -1, -1, MSM8939_SNOC_QDSS_INT);
134−DEFINE_QNODE(mas_snoc_cfg, MSM8939_MASTER_SNOC_CFG, 4, 20, -1, MSM8939_SLAVE_SRVC_SNOC);
134+DEFINE_QNODE(mas_snoc_cfg, MSM8939_MASTER_SNOC_CFG, 4, -1, -1, MSM8939_SLAVE_SRVC_SNOC);
135135 DEFINE_QNODE(mas_spdm, MSM8939_MASTER_SPDM, 4, -1, -1, MSM8939_PNOC_MAS_0);
136136 DEFINE_QNODE(mas_tcu0, MSM8939_MASTER_TCU0, 16, -1, -1, MSM8939_SLAVE_EBI_CH0, MSM8939_BIMC_SNOC_MAS, MSM8939_SLAVE_AMPSS_L2);
137137 DEFINE_QNODE(mas_usb_hs1, MSM8939_MASTER_USB_HS1, 4, -1, -1, MSM8939_PNOC_MAS_1);
@@ -156,14 +156,14 @@ DEFINE_QNODE(pcnoc_snoc_mas, MSM8939_PNOC_SNOC_MAS, 8, 29, -1, MSM8939_PNOC_SNOC · 18 unmodified lines
156156 DEFINE_QNODE(pcnoc_snoc_slv, MSM8939_PNOC_SNOC_SLV, 8, -1, 45, MSM8939_SNOC_INT_0, MSM8939_SNOC_INT_BIMC, MSM8939_SNOC_INT_1);
157157 DEFINE_QNODE(qdss_int, MSM8939_SNOC_QDSS_INT, 8, -1, -1, MSM8939_SNOC_INT_0, MSM8939_SNOC_INT_BIMC);
158158 DEFINE_QNODE(slv_apps_l2, MSM8939_SLAVE_AMPSS_L2, 16, -1, -1, 0);
159−DEFINE_QNODE(slv_apss, MSM8939_SLAVE_APSS, 4, -1, 20, 0);
159+DEFINE_QNODE(slv_apss, MSM8939_SLAVE_APSS, 4, -1, -1, 0);
160160 DEFINE_QNODE(slv_audio, MSM8939_SLAVE_LPASS, 4, -1, -1, 0);
161161 DEFINE_QNODE(slv_bimc_cfg, MSM8939_SLAVE_BIMC_CFG, 4, -1, -1, 0);
162162 DEFINE_QNODE(slv_blsp_1, MSM8939_SLAVE_BLSP_1, 4, -1, -1, 0);
163163 DEFINE_QNODE(slv_boot_rom, MSM8939_SLAVE_BOOT_ROM, 4, -1, -1, 0);
164164 DEFINE_QNODE(slv_camera_cfg, MSM8939_SLAVE_CAMERA_CFG, 4, -1, -1, 0);
165−DEFINE_QNODE(slv_cats_0, MSM8939_SLAVE_CATS_128, 16, -1, 106, 0);
166−DEFINE_QNODE(slv_cats_1, MSM8939_SLAVE_OCMEM_64, 8, -1, 107, 0);
165+DEFINE_QNODE(slv_cats_0, MSM8939_SLAVE_CATS_128, 16, -1, -1, 0);
166+DEFINE_QNODE(slv_cats_1, MSM8939_SLAVE_OCMEM_64, 8, -1, -1, 0);
167167 DEFINE_QNODE(slv_clk_ctl, MSM8939_SLAVE_CLK_CTL, 4, -1, -1, 0);
168168 DEFINE_QNODE(slv_crypto_0_cfg, MSM8939_SLAVE_CRYPTO_0_CFG, 4, -1, -1, 0);
169169 DEFINE_QNODE(slv_dehr_cfg, MSM8939_SLAVE_DEHR_CFG, 4, -1, -1, 0);
@@ -187,20 +187,20 @@ DEFINE_QNODE(slv_sdcc_2, MSM8939_SLAVE_SDCC_2, 4, -1, -1, 0); · 17 unmodified lines
187187 DEFINE_QNODE(slv_security, MSM8939_SLAVE_SECURITY, 4, -1, -1, 0);
188188 DEFINE_QNODE(slv_snoc_cfg, MSM8939_SLAVE_SNOC_CFG, 4, -1, -1, 0);
189189 DEFINE_QNODE(slv_spdm, MSM8939_SLAVE_SPDM, 4, -1, -1, 0);
190−DEFINE_QNODE(slv_srvc_snoc, MSM8939_SLAVE_SRVC_SNOC, 8, -1, 29, 0);
190+DEFINE_QNODE(slv_srvc_snoc, MSM8939_SLAVE_SRVC_SNOC, 8, -1, -1, 0);
191191 DEFINE_QNODE(slv_tcsr, MSM8939_SLAVE_TCSR, 4, -1, -1, 0);
192192 DEFINE_QNODE(slv_tlmm, MSM8939_SLAVE_TLMM, 4, -1, -1, 0);
193193 DEFINE_QNODE(slv_usb_hs1, MSM8939_SLAVE_USB_HS1, 4, -1, -1, 0);
194194 DEFINE_QNODE(slv_usb_hs2, MSM8939_SLAVE_USB_HS2, 4, -1, -1, 0);
195195 DEFINE_QNODE(slv_venus_cfg, MSM8939_SLAVE_VENUS_CFG, 4, -1, -1, 0);
196−DEFINE_QNODE(snoc_bimc_0_mas, MSM8939_SNOC_BIMC_0_MAS, 16, 3, -1, MSM8939_SNOC_BIMC_0_SLV);
197−DEFINE_QNODE(snoc_bimc_0_slv, MSM8939_SNOC_BIMC_0_SLV, 16, -1, 24, MSM8939_SLAVE_EBI_CH0);
196+DEFINE_QNODE(snoc_bimc_0_mas, MSM8939_SNOC_BIMC_0_MAS, 16, -1, -1, MSM8939_SNOC_BIMC_0_SLV);
197+DEFINE_QNODE(snoc_bimc_0_slv, MSM8939_SNOC_BIMC_0_SLV, 16, -1, -1, MSM8939_SLAVE_EBI_CH0);
198198 DEFINE_QNODE(snoc_bimc_1_mas, MSM8939_SNOC_BIMC_1_MAS, 16, 76, -1, MSM8939_SNOC_BIMC_1_SLV);
199199 DEFINE_QNODE(snoc_bimc_1_slv, MSM8939_SNOC_BIMC_1_SLV, 16, -1, 104, MSM8939_SLAVE_EBI_CH0);
200200 DEFINE_QNODE(snoc_bimc_2_mas, MSM8939_SNOC_BIMC_2_MAS, 16, -1, -1, MSM8939_SNOC_BIMC_2_SLV);
201201 DEFINE_QNODE(snoc_bimc_2_slv, MSM8939_SNOC_BIMC_2_SLV, 16, -1, -1, MSM8939_SLAVE_EBI_CH0);
202202 DEFINE_QNODE(snoc_int_0, MSM8939_SNOC_INT_0, 8, 99, 130, MSM8939_SLAVE_QDSS_STM, MSM8939_SLAVE_IMEM, MSM8939_SNOC_PNOC_MAS);
203−DEFINE_QNODE(snoc_int_1, MSM8939_SNOC_INT_1, 8, 100, 131, MSM8939_SLAVE_APSS, MSM8939_SLAVE_CATS_128, MSM8939_SLAVE_OCMEM_64);
203+DEFINE_QNODE(snoc_int_1, MSM8939_SNOC_INT_1, 8, -1, -1, MSM8939_SLAVE_APSS, MSM8939_SLAVE_CATS_128, MSM8939_SLAVE_OCMEM_64);
204204 DEFINE_QNODE(snoc_int_bimc, MSM8939_SNOC_INT_BIMC, 8, 101, 132, MSM8939_SNOC_BIMC_1_MAS);
205205 DEFINE_QNODE(snoc_pcnoc_mas, MSM8939_SNOC_PNOC_MAS, 8, -1, -1, MSM8939_SNOC_PNOC_SLV);
206206 DEFINE_QNODE(snoc_pcnoc_slv, MSM8939_SNOC_PNOC_SLV, 8, -1, -1, MSM8939_PNOC_INT_0);
drivers/iommu/amd/init.c+20−16
@@ -2714,7 +2714,6 @@ static int __init early_amd_iommu_init(void) · 2713 unmodified lines
27142714 struct acpi_table_header *ivrs_base;
27152715 int i, remap_cache_sz, ret;
27162716 acpi_status status;
2717− u32 pci_id;
27182717
27192718 if (!amd_iommu_detected)
27202719 return -ENODEV;
@@ -2804,16 +2803,6 @@ static int __init early_amd_iommu_init(void) · 83 unmodified lines
28042803 if (ret)
28052804 goto out;
28062805
2807− /* Disable IOMMU if there's Stoney Ridge graphics */
2808− for (i = 0; i < 32; i++) {
2809− pci_id = read_pci_config(0, i, 0, 0);
2810− if ((pci_id & 0xffff) == 0x1002 && (pci_id >> 16) == 0x98e4) {
2811− pr_info("Disable IOMMU on Stoney Ridge\n");
2812− amd_iommu_disabled = true;
2813− break;
2814− }
2815− }
2816−
28172806 /* Disable any previously enabled IOMMUs */
28182807 if (!is_kdump_kernel() || amd_iommu_disabled)
28192808 disable_iommus();
@@ -2880,6 +2869,7 @@ static bool detect_ivrs(void) · 60 unmodified lines
28802869 {
28812870 struct acpi_table_header *ivrs_base;
28822871 acpi_status status;
2872+ int i;
28832873
28842874 status = acpi_get_table("IVRS", 0, &ivrs_base);
28852875 if (status == AE_NOT_FOUND)
@@ -2892,6 +2882,17 @@ static bool detect_ivrs(void) · 6 unmodified lines
28922882
28932883 acpi_put_table(ivrs_base);
28942884
2885+ /* Don't use IOMMU if there is Stoney Ridge graphics */
2886+ for (i = 0; i < 32; i++) {
2887+ u32 pci_id;
2888+
2889+ pci_id = read_pci_config(0, i, 0, 0);
2890+ if ((pci_id & 0xffff) == 0x1002 && (pci_id >> 16) == 0x98e4) {
2891+ pr_info("Disable IOMMU on Stoney Ridge\n");
2892+ return false;
2893+ }
2894+ }
2895+
28952896 /* Make sure ACS will be enabled during PCI probe */
28962897 pci_request_acs();
28972898
@@ -2918,12 +2919,12 @@ static int __init state_next(void) · 20 unmodified lines
29182919 }
29192920 break;
29202921 case IOMMU_IVRS_DETECTED:
2921− ret = early_amd_iommu_init();
2922− init_state = ret ? IOMMU_INIT_ERROR : IOMMU_ACPI_FINISHED;
2923− if (init_state == IOMMU_ACPI_FINISHED && amd_iommu_disabled) {
2924− pr_info("AMD IOMMU disabled\n");
2922+ if (amd_iommu_disabled) {
29252923 init_state = IOMMU_CMDLINE_DISABLED;
29262924 ret = -EINVAL;
2925+ } else {
2926+ ret = early_amd_iommu_init();
2927+ init_state = ret ? IOMMU_INIT_ERROR : IOMMU_ACPI_FINISHED;
29272928 }
29282929 break;
29292930 case IOMMU_ACPI_FINISHED:
@@ -3001,8 +3002,11 @@ int __init amd_iommu_prepare(void) · 71 unmodified lines
30013002 amd_iommu_irq_remap = true;
30023003
30033004 ret = iommu_go_to_state(IOMMU_ACPI_FINISHED);
3004− if (ret)
3005+ if (ret) {
3006+ amd_iommu_irq_remap = false;
30053007 return ret;
3008+ }
3009+
30063010 return amd_iommu_irq_remap ? 0 : -ENODEV;
30073011 }
30083012
drivers/iommu/tegra-smmu.c+3−4
@@ -849,12 +849,11 @@ static struct iommu_device *tegra_smmu_probe_device(struct device *dev) · 848 unmodified lines
849849 smmu = tegra_smmu_find(args.np);
850850 if (smmu) {
851851 err = tegra_smmu_configure(smmu, dev, &args);
852− of_node_put(args.np);
853852
854− if (err < 0)
853+ if (err < 0) {
854+ of_node_put(args.np);
855855 return ERR_PTR(err);
856−
857− break;
856+ }
858857 }
859858
860859 of_node_put(args.np);
drivers/isdn/capi/kcapi.c+2−2
@@ -721,7 +721,7 @@ u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb) · 720 unmodified lines
721721 * Return value: CAPI result code
722722 */
723723
724−u16 capi20_get_manufacturer(u32 contr, u8 *buf)
724+u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN])
725725 {
726726 struct capi_ctr *ctr;
727727 u16 ret;
@@ -787,7 +787,7 @@ u16 capi20_get_version(u32 contr, struct capi_version *verp) · 59 unmodified lines
787787 * Return value: CAPI result code
788788 */
789789
790−u16 capi20_get_serial(u32 contr, u8 *serial)
790+u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN])
791791 {
792792 struct capi_ctr *ctr;
793793 u16 ret;
drivers/isdn/hardware/mISDN/mISDNipac.c+1−1
@@ -694,7 +694,7 @@ isac_release(struct isac_hw *isac) · 693 unmodified lines
694694 {
695695 if (isac->type & IPAC_TYPE_ISACX)
696696 WriteISAC(isac, ISACX_MASK, 0xff);
697− else
697+ else if (isac->type != 0)
698698 WriteISAC(isac, ISAC_MASK, 0xff);
699699 if (isac->dch.timer.function != NULL) {
700700 del_timer(&isac->dch.timer);
drivers/md/dm-ioctl.c+1−1
@@ -529,7 +529,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ · 528 unmodified lines
529529 * Grab our output buffer.
530530 */
531531 nl = orig_nl = get_result_buffer(param, param_size, &len);
532− if (len < needed) {
532+ if (len < needed || len < sizeof(nl->dev)) {
533533 param->flags |= DM_BUFFER_FULL_FLAG;
534534 goto out;
535535 }
drivers/md/dm-table.c+25−8
@@ -1594,6 +1594,13 @@ static int device_not_zoned_model(struct dm_target *ti, struct dm_dev *dev, · 1593 unmodified lines
15941594 return blk_queue_zoned_model(q) != *zoned_model;
15951595 }
15961596
1597+/*
1598+ * Check the device zoned model based on the target feature flag. If the target
1599+ * has the DM_TARGET_ZONED_HM feature flag set, host-managed zoned devices are
1600+ * also accepted but all devices must have the same zoned model. If the target
1601+ * has the DM_TARGET_MIXED_ZONED_MODEL feature set, the devices can have any
1602+ * zoned model with all zoned devices having the same zone size.
1603+ */
15971604 static bool dm_table_supports_zoned_model(struct dm_table *t,
15981605 enum blk_zoned_model zoned_model)
15991606 {
@@ -1603,13 +1610,15 @@ static bool dm_table_supports_zoned_model(struct dm_table *t, · 3 unmodified lines
16031610 for (i = 0; i < dm_table_get_num_targets(t); i++) {
16041611 ti = dm_table_get_target(t, i);
16051612
1606− if (zoned_model == BLK_ZONED_HM &&
1607− !dm_target_supports_zoned_hm(ti->type))
1608− return false;
1609−
1610− if (!ti->type->iterate_devices ||
1611− ti->type->iterate_devices(ti, device_not_zoned_model, &zoned_model))
1612− return false;
1613+ if (dm_target_supports_zoned_hm(ti->type)) {
1614+ if (!ti->type->iterate_devices ||
1615+ ti->type->iterate_devices(ti, device_not_zoned_model,
1616+ &zoned_model))
1617+ return false;
1618+ } else if (!dm_target_supports_mixed_zoned_model(ti->type)) {
1619+ if (zoned_model == BLK_ZONED_HM)
1620+ return false;
1621+ }
16131622 }
16141623
16151624 return true;
@@ -1621,9 +1630,17 @@ static int device_not_matches_zone_sectors(struct dm_target *ti, struct dm_dev * · 5 unmodified lines
16211630 struct request_queue *q = bdev_get_queue(dev->bdev);
16221631 unsigned int *zone_sectors = data;
16231632
1633+ if (!blk_queue_is_zoned(q))
1634+ return 0;
1635+
16241636 return blk_queue_zone_sectors(q) != *zone_sectors;
16251637 }
16261638
1639+/*
1640+ * Check consistency of zoned model and zone sectors across all targets. For
1641+ * zone sectors, if the destination device is a zoned block device, it shall
1642+ * have the specified zone_sectors.
1643+ */
16271644 static int validate_hardware_zoned_model(struct dm_table *table,
16281645 enum blk_zoned_model zoned_model,
16291646 unsigned int zone_sectors)
@@ -1642,7 +1659,7 @@ static int validate_hardware_zoned_model(struct dm_table *table, · 12 unmodified lines
16421659 return -EINVAL;
16431660
16441661 if (dm_table_any_dev_attr(table, device_not_matches_zone_sectors, &zone_sectors)) {
1645− DMERR("%s: zone sectors is not consistent across all devices",
1662+ DMERR("%s: zone sectors is not consistent across all zoned devices",
16461663 dm_device_name(table->md));
16471664 return -EINVAL;
16481665 }
drivers/md/dm-verity-target.c+1−1
@@ -34,7 +34,7 @@ · 33 unmodified lines
3434 #define DM_VERITY_OPT_IGN_ZEROES "ignore_zero_blocks"
3535 #define DM_VERITY_OPT_AT_MOST_ONCE "check_at_most_once"
3636
37−#define DM_VERITY_OPTS_MAX (2 + DM_VERITY_OPTS_FEC + \
37+#define DM_VERITY_OPTS_MAX (3 + DM_VERITY_OPTS_FEC + \
3838 DM_VERITY_ROOT_HASH_VERIFICATION_OPTS)
3939
4040 static unsigned dm_verity_prefetch_cluster = DM_VERITY_DEFAULT_PREFETCH_SIZE;
drivers/md/dm-zoned-target.c+1−1
@@ -1143,7 +1143,7 @@ static int dmz_message(struct dm_target *ti, unsigned int argc, char **argv, · 1142 unmodified lines
11431143 static struct target_type dmz_type = {
11441144 .name = "zoned",
11451145 .version = {2, 0, 0},
1146− .features = DM_TARGET_SINGLETON | DM_TARGET_ZONED_HM,
1146+ .features = DM_TARGET_SINGLETON | DM_TARGET_MIXED_ZONED_MODEL,
11471147 .module = THIS_MODULE,
11481148 .ctr = dmz_ctr,
11491149 .dtr = dmz_dtr,
drivers/md/dm.c+4−1
@@ -2036,7 +2036,10 @@ static struct dm_table *__bind(struct mapped_device *md, struct dm_table *t, · 2035 unmodified lines
20362036 if (size != dm_get_size(md))
20372037 memset(&md->geometry, 0, sizeof(md->geometry));
20382038
2039− set_capacity_and_notify(md->disk, size);
2039+ if (!get_capacity(md->disk))
2040+ set_capacity(md->disk, size);
2041+ else
2042+ set_capacity_and_notify(md->disk, size);
20402043
20412044 dm_table_event_callback(t, event_callback, md);
20422045
drivers/media/firewire/firedtv-fw.c+0−1
@@ -430,4 +430,3 @@ MODULE_AUTHOR("Andreas Monitzer <andy@monitzer.com>"); · 429 unmodified lines
430430 MODULE_AUTHOR("Ben Backx <ben@bbackx.com>");
431431 MODULE_DESCRIPTION("FireDTV DVB Driver");
432432 MODULE_LICENSE("GPL");
433−MODULE_SUPPORTED_DEVICE("FireDTV DVB");
drivers/media/pci/cx18/cx18-alsa-main.c+0−1
@@ -41,7 +41,6 @@ MODULE_PARM_DESC(debug, · 40 unmodified lines
4141
4242 MODULE_AUTHOR("Andy Walls");
4343 MODULE_DESCRIPTION("CX23418 ALSA Interface");
44−MODULE_SUPPORTED_DEVICE("CX23418 MPEG2 encoder");
4544 MODULE_LICENSE("GPL");
4645
4746 MODULE_VERSION(CX18_VERSION);
drivers/media/pci/cx18/cx18-driver.c+0−1
@@ -232,7 +232,6 @@ MODULE_PARM_DESC(cx18_first_minor, · 231 unmodified lines
232232
233233 MODULE_AUTHOR("Hans Verkuil");
234234 MODULE_DESCRIPTION("CX23418 driver");
235−MODULE_SUPPORTED_DEVICE("CX23418 MPEG2 encoder");
236235 MODULE_LICENSE("GPL");
237236
238237 MODULE_VERSION(CX18_VERSION);
drivers/media/pci/cx25821/cx25821-alsa.c+0−1
@@ -104,7 +104,6 @@ MODULE_PARM_DESC(index, "Index value for cx25821 capture interface(s)."); · 103 unmodified lines
104104 MODULE_DESCRIPTION("ALSA driver module for cx25821 based capture cards");
105105 MODULE_AUTHOR("Hiep Huynh");
106106 MODULE_LICENSE("GPL");
107−MODULE_SUPPORTED_DEVICE("{{Conexant,25821}"); /* "{{Conexant,23881}," */
108107
109108 static unsigned int debug;
110109 module_param(debug, int, 0644);
drivers/media/pci/cx88/cx88-alsa.c+0−1
@@ -98,7 +98,6 @@ MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@kernel.org>"); · 97 unmodified lines
9898 MODULE_LICENSE("GPL v2");
9999 MODULE_VERSION(CX88_VERSION);
100100
101−MODULE_SUPPORTED_DEVICE("{{Conexant,23881},{{Conexant,23882},{{Conexant,23883}");
102101 static unsigned int debug;
103102 module_param(debug, int, 0644);
104103 MODULE_PARM_DESC(debug, "enable debug messages");
drivers/media/pci/ivtv/ivtv-alsa-main.c+0−1
@@ -38,7 +38,6 @@ MODULE_PARM_DESC(index, · 37 unmodified lines
3838
3939 MODULE_AUTHOR("Andy Walls");
4040 MODULE_DESCRIPTION("CX23415/CX23416 ALSA Interface");
41−MODULE_SUPPORTED_DEVICE("CX23415/CX23416 MPEG2 encoder");
4241 MODULE_LICENSE("GPL");
4342
4443 MODULE_VERSION(IVTV_VERSION);
drivers/media/pci/ivtv/ivtv-driver.c+0−3
@@ -275,9 +275,6 @@ MODULE_PARM_DESC(ivtv_first_minor, "Set device node number assigned to first car · 274 unmodified lines
275275
276276 MODULE_AUTHOR("Kevin Thayer, Chris Kennedy, Hans Verkuil");
277277 MODULE_DESCRIPTION("CX23415/CX23416 driver");
278−MODULE_SUPPORTED_DEVICE
279− ("CX23415/CX23416 MPEG2 encoder (WinTV PVR-150/250/350/500,\n"
280− "\t\t\tYuan MPG series and similar)");
281278 MODULE_LICENSE("GPL");
282279
283280 MODULE_VERSION(IVTV_VERSION);
drivers/media/pci/sta2x11/sta2x11_vip.c+0−1
@@ -1269,6 +1269,5 @@ late_initcall_sync(sta2x11_vip_init_module); · 1268 unmodified lines
12691269 MODULE_DESCRIPTION("STA2X11 Video Input Port driver");
12701270 MODULE_AUTHOR("Wind River");
12711271 MODULE_LICENSE("GPL v2");
1272−MODULE_SUPPORTED_DEVICE("sta2x11 video input");
12731272 MODULE_VERSION(DRV_VERSION);
12741273 MODULE_DEVICE_TABLE(pci, sta2x11_vip_pci_tbl);
drivers/media/platform/atmel/atmel-isi.c+0−1
@@ -1363,4 +1363,3 @@ module_platform_driver(atmel_isi_driver); · 1362 unmodified lines
13631363 MODULE_AUTHOR("Josh Wu <josh.wu@atmel.com>");
13641364 MODULE_DESCRIPTION("The V4L2 driver for Atmel Linux");
13651365 MODULE_LICENSE("GPL");
1366−MODULE_SUPPORTED_DEVICE("video");
drivers/media/platform/atmel/atmel-sama5d2-isc.c+0−1
@@ -330,4 +330,3 @@ module_platform_driver(atmel_isc_driver); · 329 unmodified lines
330330 MODULE_AUTHOR("Songjun Wu");
331331 MODULE_DESCRIPTION("The V4L2 driver for Atmel-ISC");
332332 MODULE_LICENSE("GPL v2");
333−MODULE_SUPPORTED_DEVICE("video");
drivers/media/platform/marvell-ccic/cafe-driver.c+0−4
@@ -44,10 +44,6 @@ · 43 unmodified lines
4444 MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
4545 MODULE_DESCRIPTION("Marvell 88ALP01 CMOS Camera Controller driver");
4646 MODULE_LICENSE("GPL");
47−MODULE_SUPPORTED_DEVICE("Video");
48−
49−
50−
5147
5248 struct cafe_camera {
5349 int registered; /* Fully initialized? */
drivers/media/platform/stm32/stm32-dcmi.c+0−1
@@ -2149,4 +2149,3 @@ MODULE_AUTHOR("Yannick Fertre <yannick.fertre@st.com>"); · 2148 unmodified lines
21492149 MODULE_AUTHOR("Hugues Fruchet <hugues.fruchet@st.com>");
21502150 MODULE_DESCRIPTION("STMicroelectronics STM32 Digital Camera Memory Interface driver");
21512151 MODULE_LICENSE("GPL");
2152−MODULE_SUPPORTED_DEVICE("video");
drivers/media/usb/cpia2/cpia2_v4l.c+0−1
@@ -56,7 +56,6 @@ MODULE_PARM_DESC(flicker_mode, "Flicker frequency (0 (disabled), " __stringify(5 · 55 unmodified lines
5656
5757 MODULE_AUTHOR("Steve Miller (STMicroelectronics) <steve.miller@st.com>");
5858 MODULE_DESCRIPTION("V4L-driver for STMicroelectronics CPiA2 based cameras");
59−MODULE_SUPPORTED_DEVICE("video");
6059 MODULE_LICENSE("GPL");
6160 MODULE_VERSION(CPIA_VERSION);
6261
drivers/media/usb/tm6000/tm6000-alsa.c+0−1
@@ -51,7 +51,6 @@ MODULE_PARM_DESC(index, "Index value for tm6000x capture interface(s)."); · 50 unmodified lines
5151 MODULE_DESCRIPTION("ALSA driver module for tm5600/tm6000/tm6010 based TV cards");
5252 MODULE_AUTHOR("Mauro Carvalho Chehab");
5353 MODULE_LICENSE("GPL v2");
54−MODULE_SUPPORTED_DEVICE("{{Trident,tm5600},{{Trident,tm6000},{{Trident,tm6010}");
5554 static unsigned int debug;
5655 module_param(debug, int, 0644);
5756 MODULE_PARM_DESC(debug, "enable debug messages");
drivers/media/usb/tm6000/tm6000-dvb.c+0−2
@@ -23,8 +23,6 @@ MODULE_DESCRIPTION("DVB driver extension module for tm5600/6000/6010 based TV ca · 22 unmodified lines
2323 MODULE_AUTHOR("Mauro Carvalho Chehab");
2424 MODULE_LICENSE("GPL");
2525
26−MODULE_SUPPORTED_DEVICE("{{Trident, tm5600},{{Trident, tm6000},{{Trident, tm6010}");
27−
2826 static int debug;
2927
3028 module_param(debug, int, 0644);
drivers/mfd/intel_quark_i2c_gpio.c+4−2
@@ -72,7 +72,8 @@ static const struct dmi_system_id dmi_platform_info[] = { · 71 unmodified lines
7272 {}
7373 };
7474
75−static const struct resource intel_quark_i2c_res[] = {
75+/* This is used as a place holder and will be modified at run-time */
76+static struct resource intel_quark_i2c_res[] = {
7677 [INTEL_QUARK_IORES_MEM] = {
7778 .flags = IORESOURCE_MEM,
7879 },
@@ -85,7 +86,8 @@ static struct mfd_cell_acpi_match intel_quark_acpi_match_i2c = { · 6 unmodified lines
8586 .adr = MFD_ACPI_MATCH_I2C,
8687 };
8788
88−static const struct resource intel_quark_gpio_res[] = {
89+/* This is used as a place holder and will be modified at run-time */
90+static struct resource intel_quark_gpio_res[] = {
8991 [INTEL_QUARK_IORES_MEM] = {
9092 .flags = IORESOURCE_MEM,
9193 },
drivers/misc/mei/client.c+7−10
@@ -2286,8 +2286,8 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp, · 2285 unmodified lines
22862286 if (buffer_id == 0)
22872287 return -EINVAL;
22882288
2289− if (!mei_cl_is_connected(cl))
2290− return -ENODEV;
2289+ if (mei_cl_is_connected(cl))
2290+ return -EPROTO;
22912291
22922292 if (cl->dma_mapped)
22932293 return -EPROTO;
@@ -2327,9 +2327,7 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp, · 33 unmodified lines
23272327
23282328 mutex_unlock(&dev->device_lock);
23292329 wait_event_timeout(cl->wait,
2330− cl->dma_mapped ||
2331− cl->status ||
2332− !mei_cl_is_connected(cl),
2330+ cl->dma_mapped || cl->status,
23332331 mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT));
23342332 mutex_lock(&dev->device_lock);
23352333
@@ -2376,8 +2374,9 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp) · 40 unmodified lines
23762374 return -EOPNOTSUPP;
23772375 }
23782376
2379− if (!mei_cl_is_connected(cl))
2380− return -ENODEV;
2377+ /* do not allow unmap for connected client */
2378+ if (mei_cl_is_connected(cl))
2379+ return -EPROTO;
23812380
23822381 if (!cl->dma_mapped)
23832382 return -EPROTO;
@@ -2405,9 +2404,7 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp) · 21 unmodified lines
24052404
24062405 mutex_unlock(&dev->device_lock);
24072406 wait_event_timeout(cl->wait,
2408− !cl->dma_mapped ||
2409− cl->status ||
2410− !mei_cl_is_connected(cl),
2407+ !cl->dma_mapped || cl->status,
24112408 mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT));
24122409 mutex_lock(&dev->device_lock);
24132410
drivers/mtd/maps/sun_uflash.c+0−1
@@ -32,7 +32,6 @@ · 31 unmodified lines
3232
3333 MODULE_AUTHOR("Eric Brower <ebrower@usa.net>");
3434 MODULE_DESCRIPTION("User-programmable flash device on Sun Microsystems boardsets");
35−MODULE_SUPPORTED_DEVICE(DRIVER_NAME);
3635 MODULE_LICENSE("GPL");
3736 MODULE_VERSION("2.1");
3837
drivers/net/arcnet/com20020-pci.c+19−15
@@ -127,6 +127,8 @@ static int com20020pci_probe(struct pci_dev *pdev, · 126 unmodified lines
127127 int i, ioaddr, ret;
128128 struct resource *r;
129129
130+ ret = 0;
131+
130132 if (pci_enable_device(pdev))
131133 return -EIO;
132134
@@ -139,6 +141,8 @@ static int com20020pci_probe(struct pci_dev *pdev, · 6 unmodified lines
139141 priv->ci = ci;
140142 mm = &ci->misc_map;
141143
144+ pci_set_drvdata(pdev, priv);
145+
142146 INIT_LIST_HEAD(&priv->list_dev);
143147
144148 if (mm->size) {
@@ -161,7 +165,7 @@ static int com20020pci_probe(struct pci_dev *pdev, · 16 unmodified lines
161165 dev = alloc_arcdev(device);
162166 if (!dev) {
163167 ret = -ENOMEM;
164− goto out_port;
168+ break;
165169 }
166170 dev->dev_port = i;
167171
@@ -178,7 +182,7 @@ static int com20020pci_probe(struct pci_dev *pdev, · 10 unmodified lines
178182 pr_err("IO region %xh-%xh already allocated\n",
179183 ioaddr, ioaddr + cm->size - 1);
180184 ret = -EBUSY;
181− goto out_port;
185+ goto err_free_arcdev;
182186 }
183187
184188 /* Dummy access after Reset
@@ -216,18 +220,18 @@ static int com20020pci_probe(struct pci_dev *pdev, · 31 unmodified lines
216220 if (arcnet_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
217221 pr_err("IO address %Xh is empty!\n", ioaddr);
218222 ret = -EIO;
219− goto out_port;
223+ goto err_free_arcdev;
220224 }
221225 if (com20020_check(dev)) {
222226 ret = -EIO;
223− goto out_port;
227+ goto err_free_arcdev;
224228 }
225229
226230 card = devm_kzalloc(&pdev->dev, sizeof(struct com20020_dev),
227231 GFP_KERNEL);
228232 if (!card) {
229233 ret = -ENOMEM;
230− goto out_port;
234+ goto err_free_arcdev;
231235 }
232236
233237 card->index = i;
@@ -253,29 +257,29 @@ static int com20020pci_probe(struct pci_dev *pdev, · 19 unmodified lines
253257
254258 ret = devm_led_classdev_register(&pdev->dev, &card->tx_led);
255259 if (ret)
256− goto out_port;
260+ goto err_free_arcdev;
257261
258262 ret = devm_led_classdev_register(&pdev->dev, &card->recon_led);
259263 if (ret)
260− goto out_port;
264+ goto err_free_arcdev;
261265
262266 dev_set_drvdata(&dev->dev, card);
263267
264268 ret = com20020_found(dev, IRQF_SHARED);
265269 if (ret)
266− goto out_port;
270+ goto err_free_arcdev;
267271
268272 devm_arcnet_led_init(dev, dev->dev_id, i);
269273
270274 list_add(&card->list, &priv->list_dev);
271− }
275+ continue;
272276
273− pci_set_drvdata(pdev, priv);
274−
275− return 0;
276−
277−out_port:
278− com20020pci_remove(pdev);
277+err_free_arcdev:
278+ free_arcdev(dev);
279+ break;
280+ }
281+ if (ret)
282+ com20020pci_remove(pdev);
279283 return ret;
280284 }
281285
drivers/net/bonding/bond_main.c+2−6
@@ -3978,15 +3978,11 @@ static int bond_neigh_init(struct neighbour *n) · 3977 unmodified lines
39783978
39793979 rcu_read_lock();
39803980 slave = bond_first_slave_rcu(bond);
3981− if (!slave) {
3982− ret = -EINVAL;
3981+ if (!slave)
39833982 goto out;
3984− }
39853983 slave_ops = slave->dev->netdev_ops;
3986− if (!slave_ops->ndo_neigh_setup) {
3987− ret = -EINVAL;
3984+ if (!slave_ops->ndo_neigh_setup)
39883985 goto out;
3989− }
39903986
39913987 /* TODO: find another way [1] to implement this.
39923988 * Passing a zeroed structure is fragile,
drivers/net/can/c_can/c_can.c+1−23
@@ -212,18 +212,6 @@ static const struct can_bittiming_const c_can_bittiming_const = { · 211 unmodified lines
212212 .brp_inc = 1,
213213 };
214214
215−static inline void c_can_pm_runtime_enable(const struct c_can_priv *priv)
216−{
217− if (priv->device)
218− pm_runtime_enable(priv->device);
219−}
220−
221−static inline void c_can_pm_runtime_disable(const struct c_can_priv *priv)
222−{
223− if (priv->device)
224− pm_runtime_disable(priv->device);
225−}
226−
227215 static inline void c_can_pm_runtime_get_sync(const struct c_can_priv *priv)
228216 {
229217 if (priv->device)
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = { · 1105 unmodified lines
13351323
13361324 int register_c_can_dev(struct net_device *dev)
13371325 {
1338− struct c_can_priv *priv = netdev_priv(dev);
13391326 int err;
13401327
13411328 /* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev) · 3 unmodified lines
13451332 */
13461333 pinctrl_pm_select_sleep_state(dev->dev.parent);
13471334
1348− c_can_pm_runtime_enable(priv);
1349−
13501335 dev->flags |= IFF_ECHO; /* we support local echo */
13511336 dev->netdev_ops = &c_can_netdev_ops;
13521337
13531338 err = register_candev(dev);
1354− if (err)
1355− c_can_pm_runtime_disable(priv);
1356− else
1339+ if (!err)
13571340 devm_can_led_init(dev);
1358−
13591341 return err;
13601342 }
13611343 EXPORT_SYMBOL_GPL(register_c_can_dev);
13621344
13631345 void unregister_c_can_dev(struct net_device *dev)
13641346 {
1365− struct c_can_priv *priv = netdev_priv(dev);
1366−
13671347 unregister_candev(dev);
1368−
1369− c_can_pm_runtime_disable(priv);
13701348 }
13711349 EXPORT_SYMBOL_GPL(unregister_c_can_dev);
13721350
drivers/net/can/c_can/c_can_pci.c+2−1
@@ -239,12 +239,13 @@ static void c_can_pci_remove(struct pci_dev *pdev) · 238 unmodified lines
239239 {
240240 struct net_device *dev = pci_get_drvdata(pdev);
241241 struct c_can_priv *priv = netdev_priv(dev);
242+ void __iomem *addr = priv->base;
242243
243244 unregister_c_can_dev(dev);
244245
245246 free_c_can_dev(dev);
246247
247− pci_iounmap(pdev, priv->base);
248+ pci_iounmap(pdev, addr);
248249 pci_disable_msi(pdev);
249250 pci_clear_master(pdev);
250251 pci_release_regions(pdev);
drivers/net/can/c_can/c_can_platform.c+5−1
@@ -29,6 +29,7 @@ · 28 unmodified lines
2929 #include <linux/list.h>
3030 #include <linux/io.h>
3131 #include <linux/platform_device.h>
32+#include <linux/pm_runtime.h>
3233 #include <linux/clk.h>
3334 #include <linux/of.h>
3435 #include <linux/of_device.h>
@@ -386,6 +387,7 @@ static int c_can_plat_probe(struct platform_device *pdev) · 351 unmodified lines
386387 platform_set_drvdata(pdev, dev);
387388 SET_NETDEV_DEV(dev, &pdev->dev);
388389
390+ pm_runtime_enable(priv->device);
389391 ret = register_c_can_dev(dev);
390392 if (ret) {
391393 dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
@@ -398,6 +400,7 @@ static int c_can_plat_probe(struct platform_device *pdev) · 6 unmodified lines
398400 return 0;
399401
400402 exit_free_device:
403+ pm_runtime_disable(priv->device);
401404 free_c_can_dev(dev);
402405 exit:
403406 dev_err(&pdev->dev, "probe failed\n");
@@ -408,9 +411,10 @@ exit: · 4 unmodified lines
408411 static int c_can_plat_remove(struct platform_device *pdev)
409412 {
410413 struct net_device *dev = platform_get_drvdata(pdev);
414+ struct c_can_priv *priv = netdev_priv(dev);
411415
412416 unregister_c_can_dev(dev);
413−
417+ pm_runtime_disable(priv->device);
414418 free_c_can_dev(dev);
415419
416420 return 0;
drivers/net/can/dev/netlink.c+1−0
@@ -355,6 +355,7 @@ static void can_dellink(struct net_device *dev, struct list_head *head) · 354 unmodified lines
355355
356356 struct rtnl_link_ops can_link_ops __read_mostly = {
357357 .kind = "can",
358+ .netns_refund = true,
358359 .maxtype = IFLA_CAN_MAX,
359360 .policy = can_policy,
360361 .setup = can_setup,
drivers/net/can/flexcan.c+7−1
@@ -697,9 +697,15 @@ static int flexcan_chip_disable(struct flexcan_priv *priv) · 696 unmodified lines
697697 static int flexcan_chip_freeze(struct flexcan_priv *priv)
698698 {
699699 struct flexcan_regs __iomem *regs = priv->regs;
700− unsigned int timeout = 1000 * 1000 * 10 / priv->can.bittiming.bitrate;
700+ unsigned int timeout;
701+ u32 bitrate = priv->can.bittiming.bitrate;
701702 u32 reg;
702703
704+ if (bitrate)
705+ timeout = 1000 * 1000 * 10 / bitrate;
706+ else
707+ timeout = FLEXCAN_TIMEOUT_US / 10;
708+
703709 reg = priv->read(&regs->mcr);
704710 reg |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT;
705711 priv->write(reg, &regs->mcr);
drivers/net/can/kvaser_pciefd.c+4−0
@@ -57,6 +57,7 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices"); · 56 unmodified lines
5757 #define KVASER_PCIEFD_KCAN_STAT_REG 0x418
5858 #define KVASER_PCIEFD_KCAN_MODE_REG 0x41c
5959 #define KVASER_PCIEFD_KCAN_BTRN_REG 0x420
60+#define KVASER_PCIEFD_KCAN_BUS_LOAD_REG 0x424
6061 #define KVASER_PCIEFD_KCAN_BTRD_REG 0x428
6162 #define KVASER_PCIEFD_KCAN_PWM_REG 0x430
6263 /* Loopback control register */
@@ -949,6 +950,9 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie) · 886 unmodified lines
949950 timer_setup(&can->bec_poll_timer, kvaser_pciefd_bec_poll_timer,
950951 0);
951952
953+ /* Disable Bus load reporting */
954+ iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_BUS_LOAD_REG);
955+
952956 tx_npackets = ioread32(can->reg_base +
953957 KVASER_PCIEFD_KCAN_TX_NPACKETS_REG);
954958 if (((tx_npackets >> KVASER_PCIEFD_KCAN_TX_NPACKETS_MAX_SHIFT) &
drivers/net/can/m_can/m_can.c+1−4
@@ -501,9 +501,6 @@ static int m_can_do_rx_poll(struct net_device *dev, int quota) · 500 unmodified lines
501501 }
502502
503503 while ((rxfs & RXFS_FFL_MASK) && (quota > 0)) {
504− if (rxfs & RXFS_RFL)
505− netdev_warn(dev, "Rx FIFO 0 Message Lost\n");
506−
507504 m_can_read_fifo(dev, rxfs);
508505
509506 quota--;
@@ -876,7 +873,7 @@ static int m_can_rx_peripheral(struct net_device *dev) · 366 unmodified lines
876873 {
877874 struct m_can_classdev *cdev = netdev_priv(dev);
878875
879− m_can_rx_handler(dev, 1);
876+ m_can_rx_handler(dev, M_CAN_NAPI_WEIGHT);
880877
881878 m_can_enable_all_interrupts(cdev);
882879
drivers/net/can/peak_canfd/peak_pciefd_main.c+0−1
@@ -21,7 +21,6 @@ · 20 unmodified lines
2121
2222 MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
2323 MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCIe/M.2 FD family cards");
24−MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe/M.2 FD CAN cards");
2524 MODULE_LICENSE("GPL v2");
2625
2726 #define PCIEFD_DRV_NAME "peak_pciefd"
drivers/net/can/sja1000/ems_pci.c+0−1
@@ -21,7 +21,6 @@ · 20 unmodified lines
2121
2222 MODULE_AUTHOR("Sebastian Haas <haas@ems-wuenche.com>");
2323 MODULE_DESCRIPTION("Socket-CAN driver for EMS CPC-PCI/PCIe/104P CAN cards");
24−MODULE_SUPPORTED_DEVICE("EMS CPC-PCI/PCIe/104P CAN card");
2524 MODULE_LICENSE("GPL v2");
2625
2726 #define EMS_PCI_V1_MAX_CHAN 2
drivers/net/can/sja1000/ems_pcmcia.c+0−1
@@ -21,7 +21,6 @@ · 20 unmodified lines
2121
2222 MODULE_AUTHOR("Markus Plessing <plessing@ems-wuensche.com>");
2323 MODULE_DESCRIPTION("Socket-CAN driver for EMS CPC-CARD cards");
24−MODULE_SUPPORTED_DEVICE("EMS CPC-CARD CAN card");
2524 MODULE_LICENSE("GPL v2");
2625
2726 #define EMS_PCMCIA_MAX_CHAN 2
drivers/net/can/sja1000/kvaser_pci.c+0−1
@@ -33,7 +33,6 @@ · 32 unmodified lines
3333
3434 MODULE_AUTHOR("Per Dalen <per.dalen@cnw.se>");
3535 MODULE_DESCRIPTION("Socket-CAN driver for KVASER PCAN PCI cards");
36−MODULE_SUPPORTED_DEVICE("KVASER PCAN PCI CAN card");
3736 MODULE_LICENSE("GPL v2");
3837
3938 #define MAX_NO_OF_CHANNELS 4 /* max no of channels on a single card */
drivers/net/can/sja1000/peak_pci.c+0−2
@@ -24,8 +24,6 @@ · 23 unmodified lines
2424
2525 MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
2626 MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCI family cards");
27−MODULE_SUPPORTED_DEVICE("PEAK PCAN PCI/PCIe/PCIeC miniPCI CAN cards");
28−MODULE_SUPPORTED_DEVICE("PEAK PCAN miniPCIe/cPCI PC/104+ PCI/104e CAN Cards");
2927 MODULE_LICENSE("GPL v2");
3028
3129 #define DRV_NAME "peak_pci"
drivers/net/can/sja1000/peak_pcmcia.c+0−1
@@ -22,7 +22,6 @@ · 21 unmodified lines
2222 MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
2323 MODULE_DESCRIPTION("CAN driver for PEAK-System PCAN-PC Cards");
2424 MODULE_LICENSE("GPL v2");
25−MODULE_SUPPORTED_DEVICE("PEAK PCAN-PC Card");
2625
2726 /* PEAK-System PCMCIA driver name */
2827 #define PCC_NAME "peak_pcmcia"
drivers/net/can/sja1000/plx_pci.c+0−12
@@ -25,18 +25,6 @@ · 24 unmodified lines
2525 MODULE_AUTHOR("Pavel Cheblakov <P.B.Cheblakov@inp.nsk.su>");
2626 MODULE_DESCRIPTION("Socket-CAN driver for PLX90xx PCI-bridge cards with "
2727 "the SJA1000 chips");
28−MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, "
29− "Adlink PCI-7841/cPCI-7841 SE, "
30− "Marathon CAN-bus-PCI, "
31− "Marathon CAN-bus-PCIe, "
32− "TEWS TECHNOLOGIES TPMC810, "
33− "esd CAN-PCI/CPCI/PCI104/200, "
34− "esd CAN-PCI/PMC/266, "
35− "esd CAN-PCIe/2000, "
36− "Connect Tech Inc. CANpro/104-Plus Opto (CRG001), "
37− "IXXAT PC-I 04/PCI, "
38− "ELCUS CAN-200-PCI, "
39− "ASEM DUAL CAN-RAW")
4028 MODULE_LICENSE("GPL v2");
4129
4230 #define PLX_PCI_MAX_CHAN 2
drivers/net/can/usb/Kconfig+1−0
@@ -73,6 +73,7 @@ config CAN_KVASER_USB · 72 unmodified lines
7373 - Kvaser Memorator Pro 5xHS
7474 - Kvaser USBcan Light 4xHS
7575 - Kvaser USBcan Pro 2xHS v2
76+ - Kvaser USBcan Pro 4xHS
7677 - Kvaser USBcan Pro 5xHS
7778 - Kvaser U100
7879 - Kvaser U100P
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c+3−1
@@ -86,8 +86,9 @@ · 85 unmodified lines
8686 #define USB_U100_PRODUCT_ID 273
8787 #define USB_U100P_PRODUCT_ID 274
8888 #define USB_U100S_PRODUCT_ID 275
89+#define USB_USBCAN_PRO_4HS_PRODUCT_ID 276
8990 #define USB_HYDRA_PRODUCT_ID_END \
90− USB_U100S_PRODUCT_ID
91+ USB_USBCAN_PRO_4HS_PRODUCT_ID
9192
9293 static inline bool kvaser_is_leaf(const struct usb_device_id *id)
9394 {
@@ -193,6 +194,7 @@ static const struct usb_device_id kvaser_usb_table[] = { · 99 unmodified lines
193194 { USB_DEVICE(KVASER_VENDOR_ID, USB_U100_PRODUCT_ID) },
194195 { USB_DEVICE(KVASER_VENDOR_ID, USB_U100P_PRODUCT_ID) },
195196 { USB_DEVICE(KVASER_VENDOR_ID, USB_U100S_PRODUCT_ID) },
197+ { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN_PRO_4HS_PRODUCT_ID) },
196198 { }
197199 };
198200 MODULE_DEVICE_TABLE(usb, kvaser_usb_table);
drivers/net/can/usb/peak_usb/pcan_usb.c+0−2
@@ -18,8 +18,6 @@ · 17 unmodified lines
1818
1919 #include "pcan_usb_core.h"
2020
21−MODULE_SUPPORTED_DEVICE("PEAK-System PCAN-USB adapter");
22−
2321 /* PCAN-USB Endpoints */
2422 #define PCAN_USB_EP_CMDOUT 1
2523 #define PCAN_USB_EP_CMDIN (PCAN_USB_EP_CMDOUT | USB_DIR_IN)
drivers/net/can/usb/peak_usb/pcan_usb_fd.c+0−3
@@ -16,9 +16,6 @@ · 15 unmodified lines
1616 #include "pcan_usb_core.h"
1717 #include "pcan_usb_pro.h"
1818
19−MODULE_SUPPORTED_DEVICE("PEAK-System PCAN-USB FD adapter");
20−MODULE_SUPPORTED_DEVICE("PEAK-System PCAN-USB Pro FD adapter");
21−
2219 #define PCAN_USBPROFD_CHANNEL_COUNT 2
2320 #define PCAN_USBFD_CHANNEL_COUNT 1
2421
drivers/net/can/usb/peak_usb/pcan_usb_pro.c+0−2
@@ -17,8 +17,6 @@ · 16 unmodified lines
1717 #include "pcan_usb_core.h"
1818 #include "pcan_usb_pro.h"
1919
20−MODULE_SUPPORTED_DEVICE("PEAK-System PCAN-USB Pro adapter");
21−
2220 #define PCAN_USBPRO_CHANNEL_COUNT 2
2321
2422 /* PCAN-USB Pro adapter internal clock (MHz) */
drivers/net/dsa/b53/b53_common.c+7−7
@@ -1105,13 +1105,6 @@ static int b53_setup(struct dsa_switch *ds) · 1104 unmodified lines
11051105 b53_disable_port(ds, port);
11061106 }
11071107
1108− /* Let DSA handle the case were multiple bridges span the same switch
1109− * device and different VLAN awareness settings are requested, which
1110− * would be breaking filtering semantics for any of the other bridge
1111− * devices. (not hardware supported)
1112− */
1113− ds->vlan_filtering_is_global = true;
1114−
11151108 return b53_setup_devlink_resources(ds);
11161109 }
11171110
@@ -2664,6 +2657,13 @@ struct b53_device *b53_switch_alloc(struct device *base, · 1546 unmodified lines
26642657 ds->ops = &b53_switch_ops;
26652658 ds->untag_bridge_pvid = true;
26662659 dev->vlan_enabled = true;
2660+ /* Let DSA handle the case were multiple bridges span the same switch
2661+ * device and different VLAN awareness settings are requested, which
2662+ * would be breaking filtering semantics for any of the other bridge
2663+ * devices. (not hardware supported)
2664+ */
2665+ ds->vlan_filtering_is_global = true;
2666+
26672667 mutex_init(&dev->reg_mutex);
26682668 mutex_init(&dev->stats_mutex);
26692669
drivers/net/dsa/bcm_sf2.c+8−3
@@ -114,7 +114,10 @@ static void bcm_sf2_imp_setup(struct dsa_switch *ds, int port) · 113 unmodified lines
114114 /* Force link status for IMP port */
115115 reg = core_readl(priv, offset);
116116 reg |= (MII_SW_OR | LINK_STS);
117− reg &= ~GMII_SPEED_UP_2G;
117+ if (priv->type == BCM4908_DEVICE_ID)
118+ reg |= GMII_SPEED_UP_2G;
119+ else
120+ reg &= ~GMII_SPEED_UP_2G;
118121 core_writel(priv, reg, offset);
119122
120123 /* Enable Broadcast, Multicast, Unicast forwarding to IMP port */
@@ -585,8 +588,10 @@ static u32 bcm_sf2_sw_get_phy_flags(struct dsa_switch *ds, int port) · 464 unmodified lines
585588 * in bits 15:8 and the patch level in bits 7:0 which is exactly what
586589 * the REG_PHY_REVISION register layout is.
587590 */
588−
589− return priv->hw_params.gphy_rev;
591+ if (priv->int_phy_mask & BIT(port))
592+ return priv->hw_params.gphy_rev;
593+ else
594+ return 0;
590595 }
591596
592597 static void bcm_sf2_sw_validate(struct dsa_switch *ds, int port,
drivers/net/dsa/mt7530.c+25−27
@@ -436,34 +436,32 @@ mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface) · 435 unmodified lines
436436 TD_DM_DRVP(8) | TD_DM_DRVN(8));
437437
438438 /* Setup core clock for MT7530 */
439− if (!trgint) {
440− /* Disable MT7530 core clock */
441− core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
442−
443− /* Disable PLL, since phy_device has not yet been created
444− * provided for phy_[read,write]_mmd_indirect is called, we
445− * provide our own core_write_mmd_indirect to complete this
446− * function.
447− */
448− core_write_mmd_indirect(priv,
449− CORE_GSWPLL_GRP1,
450− MDIO_MMD_VEND2,
451− 0);
452−
453− /* Set core clock into 500Mhz */
454− core_write(priv, CORE_GSWPLL_GRP2,
455− RG_GSWPLL_POSDIV_500M(1) |
456− RG_GSWPLL_FBKDIV_500M(25));
439+ /* Disable MT7530 core clock */
440+ core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
457441
458− /* Enable PLL */
459− core_write(priv, CORE_GSWPLL_GRP1,
460− RG_GSWPLL_EN_PRE |
461− RG_GSWPLL_POSDIV_200M(2) |
462− RG_GSWPLL_FBKDIV_200M(32));
463−
464− /* Enable MT7530 core clock */
465− core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
466− }
442+ /* Disable PLL, since phy_device has not yet been created
443+ * provided for phy_[read,write]_mmd_indirect is called, we
444+ * provide our own core_write_mmd_indirect to complete this
445+ * function.
446+ */
447+ core_write_mmd_indirect(priv,
448+ CORE_GSWPLL_GRP1,
449+ MDIO_MMD_VEND2,
450+ 0);
451+
452+ /* Set core clock into 500Mhz */
453+ core_write(priv, CORE_GSWPLL_GRP2,
454+ RG_GSWPLL_POSDIV_500M(1) |
455+ RG_GSWPLL_FBKDIV_500M(25));
456+
457+ /* Enable PLL */
458+ core_write(priv, CORE_GSWPLL_GRP1,
459+ RG_GSWPLL_EN_PRE |
460+ RG_GSWPLL_POSDIV_200M(2) |
461+ RG_GSWPLL_FBKDIV_200M(32));
462+
463+ /* Enable MT7530 core clock */
464+ core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
467465
468466 /* Setup the MT7530 TRGMII Tx Clock */
469467 core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
drivers/net/ethernet/broadcom/Kconfig+1−1
@@ -54,7 +54,7 @@ config B44_PCI · 53 unmodified lines
5454 config BCM4908_ENET
5555 tristate "Broadcom BCM4908 internal mac support"
5656 depends on ARCH_BCM4908 || COMPILE_TEST
57− default y
57+ default y if ARCH_BCM4908
5858 help
5959 This driver supports Ethernet controller integrated into Broadcom
6060 BCM4908 family SoCs.
drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c+1−1
@@ -722,7 +722,7 @@ static int chcr_ktls_cpl_set_tcb_rpl(struct adapter *adap, unsigned char *input) · 721 unmodified lines
722722 kvfree(tx_info);
723723 return 0;
724724 }
725− tx_info->open_state = false;
725+ tx_info->open_state = CH_KTLS_OPEN_SUCCESS;
726726 spin_unlock(&tx_info->lock);
727727
728728 complete(&tx_info->completion);
drivers/net/ethernet/faraday/ftgmac100.c+1−0
@@ -1337,6 +1337,7 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget) · 1336 unmodified lines
13371337 */
13381338 if (unlikely(priv->need_mac_restart)) {
13391339 ftgmac100_start_hw(priv);
1340+ priv->need_mac_restart = false;
13401341
13411342 /* Re-enable "bad" interrupts */
13421343 iowrite32(FTGMAC100_INT_BAD,
drivers/net/ethernet/intel/e1000e/82571.c+2−0
@@ -899,6 +899,8 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active) · 898 unmodified lines
899899 } else {
900900 data &= ~IGP02E1000_PM_D0_LPLU;
901901 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data);
902+ if (ret_val)
903+ return ret_val;
902904 /* LPLU and SmartSpeed are mutually exclusive. LPLU is used
903905 * during Dx states where the power conservation is most
904906 * important. During driver activity we should enable
drivers/net/ethernet/intel/e1000e/hw.h+3−3
@@ -1,8 +1,8 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 /* Copyright(c) 1999 - 2018 Intel Corporation. */
33
4−#ifndef _E1000_HW_H_
5−#define _E1000_HW_H_
4+#ifndef _E1000E_HW_H_
5+#define _E1000E_HW_H_
66
77 #include "regs.h"
88 #include "defines.h"
@@ -714,4 +714,4 @@ struct e1000_hw { · 705 unmodified lines
714714 #include "80003es2lan.h"
715715 #include "ich8lan.h"
716716
717−#endif
717+#endif /* _E1000E_HW_H_ */
drivers/net/ethernet/intel/e1000e/netdev.c+5−1
@@ -5974,15 +5974,19 @@ static void e1000_reset_task(struct work_struct *work) · 5973 unmodified lines
59745974 struct e1000_adapter *adapter;
59755975 adapter = container_of(work, struct e1000_adapter, reset_task);
59765976
5977+ rtnl_lock();
59775978 /* don't run the task if already down */
5978− if (test_bit(__E1000_DOWN, &adapter->state))
5979+ if (test_bit(__E1000_DOWN, &adapter->state)) {
5980+ rtnl_unlock();
59795981 return;
5982+ }
59805983
59815984 if (!(adapter->flags & FLAG_RESTART_NOW)) {
59825985 e1000e_dump(adapter);
59835986 e_err("Reset adapter unexpectedly\n");
59845987 }
59855988 e1000e_reinit_locked(adapter);
5989+ rtnl_unlock();
59865990 }
59875991
59885992 /**
drivers/net/ethernet/intel/i40e/i40e_main.c+13−0
@@ -3258,6 +3258,17 @@ static int i40e_configure_tx_ring(struct i40e_ring *ring) · 3257 unmodified lines
32583258 return 0;
32593259 }
32603260
3261+/**
3262+ * i40e_rx_offset - Return expected offset into page to access data
3263+ * @rx_ring: Ring we are requesting offset of
3264+ *
3265+ * Returns the offset value for ring into the data buffer.
3266+ */
3267+static unsigned int i40e_rx_offset(struct i40e_ring *rx_ring)
3268+{
3269+ return ring_uses_build_skb(rx_ring) ? I40E_SKB_PAD : 0;
3270+}
3271+
32613272 /**
32623273 * i40e_configure_rx_ring - Configure a receive ring context
32633274 * @ring: The Rx ring to configure
@@ -3369,6 +3380,8 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring) · 105 unmodified lines
33693380 else
33703381 set_ring_build_skb_enabled(ring);
33713382
3383+ ring->rx_offset = i40e_rx_offset(ring);
3384+
33723385 /* cache tail for quicker writes, and clear the reg before use */
33733386 ring->tail = hw->hw_addr + I40E_QRX_TAIL(pf_q);
33743387 writel(0, ring->tail);
drivers/net/ethernet/intel/i40e/i40e_txrx.c+0−12
@@ -1569,17 +1569,6 @@ void i40e_free_rx_resources(struct i40e_ring *rx_ring) · 1568 unmodified lines
15691569 }
15701570 }
15711571
1572−/**
1573− * i40e_rx_offset - Return expected offset into page to access data
1574− * @rx_ring: Ring we are requesting offset of
1575− *
1576− * Returns the offset value for ring into the data buffer.
1577− */
1578−static unsigned int i40e_rx_offset(struct i40e_ring *rx_ring)
1579−{
1580− return ring_uses_build_skb(rx_ring) ? I40E_SKB_PAD : 0;
1581−}
1582−
15831572 /**
15841573 * i40e_setup_rx_descriptors - Allocate Rx descriptors
15851574 * @rx_ring: Rx descriptor ring (for a specific queue) to setup
@@ -1608,7 +1597,6 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring) · 22 unmodified lines
16081597 rx_ring->next_to_alloc = 0;
16091598 rx_ring->next_to_clean = 0;
16101599 rx_ring->next_to_use = 0;
1611− rx_ring->rx_offset = i40e_rx_offset(rx_ring);
16121600
16131601 /* XDP RX-queue info only needed for RX rings exposed to XDP */
16141602 if (rx_ring->vsi->type == I40E_VSI_MAIN) {
drivers/net/ethernet/intel/ice/ice_base.c+22−2
@@ -274,6 +274,22 @@ ice_setup_tx_ctx(struct ice_ring *ring, struct ice_tlan_ctx *tlan_ctx, u16 pf_q) · 273 unmodified lines
274274 tlan_ctx->legacy_int = ICE_TX_LEGACY;
275275 }
276276
277+/**
278+ * ice_rx_offset - Return expected offset into page to access data
279+ * @rx_ring: Ring we are requesting offset of
280+ *
281+ * Returns the offset value for ring into the data buffer.
282+ */
283+static unsigned int ice_rx_offset(struct ice_ring *rx_ring)
284+{
285+ if (ice_ring_uses_build_skb(rx_ring))
286+ return ICE_SKB_PAD;
287+ else if (ice_is_xdp_ena_vsi(rx_ring->vsi))
288+ return XDP_PACKET_HEADROOM;
289+
290+ return 0;
291+}
292+
277293 /**
278294 * ice_setup_rx_ctx - Configure a receive ring context
279295 * @ring: The Rx ring to configure
@@ -413,11 +429,15 @@ int ice_setup_rx_ctx(struct ice_ring *ring) · 133 unmodified lines
413429 else
414430 ice_set_ring_build_skb_ena(ring);
415431
432+ ring->rx_offset = ice_rx_offset(ring);
433+
416434 /* init queue specific tail register */
417435 ring->tail = hw->hw_addr + QRX_TAIL(pf_q);
418436 writel(0, ring->tail);
419437
420438 if (ring->xsk_pool) {
439+ bool ok;
440+
421441 if (!xsk_buff_can_alloc(ring->xsk_pool, num_bufs)) {
422442 dev_warn(dev, "XSK buffer pool does not provide enough addresses to fill %d buffers on Rx ring %d\n",
423443 num_bufs, ring->q_index);
@@ -426,8 +446,8 @@ int ice_setup_rx_ctx(struct ice_ring *ring) · 2 unmodified lines
426446 return 0;
427447 }
428448
429− err = ice_alloc_rx_bufs_zc(ring, num_bufs);
430− if (err)
449+ ok = ice_alloc_rx_bufs_zc(ring, num_bufs);
450+ if (!ok)
431451 dev_info(dev, "Failed to allocate some buffers on XSK buffer pool enabled Rx ring %d (pf_q %d)\n",
432452 ring->q_index, pf_q);
433453 return 0;
drivers/net/ethernet/intel/ice/ice_txrx.c+0−17
@@ -443,22 +443,6 @@ void ice_free_rx_ring(struct ice_ring *rx_ring) · 442 unmodified lines
443443 }
444444 }
445445
446−/**
447− * ice_rx_offset - Return expected offset into page to access data
448− * @rx_ring: Ring we are requesting offset of
449− *
450− * Returns the offset value for ring into the data buffer.
451− */
452−static unsigned int ice_rx_offset(struct ice_ring *rx_ring)
453−{
454− if (ice_ring_uses_build_skb(rx_ring))
455− return ICE_SKB_PAD;
456− else if (ice_is_xdp_ena_vsi(rx_ring->vsi))
457− return XDP_PACKET_HEADROOM;
458−
459− return 0;
460−}
461−
462446 /**
463447 * ice_setup_rx_ring - Allocate the Rx descriptors
464448 * @rx_ring: the Rx ring to set up
@@ -493,7 +477,6 @@ int ice_setup_rx_ring(struct ice_ring *rx_ring) · 28 unmodified lines
493477
494478 rx_ring->next_to_use = 0;
495479 rx_ring->next_to_clean = 0;
496− rx_ring->rx_offset = ice_rx_offset(rx_ring);
497480
498481 if (ice_is_xdp_ena_vsi(rx_ring->vsi))
499482 WRITE_ONCE(rx_ring->xdp_prog, rx_ring->vsi->xdp_prog);
drivers/net/ethernet/intel/ice/ice_xsk.c+5−5
@@ -358,18 +358,18 @@ xsk_pool_if_up: · 357 unmodified lines
358358 * This function allocates a number of Rx buffers from the fill ring
359359 * or the internal recycle mechanism and places them on the Rx ring.
360360 *
361− * Returns false if all allocations were successful, true if any fail.
361+ * Returns true if all allocations were successful, false if any fail.
362362 */
363363 bool ice_alloc_rx_bufs_zc(struct ice_ring *rx_ring, u16 count)
364364 {
365365 union ice_32b_rx_flex_desc *rx_desc;
366366 u16 ntu = rx_ring->next_to_use;
367367 struct ice_rx_buf *rx_buf;
368− bool ret = false;
368+ bool ok = true;
369369 dma_addr_t dma;
370370
371371 if (!count)
372− return false;
372+ return true;
373373
374374 rx_desc = ICE_RX_DESC(rx_ring, ntu);
375375 rx_buf = &rx_ring->rx_buf[ntu];
@@ -377,7 +377,7 @@ bool ice_alloc_rx_bufs_zc(struct ice_ring *rx_ring, u16 count) · 1 unmodified line
377377 do {
378378 rx_buf->xdp = xsk_buff_alloc(rx_ring->xsk_pool);
379379 if (!rx_buf->xdp) {
380− ret = true;
380+ ok = false;
381381 break;
382382 }
383383
@@ -402,7 +402,7 @@ bool ice_alloc_rx_bufs_zc(struct ice_ring *rx_ring, u16 count) · 18 unmodified lines
402402 ice_release_rx_desc(rx_ring, ntu);
403403 }
404404
405− return ret;
405+ return ok;
406406 }
407407
408408 /**
drivers/net/ethernet/intel/igb/e1000_hw.h+3−3
@@ -1,8 +1,8 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
22 /* Copyright(c) 2007 - 2018 Intel Corporation. */
33
4−#ifndef _E1000_HW_H_
5−#define _E1000_HW_H_
4+#ifndef _E1000_IGB_HW_H_
5+#define _E1000_IGB_HW_H_
66
77 #include <linux/types.h>
88 #include <linux/delay.h>
@@ -551,4 +551,4 @@ s32 igb_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); · 542 unmodified lines
551551
552552 void igb_read_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value);
553553 void igb_write_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value);
554−#endif /* _E1000_HW_H_ */
554+#endif /* _E1000_IGB_HW_H_ */
drivers/net/ethernet/intel/igb/igb.h+2−2
@@ -748,8 +748,8 @@ void igb_ptp_suspend(struct igb_adapter *adapter); · 747 unmodified lines
748748 void igb_ptp_rx_hang(struct igb_adapter *adapter);
749749 void igb_ptp_tx_hang(struct igb_adapter *adapter);
750750 void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb);
751−void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,
752− struct sk_buff *skb);
751+int igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,
752+ struct sk_buff *skb);
753753 int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr);
754754 int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr);
755755 void igb_set_flag_queue_pairs(struct igb_adapter *, const u32);
drivers/net/ethernet/intel/igb/igb_main.c+21−12
@@ -8214,7 +8214,8 @@ static void igb_reuse_rx_page(struct igb_ring *rx_ring, · 8213 unmodified lines
82148214 new_buff->pagecnt_bias = old_buff->pagecnt_bias;
82158215 }
82168216
8217−static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer)
8217+static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer,
8218+ int rx_buf_pgcnt)
82188219 {
82198220 unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;
82208221 struct page *page = rx_buffer->page;
@@ -8225,7 +8226,7 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer) · 4 unmodified lines
82258226
82268227 #if (PAGE_SIZE < 8192)
82278228 /* if we are only owner of page we can reuse it */
8228− if (unlikely((page_ref_count(page) - pagecnt_bias) > 1))
8229+ if (unlikely((rx_buf_pgcnt - pagecnt_bias) > 1))
82298230 return false;
82308231 #else
82318232 #define IGB_LAST_OFFSET \
@@ -8301,9 +8302,10 @@ static struct sk_buff *igb_construct_skb(struct igb_ring *rx_ring, · 69 unmodified lines
83018302 return NULL;
83028303
83038304 if (unlikely(igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TSIP))) {
8304− igb_ptp_rx_pktstamp(rx_ring->q_vector, xdp->data, skb);
8305− xdp->data += IGB_TS_HDR_LEN;
8306− size -= IGB_TS_HDR_LEN;
8305+ if (!igb_ptp_rx_pktstamp(rx_ring->q_vector, xdp->data, skb)) {
8306+ xdp->data += IGB_TS_HDR_LEN;
8307+ size -= IGB_TS_HDR_LEN;
8308+ }
83078309 }
83088310
83098311 /* Determine available headroom for copy */
@@ -8364,8 +8366,8 @@ static struct sk_buff *igb_build_skb(struct igb_ring *rx_ring, · 54 unmodified lines
83648366
83658367 /* pull timestamp out of packet data */
83668368 if (igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TSIP)) {
8367− igb_ptp_rx_pktstamp(rx_ring->q_vector, skb->data, skb);
8368− __skb_pull(skb, IGB_TS_HDR_LEN);
8369+ if (!igb_ptp_rx_pktstamp(rx_ring->q_vector, skb->data, skb))
8370+ __skb_pull(skb, IGB_TS_HDR_LEN);
83698371 }
83708372
83718373 /* update buffer offset */
@@ -8614,11 +8616,17 @@ static unsigned int igb_rx_offset(struct igb_ring *rx_ring) · 242 unmodified lines
86148616 }
86158617
86168618 static struct igb_rx_buffer *igb_get_rx_buffer(struct igb_ring *rx_ring,
8617− const unsigned int size)
8619+ const unsigned int size, int *rx_buf_pgcnt)
86188620 {
86198621 struct igb_rx_buffer *rx_buffer;
86208622
86218623 rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean];
8624+ *rx_buf_pgcnt =
8625+#if (PAGE_SIZE < 8192)
8626+ page_count(rx_buffer->page);
8627+#else
8628+ 0;
8629+#endif
86228630 prefetchw(rx_buffer->page);
86238631
86248632 /* we are reusing so sync this buffer for CPU use */
@@ -8634,9 +8642,9 @@ static struct igb_rx_buffer *igb_get_rx_buffer(struct igb_ring *rx_ring, · 9 unmodified lines
86348642 }
86358643
86368644 static void igb_put_rx_buffer(struct igb_ring *rx_ring,
8637− struct igb_rx_buffer *rx_buffer)
8645+ struct igb_rx_buffer *rx_buffer, int rx_buf_pgcnt)
86388646 {
8639− if (igb_can_reuse_rx_page(rx_buffer)) {
8647+ if (igb_can_reuse_rx_page(rx_buffer, rx_buf_pgcnt)) {
86408648 /* hand second half of page back to the ring */
86418649 igb_reuse_rx_page(rx_ring, rx_buffer);
86428650 } else {
@@ -8664,6 +8672,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) · 21 unmodified lines
86648672 unsigned int xdp_xmit = 0;
86658673 struct xdp_buff xdp;
86668674 u32 frame_sz = 0;
8675+ int rx_buf_pgcnt;
86678676
86688677 /* Frame size depend on rx_ring setup when PAGE_SIZE=4K */
86698678 #if (PAGE_SIZE < 8192)
@@ -8693,7 +8702,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) · 23 unmodified lines
86938702 */
86948703 dma_rmb();
86958704
8696− rx_buffer = igb_get_rx_buffer(rx_ring, size);
8705+ rx_buffer = igb_get_rx_buffer(rx_ring, size, &rx_buf_pgcnt);
86978706
86988707 /* retrieve a buffer from the ring */
86998708 if (!skb) {
@@ -8736,7 +8745,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) · 36 unmodified lines
87368745 break;
87378746 }
87388747
8739− igb_put_rx_buffer(rx_ring, rx_buffer);
8748+ igb_put_rx_buffer(rx_ring, rx_buffer, rx_buf_pgcnt);
87408749 cleaned_count++;
87418750
87428751 /* fetch next buffer in frame if non-eop */
drivers/net/ethernet/intel/igb/igb_ptp.c+24−7
@@ -856,6 +856,9 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) · 855 unmodified lines
856856 dev_kfree_skb_any(skb);
857857 }
858858
859+#define IGB_RET_PTP_DISABLED 1
860+#define IGB_RET_PTP_INVALID 2
861+
859862 /**
860863 * igb_ptp_rx_pktstamp - retrieve Rx per packet timestamp
861864 * @q_vector: Pointer to interrupt specific structure
@@ -864,19 +867,29 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) · 2 unmodified lines
864867 *
865868 * This function is meant to retrieve a timestamp from the first buffer of an
866869 * incoming frame. The value is stored in little endian format starting on
867− * byte 8.
870+ * byte 8
871+ *
872+ * Returns: 0 if success, nonzero if failure
868873 **/
869−void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,
870− struct sk_buff *skb)
874+int igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,
875+ struct sk_buff *skb)
871876 {
872− __le64 *regval = (__le64 *)va;
873877 struct igb_adapter *adapter = q_vector->adapter;
878+ __le64 *regval = (__le64 *)va;
874879 int adjust = 0;
875880
881+ if (!(adapter->ptp_flags & IGB_PTP_ENABLED))
882+ return IGB_RET_PTP_DISABLED;
883+
876884 /* The timestamp is recorded in little endian format.
877885 * DWORD: 0 1 2 3
878886 * Field: Reserved Reserved SYSTIML SYSTIMH
879887 */
888+
889+ /* check reserved dwords are zero, be/le doesn't matter for zero */
890+ if (regval[0])
891+ return IGB_RET_PTP_INVALID;
892+
880893 igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb),
881894 le64_to_cpu(regval[1]));
882895
@@ -896,6 +909,8 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va, · 13 unmodified lines
896909 }
897910 skb_hwtstamps(skb)->hwtstamp =
898911 ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
912+
913+ return 0;
899914 }
900915
901916 /**
@@ -906,13 +921,15 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va, · 4 unmodified lines
906921 * This function is meant to retrieve a timestamp from the internal registers
907922 * of the adapter and store it in the skb.
908923 **/
909−void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector,
910− struct sk_buff *skb)
924+void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb)
911925 {
912926 struct igb_adapter *adapter = q_vector->adapter;
913927 struct e1000_hw *hw = &adapter->hw;
914− u64 regval;
915928 int adjust = 0;
929+ u64 regval;
930+
931+ if (!(adapter->ptp_flags & IGB_PTP_ENABLED))
932+ return;
916933
917934 /* If this bit is set, then the RX registers contain the time stamp. No
918935 * other packet will be time stamped until we read these registers, so
drivers/net/ethernet/intel/igc/igc.h+1−1
@@ -547,7 +547,7 @@ void igc_ptp_init(struct igc_adapter *adapter); · 546 unmodified lines
547547 void igc_ptp_reset(struct igc_adapter *adapter);
548548 void igc_ptp_suspend(struct igc_adapter *adapter);
549549 void igc_ptp_stop(struct igc_adapter *adapter);
550−void igc_ptp_rx_pktstamp(struct igc_q_vector *q_vector, void *va,
550+void igc_ptp_rx_pktstamp(struct igc_q_vector *q_vector, __le32 *va,
551551 struct sk_buff *skb);
552552 int igc_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr);
553553 int igc_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr);
drivers/net/ethernet/intel/igc/igc_ethtool.c+4−3
@@ -1711,6 +1711,9 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, · 1710 unmodified lines
17111711 Autoneg);
17121712 }
17131713
1714+ /* Set pause flow control settings */
1715+ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
1716+
17141717 switch (hw->fc.requested_mode) {
17151718 case igc_fc_full:
17161719 ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
@@ -1725,9 +1728,7 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, · 8 unmodified lines
17251728 Asym_Pause);
17261729 break;
17271730 default:
1728− ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
1729− ethtool_link_ksettings_add_link_mode(cmd, advertising,
1730− Asym_Pause);
1731+ break;
17311732 }
17321733
17331734 status = pm_runtime_suspended(&adapter->pdev->dev) ?
drivers/net/ethernet/intel/igc/igc_main.c+9−0
@@ -3831,10 +3831,19 @@ static void igc_reset_task(struct work_struct *work) · 3830 unmodified lines
38313831
38323832 adapter = container_of(work, struct igc_adapter, reset_task);
38333833
3834+ rtnl_lock();
3835+ /* If we're already down or resetting, just bail */
3836+ if (test_bit(__IGC_DOWN, &adapter->state) ||
3837+ test_bit(__IGC_RESETTING, &adapter->state)) {
3838+ rtnl_unlock();
3839+ return;
3840+ }
3841+
38343842 igc_rings_dump(adapter);
38353843 igc_regs_dump(adapter);
38363844 netdev_err(adapter->netdev, "Reset adapter\n");
38373845 igc_reinit_locked(adapter);
3846+ rtnl_unlock();
38383847 }
38393848
38403849 /**
drivers/net/ethernet/intel/igc/igc_ptp.c+40−32
@@ -152,46 +152,54 @@ static void igc_ptp_systim_to_hwtstamp(struct igc_adapter *adapter, · 151 unmodified lines
152152 }
153153
154154 /**
155− * igc_ptp_rx_pktstamp - retrieve Rx per packet timestamp
155+ * igc_ptp_rx_pktstamp - Retrieve timestamp from Rx packet buffer
156156 * @q_vector: Pointer to interrupt specific structure
157157 * @va: Pointer to address containing Rx buffer
158158 * @skb: Buffer containing timestamp and packet
159159 *
160− * This function is meant to retrieve the first timestamp from the
161− * first buffer of an incoming frame. The value is stored in little
162− * endian format starting on byte 0. There's a second timestamp
163− * starting on byte 8.
164− **/
165−void igc_ptp_rx_pktstamp(struct igc_q_vector *q_vector, void *va,
160+ * This function retrieves the timestamp saved in the beginning of packet
161+ * buffer. While two timestamps are available, one in timer0 reference and the
162+ * other in timer1 reference, this function considers only the timestamp in
163+ * timer0 reference.
164+ */
165+void igc_ptp_rx_pktstamp(struct igc_q_vector *q_vector, __le32 *va,
166166 struct sk_buff *skb)
167167 {
168168 struct igc_adapter *adapter = q_vector->adapter;
169− __le64 *regval = (__le64 *)va;
170− int adjust = 0;
171−
172− /* The timestamp is recorded in little endian format.
173− * DWORD: | 0 | 1 | 2 | 3
174− * Field: | Timer0 Low | Timer0 High | Timer1 Low | Timer1 High
169+ u64 regval;
170+ int adjust;
171+
172+ /* Timestamps are saved in little endian at the beginning of the packet
173+ * buffer following the layout:
174+ *
175+ * DWORD: | 0 | 1 | 2 | 3 |
176+ * Field: | Timer1 SYSTIML | Timer1 SYSTIMH | Timer0 SYSTIML | Timer0 SYSTIMH |
177+ *
178+ * SYSTIML holds the nanoseconds part while SYSTIMH holds the seconds
179+ * part of the timestamp.
175180 */
176− igc_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb),
177− le64_to_cpu(regval[0]));
178−
179− /* adjust timestamp for the RX latency based on link speed */
180− if (adapter->hw.mac.type == igc_i225) {
181− switch (adapter->link_speed) {
182− case SPEED_10:
183− adjust = IGC_I225_RX_LATENCY_10;
184− break;
185− case SPEED_100:
186− adjust = IGC_I225_RX_LATENCY_100;
187− break;
188− case SPEED_1000:
189− adjust = IGC_I225_RX_LATENCY_1000;
190− break;
191− case SPEED_2500:
192− adjust = IGC_I225_RX_LATENCY_2500;
193− break;
194− }
181+ regval = le32_to_cpu(va[2]);
182+ regval |= (u64)le32_to_cpu(va[3]) << 32;
183+ igc_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval);
184+
185+ /* Adjust timestamp for the RX latency based on link speed */
186+ switch (adapter->link_speed) {
187+ case SPEED_10:
188+ adjust = IGC_I225_RX_LATENCY_10;
189+ break;
190+ case SPEED_100:
191+ adjust = IGC_I225_RX_LATENCY_100;
192+ break;
193+ case SPEED_1000:
194+ adjust = IGC_I225_RX_LATENCY_1000;
195+ break;
196+ case SPEED_2500:
197+ adjust = IGC_I225_RX_LATENCY_2500;
198+ break;
199+ default:
200+ adjust = 0;
201+ netdev_warn_once(adapter->netdev, "Imprecise timestamp\n");
202+ break;
195203 }
196204 skb_hwtstamps(skb)->hwtstamp =
197205 ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c+2−1
@@ -4118,6 +4118,8 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter, · 4117 unmodified lines
41184118 #endif
41194119 }
41204120
4121+ ring->rx_offset = ixgbe_rx_offset(ring);
4122+
41214123 if (ring->xsk_pool && hw->mac.type != ixgbe_mac_82599EB) {
41224124 u32 xsk_buf_len = xsk_pool_get_rx_frame_size(ring->xsk_pool);
41234125
@@ -6578,7 +6580,6 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter, · 2454 unmodified lines
65786580
65796581 rx_ring->next_to_clean = 0;
65806582 rx_ring->next_to_use = 0;
6581− rx_ring->rx_offset = ixgbe_rx_offset(rx_ring);
65826583
65836584 /* XDP RX-queue info */
65846585 if (xdp_rxq_info_reg(&rx_ring->xdp_rxq, adapter->netdev,
drivers/net/ethernet/marvell/Kconfig+2−2
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 config NET_VENDOR_MARVELL
77 bool "Marvell devices"
88 default y
9− depends on PCI || CPU_PXA168 || MV64X60 || PPC32 || PLAT_ORION || INET || COMPILE_TEST
9+ depends on PCI || CPU_PXA168 || PPC32 || PLAT_ORION || INET || COMPILE_TEST
1010 help
1111 If you have a network (Ethernet) card belonging to this class, say Y.
1212
@@ -19,7 +19,7 @@ if NET_VENDOR_MARVELL · 6 unmodified lines
1919
2020 config MV643XX_ETH
2121 tristate "Marvell Discovery (643XX) and Orion ethernet support"
22− depends on MV64X60 || PPC32 || PLAT_ORION || COMPILE_TEST
22+ depends on PPC32 || PLAT_ORION || COMPILE_TEST
2323 depends on INET
2424 select PHYLIB
2525 select MVMDIO
drivers/net/ethernet/marvell/mv643xx_eth.c+1−1
@@ -2684,7 +2684,7 @@ static const struct of_device_id mv643xx_eth_shared_ids[] = { · 2683 unmodified lines
26842684 MODULE_DEVICE_TABLE(of, mv643xx_eth_shared_ids);
26852685 #endif
26862686
2687−#if defined(CONFIG_OF_IRQ) && !defined(CONFIG_MV64X60)
2687+#ifdef CONFIG_OF_IRQ
26882688 #define mv643xx_eth_property(_np, _name, _v) \
26892689 do { \
26902690 u32 tmp; \
drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h+0−2
@@ -13499,8 +13499,6 @@ static struct npc_mcam_kex npc_mkex_default = { · 13498 unmodified lines
1349913499 [NPC_LT_LC_IP] = {
1350013500 /* SIP+DIP: 8 bytes, KW2[63:0] */
1350113501 KEX_LD_CFG(0x07, 0xc, 0x1, 0x0, 0x10),
13502− /* TOS: 1 byte, KW1[63:56] */
13503− KEX_LD_CFG(0x0, 0x1, 0x1, 0x0, 0xf),
1350413502 },
1350513503 /* Layer C: IPv6 */
1350613504 [NPC_LT_LC_IP6] = {
drivers/net/ethernet/marvell/octeontx2/af/rvu.c+4−2
@@ -2462,8 +2462,10 @@ static void rvu_unregister_interrupts(struct rvu *rvu) · 2461 unmodified lines
24622462 INTR_MASK(rvu->hw->total_pfs) & ~1ULL);
24632463
24642464 for (irq = 0; irq < rvu->num_vec; irq++) {
2465− if (rvu->irq_allocated[irq])
2465+ if (rvu->irq_allocated[irq]) {
24662466 free_irq(pci_irq_vector(rvu->pdev, irq), rvu);
2467+ rvu->irq_allocated[irq] = false;
2468+ }
24672469 }
24682470
24692471 pci_free_irq_vectors(rvu->pdev);
@@ -2975,8 +2977,8 @@ static void rvu_remove(struct pci_dev *pdev) · 505 unmodified lines
29752977 struct rvu *rvu = pci_get_drvdata(pdev);
29762978
29772979 rvu_dbg_exit(rvu);
2978− rvu_unregister_interrupts(rvu);
29792980 rvu_unregister_dl(rvu);
2981+ rvu_unregister_interrupts(rvu);
29802982 rvu_flr_wq_destroy(rvu);
29812983 rvu_cgx_exit(rvu);
29822984 rvu_fwdata_exit(rvu);
drivers/net/ethernet/marvell/octeontx2/af/rvu.h+1−0
@@ -678,6 +678,7 @@ void npc_read_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, · 677 unmodified lines
678678 u8 *intf, u8 *ena);
679679 bool is_mac_feature_supported(struct rvu *rvu, int pf, int feature);
680680 u32 rvu_cgx_get_fifolen(struct rvu *rvu);
681+void *rvu_first_cgx_pdata(struct rvu *rvu);
681682
682683 /* CPT APIs */
683684 int rvu_cpt_lf_teardown(struct rvu *rvu, u16 pcifunc, int lf, int slot);
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c+16−2
@@ -89,6 +89,21 @@ void *rvu_cgx_pdata(u8 cgx_id, struct rvu *rvu) · 88 unmodified lines
8989 return rvu->cgx_idmap[cgx_id];
9090 }
9191
92+/* Return first enabled CGX instance if none are enabled then return NULL */
93+void *rvu_first_cgx_pdata(struct rvu *rvu)
94+{
95+ int first_enabled_cgx = 0;
96+ void *cgxd = NULL;
97+
98+ for (; first_enabled_cgx < rvu->cgx_cnt_max; first_enabled_cgx++) {
99+ cgxd = rvu_cgx_pdata(first_enabled_cgx, rvu);
100+ if (cgxd)
101+ break;
102+ }
103+
104+ return cgxd;
105+}
106+
92107 /* Based on P2X connectivity find mapped NIX block for a PF */
93108 static void rvu_map_cgx_nix_block(struct rvu *rvu, int pf,
94109 int cgx_id, int lmac_id)
@@ -711,10 +726,9 @@ int rvu_mbox_handler_cgx_features_get(struct rvu *rvu, · 616 unmodified lines
711726 u32 rvu_cgx_get_fifolen(struct rvu *rvu)
712727 {
713728 struct mac_ops *mac_ops;
714− int rvu_def_cgx_id = 0;
715729 u32 fifo_len;
716730
717− mac_ops = get_mac_ops(rvu_cgx_pdata(rvu_def_cgx_id, rvu));
731+ mac_ops = get_mac_ops(rvu_first_cgx_pdata(rvu));
718732 fifo_len = mac_ops ? mac_ops->fifo_len : 0;
719733
720734 return fifo_len;
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c+36−21
@@ -234,12 +234,14 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, · 233 unmodified lines
234234 char __user *buffer,
235235 size_t count, loff_t *ppos)
236236 {
237− int index, off = 0, flag = 0, go_back = 0, off_prev;
237+ int index, off = 0, flag = 0, go_back = 0, len = 0;
238238 struct rvu *rvu = filp->private_data;
239239 int lf, pf, vf, pcifunc;
240240 struct rvu_block block;
241241 int bytes_not_copied;
242+ int lf_str_size = 12;
242243 int buf_size = 2048;
244+ char *lfs;
243245 char *buf;
244246
245247 /* don't allow partial reads */
@@ -249,12 +251,20 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, · 3 unmodified lines
249251 buf = kzalloc(buf_size, GFP_KERNEL);
250252 if (!buf)
251253 return -ENOSPC;
252− off += scnprintf(&buf[off], buf_size - 1 - off, "\npcifunc\t\t");
254+
255+ lfs = kzalloc(lf_str_size, GFP_KERNEL);
256+ if (!lfs) {
257+ kfree(buf);
258+ return -ENOMEM;
259+ }
260+ off += scnprintf(&buf[off], buf_size - 1 - off, "%-*s", lf_str_size,
261+ "pcifunc");
253262 for (index = 0; index < BLK_COUNT; index++)
254− if (strlen(rvu->hw->block[index].name))
255− off += scnprintf(&buf[off], buf_size - 1 - off,
256− "%*s\t", (index - 1) * 2,
257− rvu->hw->block[index].name);
263+ if (strlen(rvu->hw->block[index].name)) {
264+ off += scnprintf(&buf[off], buf_size - 1 - off,
265+ "%-*s", lf_str_size,
266+ rvu->hw->block[index].name);
267+ }
258268 off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
259269 for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
260270 for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
@@ -263,14 +273,15 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, · 2 unmodified lines
263273 continue;
264274
265275 if (vf) {
276+ sprintf(lfs, "PF%d:VF%d", pf, vf - 1);
266277 go_back = scnprintf(&buf[off],
267278 buf_size - 1 - off,
268− "PF%d:VF%d\t\t", pf,
269− vf - 1);
279+ "%-*s", lf_str_size, lfs);
270280 } else {
281+ sprintf(lfs, "PF%d", pf);
271282 go_back = scnprintf(&buf[off],
272283 buf_size - 1 - off,
273− "PF%d\t\t", pf);
284+ "%-*s", lf_str_size, lfs);
274285 }
275286
276287 off += go_back;
@@ -278,20 +289,22 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, · 1 unmodified line
278289 block = rvu->hw->block[index];
279290 if (!strlen(block.name))
280291 continue;
281− off_prev = off;
292+ len = 0;
293+ lfs[len] = '\0';
282294 for (lf = 0; lf < block.lf.max; lf++) {
283295 if (block.fn_map[lf] != pcifunc)
284296 continue;
285297 flag = 1;
286− off += scnprintf(&buf[off], buf_size - 1
287− - off, "%3d,", lf);
298+ len += sprintf(&lfs[len], "%d,", lf);
288299 }
289− if (flag && off_prev != off)
290− off--;
291− else
292− go_back++;
300+
301+ if (flag)
302+ len--;
303+ lfs[len] = '\0';
293304 off += scnprintf(&buf[off], buf_size - 1 - off,
294− "\t");
305+ "%-*s", lf_str_size, lfs);
306+ if (!strlen(lfs))
307+ go_back += lf_str_size;
295308 }
296309 if (!flag)
297310 off -= go_back;
@@ -303,6 +316,7 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, · 5 unmodified lines
303316 }
304317
305318 bytes_not_copied = copy_to_user(buffer, buf, off);
319+ kfree(lfs);
306320 kfree(buf);
307321
308322 if (bytes_not_copied)
@@ -319,7 +333,6 @@ static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused) · 10 unmodified lines
319333 struct rvu *rvu = filp->private;
320334 struct pci_dev *pdev = NULL;
321335 struct mac_ops *mac_ops;
322− int rvu_def_cgx_id = 0;
323336 char cgx[10], lmac[10];
324337 struct rvu_pfvf *pfvf;
325338 int pf, domain, blkid;
@@ -327,7 +340,10 @@ static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused) · 1 unmodified line
327340 u16 pcifunc;
328341
329342 domain = 2;
330− mac_ops = get_mac_ops(rvu_cgx_pdata(rvu_def_cgx_id, rvu));
343+ mac_ops = get_mac_ops(rvu_first_cgx_pdata(rvu));
344+ /* There can be no CGX devices at all */
345+ if (!mac_ops)
346+ return 0;
331347 seq_printf(filp, "PCI dev\t\tRVU PF Func\tNIX block\t%s\tLMAC\n",
332348 mac_ops->name);
333349 for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
@@ -1818,7 +1834,6 @@ static void rvu_dbg_cgx_init(struct rvu *rvu) · 1484 unmodified lines
18181834 {
18191835 struct mac_ops *mac_ops;
18201836 unsigned long lmac_bmap;
1821− int rvu_def_cgx_id = 0;
18221837 int i, lmac_id;
18231838 char dname[20];
18241839 void *cgx;
@@ -1826,7 +1841,7 @@ static void rvu_dbg_cgx_init(struct rvu *rvu) · 1 unmodified line
18261841 if (!cgx_get_cgxcnt_max())
18271842 return;
18281843
1829− mac_ops = get_mac_ops(rvu_cgx_pdata(rvu_def_cgx_id, rvu));
1844+ mac_ops = get_mac_ops(rvu_first_cgx_pdata(rvu));
18301845 if (!mac_ops)
18311846 return;
18321847
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c+1−1
@@ -2629,7 +2629,7 @@ static int set_flowkey_fields(struct nix_rx_flowkey_alg *alg, u32 flow_cfg) · 2628 unmodified lines
26292629 struct nix_rx_flowkey_alg *field;
26302630 struct nix_rx_flowkey_alg tmp;
26312631 u32 key_type, valid_key;
2632− int l4_key_offset;
2632+ int l4_key_offset = 0;
26332633
26342634 if (!alg)
26352635 return -EINVAL;
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c+1−1
@@ -2490,10 +2490,10 @@ int rvu_mbox_handler_npc_mcam_free_counter(struct rvu *rvu, · 2489 unmodified lines
24902490 index = find_next_bit(mcam->bmap, mcam->bmap_entries, entry);
24912491 if (index >= mcam->bmap_entries)
24922492 break;
2493+ entry = index + 1;
24932494 if (mcam->entry2cntr_map[index] != req->cntr)
24942495 continue;
24952496
2496− entry = index + 1;
24972497 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr,
24982498 index, req->cntr);
24992499 }
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c+3−1
@@ -257,17 +257,19 @@ int otx2_get_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc, · 256 unmodified lines
257257 int otx2_get_all_flows(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc,
258258 u32 *rule_locs)
259259 {
260+ u32 rule_cnt = nfc->rule_cnt;
260261 u32 location = 0;
261262 int idx = 0;
262263 int err = 0;
263264
264265 nfc->data = pfvf->flow_cfg->ntuple_max_flows;
265− while ((!err || err == -ENOENT) && idx < nfc->rule_cnt) {
266+ while ((!err || err == -ENOENT) && idx < rule_cnt) {
266267 err = otx2_get_flow(pfvf, nfc, location);
267268 if (!err)
268269 rule_locs[idx++] = location;
269270 location++;
270271 }
272+ nfc->rule_cnt = rule_cnt;
271273
272274 return err;
273275 }
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c+5−0
@@ -1672,6 +1672,7 @@ int otx2_stop(struct net_device *netdev) · 1671 unmodified lines
16721672 struct otx2_nic *pf = netdev_priv(netdev);
16731673 struct otx2_cq_poll *cq_poll = NULL;
16741674 struct otx2_qset *qset = &pf->qset;
1675+ struct otx2_rss_info *rss;
16751676 int qidx, vec, wrk;
16761677
16771678 netif_carrier_off(netdev);
@@ -1684,6 +1685,10 @@ int otx2_stop(struct net_device *netdev) · 6 unmodified lines
16841685 /* First stop packet Rx/Tx */
16851686 otx2_rxtx_enable(pf, false);
16861687
1688+ /* Clear RSS enable flag */
1689+ rss = &pf->hw.rss_info;
1690+ rss->enable = false;
1691+
16871692 /* Cleanup Queue IRQ */
16881693 vec = pci_irq_vector(pf->pdev,
16891694 pf->hw.nix_msixoff + NIX_LF_QINT_VEC_START);
drivers/net/ethernet/marvell/pxa168_eth.c+1−1
@@ -1544,8 +1544,8 @@ static int pxa168_eth_remove(struct platform_device *pdev) · 1543 unmodified lines
15441544 clk_disable_unprepare(pep->clk);
15451545 mdiobus_unregister(pep->smi_bus);
15461546 mdiobus_free(pep->smi_bus);
1547− unregister_netdev(dev);
15481547 cancel_work_sync(&pep->tx_timeout_task);
1548+ unregister_netdev(dev);
15491549 free_netdev(dev);
15501550 return 0;
15511551 }
drivers/net/ethernet/mellanox/mlx5/core/en.h+4−3
@@ -92,14 +92,15 @@ struct page_pool; · 91 unmodified lines
9292 MLX5_MPWRQ_LOG_WQE_SZ - PAGE_SHIFT : 0)
9393 #define MLX5_MPWRQ_PAGES_PER_WQE BIT(MLX5_MPWRQ_WQE_PAGE_ORDER)
9494
95−#define MLX5_MTT_OCTW(npages) (ALIGN(npages, 8) / 2)
95+#define MLX5_ALIGN_MTTS(mtts) (ALIGN(mtts, 8))
96+#define MLX5_ALIGNED_MTTS_OCTW(mtts) ((mtts) / 2)
97+#define MLX5_MTT_OCTW(mtts) (MLX5_ALIGNED_MTTS_OCTW(MLX5_ALIGN_MTTS(mtts)))
9698 /* Add another page to MLX5E_REQUIRED_WQE_MTTS as a buffer between
9799 * WQEs, This page will absorb write overflow by the hardware, when
98100 * receiving packets larger than MTU. These oversize packets are
99101 * dropped by the driver at a later stage.
100102 */
101−#define MLX5E_REQUIRED_WQE_MTTS (ALIGN(MLX5_MPWRQ_PAGES_PER_WQE + 1, 8))
102−#define MLX5E_LOG_ALIGNED_MPWQE_PPW (ilog2(MLX5E_REQUIRED_WQE_MTTS))
103+#define MLX5E_REQUIRED_WQE_MTTS (MLX5_ALIGN_MTTS(MLX5_MPWRQ_PAGES_PER_WQE + 1))
103104 #define MLX5E_REQUIRED_MTTS(wqes) (wqes * MLX5E_REQUIRED_WQE_MTTS)
104105 #define MLX5E_MAX_RQ_NUM_MTTS \
105106 ((1 << 16) * 2) /* So that MLX5_MTT_OCTW(num_mtts) fits into u16 */
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c+2−1
@@ -1181,7 +1181,8 @@ int mlx5_tc_ct_add_no_trk_match(struct mlx5_flow_spec *spec) · 1180 unmodified lines
11811181
11821182 mlx5e_tc_match_to_reg_get_match(spec, CTSTATE_TO_REG,
11831183 &ctstate, &ctstate_mask);
1184− if (ctstate_mask)
1184+
1185+ if ((ctstate & ctstate_mask) == MLX5_CT_STATE_TRK_BIT)
11851186 return -EOPNOTSUPP;
11861187
11871188 ctstate_mask |= MLX5_CT_STATE_TRK_BIT;
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c+4−4
@@ -685,14 +685,14 @@ int mlx5e_tc_tun_route_lookup(struct mlx5e_priv *priv, · 684 unmodified lines
685685 u16 vport_num;
686686 int err = 0;
687687
688− if (flow_attr->ip_version == 4) {
688+ if (flow_attr->tun_ip_version == 4) {
689689 /* Addresses are swapped for decap */
690690 attr.fl.fl4.saddr = esw_attr->rx_tun_attr->dst_ip.v4;
691691 attr.fl.fl4.daddr = esw_attr->rx_tun_attr->src_ip.v4;
692692 err = mlx5e_route_lookup_ipv4_get(priv, priv->netdev, &attr);
693693 }
694694 #if IS_ENABLED(CONFIG_INET) && IS_ENABLED(CONFIG_IPV6)
695− else if (flow_attr->ip_version == 6) {
695+ else if (flow_attr->tun_ip_version == 6) {
696696 /* Addresses are swapped for decap */
697697 attr.fl.fl6.saddr = esw_attr->rx_tun_attr->dst_ip.v6;
698698 attr.fl.fl6.daddr = esw_attr->rx_tun_attr->src_ip.v6;
@@ -718,10 +718,10 @@ int mlx5e_tc_tun_route_lookup(struct mlx5e_priv *priv, · 19 unmodified lines
718718 esw_attr->rx_tun_attr->decap_vport = vport_num;
719719
720720 out:
721− if (flow_attr->ip_version == 4)
721+ if (flow_attr->tun_ip_version == 4)
722722 mlx5e_route_lookup_ipv4_put(&attr);
723723 #if IS_ENABLED(CONFIG_INET) && IS_ENABLED(CONFIG_IPV6)
724− else if (flow_attr->ip_version == 6)
724+ else if (flow_attr->tun_ip_version == 6)
725725 mlx5e_route_lookup_ipv6_put(&attr);
726726 #endif
727727 return err;
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c+2−1
@@ -89,6 +89,7 @@ int mlx5e_tc_set_attr_rx_tun(struct mlx5e_tc_flow *flow, · 88 unmodified lines
8989 * required to establish routing.
9090 */
9191 flow_flag_set(flow, TUN_RX);
92+ flow->attr->tun_ip_version = ip_version;
9293 return 0;
9394 }
9495
@@ -1091,7 +1092,7 @@ int mlx5e_attach_decap_route(struct mlx5e_priv *priv, · 996 unmodified lines
10911092 if (err || !esw_attr->rx_tun_attr->decap_vport)
10921093 goto out;
10931094
1094− key.ip_version = attr->ip_version;
1095+ key.ip_version = attr->tun_ip_version;
10951096 if (key.ip_version == 4)
10961097 key.endpoint_ip.v4 = esw_attr->rx_tun_attr->dst_ip.v4;
10971098 else
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c+4−0
@@ -227,6 +227,10 @@ static int mlx5e_tc_tun_parse_geneve_options(struct mlx5e_priv *priv, · 226 unmodified lines
227227 option_key = (struct geneve_opt *)&enc_opts.key->data[0];
228228 option_mask = (struct geneve_opt *)&enc_opts.mask->data[0];
229229
230+ if (option_mask->opt_class == 0 && option_mask->type == 0 &&
231+ !memchr_inv(option_mask->opt_data, 0, option_mask->length * 4))
232+ return 0;
233+
230234 if (option_key->length > max_tlv_option_data_len) {
231235 NL_SET_ERR_MSG_MOD(extack,
232236 "Matching on GENEVE options: unsupported option len");
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c+10−1
@@ -1887,6 +1887,7 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev, · 1886 unmodified lines
18871887 {
18881888 struct mlx5e_priv *priv = netdev_priv(netdev);
18891889 struct mlx5_core_dev *mdev = priv->mdev;
1890+ int err;
18901891
18911892 if (!MLX5_CAP_GEN(mdev, cqe_compression))
18921893 return -EOPNOTSUPP;
@@ -1896,7 +1897,10 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev, · 3 unmodified lines
18961897 return -EINVAL;
18971898 }
18981899
1899− mlx5e_modify_rx_cqe_compression_locked(priv, enable);
1900+ err = mlx5e_modify_rx_cqe_compression_locked(priv, enable);
1901+ if (err)
1902+ return err;
1903+
19001904 priv->channels.params.rx_cqe_compress_def = enable;
19011905
19021906 return 0;
@@ -2014,8 +2018,13 @@ static int set_pflag_tx_port_ts(struct net_device *netdev, bool enable) · 111 unmodified lines
20142018 */
20152019
20162020 if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
2021+ struct mlx5e_params old_params;
2022+
2023+ old_params = priv->channels.params;
20172024 priv->channels.params = new_channels.params;
20182025 err = mlx5e_num_channels_changed(priv);
2026+ if (err)
2027+ priv->channels.params = old_params;
20192028 goto out;
20202029 }
20212030
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+57−24
@@ -334,9 +334,9 @@ static int mlx5e_create_rq_umr_mkey(struct mlx5_core_dev *mdev, struct mlx5e_rq · 333 unmodified lines
334334 rq->wqe_overflow.addr);
335335 }
336336
337−static inline u64 mlx5e_get_mpwqe_offset(struct mlx5e_rq *rq, u16 wqe_ix)
337+static u64 mlx5e_get_mpwqe_offset(u16 wqe_ix)
338338 {
339− return (wqe_ix << MLX5E_LOG_ALIGNED_MPWQE_PPW) << PAGE_SHIFT;
339+ return MLX5E_REQUIRED_MTTS(wqe_ix) << PAGE_SHIFT;
340340 }
341341
342342 static void mlx5e_init_frags_partition(struct mlx5e_rq *rq)
@@ -577,7 +577,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c, · 234 unmodified lines
577577 mlx5_wq_ll_get_wqe(&rq->mpwqe.wq, i);
578578 u32 byte_count =
579579 rq->mpwqe.num_strides << rq->mpwqe.log_stride_sz;
580− u64 dma_offset = mlx5e_get_mpwqe_offset(rq, i);
580+ u64 dma_offset = mlx5e_get_mpwqe_offset(i);
581581
582582 wqe->data[0].addr = cpu_to_be64(dma_offset + rq->buff.headroom);
583583 wqe->data[0].byte_count = cpu_to_be32(byte_count);
@@ -2368,8 +2368,9 @@ static u8 mlx5e_build_icosq_log_wq_sz(struct mlx5e_params *params, · 1784 unmodified lines
23682368 {
23692369 switch (params->rq_wq_type) {
23702370 case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
2371− return order_base_2(MLX5E_UMR_WQEBBS) +
2372− mlx5e_get_rq_log_wq_sz(rqp->rqc);
2371+ return max_t(u8, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE,
2372+ order_base_2(MLX5E_UMR_WQEBBS) +
2373+ mlx5e_get_rq_log_wq_sz(rqp->rqc));
23732374 default: /* MLX5_WQ_TYPE_CYCLIC */
23742375 return MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE;
23752376 }
@@ -2502,8 +2503,10 @@ void mlx5e_close_channels(struct mlx5e_channels *chs) · 126 unmodified lines
25022503 {
25032504 int i;
25042505
2505− if (chs->port_ptp)
2506+ if (chs->port_ptp) {
25062507 mlx5e_port_ptp_close(chs->port_ptp);
2508+ chs->port_ptp = NULL;
2509+ }
25072510
25082511 for (i = 0; i < chs->num; i++)
25092512 mlx5e_close_channel(chs->c[i]);
@@ -3810,6 +3813,15 @@ void mlx5e_fold_sw_stats64(struct mlx5e_priv *priv, struct rtnl_link_stats64 *s) · 1300 unmodified lines
38103813 for (j = 0; j < priv->max_opened_tc; j++) {
38113814 struct mlx5e_sq_stats *sq_stats = &channel_stats->sq[j];
38123815
3816+ s->tx_packets += sq_stats->packets;
3817+ s->tx_bytes += sq_stats->bytes;
3818+ s->tx_dropped += sq_stats->dropped;
3819+ }
3820+ }
3821+ if (priv->port_ptp_opened) {
3822+ for (i = 0; i < priv->max_opened_tc; i++) {
3823+ struct mlx5e_sq_stats *sq_stats = &priv->port_ptp_stats.sq[i];
3824+
38133825 s->tx_packets += sq_stats->packets;
38143826 s->tx_bytes += sq_stats->bytes;
38153827 s->tx_dropped += sq_stats->dropped;
@@ -3834,10 +3846,17 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) · 18 unmodified lines
38343846 }
38353847
38363848 if (mlx5e_is_uplink_rep(priv)) {
3849+ struct mlx5e_vport_stats *vstats = &priv->stats.vport;
3850+
38373851 stats->rx_packets = PPORT_802_3_GET(pstats, a_frames_received_ok);
38383852 stats->rx_bytes = PPORT_802_3_GET(pstats, a_octets_received_ok);
38393853 stats->tx_packets = PPORT_802_3_GET(pstats, a_frames_transmitted_ok);
38403854 stats->tx_bytes = PPORT_802_3_GET(pstats, a_octets_transmitted_ok);
3855+
3856+ /* vport multicast also counts packets that are dropped due to steering
3857+ * or rx out of buffer
3858+ */
3859+ stats->multicast = VPORT_COUNTER_GET(vstats, received_eth_multicast.packets);
38413860 } else {
38423861 mlx5e_fold_sw_stats64(priv, stats);
38433862 }
@@ -4683,8 +4702,10 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog) · 839 unmodified lines
46834702 struct mlx5e_channel *c = priv->channels.c[i];
46844703
46854704 mlx5e_rq_replace_xdp_prog(&c->rq, prog);
4686− if (test_bit(MLX5E_CHANNEL_STATE_XSK, c->state))
4705+ if (test_bit(MLX5E_CHANNEL_STATE_XSK, c->state)) {
4706+ bpf_prog_inc(prog);
46874707 mlx5e_rq_replace_xdp_prog(&c->xskrq, prog);
4708+ }
46884709 }
46894710
46904711 unlock:
@@ -4958,6 +4979,11 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16 · 267 unmodified lines
49584979 priv->max_nch);
49594980 params->num_tc = 1;
49604981
4982+ /* Set an initial non-zero value, so that mlx5e_select_queue won't
4983+ * divide by zero if called before first activating channels.
4984+ */
4985+ priv->num_tc_x_num_ch = params->num_channels * params->num_tc;
4986+
49614987 /* SQ */
49624988 params->log_sq_size = is_kdump_kernel() ?
49634989 MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE :
@@ -5474,8 +5500,6 @@ int mlx5e_priv_init(struct mlx5e_priv *priv, · 510 unmodified lines
54745500 struct net_device *netdev,
54755501 struct mlx5_core_dev *mdev)
54765502 {
5477− memset(priv, 0, sizeof(*priv));
5478−
54795503 /* priv init */
54805504 priv->mdev = mdev;
54815505 priv->netdev = netdev;
@@ -5508,12 +5532,18 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv) · 26 unmodified lines
55085532 {
55095533 int i;
55105534
5535+ /* bail if change profile failed and also rollback failed */
5536+ if (!priv->mdev)
5537+ return;
5538+
55115539 destroy_workqueue(priv->wq);
55125540 free_cpumask_var(priv->scratchpad.cpumask);
55135541
55145542 for (i = 0; i < priv->htb.max_qos_sqs; i++)
55155543 kfree(priv->htb.qos_sq_stats[i]);
55165544 kvfree(priv->htb.qos_sq_stats);
5545+
5546+ memset(priv, 0, sizeof(*priv));
55175547 }
55185548
55195549 struct net_device *
@@ -5630,11 +5660,10 @@ void mlx5e_detach_netdev(struct mlx5e_priv *priv) · 110 unmodified lines
56305660 }
56315661
56325662 static int
5633−mlx5e_netdev_attach_profile(struct mlx5e_priv *priv,
5663+mlx5e_netdev_attach_profile(struct net_device *netdev, struct mlx5_core_dev *mdev,
56345664 const struct mlx5e_profile *new_profile, void *new_ppriv)
56355665 {
5636− struct net_device *netdev = priv->netdev;
5637− struct mlx5_core_dev *mdev = priv->mdev;
5666+ struct mlx5e_priv *priv = netdev_priv(netdev);
56385667 int err;
56395668
56405669 err = mlx5e_priv_init(priv, netdev, mdev);
@@ -5647,10 +5676,16 @@ mlx5e_netdev_attach_profile(struct mlx5e_priv *priv, · 6 unmodified lines
56475676 priv->ppriv = new_ppriv;
56485677 err = new_profile->init(priv->mdev, priv->netdev);
56495678 if (err)
5650− return err;
5679+ goto priv_cleanup;
56515680 err = mlx5e_attach_netdev(priv);
56525681 if (err)
5653− new_profile->cleanup(priv);
5682+ goto profile_cleanup;
5683+ return err;
5684+
5685+profile_cleanup:
5686+ new_profile->cleanup(priv);
5687+priv_cleanup:
5688+ mlx5e_priv_cleanup(priv);
56545689 return err;
56555690 }
56565691
@@ -5659,13 +5694,14 @@ int mlx5e_netdev_change_profile(struct mlx5e_priv *priv, · 2 unmodified lines
56595694 {
56605695 unsigned int new_max_nch = mlx5e_calc_max_nch(priv, new_profile);
56615696 const struct mlx5e_profile *orig_profile = priv->profile;
5697+ struct net_device *netdev = priv->netdev;
5698+ struct mlx5_core_dev *mdev = priv->mdev;
56625699 void *orig_ppriv = priv->ppriv;
56635700 int err, rollback_err;
56645701
56655702 /* sanity */
56665703 if (new_max_nch != priv->max_nch) {
5667− netdev_warn(priv->netdev,
5668− "%s: Replacing profile with different max channels\n",
5704+ netdev_warn(netdev, "%s: Replacing profile with different max channels\n",
56695705 __func__);
56705706 return -EINVAL;
56715707 }
@@ -5675,22 +5711,19 @@ int mlx5e_netdev_change_profile(struct mlx5e_priv *priv, · 3 unmodified lines
56755711 priv->profile->cleanup(priv);
56765712 mlx5e_priv_cleanup(priv);
56775713
5678− err = mlx5e_netdev_attach_profile(priv, new_profile, new_ppriv);
5714+ err = mlx5e_netdev_attach_profile(netdev, mdev, new_profile, new_ppriv);
56795715 if (err) { /* roll back to original profile */
5680− netdev_warn(priv->netdev, "%s: new profile init failed, %d\n",
5681− __func__, err);
5716+ netdev_warn(netdev, "%s: new profile init failed, %d\n", __func__, err);
56825717 goto rollback;
56835718 }
56845719
56855720 return 0;
56865721
56875722 rollback:
5688− rollback_err = mlx5e_netdev_attach_profile(priv, orig_profile, orig_ppriv);
5689− if (rollback_err) {
5690− netdev_err(priv->netdev,
5691− "%s: failed to rollback to orig profile, %d\n",
5723+ rollback_err = mlx5e_netdev_attach_profile(netdev, mdev, orig_profile, orig_ppriv);
5724+ if (rollback_err)
5725+ netdev_err(netdev, "%s: failed to rollback to orig profile, %d\n",
56925726 __func__, rollback_err);
5693− }
56945727 return err;
56955728 }
56965729
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+2−2
@@ -500,7 +500,6 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix) · 499 unmodified lines
500500 struct mlx5e_icosq *sq = rq->icosq;
501501 struct mlx5_wq_cyc *wq = &sq->wq;
502502 struct mlx5e_umr_wqe *umr_wqe;
503− u16 xlt_offset = ix << (MLX5E_LOG_ALIGNED_MPWQE_PPW - 1);
504503 u16 pi;
505504 int err;
506505 int i;
@@ -531,7 +530,8 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix) · 24 unmodified lines
531530 umr_wqe->ctrl.opmod_idx_opcode =
532531 cpu_to_be32((sq->pc << MLX5_WQE_CTRL_WQE_INDEX_SHIFT) |
533532 MLX5_OPCODE_UMR);
534− umr_wqe->uctrl.xlt_offset = cpu_to_be16(xlt_offset);
533+ umr_wqe->uctrl.xlt_offset =
534+ cpu_to_be16(MLX5_ALIGNED_MTTS_OCTW(MLX5E_REQUIRED_MTTS(ix)));
535535
536536 sq->db.wqe_info[pi] = (struct mlx5e_icosq_wqe_info) {
537537 .wqe_type = MLX5E_ICOSQ_WQE_UMR_RX,
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+45−12
@@ -2296,6 +2296,16 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, · 2295 unmodified lines
22962296 *match_level = MLX5_MATCH_L4;
22972297 }
22982298
2299+ /* Currenlty supported only for MPLS over UDP */
2300+ if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_MPLS) &&
2301+ !netif_is_bareudp(filter_dev)) {
2302+ NL_SET_ERR_MSG_MOD(extack,
2303+ "Matching on MPLS is supported only for MPLS over UDP");
2304+ netdev_err(priv->netdev,
2305+ "Matching on MPLS is supported only for MPLS over UDP\n");
2306+ return -EOPNOTSUPP;
2307+ }
2308+
22992309 return 0;
23002310 }
23012311
@@ -2899,6 +2909,37 @@ static int is_action_keys_supported(const struct flow_action_entry *act, · 597 unmodified lines
28992909 return 0;
29002910 }
29012911
2912+static bool modify_tuple_supported(bool modify_tuple, bool ct_clear,
2913+ bool ct_flow, struct netlink_ext_ack *extack,
2914+ struct mlx5e_priv *priv,
2915+ struct mlx5_flow_spec *spec)
2916+{
2917+ if (!modify_tuple || ct_clear)
2918+ return true;
2919+
2920+ if (ct_flow) {
2921+ NL_SET_ERR_MSG_MOD(extack,
2922+ "can't offload tuple modification with non-clear ct()");
2923+ netdev_info(priv->netdev,
2924+ "can't offload tuple modification with non-clear ct()");
2925+ return false;
2926+ }
2927+
2928+ /* Add ct_state=-trk match so it will be offloaded for non ct flows
2929+ * (or after clear action), as otherwise, since the tuple is changed,
2930+ * we can't restore ct state
2931+ */
2932+ if (mlx5_tc_ct_add_no_trk_match(spec)) {
2933+ NL_SET_ERR_MSG_MOD(extack,
2934+ "can't offload tuple modification with ct matches and no ct(clear) action");
2935+ netdev_info(priv->netdev,
2936+ "can't offload tuple modification with ct matches and no ct(clear) action");
2937+ return false;
2938+ }
2939+
2940+ return true;
2941+}
2942+
29022943 static bool modify_header_match_supported(struct mlx5e_priv *priv,
29032944 struct mlx5_flow_spec *spec,
29042945 struct flow_action *flow_action,
@@ -2937,18 +2978,9 @@ static bool modify_header_match_supported(struct mlx5e_priv *priv, · 32 unmodified lines
29372978 return err;
29382979 }
29392980
2940− /* Add ct_state=-trk match so it will be offloaded for non ct flows
2941− * (or after clear action), as otherwise, since the tuple is changed,
2942− * we can't restore ct state
2943− */
2944− if (!ct_clear && modify_tuple &&
2945− mlx5_tc_ct_add_no_trk_match(spec)) {
2946− NL_SET_ERR_MSG_MOD(extack,
2947− "can't offload tuple modify header with ct matches");
2948− netdev_info(priv->netdev,
2949− "can't offload tuple modify header with ct matches");
2981+ if (!modify_tuple_supported(modify_tuple, ct_clear, ct_flow, extack,
2982+ priv, spec))
29502983 return false;
2951− }
29522984
29532985 ip_proto = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ip_protocol);
29542986 if (modify_ip_header && ip_proto != IPPROTO_TCP &&
@@ -4445,7 +4477,8 @@ static int apply_police_params(struct mlx5e_priv *priv, u64 rate, · 1490 unmodified lines
44454477 */
44464478 if (rate) {
44474479 rate = (rate * BITS_PER_BYTE) + 500000;
4448− rate_mbps = max_t(u64, do_div(rate, 1000000), 1);
4480+ do_div(rate, 1000000);
4481+ rate_mbps = max_t(u32, rate, 1);
44494482 }
44504483
44514484 err = mlx5_esw_modify_vport_rate(esw, vport_num, rate_mbps);
drivers/net/ethernet/mellanox/mlx5/core/en_tc.h+1−0
@@ -79,6 +79,7 @@ struct mlx5_flow_attr { · 78 unmodified lines
7979 u8 inner_match_level;
8080 u8 outer_match_level;
8181 u8 ip_version;
82+ u8 tun_ip_version;
8283 u32 flags;
8384 union {
8485 struct mlx5_esw_flow_attr esw_attr[0];
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c+2−1
@@ -551,7 +551,8 @@ esw_setup_dests(struct mlx5_flow_destination *dest, · 550 unmodified lines
551551
552552 if (!mlx5_eswitch_termtbl_required(esw, attr, flow_act, spec) &&
553553 MLX5_CAP_GEN(esw_attr->in_mdev, reg_c_preserve) &&
554− mlx5_eswitch_vport_match_metadata_enabled(esw))
554+ mlx5_eswitch_vport_match_metadata_enabled(esw) &&
555+ MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ignore_flow_level))
555556 attr->flags |= MLX5_ESW_ATTR_FLAG_SRC_REWRITE;
556557
557558 if (attr->dest_ft) {
drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c+1−0
@@ -575,6 +575,7 @@ static int mlx5_fpga_conn_create_qp(struct mlx5_fpga_conn *conn, · 574 unmodified lines
575575 MLX5_SET(qpc, qpc, log_sq_size, ilog2(conn->qp.sq.size));
576576 MLX5_SET(qpc, qpc, cqn_snd, conn->cq.mcq.cqn);
577577 MLX5_SET(qpc, qpc, cqn_rcv, conn->cq.mcq.cqn);
578+ MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(mdev));
578579 MLX5_SET64(qpc, qpc, dbr_addr, conn->qp.wq_ctrl.db.dma);
579580 if (MLX5_CAP_GEN(mdev, cqe_version) == 1)
580581 MLX5_SET(qpc, qpc, user_index, 0xFFFFFF);
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c+3−1
@@ -233,6 +233,7 @@ int mlx5i_create_underlay_qp(struct mlx5e_priv *priv) · 232 unmodified lines
233233 }
234234
235235 qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
236+ MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(priv->mdev));
236237 MLX5_SET(qpc, qpc, st, MLX5_QP_ST_UD);
237238 MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
238239 MLX5_SET(qpc, qpc, ulp_stateless_offload_mode,
@@ -694,6 +695,7 @@ static int mlx5i_check_required_hca_cap(struct mlx5_core_dev *mdev) · 455 unmodified lines
694695 static void mlx5_rdma_netdev_free(struct net_device *netdev)
695696 {
696697 struct mlx5e_priv *priv = mlx5i_epriv(netdev);
698+ struct mlx5_core_dev *mdev = priv->mdev;
697699 struct mlx5i_priv *ipriv = priv->ppriv;
698700 const struct mlx5e_profile *profile = priv->profile;
699701
@@ -702,7 +704,7 @@ static void mlx5_rdma_netdev_free(struct net_device *netdev) · 2 unmodified lines
702704
703705 if (!ipriv->sub_interface) {
704706 mlx5i_pkey_qpn_ht_cleanup(netdev);
705− mlx5e_destroy_mdev_resources(priv->mdev);
707+ mlx5e_destroy_mdev_resources(mdev);
706708 }
707709 }
708710
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c+4−4
@@ -495,15 +495,15 @@ static int mlx5_perout_configure(struct ptp_clock_info *ptp, · 494 unmodified lines
495495 return -EINVAL;
496496
497497 field_select = MLX5_MTPPS_FS_ENABLE;
498+ pin = ptp_find_pin(clock->ptp, PTP_PF_PEROUT, rq->perout.index);
499+ if (pin < 0)
500+ return -EBUSY;
501+
498502 if (on) {
499503 bool rt_mode = mlx5_real_time_mode(mdev);
500504 u32 nsec;
501505 s64 sec;
502506
503− pin = ptp_find_pin(clock->ptp, PTP_PF_PEROUT, rq->perout.index);
504− if (pin < 0)
505− return -EBUSY;
506−
507507 pin_mode = MLX5_PIN_MODE_OUT;
508508 pattern = MLX5_OUT_PATTERN_PERIODIC;
509509 ts.tv_sec = rq->perout.period.sec;
drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c+1−3
@@ -181,15 +181,13 @@ static int mlx5_sf_dev_vhca_arm_all(struct mlx5_sf_dev_table *table) · 180 unmodified lines
181181 u16 max_functions;
182182 u16 function_id;
183183 int err = 0;
184− bool ecpu;
185184 int i;
186185
187186 max_functions = mlx5_sf_max_functions(dev);
188187 function_id = MLX5_CAP_GEN(dev, sf_base_id);
189− ecpu = mlx5_read_embedded_cpu(dev);
190188 /* Arm the vhca context as the vhca event notifier */
191189 for (i = 0; i < max_functions; i++) {
192− err = mlx5_vhca_event_arm(dev, function_id, ecpu);
190+ err = mlx5_vhca_event_arm(dev, function_id);
193191 if (err)
194192 return err;
195193
drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c+4−6
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 #include "sf.h"
77 #include "mlx5_ifc_vhca_event.h"
88 #include "vhca_event.h"
9−#include "ecpf.h"
9+#include "mlx5_core.h"
1010
1111 struct mlx5_sf_hw {
1212 u32 usr_sfnum;
@@ -18,7 +18,6 @@ struct mlx5_sf_hw_table { · 5 unmodified lines
1818 struct mlx5_core_dev *dev;
1919 struct mlx5_sf_hw *sfs;
2020 int max_local_functions;
21− u8 ecpu: 1;
2221 struct mutex table_lock; /* Serializes sf deletion and vhca state change handler. */
2322 struct notifier_block vhca_nb;
2423 };
@@ -64,7 +63,7 @@ int mlx5_sf_hw_table_sf_alloc(struct mlx5_core_dev *dev, u32 usr_sfnum) · 39 unmodified lines
6463 }
6564 if (sw_id == -ENOSPC) {
6665 err = -ENOSPC;
67− goto err;
66+ goto exist_err;
6867 }
6968
7069 hw_fn_id = mlx5_sf_sw_to_hw_id(table->dev, sw_id);
@@ -72,7 +71,7 @@ int mlx5_sf_hw_table_sf_alloc(struct mlx5_core_dev *dev, u32 usr_sfnum) · 1 unmodified line
7271 if (err)
7372 goto err;
7473
75− err = mlx5_modify_vhca_sw_id(dev, hw_fn_id, table->ecpu, usr_sfnum);
74+ err = mlx5_modify_vhca_sw_id(dev, hw_fn_id, usr_sfnum);
7675 if (err)
7776 goto vhca_err;
7877
@@ -118,7 +117,7 @@ void mlx5_sf_hw_table_sf_deferred_free(struct mlx5_core_dev *dev, u16 id) · 39 unmodified lines
118117
119118 hw_fn_id = mlx5_sf_sw_to_hw_id(dev, id);
120119 mutex_lock(&table->table_lock);
121− err = mlx5_cmd_query_vhca_state(dev, hw_fn_id, table->ecpu, out, sizeof(out));
120+ err = mlx5_cmd_query_vhca_state(dev, hw_fn_id, out, sizeof(out));
122121 if (err)
123122 goto err;
124123 state = MLX5_GET(query_vhca_state_out, out, vhca_state_context.vhca_state);
@@ -164,7 +163,6 @@ int mlx5_sf_hw_table_init(struct mlx5_core_dev *dev) · 39 unmodified lines
164163 table->dev = dev;
165164 table->sfs = sfs;
166165 table->max_local_functions = max_functions;
167− table->ecpu = mlx5_read_embedded_cpu(dev);
168166 dev->priv.sf_hw_table = table;
169167 mlx5_core_dbg(dev, "SF HW table: max sfs = %d\n", max_functions);
170168 return 0;
drivers/net/ethernet/mellanox/mlx5/core/sf/mlx5_ifc_vhca_event.h+1−1
@@ -20,7 +20,7 @@ struct mlx5_ifc_vhca_state_context_bits { · 19 unmodified lines
2020
2121 u8 sw_function_id[0x20];
2222
23− u8 reserved_at_40[0x80];
23+ u8 reserved_at_40[0x40];
2424 };
2525
2626 struct mlx5_ifc_query_vhca_state_out_bits {
drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c+11−12
@@ -19,52 +19,51 @@ struct mlx5_vhca_event_work { · 18 unmodified lines
1919 struct mlx5_vhca_state_event event;
2020 };
2121
22−int mlx5_cmd_query_vhca_state(struct mlx5_core_dev *dev, u16 function_id,
23− bool ecpu, u32 *out, u32 outlen)
22+int mlx5_cmd_query_vhca_state(struct mlx5_core_dev *dev, u16 function_id, u32 *out, u32 outlen)
2423 {
2524 u32 in[MLX5_ST_SZ_DW(query_vhca_state_in)] = {};
2625
2726 MLX5_SET(query_vhca_state_in, in, opcode, MLX5_CMD_OP_QUERY_VHCA_STATE);
2827 MLX5_SET(query_vhca_state_in, in, function_id, function_id);
29− MLX5_SET(query_vhca_state_in, in, embedded_cpu_function, ecpu);
28+ MLX5_SET(query_vhca_state_in, in, embedded_cpu_function, 0);
3029
3130 return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
3231 }
3332
3433 static int mlx5_cmd_modify_vhca_state(struct mlx5_core_dev *dev, u16 function_id,
35− bool ecpu, u32 *in, u32 inlen)
34+ u32 *in, u32 inlen)
3635 {
3736 u32 out[MLX5_ST_SZ_DW(modify_vhca_state_out)] = {};
3837
3938 MLX5_SET(modify_vhca_state_in, in, opcode, MLX5_CMD_OP_MODIFY_VHCA_STATE);
4039 MLX5_SET(modify_vhca_state_in, in, function_id, function_id);
41− MLX5_SET(modify_vhca_state_in, in, embedded_cpu_function, ecpu);
40+ MLX5_SET(modify_vhca_state_in, in, embedded_cpu_function, 0);
4241
4342 return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
4443 }
4544
46−int mlx5_modify_vhca_sw_id(struct mlx5_core_dev *dev, u16 function_id, bool ecpu, u32 sw_fn_id)
45+int mlx5_modify_vhca_sw_id(struct mlx5_core_dev *dev, u16 function_id, u32 sw_fn_id)
4746 {
4847 u32 out[MLX5_ST_SZ_DW(modify_vhca_state_out)] = {};
4948 u32 in[MLX5_ST_SZ_DW(modify_vhca_state_in)] = {};
5049
5150 MLX5_SET(modify_vhca_state_in, in, opcode, MLX5_CMD_OP_MODIFY_VHCA_STATE);
5251 MLX5_SET(modify_vhca_state_in, in, function_id, function_id);
53− MLX5_SET(modify_vhca_state_in, in, embedded_cpu_function, ecpu);
52+ MLX5_SET(modify_vhca_state_in, in, embedded_cpu_function, 0);
5453 MLX5_SET(modify_vhca_state_in, in, vhca_state_field_select.sw_function_id, 1);
5554 MLX5_SET(modify_vhca_state_in, in, vhca_state_context.sw_function_id, sw_fn_id);
5655
5756 return mlx5_cmd_exec_inout(dev, modify_vhca_state, in, out);
5857 }
5958
60−int mlx5_vhca_event_arm(struct mlx5_core_dev *dev, u16 function_id, bool ecpu)
59+int mlx5_vhca_event_arm(struct mlx5_core_dev *dev, u16 function_id)
6160 {
6261 u32 in[MLX5_ST_SZ_DW(modify_vhca_state_in)] = {};
6362
6463 MLX5_SET(modify_vhca_state_in, in, vhca_state_context.arm_change_event, 1);
6564 MLX5_SET(modify_vhca_state_in, in, vhca_state_field_select.arm_change_event, 1);
6665
67− return mlx5_cmd_modify_vhca_state(dev, function_id, ecpu, in, sizeof(in));
66+ return mlx5_cmd_modify_vhca_state(dev, function_id, in, sizeof(in));
6867 }
6968
7069 static void
@@ -73,7 +72,7 @@ mlx5_vhca_event_notify(struct mlx5_core_dev *dev, struct mlx5_vhca_state_event * · 2 unmodified lines
7372 u32 out[MLX5_ST_SZ_DW(query_vhca_state_out)] = {};
7473 int err;
7574
76− err = mlx5_cmd_query_vhca_state(dev, event->function_id, event->ecpu, out, sizeof(out));
75+ err = mlx5_cmd_query_vhca_state(dev, event->function_id, out, sizeof(out));
7776 if (err)
7877 return;
7978
@@ -82,7 +81,7 @@ mlx5_vhca_event_notify(struct mlx5_core_dev *dev, struct mlx5_vhca_state_event * · 2 unmodified lines
8281 event->new_vhca_state = MLX5_GET(query_vhca_state_out, out,
8382 vhca_state_context.vhca_state);
8483
85− mlx5_vhca_event_arm(dev, event->function_id, event->ecpu);
84+ mlx5_vhca_event_arm(dev, event->function_id);
8685
8786 blocking_notifier_call_chain(&dev->priv.vhca_state_notifier->n_head, 0, event);
8887 }
@@ -94,6 +93,7 @@ static void mlx5_vhca_state_work_handler(struct work_struct *_work) · 5 unmodified lines
9493 struct mlx5_core_dev *dev = notifier->dev;
9594
9695 mlx5_vhca_event_notify(dev, &work->event);
96+ kfree(work);
9797 }
9898
9999 static int
@@ -110,7 +110,6 @@ mlx5_vhca_state_change_notifier(struct notifier_block *nb, unsigned long type, v · 10 unmodified lines
110110 INIT_WORK(&work->work, &mlx5_vhca_state_work_handler);
111111 work->notifier = notifier;
112112 work->event.function_id = be16_to_cpu(eqe->data.vhca_state.function_id);
113− work->event.ecpu = be16_to_cpu(eqe->data.vhca_state.ec_function);
114113 mlx5_events_work_enqueue(notifier->dev, &work->work);
115114 return NOTIFY_OK;
116115 }
drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.h+3−4
@@ -10,7 +10,6 @@ struct mlx5_vhca_state_event { · 9 unmodified lines
1010 u16 function_id;
1111 u16 sw_function_id;
1212 u8 new_vhca_state;
13− bool ecpu;
1413 };
1514
1615 static inline bool mlx5_vhca_event_supported(const struct mlx5_core_dev *dev)
@@ -25,10 +24,10 @@ void mlx5_vhca_event_start(struct mlx5_core_dev *dev); · 8 unmodified lines
2524 void mlx5_vhca_event_stop(struct mlx5_core_dev *dev);
2625 int mlx5_vhca_event_notifier_register(struct mlx5_core_dev *dev, struct notifier_block *nb);
2726 void mlx5_vhca_event_notifier_unregister(struct mlx5_core_dev *dev, struct notifier_block *nb);
28−int mlx5_modify_vhca_sw_id(struct mlx5_core_dev *dev, u16 function_id, bool ecpu, u32 sw_fn_id);
29−int mlx5_vhca_event_arm(struct mlx5_core_dev *dev, u16 function_id, bool ecpu);
27+int mlx5_modify_vhca_sw_id(struct mlx5_core_dev *dev, u16 function_id, u32 sw_fn_id);
28+int mlx5_vhca_event_arm(struct mlx5_core_dev *dev, u16 function_id);
3029 int mlx5_cmd_query_vhca_state(struct mlx5_core_dev *dev, u16 function_id,
31− bool ecpu, u32 *out, u32 outlen);
30+ u32 *out, u32 outlen);
3231 #else
3332
3433 static inline void mlx5_vhca_state_cap_handle(struct mlx5_core_dev *dev, void *set_hca_cap)
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c+1−0
@@ -169,6 +169,7 @@ static struct mlx5dr_qp *dr_create_rc_qp(struct mlx5_core_dev *mdev, · 168 unmodified lines
169169 MLX5_SET(qpc, qpc, log_rq_size, ilog2(dr_qp->rq.wqe_cnt));
170170 MLX5_SET(qpc, qpc, rq_type, MLX5_NON_ZERO_RQ);
171171 MLX5_SET(qpc, qpc, log_sq_size, ilog2(dr_qp->sq.wqe_cnt));
172+ MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(mdev));
172173 MLX5_SET64(qpc, qpc, dbr_addr, dr_qp->wq_ctrl.db.dma);
173174 if (MLX5_CAP_GEN(mdev, cqe_version) == 1)
174175 MLX5_SET(qpc, qpc, user_index, 0xFFFFFF);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v1.c+2−2
@@ -264,8 +264,8 @@ static void dr_ste_v1_set_miss_addr(u8 *hw_ste_p, u64 miss_addr) · 263 unmodified lines
264264 static u64 dr_ste_v1_get_miss_addr(u8 *hw_ste_p)
265265 {
266266 u64 index =
267− (MLX5_GET(ste_match_bwc_v1, hw_ste_p, miss_address_31_6) |
268− MLX5_GET(ste_match_bwc_v1, hw_ste_p, miss_address_39_32) << 26);
267+ ((u64)MLX5_GET(ste_match_bwc_v1, hw_ste_p, miss_address_31_6) |
268+ ((u64)MLX5_GET(ste_match_bwc_v1, hw_ste_p, miss_address_39_32)) << 26);
269269
270270 return index << 6;
271271 }
drivers/net/ethernet/netronome/nfp/flower/metadata.c+17−7
@@ -327,8 +327,14 @@ int nfp_compile_flow_metadata(struct nfp_app *app, · 326 unmodified lines
327327 goto err_free_ctx_entry;
328328 }
329329
330+ /* Do net allocate a mask-id for pre_tun_rules. These flows are used to
331+ * configure the pre_tun table and are never actually send to the
332+ * firmware as an add-flow message. This causes the mask-id allocation
333+ * on the firmware to get out of sync if allocated here.
334+ */
330335 new_mask_id = 0;
331− if (!nfp_check_mask_add(app, nfp_flow->mask_data,
336+ if (!nfp_flow->pre_tun_rule.dev &&
337+ !nfp_check_mask_add(app, nfp_flow->mask_data,
332338 nfp_flow->meta.mask_len,
333339 &nfp_flow->meta.flags, &new_mask_id)) {
334340 NL_SET_ERR_MSG_MOD(extack, "invalid entry: cannot allocate a new mask id");
@@ -359,7 +365,8 @@ int nfp_compile_flow_metadata(struct nfp_app *app, · 24 unmodified lines
359365 goto err_remove_mask;
360366 }
361367
362− if (!nfp_check_mask_remove(app, nfp_flow->mask_data,
368+ if (!nfp_flow->pre_tun_rule.dev &&
369+ !nfp_check_mask_remove(app, nfp_flow->mask_data,
363370 nfp_flow->meta.mask_len,
364371 NULL, &new_mask_id)) {
365372 NL_SET_ERR_MSG_MOD(extack, "invalid entry: cannot release mask id");
@@ -374,8 +381,10 @@ int nfp_compile_flow_metadata(struct nfp_app *app, · 8 unmodified lines
374381 return 0;
375382
376383 err_remove_mask:
377− nfp_check_mask_remove(app, nfp_flow->mask_data, nfp_flow->meta.mask_len,
378− NULL, &new_mask_id);
384+ if (!nfp_flow->pre_tun_rule.dev)
385+ nfp_check_mask_remove(app, nfp_flow->mask_data,
386+ nfp_flow->meta.mask_len,
387+ NULL, &new_mask_id);
379388 err_remove_rhash:
380389 WARN_ON_ONCE(rhashtable_remove_fast(&priv->stats_ctx_table,
381390 &ctx_entry->ht_node,
@@ -406,9 +415,10 @@ int nfp_modify_flow_metadata(struct nfp_app *app, · 24 unmodified lines
406415
407416 __nfp_modify_flow_metadata(priv, nfp_flow);
408417
409− nfp_check_mask_remove(app, nfp_flow->mask_data,
410− nfp_flow->meta.mask_len, &nfp_flow->meta.flags,
411− &new_mask_id);
418+ if (!nfp_flow->pre_tun_rule.dev)
419+ nfp_check_mask_remove(app, nfp_flow->mask_data,
420+ nfp_flow->meta.mask_len, &nfp_flow->meta.flags,
421+ &new_mask_id);
412422
413423 /* Update flow payload with mask ids. */
414424 nfp_flow->unmasked_data[NFP_FL_MASK_ID_LOCATION] = new_mask_id;
drivers/net/ethernet/netronome/nfp/flower/offload.c+18−0
@@ -1142,6 +1142,12 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app, · 1141 unmodified lines
11421142 return -EOPNOTSUPP;
11431143 }
11441144
1145+ if (!(key_layer & NFP_FLOWER_LAYER_IPV4) &&
1146+ !(key_layer & NFP_FLOWER_LAYER_IPV6)) {
1147+ NL_SET_ERR_MSG_MOD(extack, "unsupported pre-tunnel rule: match on ipv4/ipv6 eth_type must be present");
1148+ return -EOPNOTSUPP;
1149+ }
1150+
11451151 /* Skip fields known to exist. */
11461152 mask += sizeof(struct nfp_flower_meta_tci);
11471153 ext += sizeof(struct nfp_flower_meta_tci);
@@ -1152,6 +1158,13 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app, · 4 unmodified lines
11521158 mask += sizeof(struct nfp_flower_in_port);
11531159 ext += sizeof(struct nfp_flower_in_port);
11541160
1161+ /* Ensure destination MAC address matches pre_tun_dev. */
1162+ mac = (struct nfp_flower_mac_mpls *)ext;
1163+ if (memcmp(&mac->mac_dst[0], flow->pre_tun_rule.dev->dev_addr, 6)) {
1164+ NL_SET_ERR_MSG_MOD(extack, "unsupported pre-tunnel rule: dest MAC must match output dev MAC");
1165+ return -EOPNOTSUPP;
1166+ }
1167+
11551168 /* Ensure destination MAC address is fully matched. */
11561169 mac = (struct nfp_flower_mac_mpls *)mask;
11571170 if (!is_broadcast_ether_addr(&mac->mac_dst[0])) {
@@ -1159,6 +1172,11 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app, · 1 unmodified line
11591172 return -EOPNOTSUPP;
11601173 }
11611174
1175+ if (mac->mpls_lse) {
1176+ NL_SET_ERR_MSG_MOD(extack, "unsupported pre-tunnel rule: MPLS not supported");
1177+ return -EOPNOTSUPP;
1178+ }
1179+
11621180 mask += sizeof(struct nfp_flower_mac_mpls);
11631181 ext += sizeof(struct nfp_flower_mac_mpls);
11641182 if (key_layer & NFP_FLOWER_LAYER_IPV4 ||
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c+13−2
@@ -16,8 +16,9 @@ · 15 unmodified lines
1616 #define NFP_FL_MAX_ROUTES 32
1717
1818 #define NFP_TUN_PRE_TUN_RULE_LIMIT 32
19−#define NFP_TUN_PRE_TUN_RULE_DEL 0x1
20−#define NFP_TUN_PRE_TUN_IDX_BIT 0x8
19+#define NFP_TUN_PRE_TUN_RULE_DEL BIT(0)
20+#define NFP_TUN_PRE_TUN_IDX_BIT BIT(3)
21+#define NFP_TUN_PRE_TUN_IPV6_BIT BIT(7)
2122
2223 /**
2324 * struct nfp_tun_pre_run_rule - rule matched before decap
@@ -1268,6 +1269,7 @@ int nfp_flower_xmit_pre_tun_flow(struct nfp_app *app, · 1244 unmodified lines
12681269 {
12691270 struct nfp_flower_priv *app_priv = app->priv;
12701271 struct nfp_tun_offloaded_mac *mac_entry;
1272+ struct nfp_flower_meta_tci *key_meta;
12711273 struct nfp_tun_pre_tun_rule payload;
12721274 struct net_device *internal_dev;
12731275 int err;
@@ -1290,6 +1292,15 @@ int nfp_flower_xmit_pre_tun_flow(struct nfp_app *app, · 16 unmodified lines
12901292 if (!mac_entry)
12911293 return -ENOENT;
12921294
1295+ /* Set/clear IPV6 bit. cpu_to_be16() swap will lead to MSB being
1296+ * set/clear for port_idx.
1297+ */
1298+ key_meta = (struct nfp_flower_meta_tci *)flow->unmasked_data;
1299+ if (key_meta->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV6)
1300+ mac_entry->index |= NFP_TUN_PRE_TUN_IPV6_BIT;
1301+ else
1302+ mac_entry->index &= ~NFP_TUN_PRE_TUN_IPV6_BIT;
1303+
12931304 payload.port_idx = cpu_to_be16(mac_entry->index);
12941305
12951306 /* Copy mac id and vlan to flow - dev may not exist at delete time. */
drivers/net/ethernet/pensando/ionic/ionic_txrx.c+7−6
@@ -1079,15 +1079,17 @@ static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb) · 1078 unmodified lines
10791079 {
10801080 int sg_elems = q->lif->qtype_info[IONIC_QTYPE_TXQ].max_sg_elems;
10811081 struct ionic_tx_stats *stats = q_to_tx_stats(q);
1082+ int ndescs;
10821083 int err;
10831084
1084− /* If TSO, need roundup(skb->len/mss) descs */
1085+ /* Each desc is mss long max, so a descriptor for each gso_seg */
10851086 if (skb_is_gso(skb))
1086− return (skb->len / skb_shinfo(skb)->gso_size) + 1;
1087+ ndescs = skb_shinfo(skb)->gso_segs;
1088+ else
1089+ ndescs = 1;
10871090
1088− /* If non-TSO, just need 1 desc and nr_frags sg elems */
10891091 if (skb_shinfo(skb)->nr_frags <= sg_elems)
1090− return 1;
1092+ return ndescs;
10911093
10921094 /* Too many frags, so linearize */
10931095 err = skb_linearize(skb);
@@ -1096,8 +1098,7 @@ static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb) · 2 unmodified lines
10961098
10971099 stats->linearize++;
10981100
1099− /* Need 1 desc and zero sg elems */
1100− return 1;
1101+ return ndescs;
11011102 }
11021103
11031104 static int ionic_maybe_stop_tx(struct ionic_queue *q, int ndescs)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c+3−0
@@ -1425,6 +1425,7 @@ void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter) · 1424 unmodified lines
14251425
14261426 if (fw_dump->tmpl_hdr == NULL || current_version > prev_version) {
14271427 vfree(fw_dump->tmpl_hdr);
1428+ fw_dump->tmpl_hdr = NULL;
14281429
14291430 if (qlcnic_83xx_md_check_extended_dump_capability(adapter))
14301431 extended = !qlcnic_83xx_extend_md_capab(adapter);
@@ -1443,6 +1444,8 @@ void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter) · 12 unmodified lines
14431444 struct qlcnic_83xx_dump_template_hdr *hdr;
14441445
14451446 hdr = fw_dump->tmpl_hdr;
1447+ if (!hdr)
1448+ return;
14461449 hdr->drv_cap_mask = 0x1f;
14471450 fw_dump->cap_mask = 0x1f;
14481451 dev_info(&pdev->dev,
drivers/net/ethernet/realtek/r8169_main.c+4−2
@@ -4646,6 +4646,9 @@ static void rtl8169_down(struct rtl8169_private *tp) · 4645 unmodified lines
46464646
46474647 rtl8169_update_counters(tp);
46484648
4649+ pci_clear_master(tp->pci_dev);
4650+ rtl_pci_commit(tp);
4651+
46494652 rtl8169_cleanup(tp, true);
46504653
46514654 rtl_prepare_power_down(tp);
@@ -4653,6 +4656,7 @@ static void rtl8169_down(struct rtl8169_private *tp) · 1 unmodified line
46534656
46544657 static void rtl8169_up(struct rtl8169_private *tp)
46554658 {
4659+ pci_set_master(tp->pci_dev);
46564660 phy_resume(tp->phydev);
46574661 rtl8169_init_phy(tp);
46584662 napi_enable(&tp->napi);
@@ -5307,8 +5311,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 648 unmodified lines
53075311
53085312 rtl_hw_reset(tp);
53095313
5310− pci_set_master(pdev);
5311−
53125314 rc = rtl_alloc_irq(tp);
53135315 if (rc < 0) {
53145316 dev_err(&pdev->dev, "Can't allocate interrupt\n");
drivers/net/ethernet/socionext/netsec.c+6−3
@@ -1715,14 +1715,17 @@ static int netsec_netdev_init(struct net_device *ndev) · 1714 unmodified lines
17151715 goto err1;
17161716
17171717 /* set phy power down */
1718− data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR) |
1719− BMCR_PDOWN;
1720− netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data);
1718+ data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR);
1719+ netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR,
1720+ data | BMCR_PDOWN);
17211721
17221722 ret = netsec_reset_hardware(priv, true);
17231723 if (ret)
17241724 goto err2;
17251725
1726+ /* Restore phy power state */
1727+ netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data);
1728+
17261729 spin_lock_init(&priv->desc_ring[NETSEC_RING_TX].lock);
17271730 spin_lock_init(&priv->desc_ring[NETSEC_RING_RX].lock);
17281731
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c+2−0
@@ -1214,6 +1214,8 @@ static int sun8i_dwmac_probe(struct platform_device *pdev) · 1213 unmodified lines
12141214 plat_dat->init = sun8i_dwmac_init;
12151215 plat_dat->exit = sun8i_dwmac_exit;
12161216 plat_dat->setup = sun8i_dwmac_setup;
1217+ plat_dat->tx_fifo_size = 4096;
1218+ plat_dat->rx_fifo_size = 16384;
12171219
12181220 ret = sun8i_dwmac_set_syscon(&pdev->dev, plat_dat);
12191221 if (ret)
drivers/net/ethernet/xilinx/xilinx_axienet_main.c+25−12
@@ -1880,7 +1880,7 @@ static int axienet_probe(struct platform_device *pdev) · 1879 unmodified lines
18801880 if (IS_ERR(lp->regs)) {
18811881 dev_err(&pdev->dev, "could not map Axi Ethernet regs.\n");
18821882 ret = PTR_ERR(lp->regs);
1883− goto free_netdev;
1883+ goto cleanup_clk;
18841884 }
18851885 lp->regs_start = ethres->start;
18861886
@@ -1958,18 +1958,18 @@ static int axienet_probe(struct platform_device *pdev) · 71 unmodified lines
19581958 break;
19591959 default:
19601960 ret = -EINVAL;
1961− goto free_netdev;
1961+ goto cleanup_clk;
19621962 }
19631963 } else {
19641964 ret = of_get_phy_mode(pdev->dev.of_node, &lp->phy_mode);
19651965 if (ret)
1966− goto free_netdev;
1966+ goto cleanup_clk;
19671967 }
19681968 if (lp->switch_x_sgmii && lp->phy_mode != PHY_INTERFACE_MODE_SGMII &&
19691969 lp->phy_mode != PHY_INTERFACE_MODE_1000BASEX) {
19701970 dev_err(&pdev->dev, "xlnx,switch-x-sgmii only supported with SGMII or 1000BaseX\n");
19711971 ret = -EINVAL;
1972− goto free_netdev;
1972+ goto cleanup_clk;
19731973 }
19741974
19751975 /* Find the DMA node, map the DMA registers, and decode the DMA IRQs */
@@ -1982,7 +1982,7 @@ static int axienet_probe(struct platform_device *pdev) · 6 unmodified lines
19821982 dev_err(&pdev->dev,
19831983 "unable to get DMA resource\n");
19841984 of_node_put(np);
1985− goto free_netdev;
1985+ goto cleanup_clk;
19861986 }
19871987 lp->dma_regs = devm_ioremap_resource(&pdev->dev,
19881988 &dmares);
@@ -2002,12 +2002,12 @@ static int axienet_probe(struct platform_device *pdev) · 13 unmodified lines
20022002 if (IS_ERR(lp->dma_regs)) {
20032003 dev_err(&pdev->dev, "could not map DMA regs\n");
20042004 ret = PTR_ERR(lp->dma_regs);
2005− goto free_netdev;
2005+ goto cleanup_clk;
20062006 }
20072007 if ((lp->rx_irq <= 0) || (lp->tx_irq <= 0)) {
20082008 dev_err(&pdev->dev, "could not determine irqs\n");
20092009 ret = -ENOMEM;
2010− goto free_netdev;
2010+ goto cleanup_clk;
20112011 }
20122012
20132013 /* Autodetect the need for 64-bit DMA pointers.
@@ -2037,7 +2037,7 @@ static int axienet_probe(struct platform_device *pdev) · 23 unmodified lines
20372037 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(addr_width));
20382038 if (ret) {
20392039 dev_err(&pdev->dev, "No suitable DMA available\n");
2040− goto free_netdev;
2040+ goto cleanup_clk;
20412041 }
20422042
20432043 /* Check for Ethernet core IRQ (optional) */
@@ -2068,12 +2068,12 @@ static int axienet_probe(struct platform_device *pdev) · 24 unmodified lines
20682068 if (!lp->phy_node) {
20692069 dev_err(&pdev->dev, "phy-handle required for 1000BaseX/SGMII\n");
20702070 ret = -EINVAL;
2071− goto free_netdev;
2071+ goto cleanup_mdio;
20722072 }
20732073 lp->pcs_phy = of_mdio_find_device(lp->phy_node);
20742074 if (!lp->pcs_phy) {
20752075 ret = -EPROBE_DEFER;
2076− goto free_netdev;
2076+ goto cleanup_mdio;
20772077 }
20782078 lp->phylink_config.pcs_poll = true;
20792079 }
@@ -2087,17 +2087,30 @@ static int axienet_probe(struct platform_device *pdev) · 7 unmodified lines
20872087 if (IS_ERR(lp->phylink)) {
20882088 ret = PTR_ERR(lp->phylink);
20892089 dev_err(&pdev->dev, "phylink_create error (%i)\n", ret);
2090− goto free_netdev;
2090+ goto cleanup_mdio;
20912091 }
20922092
20932093 ret = register_netdev(lp->ndev);
20942094 if (ret) {
20952095 dev_err(lp->dev, "register_netdev() error (%i)\n", ret);
2096− goto free_netdev;
2096+ goto cleanup_phylink;
20972097 }
20982098
20992099 return 0;
21002100
2101+cleanup_phylink:
2102+ phylink_destroy(lp->phylink);
2103+
2104+cleanup_mdio:
2105+ if (lp->pcs_phy)
2106+ put_device(&lp->pcs_phy->dev);
2107+ if (lp->mii_bus)
2108+ axienet_mdio_teardown(lp);
2109+ of_node_put(lp->phy_node);
2110+
2111+cleanup_clk:
2112+ clk_disable_unprepare(lp->clk);
2113+
21012114 free_netdev:
21022115 free_netdev(ndev);
21032116
drivers/net/hamradio/scc.c+0−1
@@ -2167,7 +2167,6 @@ static void __exit scc_cleanup_driver(void) · 2166 unmodified lines
21672167
21682168 MODULE_AUTHOR("Joerg Reuter <jreuter@yaina.de>");
21692169 MODULE_DESCRIPTION("AX.25 Device Driver for Z8530 based HDLC cards");
2170−MODULE_SUPPORTED_DEVICE("Z8530 based SCC cards for Amateur Radio");
21712170 MODULE_LICENSE("GPL");
21722171 module_init(scc_init_driver);
21732172 module_exit(scc_cleanup_driver);
drivers/net/ipa/ipa_cmd.c+33−17
@@ -175,21 +175,23 @@ bool ipa_cmd_table_valid(struct ipa *ipa, const struct ipa_mem *mem, · 174 unmodified lines
175175 : field_max(IP_FLTRT_FLAGS_NHASH_ADDR_FMASK);
176176 if (mem->offset > offset_max ||
177177 ipa->mem_offset > offset_max - mem->offset) {
178− dev_err(dev, "IPv%c %s%s table region offset too large "
179− "(0x%04x + 0x%04x > 0x%04x)\n",
180− ipv6 ? '6' : '4', hashed ? "hashed " : "",
181− route ? "route" : "filter",
182− ipa->mem_offset, mem->offset, offset_max);
178+ dev_err(dev, "IPv%c %s%s table region offset too large\n",
179+ ipv6 ? '6' : '4', hashed ? "hashed " : "",
180+ route ? "route" : "filter");
181+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
182+ ipa->mem_offset, mem->offset, offset_max);
183+
183184 return false;
184185 }
185186
186187 if (mem->offset > ipa->mem_size ||
187188 mem->size > ipa->mem_size - mem->offset) {
188− dev_err(dev, "IPv%c %s%s table region out of range "
189− "(0x%04x + 0x%04x > 0x%04x)\n",
190− ipv6 ? '6' : '4', hashed ? "hashed " : "",
191− route ? "route" : "filter",
192− mem->offset, mem->size, ipa->mem_size);
189+ dev_err(dev, "IPv%c %s%s table region out of range\n",
190+ ipv6 ? '6' : '4', hashed ? "hashed " : "",
191+ route ? "route" : "filter");
192+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
193+ mem->offset, mem->size, ipa->mem_size);
194+
193195 return false;
194196 }
195197
@@ -205,22 +207,36 @@ static bool ipa_cmd_header_valid(struct ipa *ipa) · 9 unmodified lines
205207 u32 size_max;
206208 u32 size;
207209
210+ /* In ipa_cmd_hdr_init_local_add() we record the offset and size
211+ * of the header table memory area. Make sure the offset and size
212+ * fit in the fields that need to hold them, and that the entire
213+ * range is within the overall IPA memory range.
214+ */
208215 offset_max = field_max(HDR_INIT_LOCAL_FLAGS_HDR_ADDR_FMASK);
209216 if (mem->offset > offset_max ||
210217 ipa->mem_offset > offset_max - mem->offset) {
211− dev_err(dev, "header table region offset too large "
212− "(0x%04x + 0x%04x > 0x%04x)\n",
213− ipa->mem_offset + mem->offset, offset_max);
218+ dev_err(dev, "header table region offset too large\n");
219+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
220+ ipa->mem_offset, mem->offset, offset_max);
221+
214222 return false;
215223 }
216224
217225 size_max = field_max(HDR_INIT_LOCAL_FLAGS_TABLE_SIZE_FMASK);
218226 size = ipa->mem[IPA_MEM_MODEM_HEADER].size;
219227 size += ipa->mem[IPA_MEM_AP_HEADER].size;
220− if (mem->offset > ipa->mem_size || size > ipa->mem_size - mem->offset) {
221− dev_err(dev, "header table region out of range "
222− "(0x%04x + 0x%04x > 0x%04x)\n",
223− mem->offset, size, ipa->mem_size);
228+
229+ if (size > size_max) {
230+ dev_err(dev, "header table region size too large\n");
231+ dev_err(dev, " (0x%04x > 0x%08x)\n", size, size_max);
232+
233+ return false;
234+ }
235+ if (size > ipa->mem_size || mem->offset > ipa->mem_size - size) {
236+ dev_err(dev, "header table region out of range\n");
237+ dev_err(dev, " (0x%04x + 0x%04x > 0x%04x)\n",
238+ mem->offset, size, ipa->mem_size);
239+
224240 return false;
225241 }
226242
drivers/net/ipa/ipa_qmi.c+2−0
@@ -249,6 +249,7 @@ static const struct qmi_msg_handler ipa_server_msg_handlers[] = { · 248 unmodified lines
249249 .decoded_size = IPA_QMI_DRIVER_INIT_COMPLETE_REQ_SZ,
250250 .fn = ipa_server_driver_init_complete,
251251 },
252+ { },
252253 };
253254
254255 /* Handle an INIT_DRIVER response message from the modem. */
@@ -269,6 +270,7 @@ static const struct qmi_msg_handler ipa_client_msg_handlers[] = { · 14 unmodified lines
269270 .decoded_size = IPA_QMI_INIT_DRIVER_RSP_SZ,
270271 .fn = ipa_client_init_driver,
271272 },
273+ { },
272274 };
273275
274276 /* Return a pointer to an init modem driver request structure, which contains
drivers/net/phy/broadcom.c+9−0
@@ -342,6 +342,10 @@ static int bcm54xx_config_init(struct phy_device *phydev) · 341 unmodified lines
342342 bcm54xx_adjust_rxrefclk(phydev);
343343
344344 switch (BRCM_PHY_MODEL(phydev)) {
345+ case PHY_ID_BCM50610:
346+ case PHY_ID_BCM50610M:
347+ err = bcm54xx_config_clock_delay(phydev);
348+ break;
345349 case PHY_ID_BCM54210E:
346350 err = bcm54210e_config_init(phydev);
347351 break;
@@ -399,6 +403,11 @@ static int bcm54xx_resume(struct phy_device *phydev) · 51 unmodified lines
399403 if (ret < 0)
400404 return ret;
401405
406+ /* Upon exiting power down, the PHY remains in an internal reset state
407+ * for 40us
408+ */
409+ fsleep(40);
410+
402411 return bcm54xx_config_init(phydev);
403412 }
404413
drivers/net/phy/phylink.c+1−1
@@ -476,7 +476,7 @@ static void phylink_major_config(struct phylink *pl, bool restart, · 475 unmodified lines
476476 err = pl->mac_ops->mac_finish(pl->config, pl->cur_link_an_mode,
477477 state->interface);
478478 if (err < 0)
479− phylink_err(pl, "mac_prepare failed: %pe\n",
479+ phylink_err(pl, "mac_finish failed: %pe\n",
480480 ERR_PTR(err));
481481 }
482482 }
drivers/net/usb/cdc-phonet.c+2−0
@@ -387,6 +387,8 @@ static int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *i · 386 unmodified lines
387387
388388 err = register_netdev(dev);
389389 if (err) {
390+ /* Set disconnected flag so that disconnect() returns early. */
391+ pnd->disconnected = 1;
390392 usb_driver_release_interface(&usbpn_driver, data_intf);
391393 goto out;
392394 }
drivers/net/usb/r8152.c+4−1
@@ -6553,7 +6553,10 @@ static int rtl_ops_init(struct r8152 *tp) · 6552 unmodified lines
65536553 ops->in_nway = rtl8153_in_nway;
65546554 ops->hw_phy_cfg = r8153_hw_phy_cfg;
65556555 ops->autosuspend_en = rtl8153_runtime_enable;
6556− tp->rx_buf_sz = 32 * 1024;
6556+ if (tp->udev->speed < USB_SPEED_SUPER)
6557+ tp->rx_buf_sz = 16 * 1024;
6558+ else
6559+ tp->rx_buf_sz = 32 * 1024;
65576560 tp->eee_en = true;
65586561 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
65596562 break;
drivers/net/veth.c+1−2
@@ -302,8 +302,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) · 301 unmodified lines
302302 if (rxq < rcv->real_num_rx_queues) {
303303 rq = &rcv_priv->rq[rxq];
304304 rcv_xdp = rcu_access_pointer(rq->xdp_prog);
305− if (rcv_xdp)
306− skb_record_rx_queue(skb, rxq);
305+ skb_record_rx_queue(skb, rxq);
307306 }
308307
309308 skb_tx_timestamp(skb);
drivers/net/wan/hdlc_x25.c+41−1
@@ -23,6 +23,8 @@ · 22 unmodified lines
2323
2424 struct x25_state {
2525 x25_hdlc_proto settings;
26+ bool up;
27+ spinlock_t up_lock; /* Protects "up" */
2628 };
2729
2830 static int x25_ioctl(struct net_device *dev, struct ifreq *ifr);
@@ -104,6 +106,8 @@ static void x25_data_transmit(struct net_device *dev, struct sk_buff *skb) · 75 unmodified lines
104106
105107 static netdev_tx_t x25_xmit(struct sk_buff *skb, struct net_device *dev)
106108 {
109+ hdlc_device *hdlc = dev_to_hdlc(dev);
110+ struct x25_state *x25st = state(hdlc);
107111 int result;
108112
109113 /* There should be a pseudo header of 1 byte added by upper layers.
@@ -114,11 +118,19 @@ static netdev_tx_t x25_xmit(struct sk_buff *skb, struct net_device *dev) · 4 unmodified lines
114118 return NETDEV_TX_OK;
115119 }
116120
121+ spin_lock_bh(&x25st->up_lock);
122+ if (!x25st->up) {
123+ spin_unlock_bh(&x25st->up_lock);
124+ kfree_skb(skb);
125+ return NETDEV_TX_OK;
126+ }
127+
117128 switch (skb->data[0]) {
118129 case X25_IFACE_DATA: /* Data to be transmitted */
119130 skb_pull(skb, 1);
120131 if ((result = lapb_data_request(dev, skb)) != LAPB_OK)
121132 dev_kfree_skb(skb);
133+ spin_unlock_bh(&x25st->up_lock);
122134 return NETDEV_TX_OK;
123135
124136 case X25_IFACE_CONNECT:
@@ -147,6 +159,7 @@ static netdev_tx_t x25_xmit(struct sk_buff *skb, struct net_device *dev) · 22 unmodified lines
147159 break;
148160 }
149161
162+ spin_unlock_bh(&x25st->up_lock);
150163 dev_kfree_skb(skb);
151164 return NETDEV_TX_OK;
152165 }
@@ -164,6 +177,7 @@ static int x25_open(struct net_device *dev) · 11 unmodified lines
164177 .data_transmit = x25_data_transmit,
165178 };
166179 hdlc_device *hdlc = dev_to_hdlc(dev);
180+ struct x25_state *x25st = state(hdlc);
167181 struct lapb_parms_struct params;
168182 int result;
169183
@@ -190,6 +204,10 @@ static int x25_open(struct net_device *dev) · 20 unmodified lines
190204 if (result != LAPB_OK)
191205 return -EINVAL;
192206
207+ spin_lock_bh(&x25st->up_lock);
208+ x25st->up = true;
209+ spin_unlock_bh(&x25st->up_lock);
210+
193211 return 0;
194212 }
195213
@@ -197,6 +215,13 @@ static int x25_open(struct net_device *dev) · 1 unmodified line
197215
198216 static void x25_close(struct net_device *dev)
199217 {
218+ hdlc_device *hdlc = dev_to_hdlc(dev);
219+ struct x25_state *x25st = state(hdlc);
220+
221+ spin_lock_bh(&x25st->up_lock);
222+ x25st->up = false;
223+ spin_unlock_bh(&x25st->up_lock);
224+
200225 lapb_unregister(dev);
201226 }
202227
@@ -205,15 +230,28 @@ static void x25_close(struct net_device *dev) · 2 unmodified lines
205230 static int x25_rx(struct sk_buff *skb)
206231 {
207232 struct net_device *dev = skb->dev;
233+ hdlc_device *hdlc = dev_to_hdlc(dev);
234+ struct x25_state *x25st = state(hdlc);
208235
209236 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
210237 dev->stats.rx_dropped++;
211238 return NET_RX_DROP;
212239 }
213240
214− if (lapb_data_received(dev, skb) == LAPB_OK)
241+ spin_lock_bh(&x25st->up_lock);
242+ if (!x25st->up) {
243+ spin_unlock_bh(&x25st->up_lock);
244+ kfree_skb(skb);
245+ dev->stats.rx_dropped++;
246+ return NET_RX_DROP;
247+ }
248+
249+ if (lapb_data_received(dev, skb) == LAPB_OK) {
250+ spin_unlock_bh(&x25st->up_lock);
215251 return NET_RX_SUCCESS;
252+ }
216253
254+ spin_unlock_bh(&x25st->up_lock);
217255 dev->stats.rx_errors++;
218256 dev_kfree_skb_any(skb);
219257 return NET_RX_DROP;
@@ -298,6 +336,8 @@ static int x25_ioctl(struct net_device *dev, struct ifreq *ifr) · 78 unmodified lines
298336 return result;
299337
300338 memcpy(&state(hdlc)->settings, &new_settings, size);
339+ state(hdlc)->up = false;
340+ spin_lock_init(&state(hdlc)->up_lock);
301341
302342 /* There's no header_ops so hard_header_len should be 0. */
303343 dev->hard_header_len = 0;
drivers/net/wireless/admtek/adm8211.c+0−1
@@ -28,7 +28,6 @@ · 27 unmodified lines
2828 MODULE_AUTHOR("Michael Wu <flamingice@sourmilk.net>");
2929 MODULE_AUTHOR("Jouni Malinen <j@w1.fi>");
3030 MODULE_DESCRIPTION("Driver for IEEE 802.11b wireless cards based on ADMtek ADM8211");
31−MODULE_SUPPORTED_DEVICE("ADM8211");
3231 MODULE_LICENSE("GPL");
3332
3433 static unsigned int tx_ring_size __read_mostly = 16;
drivers/net/wireless/ath/ath5k/base.c+0−1
@@ -90,7 +90,6 @@ MODULE_PARM_DESC(no_hw_rfkill_switch, "Ignore the GPIO RFKill switch state"); · 89 unmodified lines
9090 MODULE_AUTHOR("Jiri Slaby");
9191 MODULE_AUTHOR("Nick Kossifidis");
9292 MODULE_DESCRIPTION("Support for 5xxx series of Atheros 802.11 wireless LAN cards.");
93−MODULE_SUPPORTED_DEVICE("Atheros 5xxx WLAN cards");
9493 MODULE_LICENSE("Dual BSD/GPL");
9594
9695 static int ath5k_init(struct ieee80211_hw *hw);
drivers/net/wireless/ath/ath9k/hw.c+0−1
@@ -34,7 +34,6 @@ static bool ath9k_hw_set_reset_reg(struct ath_hw *ah, u32 type); · 33 unmodified lines
3434
3535 MODULE_AUTHOR("Atheros Communications");
3636 MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
37−MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
3837 MODULE_LICENSE("Dual BSD/GPL");
3938
4039 static void ath9k_hw_set_clockrate(struct ath_hw *ah)
drivers/net/wireless/ath/ath9k/init.c+0−1
@@ -37,7 +37,6 @@ static char *dev_info = "ath9k"; · 36 unmodified lines
3737
3838 MODULE_AUTHOR("Atheros Communications");
3939 MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
40−MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
4140 MODULE_LICENSE("Dual BSD/GPL");
4241
4342 static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
drivers/net/wireless/atmel/atmel.c+0−1
@@ -75,7 +75,6 @@ · 74 unmodified lines
7575 MODULE_AUTHOR("Simon Kelley");
7676 MODULE_DESCRIPTION("Support for Atmel at76c50x 802.11 wireless ethernet cards.");
7777 MODULE_LICENSE("GPL");
78−MODULE_SUPPORTED_DEVICE("Atmel at76c50x wireless cards");
7978
8079 /* The name of the firmware file to be loaded
8180 over-rides any automatic selection */
drivers/net/wireless/atmel/atmel_cs.c+0−1
@@ -57,7 +57,6 @@ · 56 unmodified lines
5757 MODULE_AUTHOR("Simon Kelley");
5858 MODULE_DESCRIPTION("Support for Atmel at76c50x 802.11 wireless ethernet cards.");
5959 MODULE_LICENSE("GPL");
60−MODULE_SUPPORTED_DEVICE("Atmel at76c50x PCMCIA cards");
6160
6261 /*====================================================================*/
6362
drivers/net/wireless/atmel/atmel_pci.c+0−1
@@ -16,7 +16,6 @@ · 15 unmodified lines
1616 MODULE_AUTHOR("Simon Kelley");
1717 MODULE_DESCRIPTION("Support for Atmel at76c50x 802.11 wireless ethernet cards.");
1818 MODULE_LICENSE("GPL");
19−MODULE_SUPPORTED_DEVICE("Atmel at76c506 PCI wireless cards");
2019
2120 static const struct pci_device_id card_ids[] = {
2221 { 0x1114, 0x0506, PCI_ANY_ID, PCI_ANY_ID },
drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c+0−1
@@ -87,7 +87,6 @@ static int n_adapters_found; · 86 unmodified lines
8787
8888 MODULE_AUTHOR("Broadcom Corporation");
8989 MODULE_DESCRIPTION("Broadcom 802.11n wireless LAN driver.");
90−MODULE_SUPPORTED_DEVICE("Broadcom 802.11n WLAN cards");
9190 MODULE_LICENSE("Dual BSD/GPL");
9291 /* This needs to be adjusted when brcms_firmwares changes */
9392 MODULE_FIRMWARE("brcm/bcm43xx-0.fw");
drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c+0−1
@@ -12,7 +12,6 @@ · 11 unmodified lines
1212
1313 MODULE_AUTHOR("Broadcom Corporation");
1414 MODULE_DESCRIPTION("Broadcom 802.11n wireless LAN driver utilities.");
15−MODULE_SUPPORTED_DEVICE("Broadcom 802.11n WLAN cards");
1615 MODULE_LICENSE("Dual BSD/GPL");
1716
1817 struct sk_buff *brcmu_pkt_buf_get_skb(uint len)
drivers/net/wireless/cisco/airo.c+0−1
@@ -251,7 +251,6 @@ MODULE_AUTHOR("Benjamin Reed"); · 250 unmodified lines
251251 MODULE_DESCRIPTION("Support for Cisco/Aironet 802.11 wireless ethernet cards. "
252252 "Direct support for ISA/PCI/MPI cards and support for PCMCIA when used with airo_cs.");
253253 MODULE_LICENSE("Dual BSD/GPL");
254−MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340/350");
255254 module_param_hw_array(io, int, ioport, NULL, 0);
256255 module_param_hw_array(irq, int, irq, NULL, 0);
257256 module_param_array(rates, int, NULL, 0);
drivers/net/wireless/cisco/airo_cs.c+0−1
@@ -47,7 +47,6 @@ MODULE_DESCRIPTION("Support for Cisco/Aironet 802.11 wireless ethernet " · 46 unmodified lines
4747 "cards. This is the module that links the PCMCIA card "
4848 "with the airo module.");
4949 MODULE_LICENSE("Dual BSD/GPL");
50−MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340 PCMCIA cards");
5150
5251 /*====================================================================*/
5352
drivers/net/wireless/intersil/hostap/hostap_cs.c+0−1
@@ -26,7 +26,6 @@ static char *dev_info = "hostap_cs"; · 25 unmodified lines
2626 MODULE_AUTHOR("Jouni Malinen");
2727 MODULE_DESCRIPTION("Support for Intersil Prism2-based 802.11 wireless LAN "
2828 "cards (PC Card).");
29−MODULE_SUPPORTED_DEVICE("Intersil Prism2-based WLAN cards (PC Card)");
3029 MODULE_LICENSE("GPL");
3130
3231
drivers/net/wireless/intersil/hostap/hostap_pci.c+0−1
@@ -27,7 +27,6 @@ static char *dev_info = "hostap_pci"; · 26 unmodified lines
2727 MODULE_AUTHOR("Jouni Malinen");
2828 MODULE_DESCRIPTION("Support for Intersil Prism2.5-based 802.11 wireless LAN "
2929 "PCI cards.");
30−MODULE_SUPPORTED_DEVICE("Intersil Prism2.5-based WLAN PCI cards");
3130 MODULE_LICENSE("GPL");
3231
3332
drivers/net/wireless/intersil/hostap/hostap_plx.c+0−1
@@ -30,7 +30,6 @@ static char *dev_info = "hostap_plx"; · 29 unmodified lines
3030 MODULE_AUTHOR("Jouni Malinen");
3131 MODULE_DESCRIPTION("Support for Intersil Prism2-based 802.11 wireless LAN "
3232 "cards (PLX).");
33−MODULE_SUPPORTED_DEVICE("Intersil Prism2-based WLAN cards (PLX)");
3433 MODULE_LICENSE("GPL");
3534
3635
drivers/net/wireless/ralink/rt2x00/rt2400pci.c+0−1
@@ -1821,7 +1821,6 @@ static const struct pci_device_id rt2400pci_device_table[] = { · 1820 unmodified lines
18211821 MODULE_AUTHOR(DRV_PROJECT);
18221822 MODULE_VERSION(DRV_VERSION);
18231823 MODULE_DESCRIPTION("Ralink RT2400 PCI & PCMCIA Wireless LAN driver.");
1824−MODULE_SUPPORTED_DEVICE("Ralink RT2460 PCI & PCMCIA chipset based cards");
18251824 MODULE_DEVICE_TABLE(pci, rt2400pci_device_table);
18261825 MODULE_LICENSE("GPL");
18271826
drivers/net/wireless/ralink/rt2x00/rt2500pci.c+0−1
@@ -2119,7 +2119,6 @@ static const struct pci_device_id rt2500pci_device_table[] = { · 2118 unmodified lines
21192119 MODULE_AUTHOR(DRV_PROJECT);
21202120 MODULE_VERSION(DRV_VERSION);
21212121 MODULE_DESCRIPTION("Ralink RT2500 PCI & PCMCIA Wireless LAN driver.");
2122−MODULE_SUPPORTED_DEVICE("Ralink RT2560 PCI & PCMCIA chipset based cards");
21232122 MODULE_DEVICE_TABLE(pci, rt2500pci_device_table);
21242123 MODULE_LICENSE("GPL");
21252124
drivers/net/wireless/ralink/rt2x00/rt2500usb.c+0−1
@@ -1956,7 +1956,6 @@ static const struct usb_device_id rt2500usb_device_table[] = { · 1955 unmodified lines
19561956 MODULE_AUTHOR(DRV_PROJECT);
19571957 MODULE_VERSION(DRV_VERSION);
19581958 MODULE_DESCRIPTION("Ralink RT2500 USB Wireless LAN driver.");
1959−MODULE_SUPPORTED_DEVICE("Ralink RT2570 USB chipset based cards");
19601959 MODULE_DEVICE_TABLE(usb, rt2500usb_device_table);
19611960 MODULE_LICENSE("GPL");
19621961
drivers/net/wireless/ralink/rt2x00/rt2800pci.c+0−1
@@ -439,7 +439,6 @@ static const struct pci_device_id rt2800pci_device_table[] = { · 438 unmodified lines
439439 MODULE_AUTHOR(DRV_PROJECT);
440440 MODULE_VERSION(DRV_VERSION);
441441 MODULE_DESCRIPTION("Ralink RT2800 PCI & PCMCIA Wireless LAN driver.");
442−MODULE_SUPPORTED_DEVICE("Ralink RT2860 PCI & PCMCIA chipset based cards");
443442 MODULE_FIRMWARE(FIRMWARE_RT2860);
444443 MODULE_DEVICE_TABLE(pci, rt2800pci_device_table);
445444 MODULE_LICENSE("GPL");
drivers/net/wireless/ralink/rt2x00/rt2800usb.c+0−1
@@ -1248,7 +1248,6 @@ static const struct usb_device_id rt2800usb_device_table[] = { · 1247 unmodified lines
12481248 MODULE_AUTHOR(DRV_PROJECT);
12491249 MODULE_VERSION(DRV_VERSION);
12501250 MODULE_DESCRIPTION("Ralink RT2800 USB Wireless LAN driver.");
1251−MODULE_SUPPORTED_DEVICE("Ralink RT2870 USB chipset based cards");
12521251 MODULE_DEVICE_TABLE(usb, rt2800usb_device_table);
12531252 MODULE_FIRMWARE(FIRMWARE_RT2870);
12541253 MODULE_LICENSE("GPL");
drivers/net/wireless/ralink/rt2x00/rt61pci.c+0−2
@@ -2993,8 +2993,6 @@ static const struct pci_device_id rt61pci_device_table[] = { · 2992 unmodified lines
29932993 MODULE_AUTHOR(DRV_PROJECT);
29942994 MODULE_VERSION(DRV_VERSION);
29952995 MODULE_DESCRIPTION("Ralink RT61 PCI & PCMCIA Wireless LAN driver.");
2996−MODULE_SUPPORTED_DEVICE("Ralink RT2561, RT2561s & RT2661 "
2997− "PCI & PCMCIA chipset based cards");
29982996 MODULE_DEVICE_TABLE(pci, rt61pci_device_table);
29992997 MODULE_FIRMWARE(FIRMWARE_RT2561);
30002998 MODULE_FIRMWARE(FIRMWARE_RT2561s);
drivers/net/wireless/ralink/rt2x00/rt73usb.c+0−1
@@ -2513,7 +2513,6 @@ static const struct usb_device_id rt73usb_device_table[] = { · 2512 unmodified lines
25132513 MODULE_AUTHOR(DRV_PROJECT);
25142514 MODULE_VERSION(DRV_VERSION);
25152515 MODULE_DESCRIPTION("Ralink RT73 USB Wireless LAN driver.");
2516−MODULE_SUPPORTED_DEVICE("Ralink RT2571W & RT2671 USB chipset based cards");
25172516 MODULE_DEVICE_TABLE(usb, rt73usb_device_table);
25182517 MODULE_FIRMWARE(FIRMWARE_RT2571);
25192518 MODULE_LICENSE("GPL");
drivers/net/wireless/rsi/rsi_91x_main.c+0−1
@@ -441,6 +441,5 @@ module_init(rsi_91x_hal_module_init); · 440 unmodified lines
441441 module_exit(rsi_91x_hal_module_exit);
442442 MODULE_AUTHOR("Redpine Signals Inc");
443443 MODULE_DESCRIPTION("Station driver for RSI 91x devices");
444−MODULE_SUPPORTED_DEVICE("RSI-91x");
445444 MODULE_VERSION("0.1");
446445 MODULE_LICENSE("Dual BSD/GPL");
drivers/net/wireless/rsi/rsi_91x_sdio.c+0−1
@@ -1571,7 +1571,6 @@ module_exit(rsi_module_exit); · 1570 unmodified lines
15711571
15721572 MODULE_AUTHOR("Redpine Signals Inc");
15731573 MODULE_DESCRIPTION("Common SDIO layer for RSI drivers");
1574−MODULE_SUPPORTED_DEVICE("RSI-91x");
15751574 MODULE_DEVICE_TABLE(sdio, rsi_dev_table);
15761575 MODULE_FIRMWARE(FIRMWARE_RSI9113);
15771576 MODULE_VERSION("0.1");
drivers/net/wireless/rsi/rsi_91x_usb.c+0−1
@@ -928,7 +928,6 @@ module_usb_driver(rsi_driver); · 927 unmodified lines
928928
929929 MODULE_AUTHOR("Redpine Signals Inc");
930930 MODULE_DESCRIPTION("Common USB layer for RSI drivers");
931−MODULE_SUPPORTED_DEVICE("RSI-91x");
932931 MODULE_DEVICE_TABLE(usb, rsi_dev_table);
933932 MODULE_FIRMWARE(FIRMWARE_RSI9113);
934933 MODULE_VERSION("0.1");
drivers/nvme/host/core.c+21−43
@@ -1226,28 +1226,12 @@ static void nvme_keep_alive_end_io(struct request *rq, blk_status_t status) · 1225 unmodified lines
12261226 queue_delayed_work(nvme_wq, &ctrl->ka_work, ctrl->kato * HZ);
12271227 }
12281228
1229−static int nvme_keep_alive(struct nvme_ctrl *ctrl)
1230−{
1231− struct request *rq;
1232−
1233− rq = nvme_alloc_request(ctrl->admin_q, &ctrl->ka_cmd,
1234− BLK_MQ_REQ_RESERVED);
1235− if (IS_ERR(rq))
1236− return PTR_ERR(rq);
1237−
1238− rq->timeout = ctrl->kato * HZ;
1239− rq->end_io_data = ctrl;
1240−
1241− blk_execute_rq_nowait(NULL, rq, 0, nvme_keep_alive_end_io);
1242−
1243− return 0;
1244−}
1245−
12461229 static void nvme_keep_alive_work(struct work_struct *work)
12471230 {
12481231 struct nvme_ctrl *ctrl = container_of(to_delayed_work(work),
12491232 struct nvme_ctrl, ka_work);
12501233 bool comp_seen = ctrl->comp_seen;
1234+ struct request *rq;
12511235
12521236 if ((ctrl->ctratt & NVME_CTRL_ATTR_TBKAS) && comp_seen) {
12531237 dev_dbg(ctrl->device,
@@ -1257,12 +1241,18 @@ static void nvme_keep_alive_work(struct work_struct *work) · 3 unmodified lines
12571241 return;
12581242 }
12591243
1260− if (nvme_keep_alive(ctrl)) {
1244+ rq = nvme_alloc_request(ctrl->admin_q, &ctrl->ka_cmd,
1245+ BLK_MQ_REQ_RESERVED | BLK_MQ_REQ_NOWAIT);
1246+ if (IS_ERR(rq)) {
12611247 /* allocation failure, reset the controller */
1262− dev_err(ctrl->device, "keep-alive failed\n");
1248+ dev_err(ctrl->device, "keep-alive failed: %ld\n", PTR_ERR(rq));
12631249 nvme_reset_ctrl(ctrl);
12641250 return;
12651251 }
1252+
1253+ rq->timeout = ctrl->kato * HZ;
1254+ rq->end_io_data = ctrl;
1255+ blk_execute_rq_nowait(NULL, rq, 0, nvme_keep_alive_end_io);
12661256 }
12671257
12681258 static void nvme_start_keep_alive(struct nvme_ctrl *ctrl)
@@ -1964,30 +1954,18 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns) · 695 unmodified lines
19641954 blk_queue_max_write_zeroes_sectors(queue, UINT_MAX);
19651955 }
19661956
1967−static void nvme_config_write_zeroes(struct gendisk *disk, struct nvme_ns *ns)
1957+/*
1958+ * Even though NVMe spec explicitly states that MDTS is not applicable to the
1959+ * write-zeroes, we are cautious and limit the size to the controllers
1960+ * max_hw_sectors value, which is based on the MDTS field and possibly other
1961+ * limiting factors.
1962+ */
1963+static void nvme_config_write_zeroes(struct request_queue *q,
1964+ struct nvme_ctrl *ctrl)
19681965 {
1969− u64 max_blocks;
1970−
1971− if (!(ns->ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) ||
1972− (ns->ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
1973− return;
1974− /*
1975− * Even though NVMe spec explicitly states that MDTS is not
1976− * applicable to the write-zeroes:- "The restriction does not apply to
1977− * commands that do not transfer data between the host and the
1978− * controller (e.g., Write Uncorrectable ro Write Zeroes command).".
1979− * In order to be more cautious use controller's max_hw_sectors value
1980− * to configure the maximum sectors for the write-zeroes which is
1981− * configured based on the controller's MDTS field in the
1982− * nvme_init_identify() if available.
1983− */
1984− if (ns->ctrl->max_hw_sectors == UINT_MAX)
1985− max_blocks = (u64)USHRT_MAX + 1;
1986− else
1987− max_blocks = ns->ctrl->max_hw_sectors + 1;
1988−
1989− blk_queue_max_write_zeroes_sectors(disk->queue,
1990− nvme_lba_to_sect(ns, max_blocks));
1966+ if ((ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) &&
1967+ !(ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
1968+ blk_queue_max_write_zeroes_sectors(q, ctrl->max_hw_sectors);
19911969 }
19921970
19931971 static bool nvme_ns_ids_valid(struct nvme_ns_ids *ids)
@@ -2159,7 +2137,7 @@ static void nvme_update_disk_info(struct gendisk *disk, · 165 unmodified lines
21592137 set_capacity_and_notify(disk, capacity);
21602138
21612139 nvme_config_discard(disk, ns);
2162− nvme_config_write_zeroes(disk, ns);
2140+ nvme_config_write_zeroes(disk->queue, ns->ctrl);
21632141
21642142 set_disk_ro(disk, (id->nsattr & NVME_NS_ATTR_RO) ||
21652143 test_bit(NVME_NS_FORCE_RO, &ns->flags));
drivers/nvme/host/fabrics.h+7−0
@@ -18,6 +18,13 @@ · 17 unmodified lines
1818 /* default is -1: the fail fast mechanism is disabled */
1919 #define NVMF_DEF_FAIL_FAST_TMO -1
2020
21+/*
22+ * Reserved one command for internal usage. This command is used for sending
23+ * the connect command, as well as for the keep alive command on the admin
24+ * queue once live.
25+ */
26+#define NVMF_RESERVED_TAGS 1
27+
2128 /*
2229 * Define a host as seen by the target. We allocate one at boot, but also
2330 * allow the override it when creating controllers. This is both to provide
drivers/nvme/host/fc.c+2−2
@@ -2863,7 +2863,7 @@ nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl) · 2862 unmodified lines
28632863 memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set));
28642864 ctrl->tag_set.ops = &nvme_fc_mq_ops;
28652865 ctrl->tag_set.queue_depth = ctrl->ctrl.opts->queue_size;
2866− ctrl->tag_set.reserved_tags = 1; /* fabric connect */
2866+ ctrl->tag_set.reserved_tags = NVMF_RESERVED_TAGS;
28672867 ctrl->tag_set.numa_node = ctrl->ctrl.numa_node;
28682868 ctrl->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
28692869 ctrl->tag_set.cmd_size =
@@ -3485,7 +3485,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, · 615 unmodified lines
34853485 memset(&ctrl->admin_tag_set, 0, sizeof(ctrl->admin_tag_set));
34863486 ctrl->admin_tag_set.ops = &nvme_fc_admin_mq_ops;
34873487 ctrl->admin_tag_set.queue_depth = NVME_AQ_MQ_TAG_DEPTH;
3488− ctrl->admin_tag_set.reserved_tags = 2; /* fabric connect + Keep-Alive */
3488+ ctrl->admin_tag_set.reserved_tags = NVMF_RESERVED_TAGS;
34893489 ctrl->admin_tag_set.numa_node = ctrl->ctrl.numa_node;
34903490 ctrl->admin_tag_set.cmd_size =
34913491 struct_size((struct nvme_fcp_op_w_sgl *)NULL, priv,
drivers/nvme/host/rdma.c+7−4
@@ -736,8 +736,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl) · 735 unmodified lines
736736 return ret;
737737
738738 ctrl->ctrl.queue_count = nr_io_queues + 1;
739− if (ctrl->ctrl.queue_count < 2)
740− return 0;
739+ if (ctrl->ctrl.queue_count < 2) {
740+ dev_err(ctrl->ctrl.device,
741+ "unable to set any I/O queues\n");
742+ return -ENOMEM;
743+ }
741744
742745 dev_info(ctrl->ctrl.device,
743746 "creating %d I/O queues.\n", nr_io_queues);
@@ -798,7 +801,7 @@ static struct blk_mq_tag_set *nvme_rdma_alloc_tagset(struct nvme_ctrl *nctrl, · 54 unmodified lines
798801 memset(set, 0, sizeof(*set));
799802 set->ops = &nvme_rdma_admin_mq_ops;
800803 set->queue_depth = NVME_AQ_MQ_TAG_DEPTH;
801− set->reserved_tags = 2; /* connect + keep-alive */
804+ set->reserved_tags = NVMF_RESERVED_TAGS;
802805 set->numa_node = nctrl->numa_node;
803806 set->cmd_size = sizeof(struct nvme_rdma_request) +
804807 NVME_RDMA_DATA_SGL_SIZE;
@@ -811,7 +814,7 @@ static struct blk_mq_tag_set *nvme_rdma_alloc_tagset(struct nvme_ctrl *nctrl, · 6 unmodified lines
811814 memset(set, 0, sizeof(*set));
812815 set->ops = &nvme_rdma_mq_ops;
813816 set->queue_depth = nctrl->sqsize + 1;
814− set->reserved_tags = 1; /* fabric connect */
817+ set->reserved_tags = NVMF_RESERVED_TAGS;
815818 set->numa_node = nctrl->numa_node;
816819 set->flags = BLK_MQ_F_SHOULD_MERGE;
817820 set->cmd_size = sizeof(struct nvme_rdma_request) +
drivers/nvme/host/tcp.c+15−5
@@ -287,7 +287,7 @@ static inline void nvme_tcp_queue_request(struct nvme_tcp_request *req, · 286 unmodified lines
287287 * directly, otherwise queue io_work. Also, only do that if we
288288 * are on the same cpu, so we don't introduce contention.
289289 */
290− if (queue->io_cpu == __smp_processor_id() &&
290+ if (queue->io_cpu == raw_smp_processor_id() &&
291291 sync && empty && mutex_trylock(&queue->send_mutex)) {
292292 queue->more_requests = !last;
293293 nvme_tcp_send_all(queue);
@@ -568,6 +568,13 @@ static int nvme_tcp_setup_h2c_data_pdu(struct nvme_tcp_request *req, · 274 unmodified lines
568568 req->pdu_len = le32_to_cpu(pdu->r2t_length);
569569 req->pdu_sent = 0;
570570
571+ if (unlikely(!req->pdu_len)) {
572+ dev_err(queue->ctrl->ctrl.device,
573+ "req %d r2t len is %u, probably a bug...\n",
574+ rq->tag, req->pdu_len);
575+ return -EPROTO;
576+ }
577+
571578 if (unlikely(req->data_sent + req->pdu_len > req->data_len)) {
572579 dev_err(queue->ctrl->ctrl.device,
573580 "req %d r2t len %u exceeded data len %u (%zu sent)\n",
@@ -1575,7 +1582,7 @@ static struct blk_mq_tag_set *nvme_tcp_alloc_tagset(struct nvme_ctrl *nctrl, · 1001 unmodified lines
15751582 memset(set, 0, sizeof(*set));
15761583 set->ops = &nvme_tcp_admin_mq_ops;
15771584 set->queue_depth = NVME_AQ_MQ_TAG_DEPTH;
1578− set->reserved_tags = 2; /* connect + keep-alive */
1585+ set->reserved_tags = NVMF_RESERVED_TAGS;
15791586 set->numa_node = nctrl->numa_node;
15801587 set->flags = BLK_MQ_F_BLOCKING;
15811588 set->cmd_size = sizeof(struct nvme_tcp_request);
@@ -1587,7 +1594,7 @@ static struct blk_mq_tag_set *nvme_tcp_alloc_tagset(struct nvme_ctrl *nctrl, · 5 unmodified lines
15871594 memset(set, 0, sizeof(*set));
15881595 set->ops = &nvme_tcp_mq_ops;
15891596 set->queue_depth = nctrl->sqsize + 1;
1590− set->reserved_tags = 1; /* fabric connect */
1597+ set->reserved_tags = NVMF_RESERVED_TAGS;
15911598 set->numa_node = nctrl->numa_node;
15921599 set->flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING;
15931600 set->cmd_size = sizeof(struct nvme_tcp_request);
@@ -1745,8 +1752,11 @@ static int nvme_tcp_alloc_io_queues(struct nvme_ctrl *ctrl) · 151 unmodified lines
17451752 return ret;
17461753
17471754 ctrl->queue_count = nr_io_queues + 1;
1748− if (ctrl->queue_count < 2)
1749− return 0;
1755+ if (ctrl->queue_count < 2) {
1756+ dev_err(ctrl->device,
1757+ "unable to set any I/O queues\n");
1758+ return -ENOMEM;
1759+ }
17501760
17511761 dev_info(ctrl->device,
17521762 "creating %d I/O queues.\n", nr_io_queues);
drivers/nvme/target/core.c+14−3
@@ -1118,9 +1118,20 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl) · 1117 unmodified lines
11181118 {
11191119 lockdep_assert_held(&ctrl->lock);
11201120
1121− if (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
1122− nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES ||
1123− nvmet_cc_mps(ctrl->cc) != 0 ||
1121+ /*
1122+ * Only I/O controllers should verify iosqes,iocqes.
1123+ * Strictly speaking, the spec says a discovery controller
1124+ * should verify iosqes,iocqes are zeroed, however that
1125+ * would break backwards compatibility, so don't enforce it.
1126+ */
1127+ if (ctrl->subsys->type != NVME_NQN_DISC &&
1128+ (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
1129+ nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES)) {
1130+ ctrl->csts = NVME_CSTS_CFS;
1131+ return;
1132+ }
1133+
1134+ if (nvmet_cc_mps(ctrl->cc) != 0 ||
11241135 nvmet_cc_ams(ctrl->cc) != 0 ||
11251136 nvmet_cc_css(ctrl->cc) != 0) {
11261137 ctrl->csts = NVME_CSTS_CFS;
drivers/nvme/target/loop.c+2−2
@@ -349,7 +349,7 @@ static int nvme_loop_configure_admin_queue(struct nvme_loop_ctrl *ctrl) · 348 unmodified lines
349349 memset(&ctrl->admin_tag_set, 0, sizeof(ctrl->admin_tag_set));
350350 ctrl->admin_tag_set.ops = &nvme_loop_admin_mq_ops;
351351 ctrl->admin_tag_set.queue_depth = NVME_AQ_MQ_TAG_DEPTH;
352− ctrl->admin_tag_set.reserved_tags = 2; /* connect + keep-alive */
352+ ctrl->admin_tag_set.reserved_tags = NVMF_RESERVED_TAGS;
353353 ctrl->admin_tag_set.numa_node = ctrl->ctrl.numa_node;
354354 ctrl->admin_tag_set.cmd_size = sizeof(struct nvme_loop_iod) +
355355 NVME_INLINE_SG_CNT * sizeof(struct scatterlist);
@@ -520,7 +520,7 @@ static int nvme_loop_create_io_queues(struct nvme_loop_ctrl *ctrl) · 164 unmodified lines
520520 memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set));
521521 ctrl->tag_set.ops = &nvme_loop_mq_ops;
522522 ctrl->tag_set.queue_depth = ctrl->ctrl.opts->queue_size;
523− ctrl->tag_set.reserved_tags = 1; /* fabric connect */
523+ ctrl->tag_set.reserved_tags = NVMF_RESERVED_TAGS;
524524 ctrl->tag_set.numa_node = ctrl->ctrl.numa_node;
525525 ctrl->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
526526 ctrl->tag_set.cmd_size = sizeof(struct nvme_loop_iod) +
drivers/nvme/target/tcp.c+1−1
@@ -1098,11 +1098,11 @@ static int nvmet_tcp_try_recv_data(struct nvmet_tcp_queue *queue) · 1097 unmodified lines
10981098 cmd->rbytes_done += ret;
10991099 }
11001100
1101+ nvmet_tcp_unmap_pdu_iovec(cmd);
11011102 if (queue->data_digest) {
11021103 nvmet_tcp_prep_recv_ddgst(cmd);
11031104 return 0;
11041105 }
1105− nvmet_tcp_unmap_pdu_iovec(cmd);
11061106
11071107 if (!(cmd->flags & NVMET_TCP_F_INIT_FAILED) &&
11081108 cmd->rbytes_done == cmd->req.transfer_len) {
drivers/parport/parport_amiga.c+0−1
@@ -241,6 +241,5 @@ module_platform_driver_probe(amiga_parallel_driver, amiga_parallel_probe); · 240 unmodified lines
241241
242242 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
243243 MODULE_DESCRIPTION("Parport Driver for Amiga builtin Port");
244−MODULE_SUPPORTED_DEVICE("Amiga builtin Parallel Port");
245244 MODULE_LICENSE("GPL");
246245 MODULE_ALIAS("platform:amiga-parallel");
drivers/parport/parport_atari.c+0−1
@@ -218,7 +218,6 @@ static void __exit parport_atari_exit(void) · 217 unmodified lines
218218
219219 MODULE_AUTHOR("Andreas Schwab");
220220 MODULE_DESCRIPTION("Parport Driver for Atari builtin Port");
221−MODULE_SUPPORTED_DEVICE("Atari builtin Parallel Port");
222221 MODULE_LICENSE("GPL");
223222
224223 module_init(parport_atari_init)
drivers/parport/parport_gsc.c+0−1
@@ -41,7 +41,6 @@ · 40 unmodified lines
4141
4242 MODULE_AUTHOR("Helge Deller <deller@gmx.de>");
4343 MODULE_DESCRIPTION("HP-PARISC PC-style parallel port driver");
44−MODULE_SUPPORTED_DEVICE("integrated PC-style parallel port");
4544 MODULE_LICENSE("GPL");
4645
4746
drivers/parport/parport_mfc3.c+0−1
@@ -359,7 +359,6 @@ static void __exit parport_mfc3_exit(void) · 358 unmodified lines
359359
360360 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
361361 MODULE_DESCRIPTION("Parport Driver for Multiface 3 expansion cards Parallel Port");
362−MODULE_SUPPORTED_DEVICE("Multiface 3 Parallel Port");
363362 MODULE_LICENSE("GPL");
364363
365364 module_init(parport_mfc3_init)
drivers/parport/parport_sunbpp.c+0−1
@@ -377,6 +377,5 @@ module_platform_driver(bpp_sbus_driver); · 376 unmodified lines
377377
378378 MODULE_AUTHOR("Derrick J Brashear");
379379 MODULE_DESCRIPTION("Parport Driver for Sparc bidirectional Port");
380−MODULE_SUPPORTED_DEVICE("Sparc Bidirectional Parallel Port");
381380 MODULE_VERSION("2.0");
382381 MODULE_LICENSE("GPL");
drivers/pci/hotplug/rpadlpar_sysfs.c+6−8
@@ -34,12 +34,11 @@ static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr, · 33 unmodified lines
3434 if (nbytes >= MAX_DRC_NAME_LEN)
3535 return 0;
3636
37− memcpy(drc_name, buf, nbytes);
37+ strscpy(drc_name, buf, nbytes + 1);
3838
3939 end = strchr(drc_name, '\n');
40− if (!end)
41− end = &drc_name[nbytes];
42− *end = '\0';
40+ if (end)
41+ *end = '\0';
4342
4443 rc = dlpar_add_slot(drc_name);
4544 if (rc)
@@ -65,12 +64,11 @@ static ssize_t remove_slot_store(struct kobject *kobj, · 19 unmodified lines
6564 if (nbytes >= MAX_DRC_NAME_LEN)
6665 return 0;
6766
68− memcpy(drc_name, buf, nbytes);
67+ strscpy(drc_name, buf, nbytes + 1);
6968
7069 end = strchr(drc_name, '\n');
71− if (!end)
72− end = &drc_name[nbytes];
73− *end = '\0';
70+ if (end)
71+ *end = '\0';
7472
7573 rc = dlpar_remove_slot(drc_name);
7674 if (rc)
drivers/pci/hotplug/s390_pci_hpc.c+2−1
@@ -93,8 +93,9 @@ static int disable_slot(struct hotplug_slot *hotplug_slot) · 92 unmodified lines
9393 pci_dev_put(pdev);
9494 return -EBUSY;
9595 }
96+ pci_dev_put(pdev);
9697
97− zpci_remove_device(zdev);
98+ zpci_remove_device(zdev, false);
9899
99100 rc = zpci_disable_device(zdev);
100101 if (rc)
drivers/pinctrl/intel/pinctrl-intel.c+8−1
@@ -1357,6 +1357,7 @@ static int intel_pinctrl_add_padgroups_by_gpps(struct intel_pinctrl *pctrl, · 1356 unmodified lines
13571357 gpps[i].gpio_base = 0;
13581358 break;
13591359 case INTEL_GPIO_BASE_NOMAP:
1360+ break;
13601361 default:
13611362 break;
13621363 }
@@ -1393,6 +1394,7 @@ static int intel_pinctrl_add_padgroups_by_size(struct intel_pinctrl *pctrl, · 30 unmodified lines
13931394 gpps[i].size = min(gpp_size, npins);
13941395 npins -= gpps[i].size;
13951396
1397+ gpps[i].gpio_base = gpps[i].base;
13961398 gpps[i].padown_num = padown_num;
13971399
13981400 /*
@@ -1491,8 +1493,13 @@ static int intel_pinctrl_probe(struct platform_device *pdev, · 92 unmodified lines
14911493 if (IS_ERR(regs))
14921494 return PTR_ERR(regs);
14931495
1494− /* Determine community features based on the revision */
1496+ /*
1497+ * Determine community features based on the revision.
1498+ * A value of all ones means the device is not present.
1499+ */
14951500 value = readl(regs + REVID);
1501+ if (value == ~0u)
1502+ return -ENODEV;
14961503 if (((value & REVID_MASK) >> REVID_SHIFT) >= 0x94) {
14971504 community->features |= PINCTRL_FEATURE_DEBOUNCE;
14981505 community->features |= PINCTRL_FEATURE_1K_PD;
drivers/pinctrl/pinctrl-microchip-sgpio.c+1−1
@@ -572,7 +572,7 @@ static void microchip_sgpio_irq_settype(struct irq_data *data, · 571 unmodified lines
572572 /* Type value spread over 2 registers sets: low, high bit */
573573 sgpio_clrsetbits(bank->priv, REG_INT_TRIGGER, addr.bit,
574574 BIT(addr.port), (!!(type & 0x1)) << addr.port);
575− sgpio_clrsetbits(bank->priv, REG_INT_TRIGGER + SGPIO_MAX_BITS, addr.bit,
575+ sgpio_clrsetbits(bank->priv, REG_INT_TRIGGER, SGPIO_MAX_BITS + addr.bit,
576576 BIT(addr.port), (!!(type & 0x2)) << addr.port);
577577
578578 if (type == SGPIO_INT_TRG_LEVEL)
drivers/pinctrl/pinctrl-rockchip.c+8−5
@@ -3727,12 +3727,15 @@ static int __maybe_unused rockchip_pinctrl_suspend(struct device *dev) · 3726 unmodified lines
37273727 static int __maybe_unused rockchip_pinctrl_resume(struct device *dev)
37283728 {
37293729 struct rockchip_pinctrl *info = dev_get_drvdata(dev);
3730− int ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
3731− rk3288_grf_gpio6c_iomux |
3732− GPIO6C6_SEL_WRITE_ENABLE);
3730+ int ret;
37333731
3734− if (ret)
3735− return ret;
3732+ if (info->ctrl->type == RK3288) {
3733+ ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
3734+ rk3288_grf_gpio6c_iomux |
3735+ GPIO6C6_SEL_WRITE_ENABLE);
3736+ if (ret)
3737+ return ret;
3738+ }
37363739
37373740 return pinctrl_force_default(info->pctl_dev);
37383741 }
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c+1−1
@@ -392,7 +392,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group, · 391 unmodified lines
392392 unsigned long *configs, unsigned int nconfs)
393393 {
394394 struct lpi_pinctrl *pctrl = dev_get_drvdata(pctldev->dev);
395− unsigned int param, arg, pullup, strength;
395+ unsigned int param, arg, pullup = LPI_GPIO_BIAS_DISABLE, strength = 2;
396396 bool value, output_enabled = false;
397397 const struct lpi_pingroup *g;
398398 unsigned long sval;
drivers/pinctrl/qcom/pinctrl-sc7280.c+8−8
@@ -1439,14 +1439,14 @@ static const struct msm_pingroup sc7280_groups[] = { · 1438 unmodified lines
14391439 [172] = PINGROUP(172, qdss, _, _, _, _, _, _, _, _),
14401440 [173] = PINGROUP(173, qdss, _, _, _, _, _, _, _, _),
14411441 [174] = PINGROUP(174, qdss, _, _, _, _, _, _, _, _),
1442− [175] = UFS_RESET(ufs_reset, 0x1be000),
1443− [176] = SDC_QDSD_PINGROUP(sdc1_rclk, 0x1b3000, 15, 0),
1444− [177] = SDC_QDSD_PINGROUP(sdc1_clk, 0x1b3000, 13, 6),
1445− [178] = SDC_QDSD_PINGROUP(sdc1_cmd, 0x1b3000, 11, 3),
1446− [179] = SDC_QDSD_PINGROUP(sdc1_data, 0x1b3000, 9, 0),
1447− [180] = SDC_QDSD_PINGROUP(sdc2_clk, 0x1b4000, 14, 6),
1448− [181] = SDC_QDSD_PINGROUP(sdc2_cmd, 0x1b4000, 11, 3),
1449− [182] = SDC_QDSD_PINGROUP(sdc2_data, 0x1b4000, 9, 0),
1442+ [175] = UFS_RESET(ufs_reset, 0xbe000),
1443+ [176] = SDC_QDSD_PINGROUP(sdc1_rclk, 0xb3004, 0, 6),
1444+ [177] = SDC_QDSD_PINGROUP(sdc1_clk, 0xb3000, 13, 6),
1445+ [178] = SDC_QDSD_PINGROUP(sdc1_cmd, 0xb3000, 11, 3),
1446+ [179] = SDC_QDSD_PINGROUP(sdc1_data, 0xb3000, 9, 0),
1447+ [180] = SDC_QDSD_PINGROUP(sdc2_clk, 0xb4000, 14, 6),
1448+ [181] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xb4000, 11, 3),
1449+ [182] = SDC_QDSD_PINGROUP(sdc2_data, 0xb4000, 9, 0),
14501450 };
14511451
14521452 static const struct msm_pinctrl_soc_data sc7280_pinctrl = {
drivers/pinctrl/qcom/pinctrl-sdx55.c+1−1
@@ -423,7 +423,7 @@ static const char * const gpio_groups[] = { · 422 unmodified lines
423423
424424 static const char * const qdss_stm_groups[] = {
425425 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio12", "gpio13",
426− "gpio14", "gpio15", "gpio16", "gpio17", "gpio18", "gpio19" "gpio20", "gpio21", "gpio22",
426+ "gpio14", "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", "gpio22",
427427 "gpio23", "gpio44", "gpio45", "gpio52", "gpio53", "gpio56", "gpio57", "gpio61", "gpio62",
428428 "gpio63", "gpio64", "gpio65", "gpio66",
429429 };
drivers/platform/x86/Kconfig+8−3
@@ -1173,15 +1173,20 @@ config INTEL_PMC_CORE · 1172 unmodified lines
11731173 depends on PCI
11741174 help
11751175 The Intel Platform Controller Hub for Intel Core SoCs provides access
1176− to Power Management Controller registers via a PCI interface. This
1176+ to Power Management Controller registers via various interfaces. This
11771177 driver can utilize debugging capabilities and supported features as
1178− exposed by the Power Management Controller.
1178+ exposed by the Power Management Controller. It also may perform some
1179+ tasks in the PMC in order to enable transition into the SLPS0 state.
1180+ It should be selected on all Intel platforms supported by the driver.
11791181
11801182 Supported features:
11811183 - SLP_S0_RESIDENCY counter
11821184 - PCH IP Power Gating status
1183− - LTR Ignore
1185+ - LTR Ignore / LTR Show
11841186 - MPHY/PLL gating status (Sunrisepoint PCH only)
1187+ - SLPS0 Debug registers (Cannonlake/Icelake PCH)
1188+ - Low Power Mode registers (Tigerlake and beyond)
1189+ - PMC quirks as needed to enable SLPS0/S0ix
11851190
11861191 config INTEL_PMT_CLASS
11871192 tristate
drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c+3−0
@@ -185,5 +185,8 @@ void exit_enum_attributes(void) · 184 unmodified lines
185185 sysfs_remove_group(wmi_priv.enumeration_data[instance_id].attr_name_kobj,
186186 &enumeration_attr_group);
187187 }
188+ wmi_priv.enumeration_instances_count = 0;
189+
188190 kfree(wmi_priv.enumeration_data);
191+ wmi_priv.enumeration_data = NULL;
189192 }
drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c+3−0
@@ -175,5 +175,8 @@ void exit_int_attributes(void) · 174 unmodified lines
175175 sysfs_remove_group(wmi_priv.integer_data[instance_id].attr_name_kobj,
176176 &integer_attr_group);
177177 }
178+ wmi_priv.integer_instances_count = 0;
179+
178180 kfree(wmi_priv.integer_data);
181+ wmi_priv.integer_data = NULL;
179182 }
drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c+3−0
@@ -183,5 +183,8 @@ void exit_po_attributes(void) · 182 unmodified lines
183183 sysfs_remove_group(wmi_priv.po_data[instance_id].attr_name_kobj,
184184 &po_attr_group);
185185 }
186+ wmi_priv.po_instances_count = 0;
187+
186188 kfree(wmi_priv.po_data);
189+ wmi_priv.po_data = NULL;
187190 }
drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c+3−0
@@ -155,5 +155,8 @@ void exit_str_attributes(void) · 154 unmodified lines
155155 sysfs_remove_group(wmi_priv.str_data[instance_id].attr_name_kobj,
156156 &str_attr_group);
157157 }
158+ wmi_priv.str_instances_count = 0;
159+
158160 kfree(wmi_priv.str_data);
161+ wmi_priv.str_data = NULL;
159162 }
drivers/platform/x86/dell/dell-wmi-sysman/sysman.c+32−52
@@ -210,25 +210,17 @@ static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot); · 209 unmodified lines
210210 */
211211 static int create_attributes_level_sysfs_files(void)
212212 {
213− int ret = sysfs_create_file(&wmi_priv.main_dir_kset->kobj, &reset_bios.attr);
213+ int ret;
214214
215− if (ret) {
216− pr_debug("could not create reset_bios file\n");
215+ ret = sysfs_create_file(&wmi_priv.main_dir_kset->kobj, &reset_bios.attr);
216+ if (ret)
217217 return ret;
218− }
219218
220219 ret = sysfs_create_file(&wmi_priv.main_dir_kset->kobj, &pending_reboot.attr);
221− if (ret) {
222− pr_debug("could not create changing_pending_reboot file\n");
223− sysfs_remove_file(&wmi_priv.main_dir_kset->kobj, &reset_bios.attr);
224− }
225− return ret;
226−}
220+ if (ret)
221+ return ret;
227222
228−static void release_reset_bios_data(void)
229−{
230− sysfs_remove_file(&wmi_priv.main_dir_kset->kobj, &reset_bios.attr);
231− sysfs_remove_file(&wmi_priv.main_dir_kset->kobj, &pending_reboot.attr);
223+ return 0;
232224 }
233225
234226 static ssize_t wmi_sysman_attr_show(struct kobject *kobj, struct attribute *attr,
@@ -373,8 +365,6 @@ static void destroy_attribute_objs(struct kset *kset) · 138 unmodified lines
373365 */
374366 static void release_attributes_data(void)
375367 {
376− release_reset_bios_data();
377−
378368 mutex_lock(&wmi_priv.mutex);
379369 exit_enum_attributes();
380370 exit_int_attributes();
@@ -386,11 +376,13 @@ static void release_attributes_data(void) · 5 unmodified lines
386376 wmi_priv.authentication_dir_kset = NULL;
387377 }
388378 if (wmi_priv.main_dir_kset) {
379+ sysfs_remove_file(&wmi_priv.main_dir_kset->kobj, &reset_bios.attr);
380+ sysfs_remove_file(&wmi_priv.main_dir_kset->kobj, &pending_reboot.attr);
389381 destroy_attribute_objs(wmi_priv.main_dir_kset);
390382 kset_unregister(wmi_priv.main_dir_kset);
383+ wmi_priv.main_dir_kset = NULL;
391384 }
392385 mutex_unlock(&wmi_priv.mutex);
393−
394386 }
395387
396388 /**
@@ -497,7 +489,6 @@ nextobj: · 100 unmodified lines
497489
498490 err_attr_init:
499491 mutex_unlock(&wmi_priv.mutex);
500− release_attributes_data();
501492 kfree(obj);
502493 return retval;
503494 }
@@ -513,102 +504,91 @@ static int __init sysman_init(void) · 9 unmodified lines
513504 }
514505
515506 ret = init_bios_attr_set_interface();
516− if (ret || !wmi_priv.bios_attr_wdev) {
517− pr_debug("failed to initialize set interface\n");
518− goto fail_set_interface;
519− }
507+ if (ret)
508+ return ret;
520509
521510 ret = init_bios_attr_pass_interface();
522− if (ret || !wmi_priv.password_attr_wdev) {
523− pr_debug("failed to initialize pass interface\n");
524− goto fail_pass_interface;
511+ if (ret)
512+ goto err_exit_bios_attr_set_interface;
513+
514+ if (!wmi_priv.bios_attr_wdev || !wmi_priv.password_attr_wdev) {
515+ pr_debug("failed to find set or pass interface\n");
516+ ret = -ENODEV;
517+ goto err_exit_bios_attr_pass_interface;
525518 }
526519
527520 ret = class_register(&firmware_attributes_class);
528521 if (ret)
529− goto fail_class;
522+ goto err_exit_bios_attr_pass_interface;
530523
531524 wmi_priv.class_dev = device_create(&firmware_attributes_class, NULL, MKDEV(0, 0),
532525 NULL, "%s", DRIVER_NAME);
533526 if (IS_ERR(wmi_priv.class_dev)) {
534527 ret = PTR_ERR(wmi_priv.class_dev);
535− goto fail_classdev;
528+ goto err_unregister_class;
536529 }
537530
538531 wmi_priv.main_dir_kset = kset_create_and_add("attributes", NULL,
539532 &wmi_priv.class_dev->kobj);
540533 if (!wmi_priv.main_dir_kset) {
541534 ret = -ENOMEM;
542− goto fail_main_kset;
535+ goto err_destroy_classdev;
543536 }
544537
545538 wmi_priv.authentication_dir_kset = kset_create_and_add("authentication", NULL,
546539 &wmi_priv.class_dev->kobj);
547540 if (!wmi_priv.authentication_dir_kset) {
548541 ret = -ENOMEM;
549− goto fail_authentication_kset;
542+ goto err_release_attributes_data;
550543 }
551544
552545 ret = create_attributes_level_sysfs_files();
553546 if (ret) {
554547 pr_debug("could not create reset BIOS attribute\n");
555− goto fail_reset_bios;
548+ goto err_release_attributes_data;
556549 }
557550
558551 ret = init_bios_attributes(ENUM, DELL_WMI_BIOS_ENUMERATION_ATTRIBUTE_GUID);
559552 if (ret) {
560553 pr_debug("failed to populate enumeration type attributes\n");
561− goto fail_create_group;
554+ goto err_release_attributes_data;
562555 }
563556
564557 ret = init_bios_attributes(INT, DELL_WMI_BIOS_INTEGER_ATTRIBUTE_GUID);
565558 if (ret) {
566559 pr_debug("failed to populate integer type attributes\n");
567− goto fail_create_group;
560+ goto err_release_attributes_data;
568561 }
569562
570563 ret = init_bios_attributes(STR, DELL_WMI_BIOS_STRING_ATTRIBUTE_GUID);
571564 if (ret) {
572565 pr_debug("failed to populate string type attributes\n");
573− goto fail_create_group;
566+ goto err_release_attributes_data;
574567 }
575568
576569 ret = init_bios_attributes(PO, DELL_WMI_BIOS_PASSOBJ_ATTRIBUTE_GUID);
577570 if (ret) {
578571 pr_debug("failed to populate pass object type attributes\n");
579− goto fail_create_group;
572+ goto err_release_attributes_data;
580573 }
581574
582575 return 0;
583576
584−fail_create_group:
577+err_release_attributes_data:
585578 release_attributes_data();
586579
587−fail_reset_bios:
588− if (wmi_priv.authentication_dir_kset) {
589− kset_unregister(wmi_priv.authentication_dir_kset);
590− wmi_priv.authentication_dir_kset = NULL;
591− }
592−
593−fail_authentication_kset:
594− if (wmi_priv.main_dir_kset) {
595− kset_unregister(wmi_priv.main_dir_kset);
596− wmi_priv.main_dir_kset = NULL;
597− }
598−
599−fail_main_kset:
580+err_destroy_classdev:
600581 device_destroy(&firmware_attributes_class, MKDEV(0, 0));
601582
602−fail_classdev:
583+err_unregister_class:
603584 class_unregister(&firmware_attributes_class);
604585
605−fail_class:
586+err_exit_bios_attr_pass_interface:
606587 exit_bios_attr_pass_interface();
607588
608−fail_pass_interface:
589+err_exit_bios_attr_set_interface:
609590 exit_bios_attr_set_interface();
610591
611−fail_set_interface:
612592 return ret;
613593 }
614594
drivers/platform/x86/intel-hid.c+7−0
@@ -90,6 +90,13 @@ static const struct dmi_system_id button_array_table[] = { · 89 unmodified lines
9090 DMI_MATCH(DMI_PRODUCT_NAME, "HP Spectre x2 Detachable"),
9191 },
9292 },
93+ {
94+ .ident = "Lenovo ThinkPad X1 Tablet Gen 2",
95+ .matches = {
96+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
97+ DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Tablet Gen 2"),
98+ },
99+ },
93100 { }
94101 };
95102
drivers/platform/x86/intel-vbtn.c+10−2
@@ -48,8 +48,16 @@ static const struct key_entry intel_vbtn_keymap[] = { · 47 unmodified lines
4848 };
4949
5050 static const struct key_entry intel_vbtn_switchmap[] = {
51− { KE_SW, 0xCA, { .sw = { SW_DOCK, 1 } } }, /* Docked */
52− { KE_SW, 0xCB, { .sw = { SW_DOCK, 0 } } }, /* Undocked */
51+ /*
52+ * SW_DOCK should only be reported for docking stations, but DSDTs using the
53+ * intel-vbtn code, always seem to use this for 2-in-1s / convertibles and set
54+ * SW_DOCK=1 when in laptop-mode (in tandem with setting SW_TABLET_MODE=0).
55+ * This causes userspace to think the laptop is docked to a port-replicator
56+ * and to disable suspend-on-lid-close, which is undesirable.
57+ * Map the dock events to KEY_IGNORE to avoid this broken SW_DOCK reporting.
58+ */
59+ { KE_IGNORE, 0xCA, { .sw = { SW_DOCK, 1 } } }, /* Docked */
60+ { KE_IGNORE, 0xCB, { .sw = { SW_DOCK, 0 } } }, /* Undocked */
5361 { KE_SW, 0xCC, { .sw = { SW_TABLET_MODE, 1 } } }, /* Tablet */
5462 { KE_SW, 0xCD, { .sw = { SW_TABLET_MODE, 0 } } }, /* Laptop */
5563 { KE_END }
drivers/platform/x86/intel_pmc_core.c+35−15
@@ -863,34 +863,45 @@ out_unlock: · 862 unmodified lines
863863 }
864864 DEFINE_SHOW_ATTRIBUTE(pmc_core_pll);
865865
866−static ssize_t pmc_core_ltr_ignore_write(struct file *file,
867− const char __user *userbuf,
868− size_t count, loff_t *ppos)
866+static int pmc_core_send_ltr_ignore(u32 value)
869867 {
870868 struct pmc_dev *pmcdev = &pmc;
871869 const struct pmc_reg_map *map = pmcdev->map;
872− u32 val, buf_size, fd;
873− int err;
874−
875− buf_size = count < 64 ? count : 64;
876−
877− err = kstrtou32_from_user(userbuf, buf_size, 10, &val);
878− if (err)
879− return err;
870+ u32 reg;
871+ int err = 0;
880872
881873 mutex_lock(&pmcdev->lock);
882874
883− if (val > map->ltr_ignore_max) {
875+ if (value > map->ltr_ignore_max) {
884876 err = -EINVAL;
885877 goto out_unlock;
886878 }
887879
888− fd = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset);
889− fd |= (1U << val);
890− pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, fd);
880+ reg = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset);
881+ reg |= BIT(value);
882+ pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, reg);
891883
892884 out_unlock:
893885 mutex_unlock(&pmcdev->lock);
886+
887+ return err;
888+}
889+
890+static ssize_t pmc_core_ltr_ignore_write(struct file *file,
891+ const char __user *userbuf,
892+ size_t count, loff_t *ppos)
893+{
894+ u32 buf_size, value;
895+ int err;
896+
897+ buf_size = min_t(u32, count, 64);
898+
899+ err = kstrtou32_from_user(userbuf, buf_size, 10, &value);
900+ if (err)
901+ return err;
902+
903+ err = pmc_core_send_ltr_ignore(value);
904+
894905 return err == 0 ? count : err;
895906 }
896907
@@ -1244,6 +1255,15 @@ static int pmc_core_probe(struct platform_device *pdev) · 347 unmodified lines
12441255 pmcdev->pmc_xram_read_bit = pmc_core_check_read_lock_bit();
12451256 dmi_check_system(pmc_core_dmi_table);
12461257
1258+ /*
1259+ * On TGL, due to a hardware limitation, the GBE LTR blocks PC10 when
1260+ * a cable is attached. Tell the PMC to ignore it.
1261+ */
1262+ if (pmcdev->map == &tgl_reg_map) {
1263+ dev_dbg(&pdev->dev, "ignoring GBE LTR\n");
1264+ pmc_core_send_ltr_ignore(3);
1265+ }
1266+
12471267 pmc_core_dbgfs_register(pmcdev);
12481268
12491269 device_initialized = true;
drivers/platform/x86/intel_pmt_class.c+1−1
@@ -173,7 +173,7 @@ static int intel_pmt_dev_register(struct intel_pmt_entry *entry, · 172 unmodified lines
173173 struct intel_pmt_namespace *ns,
174174 struct device *parent)
175175 {
176− struct resource res;
176+ struct resource res = {0};
177177 struct device *dev;
178178 int ret;
179179
drivers/platform/x86/intel_pmt_crashlog.c+6−7
@@ -23,18 +23,17 @@ · 22 unmodified lines
2323 #define CRASH_TYPE_OOBMSM 1
2424
2525 /* Control Flags */
26−#define CRASHLOG_FLAG_DISABLE BIT(27)
26+#define CRASHLOG_FLAG_DISABLE BIT(28)
2727
2828 /*
29− * Bits 28 and 29 control the state of bit 31.
29+ * Bits 29 and 30 control the state of bit 31.
3030 *
31− * Bit 28 will clear bit 31, if set, allowing a new crashlog to be captured.
32− * Bit 29 will immediately trigger a crashlog to be generated, setting bit 31.
33− * Bit 30 is read-only and reserved as 0.
31+ * Bit 29 will clear bit 31, if set, allowing a new crashlog to be captured.
32+ * Bit 30 will immediately trigger a crashlog to be generated, setting bit 31.
3433 * Bit 31 is the read-only status with a 1 indicating log is complete.
3534 */
36−#define CRASHLOG_FLAG_TRIGGER_CLEAR BIT(28)
37−#define CRASHLOG_FLAG_TRIGGER_EXECUTE BIT(29)
35+#define CRASHLOG_FLAG_TRIGGER_CLEAR BIT(29)
36+#define CRASHLOG_FLAG_TRIGGER_EXECUTE BIT(30)
3837 #define CRASHLOG_FLAG_TRIGGER_COMPLETE BIT(31)
3938 #define CRASHLOG_FLAG_TRIGGER_MASK GENMASK(31, 28)
4039
drivers/platform/x86/thinkpad_acpi.c+79−29
@@ -4081,13 +4081,19 @@ static bool hotkey_notify_6xxx(const u32 hkey, · 4080 unmodified lines
40814081
40824082 case TP_HKEY_EV_KEY_NUMLOCK:
40834083 case TP_HKEY_EV_KEY_FN:
4084− case TP_HKEY_EV_KEY_FN_ESC:
40854084 /* key press events, we just ignore them as long as the EC
40864085 * is still reporting them in the normal keyboard stream */
40874086 *send_acpi_ev = false;
40884087 *ignore_acpi_ev = true;
40894088 return true;
40904089
4090+ case TP_HKEY_EV_KEY_FN_ESC:
4091+ /* Get the media key status to foce the status LED to update */
4092+ acpi_evalf(hkey_handle, NULL, "GMKS", "v");
4093+ *send_acpi_ev = false;
4094+ *ignore_acpi_ev = true;
4095+ return true;
4096+
40914097 case TP_HKEY_EV_TABLET_CHANGED:
40924098 tpacpi_input_send_tabletsw();
40934099 hotkey_tablet_mode_notify_change();
@@ -9845,6 +9851,11 @@ static struct ibm_struct lcdshadow_driver_data = { · 5751 unmodified lines
98459851 * Thinkpad sensor interfaces
98469852 */
98479853
9854+#define DYTC_CMD_QUERY 0 /* To get DYTC status - enable/revision */
9855+#define DYTC_QUERY_ENABLE_BIT 8 /* Bit 8 - 0 = disabled, 1 = enabled */
9856+#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
9857+#define DYTC_QUERY_REV_BIT 28 /* Bits 28 - 31 - revision */
9858+
98489859 #define DYTC_CMD_GET 2 /* To get current IC function and mode */
98499860 #define DYTC_GET_LAPMODE_BIT 17 /* Set when in lapmode */
98509861
@@ -9855,6 +9866,7 @@ static bool has_palmsensor; · 4 unmodified lines
98559866 static bool has_lapsensor;
98569867 static bool palm_state;
98579868 static bool lap_state;
9869+static int dytc_version;
98589870
98599871 static int dytc_command(int command, int *output)
98609872 {
@@ -9869,6 +9881,33 @@ static int dytc_command(int command, int *output) · 8 unmodified lines
98699881 return 0;
98709882 }
98719883
9884+static int dytc_get_version(void)
9885+{
9886+ int err, output;
9887+
9888+ /* Check if we've been called before - and just return cached value */
9889+ if (dytc_version)
9890+ return dytc_version;
9891+
9892+ /* Otherwise query DYTC and extract version information */
9893+ err = dytc_command(DYTC_CMD_QUERY, &output);
9894+ /*
9895+ * If support isn't available (ENODEV) then don't return an error
9896+ * and don't create the sysfs group
9897+ */
9898+ if (err == -ENODEV)
9899+ return 0;
9900+ /* For all other errors we can flag the failure */
9901+ if (err)
9902+ return err;
9903+
9904+ /* Check DYTC is enabled and supports mode setting */
9905+ if (output & BIT(DYTC_QUERY_ENABLE_BIT))
9906+ dytc_version = (output >> DYTC_QUERY_REV_BIT) & 0xF;
9907+
9908+ return 0;
9909+}
9910+
98729911 static int lapsensor_get(bool *present, bool *state)
98739912 {
98749913 int output, err;
@@ -9974,7 +10013,18 @@ static int tpacpi_proxsensor_init(struct ibm_init_struct *iibm) · 99 unmodified lines
997410013 if (err)
997510014 return err;
997610015 }
9977− if (has_lapsensor) {
10016+
10017+ /* Check if we know the DYTC version, if we don't then get it */
10018+ if (!dytc_version) {
10019+ err = dytc_get_version();
10020+ if (err)
10021+ return err;
10022+ }
10023+ /*
10024+ * Platforms before DYTC version 5 claim to have a lap sensor, but it doesn't work, so we
10025+ * ignore them
10026+ */
10027+ if (has_lapsensor && (dytc_version >= 5)) {
997810028 err = sysfs_create_file(&tpacpi_pdev->dev.kobj, &dev_attr_dytc_lapmode.attr);
997910029 if (err)
998010030 return err;
@@ -9999,14 +10049,9 @@ static struct ibm_struct proxsensor_driver_data = { · 18 unmodified lines
999910049 * DYTC Platform Profile interface
1000010050 */
1000110051
10002−#define DYTC_CMD_QUERY 0 /* To get DYTC status - enable/revision */
1000310052 #define DYTC_CMD_SET 1 /* To enable/disable IC function mode */
1000410053 #define DYTC_CMD_RESET 0x1ff /* To reset back to default */
1000510054
10006−#define DYTC_QUERY_ENABLE_BIT 8 /* Bit 8 - 0 = disabled, 1 = enabled */
10007−#define DYTC_QUERY_SUBREV_BIT 16 /* Bits 16 - 27 - sub revision */
10008−#define DYTC_QUERY_REV_BIT 28 /* Bits 28 - 31 - revision */
10009−
1001010055 #define DYTC_GET_FUNCTION_BIT 8 /* Bits 8-11 - function setting */
1001110056 #define DYTC_GET_MODE_BIT 12 /* Bits 12-15 - mode setting */
1001210057
@@ -10142,8 +10187,13 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, · 129 unmodified lines
1014210187 return err;
1014310188
1014410189 if (profile == PLATFORM_PROFILE_BALANCED) {
10145− /* To get back to balanced mode we just issue a reset command */
10146− err = dytc_command(DYTC_CMD_RESET, &output);
10190+ /*
10191+ * To get back to balanced mode we need to issue a reset command.
10192+ * Note we still need to disable CQL mode before hand and re-enable
10193+ * it afterwards, otherwise dytc_lapmode gets reset to 0 and stays
10194+ * stuck at 0 for aprox. 30 minutes.
10195+ */
10196+ err = dytc_cql_command(DYTC_CMD_RESET, &output);
1014710197 if (err)
1014810198 goto unlock;
1014910199 } else {
@@ -10211,28 +10261,28 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) · 61 unmodified lines
1021110261 if (err)
1021210262 return err;
1021310263
10264+ /* Check if we know the DYTC version, if we don't then get it */
10265+ if (!dytc_version) {
10266+ err = dytc_get_version();
10267+ if (err)
10268+ return err;
10269+ }
1021410270 /* Check DYTC is enabled and supports mode setting */
10215− if (output & BIT(DYTC_QUERY_ENABLE_BIT)) {
10216− /* Only DYTC v5.0 and later has this feature. */
10217− int dytc_version;
10218−
10219− dytc_version = (output >> DYTC_QUERY_REV_BIT) & 0xF;
10220− if (dytc_version >= 5) {
10221− dbg_printk(TPACPI_DBG_INIT,
10222− "DYTC version %d: thermal mode available\n", dytc_version);
10223− /* Create platform_profile structure and register */
10224− err = platform_profile_register(&dytc_profile);
10225− /*
10226− * If for some reason platform_profiles aren't enabled
10227− * don't quit terminally.
10228− */
10229− if (err)
10230− return 0;
10271+ if (dytc_version >= 5) {
10272+ dbg_printk(TPACPI_DBG_INIT,
10273+ "DYTC version %d: thermal mode available\n", dytc_version);
10274+ /* Create platform_profile structure and register */
10275+ err = platform_profile_register(&dytc_profile);
10276+ /*
10277+ * If for some reason platform_profiles aren't enabled
10278+ * don't quit terminally.
10279+ */
10280+ if (err)
10281+ return 0;
1023110282
10232− dytc_profile_available = true;
10233− /* Ensure initial values are correct */
10234− dytc_profile_refresh();
10235− }
10283+ dytc_profile_available = true;
10284+ /* Ensure initial values are correct */
10285+ dytc_profile_refresh();
1023610286 }
1023710287 return 0;
1023810288 }
drivers/ptp/ptp_qoriq.c+7−6
@@ -189,15 +189,16 @@ int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) · 188 unmodified lines
189189 tmr_add = ptp_qoriq->tmr_add;
190190 adj = tmr_add;
191191
192− /* calculate diff as adj*(scaled_ppm/65536)/1000000
193− * and round() to the nearest integer
192+ /*
193+ * Calculate diff and round() to the nearest integer
194+ *
195+ * diff = adj * (ppb / 1000000000)
196+ * = adj * scaled_ppm / 65536000000
194197 */
195− adj *= scaled_ppm;
196− diff = div_u64(adj, 8000000);
197− diff = (diff >> 13) + ((diff >> 12) & 1);
198+ diff = mul_u64_u64_div_u64(adj, scaled_ppm, 32768000000);
199+ diff = DIV64_U64_ROUND_UP(diff, 2);
198200
199201 tmr_add = neg_adj ? tmr_add - diff : tmr_add + diff;
200−
201202 ptp_qoriq->write(&regs->ctrl_regs->tmr_add, tmr_add);
202203
203204 return 0;
drivers/s390/block/dasd.c+0−1
@@ -63,7 +63,6 @@ void dasd_int_handler(struct ccw_device *, unsigned long, struct irb *); · 62 unmodified lines
6363 MODULE_AUTHOR("Holger Smolinski <Holger.Smolinski@de.ibm.com>");
6464 MODULE_DESCRIPTION("Linux on S/390 DASD device driver,"
6565 " Copyright IBM Corp. 2000");
66−MODULE_SUPPORTED_DEVICE("dasd");
6766 MODULE_LICENSE("GPL");
6867
6968 /*
drivers/sbus/char/display7seg.c+0−1
@@ -50,7 +50,6 @@ MODULE_PARM_DESC(sol_compat, · 49 unmodified lines
5050 MODULE_AUTHOR("Eric Brower <ebrower@usa.net>");
5151 MODULE_DESCRIPTION("7-Segment Display driver for Sun Microsystems CP1400/1500");
5252 MODULE_LICENSE("GPL");
53−MODULE_SUPPORTED_DEVICE("d7s");
5453
5554 struct d7s {
5655 void __iomem *regs;
drivers/scsi/hpsa.c+0−1
@@ -80,7 +80,6 @@ · 79 unmodified lines
8080 MODULE_AUTHOR("Hewlett-Packard Company");
8181 MODULE_DESCRIPTION("Driver for HP Smart Array Controller version " \
8282 HPSA_DRIVER_VERSION);
83−MODULE_SUPPORTED_DEVICE("HP Smart Array Controllers");
8483 MODULE_VERSION(HPSA_DRIVER_VERSION);
8584 MODULE_LICENSE("GPL");
8685 MODULE_ALIAS("cciss");
drivers/scsi/ibmvscsi/ibmvfc.c+56−13
@@ -2371,6 +2371,24 @@ static int ibmvfc_match_lun(struct ibmvfc_event *evt, void *device) · 2370 unmodified lines
23712371 return 0;
23722372 }
23732373
2374+/**
2375+ * ibmvfc_event_is_free - Check if event is free or not
2376+ * @evt: ibmvfc event struct
2377+ *
2378+ * Returns:
2379+ * true / false
2380+ **/
2381+static bool ibmvfc_event_is_free(struct ibmvfc_event *evt)
2382+{
2383+ struct ibmvfc_event *loop_evt;
2384+
2385+ list_for_each_entry(loop_evt, &evt->queue->free, queue_list)
2386+ if (loop_evt == evt)
2387+ return true;
2388+
2389+ return false;
2390+}
2391+
23742392 /**
23752393 * ibmvfc_wait_for_ops - Wait for ops to complete
23762394 * @vhost: ibmvfc host struct
@@ -2385,35 +2403,58 @@ static int ibmvfc_wait_for_ops(struct ibmvfc_host *vhost, void *device, · 8 unmodified lines
23852403 {
23862404 struct ibmvfc_event *evt;
23872405 DECLARE_COMPLETION_ONSTACK(comp);
2388− int wait;
2406+ int wait, i, q_index, q_size;
23892407 unsigned long flags;
23902408 signed long timeout = IBMVFC_ABORT_WAIT_TIMEOUT * HZ;
2409+ struct ibmvfc_queue *queues;
23912410
23922411 ENTER;
2412+ if (vhost->mq_enabled && vhost->using_channels) {
2413+ queues = vhost->scsi_scrqs.scrqs;
2414+ q_size = vhost->scsi_scrqs.active_queues;
2415+ } else {
2416+ queues = &vhost->crq;
2417+ q_size = 1;
2418+ }
2419+
23932420 do {
23942421 wait = 0;
2395− spin_lock_irqsave(&vhost->crq.l_lock, flags);
2396− list_for_each_entry(evt, &vhost->crq.sent, queue_list) {
2397− if (match(evt, device)) {
2398− evt->eh_comp = &comp;
2399− wait++;
2422+ spin_lock_irqsave(vhost->host->host_lock, flags);
2423+ for (q_index = 0; q_index < q_size; q_index++) {
2424+ spin_lock(&queues[q_index].l_lock);
2425+ for (i = 0; i < queues[q_index].evt_pool.size; i++) {
2426+ evt = &queues[q_index].evt_pool.events[i];
2427+ if (!ibmvfc_event_is_free(evt)) {
2428+ if (match(evt, device)) {
2429+ evt->eh_comp = &comp;
2430+ wait++;
2431+ }
2432+ }
24002433 }
2434+ spin_unlock(&queues[q_index].l_lock);
24012435 }
2402− spin_unlock_irqrestore(&vhost->crq.l_lock, flags);
2436+ spin_unlock_irqrestore(vhost->host->host_lock, flags);
24032437
24042438 if (wait) {
24052439 timeout = wait_for_completion_timeout(&comp, timeout);
24062440
24072441 if (!timeout) {
24082442 wait = 0;
2409− spin_lock_irqsave(&vhost->crq.l_lock, flags);
2410− list_for_each_entry(evt, &vhost->crq.sent, queue_list) {
2411− if (match(evt, device)) {
2412− evt->eh_comp = NULL;
2413− wait++;
2443+ spin_lock_irqsave(vhost->host->host_lock, flags);
2444+ for (q_index = 0; q_index < q_size; q_index++) {
2445+ spin_lock(&queues[q_index].l_lock);
2446+ for (i = 0; i < queues[q_index].evt_pool.size; i++) {
2447+ evt = &queues[q_index].evt_pool.events[i];
2448+ if (!ibmvfc_event_is_free(evt)) {
2449+ if (match(evt, device)) {
2450+ evt->eh_comp = NULL;
2451+ wait++;
2452+ }
2453+ }
24142454 }
2455+ spin_unlock(&queues[q_index].l_lock);
24152456 }
2416− spin_unlock_irqrestore(&vhost->crq.l_lock, flags);
2457+ spin_unlock_irqrestore(vhost->host->host_lock, flags);
24172458 if (wait)
24182459 dev_err(vhost->dev, "Timed out waiting for aborted commands\n");
24192460 LEAVE;
@@ -5784,6 +5825,8 @@ static void ibmvfc_free_mem(struct ibmvfc_host *vhost) · 3364 unmodified lines
57845825 vhost->disc_buf_dma);
57855826 dma_free_coherent(vhost->dev, sizeof(*vhost->login_buf),
57865827 vhost->login_buf, vhost->login_buf_dma);
5828+ dma_free_coherent(vhost->dev, sizeof(*vhost->channel_setup_buf),
5829+ vhost->channel_setup_buf, vhost->channel_setup_dma);
57875830 dma_pool_destroy(vhost->sg_pool);
57885831 ibmvfc_free_queue(vhost, async_q);
57895832 LEAVE;
drivers/scsi/lpfc/lpfc_debugfs.c+2−2
@@ -2421,7 +2421,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, · 2420 unmodified lines
24212421 memset(dstbuf, 0, 33);
24222422 size = (nbytes < 32) ? nbytes : 32;
24232423 if (copy_from_user(dstbuf, buf, size))
2424− return 0;
2424+ return -EFAULT;
24252425
24262426 if (dent == phba->debug_InjErrLBA) {
24272427 if ((dstbuf[0] == 'o') && (dstbuf[1] == 'f') &&
@@ -2430,7 +2430,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, · 2 unmodified lines
24302430 }
24312431
24322432 if ((tmp == 0) && (kstrtoull(dstbuf, 0, &tmp)))
2433− return 0;
2433+ return -EINVAL;
24342434
24352435 if (dent == phba->debug_writeGuard)
24362436 phba->lpfc_injerr_wgrd_cnt = (uint32_t)tmp;
drivers/scsi/mpt3sas/mpt3sas_base.c+6−2
@@ -7806,14 +7806,18 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) · 7805 unmodified lines
78067806 ioc->pend_os_device_add_sz++;
78077807 ioc->pend_os_device_add = kzalloc(ioc->pend_os_device_add_sz,
78087808 GFP_KERNEL);
7809− if (!ioc->pend_os_device_add)
7809+ if (!ioc->pend_os_device_add) {
7810+ r = -ENOMEM;
78107811 goto out_free_resources;
7812+ }
78117813
78127814 ioc->device_remove_in_progress_sz = ioc->pend_os_device_add_sz;
78137815 ioc->device_remove_in_progress =
78147816 kzalloc(ioc->device_remove_in_progress_sz, GFP_KERNEL);
7815− if (!ioc->device_remove_in_progress)
7817+ if (!ioc->device_remove_in_progress) {
7818+ r = -ENOMEM;
78167819 goto out_free_resources;
7820+ }
78177821
78187822 ioc->fwfault_debug = mpt3sas_fwfault_debug;
78197823
drivers/scsi/mpt3sas/mpt3sas_scsih.c+1−1
@@ -413,7 +413,7 @@ mpt3sas_get_port_by_id(struct MPT3SAS_ADAPTER *ioc, · 412 unmodified lines
413413 * And add this object to port_table_list.
414414 */
415415 if (!ioc->multipath_on_hba) {
416− port = kzalloc(sizeof(struct hba_port), GFP_KERNEL);
416+ port = kzalloc(sizeof(struct hba_port), GFP_ATOMIC);
417417 if (!port)
418418 return NULL;
419419
drivers/scsi/myrs.c+1−1
@@ -2273,12 +2273,12 @@ static void myrs_cleanup(struct myrs_hba *cs) · 2272 unmodified lines
22732273 if (cs->mmio_base) {
22742274 cs->disable_intr(cs);
22752275 iounmap(cs->mmio_base);
2276+ cs->mmio_base = NULL;
22762277 }
22772278 if (cs->irq)
22782279 free_irq(cs->irq, cs);
22792280 if (cs->io_addr)
22802281 release_region(cs->io_addr, 0x80);
2281− iounmap(cs->mmio_base);
22822282 pci_set_drvdata(pdev, NULL);
22832283 pci_disable_device(pdev);
22842284 scsi_host_put(cs->host);
drivers/scsi/pcmcia/nsp_cs.c+0−1
@@ -55,7 +55,6 @@ · 54 unmodified lines
5555
5656 MODULE_AUTHOR("YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>");
5757 MODULE_DESCRIPTION("WorkBit NinjaSCSI-3 / NinjaSCSI-32Bi(16bit) PCMCIA SCSI host adapter module");
58−MODULE_SUPPORTED_DEVICE("sd,sr,sg,st");
5958 MODULE_LICENSE("GPL");
6059
6160 #include "nsp_io.h"
drivers/scsi/qedi/qedi_main.c+1−0
@@ -1675,6 +1675,7 @@ static int qedi_alloc_global_queues(struct qedi_ctx *qedi) · 1674 unmodified lines
16751675 if (!qedi->global_queues[i]) {
16761676 QEDI_ERR(&qedi->dbg_ctx,
16771677 "Unable to allocation global queue %d.\n", i);
1678+ status = -ENOMEM;
16781679 goto mem_alloc_failure;
16791680 }
16801681
drivers/scsi/qla2xxx/qla_target.c+5−8
@@ -3222,8 +3222,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, · 3221 unmodified lines
32223222 if (!qpair->fw_started || (cmd->reset_count != qpair->chip_reset) ||
32233223 (cmd->sess && cmd->sess->deleted)) {
32243224 cmd->state = QLA_TGT_STATE_PROCESSED;
3225− res = 0;
3226− goto free;
3225+ return 0;
32273226 }
32283227
32293228 ql_dbg_qp(ql_dbg_tgt, qpair, 0xe018,
@@ -3234,8 +3233,9 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, · 4 unmodified lines
32343233
32353234 res = qlt_pre_xmit_response(cmd, &prm, xmit_type, scsi_status,
32363235 &full_req_cnt);
3237− if (unlikely(res != 0))
3238− goto free;
3236+ if (unlikely(res != 0)) {
3237+ return res;
3238+ }
32393239
32403240 spin_lock_irqsave(qpair->qp_lock_ptr, flags);
32413241
@@ -3255,8 +3255,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, · 13 unmodified lines
32553255 vha->flags.online, qla2x00_reset_active(vha),
32563256 cmd->reset_count, qpair->chip_reset);
32573257 spin_unlock_irqrestore(qpair->qp_lock_ptr, flags);
3258− res = 0;
3259− goto free;
3258+ return 0;
32603259 }
32613260
32623261 /* Does F/W have an IOCBs for this request */
@@ -3359,8 +3358,6 @@ out_unmap_unlock: · 96 unmodified lines
33593358 qlt_unmap_sg(vha, cmd);
33603359 spin_unlock_irqrestore(qpair->qp_lock_ptr, flags);
33613360
3362−free:
3363− vha->hw->tgt.tgt_ops->free_cmd(cmd);
33643361 return res;
33653362 }
33663363 EXPORT_SYMBOL(qlt_xmit_response);
drivers/scsi/qla2xxx/qla_target.h+1−1
@@ -116,7 +116,6 @@ · 115 unmodified lines
116116 (min(1270, ((ql) > 0) ? (QLA_TGT_DATASEGS_PER_CMD_24XX + \
117117 QLA_TGT_DATASEGS_PER_CONT_24XX*((ql) - 1)) : 0))
118118 #endif
119−#endif
120119
121120 #define GET_TARGET_ID(ha, iocb) ((HAS_EXTENDED_IDS(ha)) \
122121 ? le16_to_cpu((iocb)->u.isp2x.target.extended) \
@@ -244,6 +243,7 @@ struct ctio_to_2xxx { · 121 unmodified lines
244243 #ifndef CTIO_RET_TYPE
245244 #define CTIO_RET_TYPE 0x17 /* CTIO return entry */
246245 #define ATIO_TYPE7 0x06 /* Accept target I/O entry for 24xx */
246+#endif
247247
248248 struct fcp_hdr {
249249 uint8_t r_ctl;
drivers/scsi/qla2xxx/tcm_qla2xxx.c+0−4
@@ -644,7 +644,6 @@ static int tcm_qla2xxx_queue_data_in(struct se_cmd *se_cmd) · 643 unmodified lines
644644 {
645645 struct qla_tgt_cmd *cmd = container_of(se_cmd,
646646 struct qla_tgt_cmd, se_cmd);
647− struct scsi_qla_host *vha = cmd->vha;
648647
649648 if (cmd->aborted) {
650649 /* Cmd can loop during Q-full. tcm_qla2xxx_aborted_task
@@ -657,7 +656,6 @@ static int tcm_qla2xxx_queue_data_in(struct se_cmd *se_cmd) · 6 unmodified lines
657656 cmd->se_cmd.transport_state,
658657 cmd->se_cmd.t_state,
659658 cmd->se_cmd.se_cmd_flags);
660− vha->hw->tgt.tgt_ops->free_cmd(cmd);
661659 return 0;
662660 }
663661
@@ -685,7 +683,6 @@ static int tcm_qla2xxx_queue_status(struct se_cmd *se_cmd) · 21 unmodified lines
685683 {
686684 struct qla_tgt_cmd *cmd = container_of(se_cmd,
687685 struct qla_tgt_cmd, se_cmd);
688− struct scsi_qla_host *vha = cmd->vha;
689686 int xmit_type = QLA_TGT_XMIT_STATUS;
690687
691688 if (cmd->aborted) {
@@ -699,7 +696,6 @@ static int tcm_qla2xxx_queue_status(struct se_cmd *se_cmd) · 7 unmodified lines
699696 cmd, kref_read(&cmd->se_cmd.cmd_kref),
700697 cmd->se_cmd.transport_state, cmd->se_cmd.t_state,
701698 cmd->se_cmd.se_cmd_flags);
702− vha->hw->tgt.tgt_ops->free_cmd(cmd);
703699 return 0;
704700 }
705701 cmd->bufflen = se_cmd->data_length;
drivers/scsi/scsi_transport_iscsi.c+13−1
@@ -2475,6 +2475,7 @@ static void iscsi_if_stop_conn(struct iscsi_cls_conn *conn, int flag) · 2474 unmodified lines
24752475 */
24762476 mutex_lock(&conn_mutex);
24772477 conn->transport->stop_conn(conn, flag);
2478+ conn->state = ISCSI_CONN_DOWN;
24782479 mutex_unlock(&conn_mutex);
24792480
24802481 }
@@ -2901,6 +2902,13 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev) · 420 unmodified lines
29012902 default:
29022903 err = transport->set_param(conn, ev->u.set_param.param,
29032904 data, ev->u.set_param.len);
2905+ if ((conn->state == ISCSI_CONN_BOUND) ||
2906+ (conn->state == ISCSI_CONN_UP)) {
2907+ err = transport->set_param(conn, ev->u.set_param.param,
2908+ data, ev->u.set_param.len);
2909+ } else {
2910+ return -ENOTCONN;
2911+ }
29042912 }
29052913
29062914 return err;
@@ -2960,6 +2968,7 @@ static int iscsi_if_ep_disconnect(struct iscsi_transport *transport, · 53 unmodified lines
29602968 mutex_lock(&conn->ep_mutex);
29612969 conn->ep = NULL;
29622970 mutex_unlock(&conn->ep_mutex);
2971+ conn->state = ISCSI_CONN_DOWN;
29632972 }
29642973
29652974 transport->ep_disconnect(ep);
@@ -3727,6 +3736,8 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) · 761 unmodified lines
37273736 ev->r.retcode = transport->bind_conn(session, conn,
37283737 ev->u.b_conn.transport_eph,
37293738 ev->u.b_conn.is_leading);
3739+ if (!ev->r.retcode)
3740+ conn->state = ISCSI_CONN_BOUND;
37303741 mutex_unlock(&conn_mutex);
37313742
37323743 if (ev->r.retcode || !transport->ep_connect)
@@ -3966,7 +3977,8 @@ iscsi_conn_attr(local_ipaddr, ISCSI_PARAM_LOCAL_IPADDR); · 233 unmodified lines
39663977 static const char *const connection_state_names[] = {
39673978 [ISCSI_CONN_UP] = "up",
39683979 [ISCSI_CONN_DOWN] = "down",
3969− [ISCSI_CONN_FAILED] = "failed"
3980+ [ISCSI_CONN_FAILED] = "failed",
3981+ [ISCSI_CONN_BOUND] = "bound"
39703982 };
39713983
39723984 static ssize_t show_conn_state(struct device *dev,
drivers/scsi/sd_zbc.c+11−8
@@ -280,27 +280,28 @@ static int sd_zbc_update_wp_offset_cb(struct blk_zone *zone, unsigned int idx, · 279 unmodified lines
280280 static void sd_zbc_update_wp_offset_workfn(struct work_struct *work)
281281 {
282282 struct scsi_disk *sdkp;
283+ unsigned long flags;
283284 unsigned int zno;
284285 int ret;
285286
286287 sdkp = container_of(work, struct scsi_disk, zone_wp_offset_work);
287288
288− spin_lock_bh(&sdkp->zones_wp_offset_lock);
289+ spin_lock_irqsave(&sdkp->zones_wp_offset_lock, flags);
289290 for (zno = 0; zno < sdkp->nr_zones; zno++) {
290291 if (sdkp->zones_wp_offset[zno] != SD_ZBC_UPDATING_WP_OFST)
291292 continue;
292293
293− spin_unlock_bh(&sdkp->zones_wp_offset_lock);
294+ spin_unlock_irqrestore(&sdkp->zones_wp_offset_lock, flags);
294295 ret = sd_zbc_do_report_zones(sdkp, sdkp->zone_wp_update_buf,
295296 SD_BUF_SIZE,
296297 zno * sdkp->zone_blocks, true);
297− spin_lock_bh(&sdkp->zones_wp_offset_lock);
298+ spin_lock_irqsave(&sdkp->zones_wp_offset_lock, flags);
298299 if (!ret)
299300 sd_zbc_parse_report(sdkp, sdkp->zone_wp_update_buf + 64,
300301 zno, sd_zbc_update_wp_offset_cb,
301302 sdkp);
302303 }
303− spin_unlock_bh(&sdkp->zones_wp_offset_lock);
304+ spin_unlock_irqrestore(&sdkp->zones_wp_offset_lock, flags);
304305
305306 scsi_device_put(sdkp->device);
306307 }
@@ -324,6 +325,7 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba, · 17 unmodified lines
324325 struct request *rq = cmd->request;
325326 struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
326327 unsigned int wp_offset, zno = blk_rq_zone_no(rq);
328+ unsigned long flags;
327329 blk_status_t ret;
328330
329331 ret = sd_zbc_cmnd_checks(cmd);
@@ -337,7 +339,7 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba, · 7 unmodified lines
337339 if (!blk_req_zone_write_trylock(rq))
338340 return BLK_STS_ZONE_RESOURCE;
339341
340− spin_lock_bh(&sdkp->zones_wp_offset_lock);
342+ spin_lock_irqsave(&sdkp->zones_wp_offset_lock, flags);
341343 wp_offset = sdkp->zones_wp_offset[zno];
342344 switch (wp_offset) {
343345 case SD_ZBC_INVALID_WP_OFST:
@@ -366,7 +368,7 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba, · 22 unmodified lines
366368
367369 *lba += wp_offset;
368370 }
369− spin_unlock_bh(&sdkp->zones_wp_offset_lock);
371+ spin_unlock_irqrestore(&sdkp->zones_wp_offset_lock, flags);
370372 if (ret)
371373 blk_req_zone_write_unlock(rq);
372374 return ret;
@@ -445,6 +447,7 @@ static unsigned int sd_zbc_zone_wp_update(struct scsi_cmnd *cmd, · 72 unmodified lines
445447 struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
446448 unsigned int zno = blk_rq_zone_no(rq);
447449 enum req_opf op = req_op(rq);
450+ unsigned long flags;
448451
449452 /*
450453 * If we got an error for a command that needs updating the write
@@ -452,7 +455,7 @@ static unsigned int sd_zbc_zone_wp_update(struct scsi_cmnd *cmd, · 1 unmodified line
452455 * invalid to force an update from disk the next time a zone append
453456 * command is issued.
454457 */
455− spin_lock_bh(&sdkp->zones_wp_offset_lock);
458+ spin_lock_irqsave(&sdkp->zones_wp_offset_lock, flags);
456459
457460 if (result && op != REQ_OP_ZONE_RESET_ALL) {
458461 if (op == REQ_OP_ZONE_APPEND) {
@@ -496,7 +499,7 @@ static unsigned int sd_zbc_zone_wp_update(struct scsi_cmnd *cmd, · 37 unmodified lines
496499 }
497500
498501 unlock_wp_offset:
499− spin_unlock_bh(&sdkp->zones_wp_offset_lock);
502+ spin_unlock_irqrestore(&sdkp->zones_wp_offset_lock, flags);
500503
501504 return good_bytes;
502505 }
drivers/scsi/smartpqi/smartpqi_init.c+0−1
@@ -48,7 +48,6 @@ · 47 unmodified lines
4848 MODULE_AUTHOR("Microsemi");
4949 MODULE_DESCRIPTION("Driver for Microsemi Smart Family Controller version "
5050 DRIVER_VERSION);
51−MODULE_SUPPORTED_DEVICE("Microsemi Smart Family Controllers");
5251 MODULE_VERSION(DRIVER_VERSION);
5352 MODULE_LICENSE("GPL");
5453
drivers/scsi/st.c+1−1
@@ -1269,8 +1269,8 @@ static int st_open(struct inode *inode, struct file *filp) · 1268 unmodified lines
12691269 spin_lock(&st_use_lock);
12701270 if (STp->in_use) {
12711271 spin_unlock(&st_use_lock);
1272− scsi_tape_put(STp);
12731272 DEBC_printk(STp, "Device already in use.\n");
1273+ scsi_tape_put(STp);
12741274 return (-EBUSY);
12751275 }
12761276
drivers/scsi/ufs/ufs-mediatek.c+1−1
@@ -911,7 +911,7 @@ static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm) · 910 unmodified lines
911911 if (!hba->vreg_info.vccq2 || !hba->vreg_info.vcc)
912912 return;
913913
914− if (lpm & !hba->vreg_info.vcc->enabled)
914+ if (lpm && !hba->vreg_info.vcc->enabled)
915915 regulator_set_mode(hba->vreg_info.vccq2->reg,
916916 REGULATOR_MODE_IDLE);
917917 else if (!lpm)
drivers/sh/maple/maple.c+0−1
@@ -30,7 +30,6 @@ · 29 unmodified lines
3030 MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk>");
3131 MODULE_DESCRIPTION("Maple bus driver for Dreamcast");
3232 MODULE_LICENSE("GPL v2");
33−MODULE_SUPPORTED_DEVICE("{{SEGA, Dreamcast/Maple}}");
3433
3534 static void maple_dma_handler(struct work_struct *work);
3635 static void maple_vblank_handler(struct work_struct *work);
drivers/soc/litex/litex_soc_ctrl.c+0−1
@@ -13,7 +13,6 @@ · 12 unmodified lines
1313 #include <linux/platform_device.h>
1414 #include <linux/printk.h>
1515 #include <linux/module.h>
16−#include <linux/errno.h>
1716 #include <linux/io.h>
1817 #include <linux/reboot.h>
1918
drivers/soc/qcom/qcom-geni-se.c+0−74
@@ -3,7 +3,6 @@ · 2 unmodified lines
33
44 #include <linux/acpi.h>
55 #include <linux/clk.h>
6−#include <linux/console.h>
76 #include <linux/slab.h>
87 #include <linux/dma-mapping.h>
98 #include <linux/io.h>
@@ -92,14 +91,11 @@ struct geni_wrapper { · 82 unmodified lines
9291 struct device *dev;
9392 void __iomem *base;
9493 struct clk_bulk_data ahb_clks[NUM_AHB_CLKS];
95− struct geni_icc_path to_core;
9694 };
9795
9896 static const char * const icc_path_names[] = {"qup-core", "qup-config",
9997 "qup-memory"};
10098
101−static struct geni_wrapper *earlycon_wrapper;
102−
10399 #define QUP_HW_VER_REG 0x4
104100
105101 /* Common SE registers */
@@ -843,44 +839,11 @@ int geni_icc_disable(struct geni_se *se) · 737 unmodified lines
843839 }
844840 EXPORT_SYMBOL(geni_icc_disable);
845841
846−void geni_remove_earlycon_icc_vote(void)
847−{
848− struct platform_device *pdev;
849− struct geni_wrapper *wrapper;
850− struct device_node *parent;
851− struct device_node *child;
852−
853− if (!earlycon_wrapper)
854− return;
855−
856− wrapper = earlycon_wrapper;
857− parent = of_get_next_parent(wrapper->dev->of_node);
858− for_each_child_of_node(parent, child) {
859− if (!of_device_is_compatible(child, "qcom,geni-se-qup"))
860− continue;
861−
862− pdev = of_find_device_by_node(child);
863− if (!pdev)
864− continue;
865−
866− wrapper = platform_get_drvdata(pdev);
867− icc_put(wrapper->to_core.path);
868− wrapper->to_core.path = NULL;
869−
870− }
871− of_node_put(parent);
872−
873− earlycon_wrapper = NULL;
874−}
875−EXPORT_SYMBOL(geni_remove_earlycon_icc_vote);
876−
877842 static int geni_se_probe(struct platform_device *pdev)
878843 {
879844 struct device *dev = &pdev->dev;
880845 struct resource *res;
881846 struct geni_wrapper *wrapper;
882− struct console __maybe_unused *bcon;
883− bool __maybe_unused has_earlycon = false;
884847 int ret;
885848
886849 wrapper = devm_kzalloc(dev, sizeof(*wrapper), GFP_KERNEL);
@@ -903,43 +866,6 @@ static int geni_se_probe(struct platform_device *pdev) · 16 unmodified lines
903866 }
904867 }
905868
906−#ifdef CONFIG_SERIAL_EARLYCON
907− for_each_console(bcon) {
908− if (!strcmp(bcon->name, "qcom_geni")) {
909− has_earlycon = true;
910− break;
911− }
912− }
913− if (!has_earlycon)
914− goto exit;
915−
916− wrapper->to_core.path = devm_of_icc_get(dev, "qup-core");
917− if (IS_ERR(wrapper->to_core.path))
918− return PTR_ERR(wrapper->to_core.path);
919− /*
920− * Put minmal BW request on core clocks on behalf of early console.
921− * The vote will be removed earlycon exit function.
922− *
923− * Note: We are putting vote on each QUP wrapper instead only to which
924− * earlycon is connected because QUP core clock of different wrapper
925− * share same voltage domain. If core1 is put to 0, then core2 will
926− * also run at 0, if not voted. Default ICC vote will be removed ASA
927− * we touch any of the core clock.
928− * core1 = core2 = max(core1, core2)
929− */
930− ret = icc_set_bw(wrapper->to_core.path, GENI_DEFAULT_BW,
931− GENI_DEFAULT_BW);
932− if (ret) {
933− dev_err(&pdev->dev, "%s: ICC BW voting failed for core: %d\n",
934− __func__, ret);
935− return ret;
936− }
937−
938− if (of_get_compatible_child(pdev->dev.of_node, "qcom,geni-debug-uart"))
939− earlycon_wrapper = wrapper;
940− of_node_put(pdev->dev.of_node);
941−exit:
942−#endif
943869 dev_set_drvdata(dev, wrapper);
944870 dev_dbg(dev, "GENI SE Driver probed\n");
945871 return devm_of_platform_populate(dev);
drivers/soc/ti/omap_prm.c+6−2
@@ -332,7 +332,7 @@ static const struct omap_prm_data dra7_prm_data[] = { · 331 unmodified lines
332332 {
333333 .name = "l3init", .base = 0x4ae07300,
334334 .pwrstctrl = 0x0, .pwrstst = 0x4, .dmap = &omap_prm_alwon,
335− .rstctrl = 0x10, .rstst = 0x14, .rstmap = rst_map_012,
335+ .rstctrl = 0x10, .rstst = 0x14, .rstmap = rst_map_01,
336336 .clkdm_name = "pcie"
337337 },
338338 {
@@ -830,8 +830,12 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev, · 491 unmodified lines
830830 reset->prm->data->name, id);
831831
832832 exit:
833− if (reset->clkdm)
833+ if (reset->clkdm) {
834+ /* At least dra7 iva needs a delay before clkdm idle */
835+ if (has_rstst)
836+ udelay(1);
834837 pdata->clkdm_allow_idle(reset->clkdm);
838+ }
835839
836840 return ret;
837841 }
drivers/spi/spi-cadence-quadspi.c+1−0
@@ -1433,6 +1433,7 @@ static int cqspi_probe(struct platform_device *pdev) · 1432 unmodified lines
14331433 cqspi = spi_master_get_devdata(master);
14341434
14351435 cqspi->pdev = pdev;
1436+ platform_set_drvdata(pdev, cqspi);
14361437
14371438 /* Obtain configuration from OF. */
14381439 ret = cqspi_of_get_pdata(cqspi);
drivers/staging/comedi/drivers/cb_pcidas.c+1−1
@@ -1281,7 +1281,7 @@ static int cb_pcidas_auto_attach(struct comedi_device *dev, · 1280 unmodified lines
12811281 devpriv->amcc + AMCC_OP_REG_INTCSR);
12821282
12831283 ret = request_irq(pcidev->irq, cb_pcidas_interrupt, IRQF_SHARED,
1284− dev->board_name, dev);
1284+ "cb_pcidas", dev);
12851285 if (ret) {
12861286 dev_dbg(dev->class_dev, "unable to allocate irq %d\n",
12871287 pcidev->irq);
drivers/staging/comedi/drivers/cb_pcidas64.c+1−1
@@ -4035,7 +4035,7 @@ static int auto_attach(struct comedi_device *dev, · 4034 unmodified lines
40354035 init_stc_registers(dev);
40364036
40374037 retval = request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED,
4038− dev->board_name, dev);
4038+ "cb_pcidas64", dev);
40394039 if (retval) {
40404040 dev_dbg(dev->class_dev, "unable to allocate irq %u\n",
40414041 pcidev->irq);
drivers/staging/comedi/drivers/vmk80xx.c+0−1
@@ -877,5 +877,4 @@ module_comedi_usb_driver(vmk80xx_driver, vmk80xx_usb_driver); · 876 unmodified lines
877877
878878 MODULE_AUTHOR("Manuel Gebele <forensixs@gmx.de>");
879879 MODULE_DESCRIPTION("Velleman USB Board Low-Level Driver");
880−MODULE_SUPPORTED_DEVICE("K8055/K8061 aka VM110/VM140");
881880 MODULE_LICENSE("GPL");
drivers/staging/rtl8192e/rtllib.h+1−1
@@ -1105,7 +1105,7 @@ struct rtllib_network { · 1104 unmodified lines
11051105 bool bWithAironetIE;
11061106 bool bCkipSupported;
11071107 bool bCcxRmEnable;
1108− u16 CcxRmState[2];
1108+ u8 CcxRmState[2];
11091109 bool bMBssidValid;
11101110 u8 MBssidMask;
11111111 u8 MBssid[ETH_ALEN];
drivers/staging/rtl8192e/rtllib_rx.c+1−1
@@ -1967,7 +1967,7 @@ static void rtllib_parse_mife_generic(struct rtllib_device *ieee, · 1966 unmodified lines
19671967 info_element->data[2] == 0x96 &&
19681968 info_element->data[3] == 0x01) {
19691969 if (info_element->len == 6) {
1970− memcpy(network->CcxRmState, &info_element[4], 2);
1970+ memcpy(network->CcxRmState, &info_element->data[4], 2);
19711971 if (network->CcxRmState[0] != 0)
19721972 network->bCcxRmEnable = true;
19731973 else
drivers/staging/vt6655/rxtx.h+2−2
@@ -150,7 +150,7 @@ struct vnt_cts { · 149 unmodified lines
150150 u16 reserved;
151151 struct ieee80211_cts data;
152152 u16 reserved2;
153−} __packed;
153+} __packed __aligned(2);
154154
155155 struct vnt_cts_fb {
156156 struct vnt_phy_field b;
@@ -160,7 +160,7 @@ struct vnt_cts_fb { · 3 unmodified lines
160160 __le16 cts_duration_ba_f1;
161161 struct ieee80211_cts data;
162162 u16 reserved2;
163−} __packed;
163+} __packed __aligned(2);
164164
165165 struct vnt_tx_fifo_head {
166166 u8 tx_key[WLAN_KEY_LEN_CCMP];
drivers/target/target_core_pscsi.c+8−1
@@ -882,7 +882,6 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents, · 881 unmodified lines
882882 if (!bio) {
883883 new_bio:
884884 nr_vecs = bio_max_segs(nr_pages);
885− nr_pages -= nr_vecs;
886885 /*
887886 * Calls bio_kmalloc() and sets bio->bi_end_io()
888887 */
@@ -939,6 +938,14 @@ new_bio: · 50 unmodified lines
939938
940939 return 0;
941940 fail:
941+ if (bio)
942+ bio_put(bio);
943+ while (req->bio) {
944+ bio = req->bio;
945+ req->bio = bio->bi_next;
946+ bio_put(bio);
947+ }
948+ req->biotail = NULL;
942949 return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
943950 }
944951
drivers/tee/optee/core.c+0−1
@@ -747,7 +747,6 @@ module_platform_driver(optee_driver); · 746 unmodified lines
747747
748748 MODULE_AUTHOR("Linaro");
749749 MODULE_DESCRIPTION("OP-TEE driver");
750−MODULE_SUPPORTED_DEVICE("");
751750 MODULE_VERSION("1.0");
752751 MODULE_LICENSE("GPL v2");
753752 MODULE_ALIAS("platform:optee");
drivers/thermal/thermal_sysfs.c+3−0
@@ -674,6 +674,9 @@ void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev, · 673 unmodified lines
674674 {
675675 struct cooling_dev_stats *stats = cdev->stats;
676676
677+ if (!stats)
678+ return;
679+
677680 spin_lock(&stats->lock);
678681
679682 if (stats->state == new_state)
drivers/thunderbolt/switch.c+8−10
@@ -768,12 +768,6 @@ static int tb_init_port(struct tb_port *port) · 767 unmodified lines
768768
769769 tb_dump_port(port->sw->tb, &port->config);
770770
771− /* Control port does not need HopID allocation */
772− if (port->port) {
773− ida_init(&port->in_hopids);
774− ida_init(&port->out_hopids);
775− }
776−
777771 INIT_LIST_HEAD(&port->list);
778772 return 0;
779773
@@ -1842,10 +1836,8 @@ static void tb_switch_release(struct device *dev) · 1062 unmodified lines
18421836 dma_port_free(sw->dma_port);
18431837
18441838 tb_switch_for_each_port(sw, port) {
1845− if (!port->disabled) {
1846− ida_destroy(&port->in_hopids);
1847− ida_destroy(&port->out_hopids);
1848− }
1839+ ida_destroy(&port->in_hopids);
1840+ ida_destroy(&port->out_hopids);
18491841 }
18501842
18511843 kfree(sw->uuid);
@@ -2025,6 +2017,12 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent, · 173 unmodified lines
20252017 /* minimum setup for tb_find_cap and tb_drom_read to work */
20262018 sw->ports[i].sw = sw;
20272019 sw->ports[i].port = i;
2020+
2021+ /* Control port does not need HopID allocation */
2022+ if (i) {
2023+ ida_init(&sw->ports[i].in_hopids);
2024+ ida_init(&sw->ports[i].out_hopids);
2025+ }
20282026 }
20292027
20302028 ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);
drivers/thunderbolt/tb.c+4−0
@@ -138,6 +138,10 @@ static void tb_discover_tunnels(struct tb_switch *sw) · 137 unmodified lines
138138 parent->boot = true;
139139 parent = tb_switch_parent(parent);
140140 }
141+ } else if (tb_tunnel_is_dp(tunnel)) {
142+ /* Keep the domain from powering down */
143+ pm_runtime_get_sync(&tunnel->src_port->sw->dev);
144+ pm_runtime_get_sync(&tunnel->dst_port->sw->dev);
141145 }
142146
143147 list_add_tail(&tunnel->list, &tcm->tunnel_list);
drivers/tty/serial/icom.c+0−2
@@ -1639,8 +1639,6 @@ module_exit(icom_exit); · 1638 unmodified lines
16391639
16401640 MODULE_AUTHOR("Michael Anderson <mjanders@us.ibm.com>");
16411641 MODULE_DESCRIPTION("IBM iSeries Serial IOA driver");
1642−MODULE_SUPPORTED_DEVICE
1643− ("IBM iSeries 2745, 2771, 2772, 2742, 2793 and 2805 Communications adapters");
16441642 MODULE_LICENSE("GPL");
16451643 MODULE_FIRMWARE("icom_call_setup.bin");
16461644 MODULE_FIRMWARE("icom_res_dce.bin");
drivers/tty/serial/jsm/jsm_driver.c+0−1
@@ -19,7 +19,6 @@ · 18 unmodified lines
1919 MODULE_AUTHOR("Digi International, https://www.digi.com");
2020 MODULE_DESCRIPTION("Driver for the Digi International Neo and Classic PCI based product line");
2121 MODULE_LICENSE("GPL");
22−MODULE_SUPPORTED_DEVICE("jsm");
2322
2423 #define JSM_DRIVER_NAME "jsm"
2524 #define NR_PORTS 32
drivers/tty/serial/qcom_geni_serial.c+0−7
@@ -1177,12 +1177,6 @@ static inline void qcom_geni_serial_enable_early_read(struct geni_se *se, · 1176 unmodified lines
11771177 struct console *con) { }
11781178 #endif
11791179
1180−static int qcom_geni_serial_earlycon_exit(struct console *con)
1181−{
1182− geni_remove_earlycon_icc_vote();
1183− return 0;
1184−}
1185−
11861180 static struct qcom_geni_private_data earlycon_private_data;
11871181
11881182 static int __init qcom_geni_serial_earlycon_setup(struct earlycon_device *dev,
@@ -1233,7 +1227,6 @@ static int __init qcom_geni_serial_earlycon_setup(struct earlycon_device *dev, · 44 unmodified lines
12331227 writel(stop_bit_len, uport->membase + SE_UART_TX_STOP_BIT_LEN);
12341228
12351229 dev->con->write = qcom_geni_serial_earlycon_write;
1236− dev->con->exit = qcom_geni_serial_earlycon_exit;
12371230 dev->con->setup = NULL;
12381231 qcom_geni_serial_enable_early_read(&se, dev->con);
12391232
drivers/usb/cdns3/cdnsp-ring.c+4−1
@@ -2197,7 +2197,10 @@ static int cdnsp_queue_isoc_tx(struct cdnsp_device *pdev, · 2196 unmodified lines
21972197 * inverted in the first TDs isoc TRB.
21982198 */
21992199 field = TRB_TYPE(TRB_ISOC) | TRB_TLBPC(last_burst_pkt) |
2200− start_cycle ? 0 : 1 | TRB_SIA | TRB_TBC(burst_count);
2200+ TRB_SIA | TRB_TBC(burst_count);
2201+
2202+ if (!start_cycle)
2203+ field |= TRB_CYCLE;
22012204
22022205 /* Fill the rest of the TRB fields, and remaining normal TRBs. */
22032206 for (i = 0; i < trbs_per_td; i++) {
drivers/usb/class/cdc-acm.c+70−50
@@ -147,17 +147,29 @@ static inline int acm_set_control(struct acm *acm, int control) · 146 unmodified lines
147147 #define acm_send_break(acm, ms) \
148148 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
149149
150−static void acm_kill_urbs(struct acm *acm)
150+static void acm_poison_urbs(struct acm *acm)
151151 {
152152 int i;
153153
154− usb_kill_urb(acm->ctrlurb);
154+ usb_poison_urb(acm->ctrlurb);
155155 for (i = 0; i < ACM_NW; i++)
156− usb_kill_urb(acm->wb[i].urb);
156+ usb_poison_urb(acm->wb[i].urb);
157157 for (i = 0; i < acm->rx_buflimit; i++)
158− usb_kill_urb(acm->read_urbs[i]);
158+ usb_poison_urb(acm->read_urbs[i]);
159+}
160+
161+static void acm_unpoison_urbs(struct acm *acm)
162+{
163+ int i;
164+
165+ for (i = 0; i < acm->rx_buflimit; i++)
166+ usb_unpoison_urb(acm->read_urbs[i]);
167+ for (i = 0; i < ACM_NW; i++)
168+ usb_unpoison_urb(acm->wb[i].urb);
169+ usb_unpoison_urb(acm->ctrlurb);
159170 }
160171
172+
161173 /*
162174 * Write buffer management.
163175 * All of these assume proper locks taken by the caller.
@@ -226,9 +238,10 @@ static int acm_start_wb(struct acm *acm, struct acm_wb *wb) · 62 unmodified lines
226238
227239 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
228240 if (rc < 0) {
229− dev_err(&acm->data->dev,
230− "%s - usb_submit_urb(write bulk) failed: %d\n",
231− __func__, rc);
241+ if (rc != -EPERM)
242+ dev_err(&acm->data->dev,
243+ "%s - usb_submit_urb(write bulk) failed: %d\n",
244+ __func__, rc);
232245 acm_write_done(acm, wb);
233246 }
234247 return rc;
@@ -313,8 +326,10 @@ static void acm_process_notification(struct acm *acm, unsigned char *buf) · 78 unmodified lines
313326 acm->iocount.dsr++;
314327 if (difference & ACM_CTRL_DCD)
315328 acm->iocount.dcd++;
316− if (newctrl & ACM_CTRL_BRK)
329+ if (newctrl & ACM_CTRL_BRK) {
317330 acm->iocount.brk++;
331+ tty_insert_flip_char(&acm->port, 0, TTY_BREAK);
332+ }
318333 if (newctrl & ACM_CTRL_RI)
319334 acm->iocount.rng++;
320335 if (newctrl & ACM_CTRL_FRAMING)
@@ -480,11 +495,6 @@ static void acm_read_bulk_callback(struct urb *urb) · 159 unmodified lines
480495 dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
481496 rb->index, urb->actual_length, status);
482497
483− if (!acm->dev) {
484− dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
485− return;
486− }
487−
488498 switch (status) {
489499 case 0:
490500 usb_mark_last_busy(acm->dev);
@@ -649,7 +659,8 @@ static void acm_port_dtr_rts(struct tty_port *port, int raise) · 158 unmodified lines
649659
650660 res = acm_set_control(acm, val);
651661 if (res && (acm->ctrl_caps & USB_CDC_CAP_LINE))
652− dev_err(&acm->control->dev, "failed to set dtr/rts\n");
662+ /* This is broken in too many devices to spam the logs */
663+ dev_dbg(&acm->control->dev, "failed to set dtr/rts\n");
653664 }
654665
655666 static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
@@ -731,6 +742,7 @@ static void acm_port_shutdown(struct tty_port *port) · 75 unmodified lines
731742 * Need to grab write_lock to prevent race with resume, but no need to
732743 * hold it due to the tty-port initialised flag.
733744 */
745+ acm_poison_urbs(acm);
734746 spin_lock_irq(&acm->write_lock);
735747 spin_unlock_irq(&acm->write_lock);
736748
@@ -747,7 +759,8 @@ static void acm_port_shutdown(struct tty_port *port) · 10 unmodified lines
747759 usb_autopm_put_interface_async(acm->control);
748760 }
749761
750− acm_kill_urbs(acm);
762+ acm_unpoison_urbs(acm);
763+
751764 }
752765
753766 static void acm_tty_cleanup(struct tty_struct *tty)
@@ -1296,13 +1309,6 @@ skip_normal_probe: · 542 unmodified lines
12961309 if (!combined_interfaces && intf != control_interface)
12971310 return -ENODEV;
12981311
1299− if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1300− /* valid in this context */
1301− dev_dbg(&intf->dev, "The data interface isn't available\n");
1302− return -EBUSY;
1303− }
1304−
1305−
13061312 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
13071313 control_interface->cur_altsetting->desc.bNumEndpoints == 0)
13081314 return -EINVAL;
@@ -1323,8 +1329,8 @@ made_compressed_probe: · 14 unmodified lines
13231329 dev_dbg(&intf->dev, "interfaces are valid\n");
13241330
13251331 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1326− if (acm == NULL)
1327− goto alloc_fail;
1332+ if (!acm)
1333+ return -ENOMEM;
13281334
13291335 tty_port_init(&acm->port);
13301336 acm->port.ops = &acm_port_ops;
@@ -1341,7 +1347,7 @@ made_compressed_probe: · 10 unmodified lines
13411347
13421348 minor = acm_alloc_minor(acm);
13431349 if (minor < 0)
1344− goto alloc_fail1;
1350+ goto err_put_port;
13451351
13461352 acm->minor = minor;
13471353 acm->dev = usb_dev;
@@ -1372,15 +1378,15 @@ made_compressed_probe: · 24 unmodified lines
13721378
13731379 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
13741380 if (!buf)
1375− goto alloc_fail1;
1381+ goto err_put_port;
13761382 acm->ctrl_buffer = buf;
13771383
13781384 if (acm_write_buffers_alloc(acm) < 0)
1379− goto alloc_fail2;
1385+ goto err_free_ctrl_buffer;
13801386
13811387 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
13821388 if (!acm->ctrlurb)
1383− goto alloc_fail3;
1389+ goto err_free_write_buffers;
13841390
13851391 for (i = 0; i < num_rx_buf; i++) {
13861392 struct acm_rb *rb = &(acm->read_buffers[i]);
@@ -1389,13 +1395,13 @@ made_compressed_probe: · 2 unmodified lines
13891395 rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
13901396 &rb->dma);
13911397 if (!rb->base)
1392− goto alloc_fail4;
1398+ goto err_free_read_urbs;
13931399 rb->index = i;
13941400 rb->instance = acm;
13951401
13961402 urb = usb_alloc_urb(0, GFP_KERNEL);
13971403 if (!urb)
1398− goto alloc_fail4;
1404+ goto err_free_read_urbs;
13991405
14001406 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
14011407 urb->transfer_dma = rb->dma;
@@ -1416,8 +1422,8 @@ made_compressed_probe: · 14 unmodified lines
14161422 struct acm_wb *snd = &(acm->wb[i]);
14171423
14181424 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1419− if (snd->urb == NULL)
1420− goto alloc_fail5;
1425+ if (!snd->urb)
1426+ goto err_free_write_urbs;
14211427
14221428 if (usb_endpoint_xfer_int(epwrite))
14231429 usb_fill_int_urb(snd->urb, usb_dev, acm->out,
@@ -1435,7 +1441,7 @@ made_compressed_probe: · 11 unmodified lines
14351441
14361442 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
14371443 if (i < 0)
1438− goto alloc_fail5;
1444+ goto err_free_write_urbs;
14391445
14401446 if (h.usb_cdc_country_functional_desc) { /* export the country data */
14411447 struct usb_cdc_country_functional_desc * cfd =
@@ -1480,20 +1486,21 @@ skip_countries: · 38 unmodified lines
14801486 acm->nb_index = 0;
14811487 acm->nb_size = 0;
14821488
1483− dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1484−
14851489 acm->line.dwDTERate = cpu_to_le32(9600);
14861490 acm->line.bDataBits = 8;
14871491 acm_set_line(acm, &acm->line);
14881492
1489− usb_driver_claim_interface(&acm_driver, data_interface, acm);
1490− usb_set_intfdata(data_interface, acm);
1493+ if (!acm->combined_interfaces) {
1494+ rv = usb_driver_claim_interface(&acm_driver, data_interface, acm);
1495+ if (rv)
1496+ goto err_remove_files;
1497+ }
14911498
14921499 tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,
14931500 &control_interface->dev);
14941501 if (IS_ERR(tty_dev)) {
14951502 rv = PTR_ERR(tty_dev);
1496− goto alloc_fail6;
1503+ goto err_release_data_interface;
14971504 }
14981505
14991506 if (quirks & CLEAR_HALT_CONDITIONS) {
@@ -1501,32 +1508,39 @@ skip_countries: · 1 unmodified line
15011508 usb_clear_halt(usb_dev, acm->out);
15021509 }
15031510
1511+ dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1512+
15041513 return 0;
1505−alloc_fail6:
1514+
1515+err_release_data_interface:
1516+ if (!acm->combined_interfaces) {
1517+ /* Clear driver data so that disconnect() returns early. */
1518+ usb_set_intfdata(data_interface, NULL);
1519+ usb_driver_release_interface(&acm_driver, data_interface);
1520+ }
1521+err_remove_files:
15061522 if (acm->country_codes) {
15071523 device_remove_file(&acm->control->dev,
15081524 &dev_attr_wCountryCodes);
15091525 device_remove_file(&acm->control->dev,
15101526 &dev_attr_iCountryCodeRelDate);
1511− kfree(acm->country_codes);
15121527 }
15131528 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1514−alloc_fail5:
1515− usb_set_intfdata(intf, NULL);
1529+err_free_write_urbs:
15161530 for (i = 0; i < ACM_NW; i++)
15171531 usb_free_urb(acm->wb[i].urb);
1518−alloc_fail4:
1532+err_free_read_urbs:
15191533 for (i = 0; i < num_rx_buf; i++)
15201534 usb_free_urb(acm->read_urbs[i]);
15211535 acm_read_buffers_free(acm);
15221536 usb_free_urb(acm->ctrlurb);
1523−alloc_fail3:
1537+err_free_write_buffers:
15241538 acm_write_buffers_free(acm);
1525−alloc_fail2:
1539+err_free_ctrl_buffer:
15261540 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1527−alloc_fail1:
1541+err_put_port:
15281542 tty_port_put(&acm->port);
1529−alloc_fail:
1543+
15301544 return rv;
15311545 }
15321546
@@ -1540,8 +1554,14 @@ static void acm_disconnect(struct usb_interface *intf) · 7 unmodified lines
15401554 if (!acm)
15411555 return;
15421556
1543− mutex_lock(&acm->mutex);
15441557 acm->disconnected = true;
1558+ /*
1559+ * there is a circular dependency. acm_softint() can resubmit
1560+ * the URBs in error handling so we need to block any
1561+ * submission right away
1562+ */
1563+ acm_poison_urbs(acm);
1564+ mutex_lock(&acm->mutex);
15451565 if (acm->country_codes) {
15461566 device_remove_file(&acm->control->dev,
15471567 &dev_attr_wCountryCodes);
@@ -1560,7 +1580,6 @@ static void acm_disconnect(struct usb_interface *intf) · 12 unmodified lines
15601580 tty_kref_put(tty);
15611581 }
15621582
1563− acm_kill_urbs(acm);
15641583 cancel_delayed_work_sync(&acm->dwork);
15651584
15661585 tty_unregister_device(acm_tty_driver, acm->minor);
@@ -1602,7 +1621,7 @@ static int acm_suspend(struct usb_interface *intf, pm_message_t message) · 35 unmodified lines
16021621 if (cnt)
16031622 return 0;
16041623
1605− acm_kill_urbs(acm);
1624+ acm_poison_urbs(acm);
16061625 cancel_delayed_work_sync(&acm->dwork);
16071626 acm->urbs_in_error_delay = 0;
16081627
@@ -1615,6 +1634,7 @@ static int acm_resume(struct usb_interface *intf) · 6 unmodified lines
16151634 struct urb *urb;
16161635 int rv = 0;
16171636
1637+ acm_unpoison_urbs(acm);
16181638 spin_lock_irq(&acm->write_lock);
16191639
16201640 if (--acm->susp_count)
drivers/usb/core/quirks.c+4−0
@@ -498,6 +498,10 @@ static const struct usb_device_id usb_quirk_list[] = { · 497 unmodified lines
498498 /* DJI CineSSD */
499499 { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
500500
501+ /* Fibocom L850-GL LTE Modem */
502+ { USB_DEVICE(0x2cb7, 0x0007), .driver_info =
503+ USB_QUIRK_IGNORE_REMOTE_WAKEUP },
504+
501505 /* INTEL VALUE SSD */
502506 { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
503507
drivers/usb/dwc2/hcd.c+3−2
@@ -4322,7 +4322,8 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd) · 4321 unmodified lines
43224322 if (hsotg->op_state == OTG_STATE_B_PERIPHERAL)
43234323 goto unlock;
43244324
4325− if (hsotg->params.power_down > DWC2_POWER_DOWN_PARAM_PARTIAL)
4325+ if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL ||
4326+ hsotg->flags.b.port_connect_status == 0)
43264327 goto skip_power_saving;
43274328
43284329 /*
@@ -5398,7 +5399,7 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) · 1069 unmodified lines
53985399 dwc2_writel(hsotg, hprt0, HPRT0);
53995400
54005401 /* Wait for the HPRT0.PrtSusp register field to be set */
5401− if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000))
5402+ if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 5000))
54025403 dev_warn(hsotg->dev, "Suspend wasn't generated\n");
54035404
54045405 /*
drivers/usb/dwc3/dwc3-pci.c+2−0
@@ -120,6 +120,8 @@ static const struct property_entry dwc3_pci_intel_properties[] = { · 119 unmodified lines
120120 static const struct property_entry dwc3_pci_mrfld_properties[] = {
121121 PROPERTY_ENTRY_STRING("dr_mode", "otg"),
122122 PROPERTY_ENTRY_STRING("linux,extcon-name", "mrfld_bcove_pwrsrc"),
123+ PROPERTY_ENTRY_BOOL("snps,dis_u3_susphy_quirk"),
124+ PROPERTY_ENTRY_BOOL("snps,dis_u2_susphy_quirk"),
123125 PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
124126 {}
125127 };
drivers/usb/dwc3/dwc3-qcom.c+3−0
@@ -244,6 +244,9 @@ static int dwc3_qcom_interconnect_init(struct dwc3_qcom *qcom) · 243 unmodified lines
244244 struct device *dev = qcom->dev;
245245 int ret;
246246
247+ if (has_acpi_companion(dev))
248+ return 0;
249+
247250 qcom->icc_path_ddr = of_icc_get(dev, "usb-ddr");
248251 if (IS_ERR(qcom->icc_path_ddr)) {
249252 dev_err(dev, "failed to get usb-ddr path: %ld\n",
drivers/usb/dwc3/gadget.c+11−11
@@ -783,8 +783,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) · 782 unmodified lines
783783
784784 trace_dwc3_gadget_ep_disable(dep);
785785
786− dwc3_remove_requests(dwc, dep);
787−
788786 /* make sure HW endpoint isn't stalled */
789787 if (dep->flags & DWC3_EP_STALL)
790788 __dwc3_gadget_ep_set_halt(dep, 0, false);
@@ -793,16 +791,18 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) · 2 unmodified lines
793791 reg &= ~DWC3_DALEPENA_EP(dep->number);
794792 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
795793
796− dep->stream_capable = false;
797− dep->type = 0;
798− dep->flags = 0;
799−
800794 /* Clear out the ep descriptors for non-ep0 */
801795 if (dep->number > 1) {
802796 dep->endpoint.comp_desc = NULL;
803797 dep->endpoint.desc = NULL;
804798 }
805799
800+ dwc3_remove_requests(dwc, dep);
801+
802+ dep->stream_capable = false;
803+ dep->type = 0;
804+ dep->flags = 0;
805+
806806 return 0;
807807 }
808808
@@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) · 808 unmodified lines
16171617 {
16181618 struct dwc3 *dwc = dep->dwc;
16191619
1620− if (!dep->endpoint.desc || !dwc->pullups_connected) {
1620+ if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
16211621 dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
16221622 dep->name);
16231623 return -ESHUTDOWN;
@@ -2083,7 +2083,7 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc) · 459 unmodified lines
20832083 u32 reg;
20842084
20852085 speed = dwc->gadget_max_speed;
2086− if (speed > dwc->maximum_speed)
2086+ if (speed == USB_SPEED_UNKNOWN || speed > dwc->maximum_speed)
20872087 speed = dwc->maximum_speed;
20882088
20892089 if (speed == USB_SPEED_SUPER_PLUS &&
@@ -2247,6 +2247,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) · 157 unmodified lines
22472247 if (!is_on) {
22482248 u32 count;
22492249
2250+ dwc->connected = false;
22502251 /*
22512252 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
22522253 * Section 4.1.8 Table 4-7, it states that for a device-initiated
@@ -2271,7 +2272,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) · 18 unmodified lines
22712272 dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
22722273 dwc->ev_buf->length;
22732274 }
2274− dwc->connected = false;
22752275 } else {
22762276 __dwc3_gadget_start(dwc);
22772277 }
@@ -2523,6 +2523,7 @@ static void dwc3_gadget_set_ssp_rate(struct usb_gadget *g, · 245 unmodified lines
25232523 unsigned long flags;
25242524
25252525 spin_lock_irqsave(&dwc->lock, flags);
2526+ dwc->gadget_max_speed = USB_SPEED_SUPER_PLUS;
25262527 dwc->gadget_ssp_rate = rate;
25272528 spin_unlock_irqrestore(&dwc->lock, flags);
25282529 }
@@ -3321,8 +3322,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) · 792 unmodified lines
33213322 {
33223323 u32 reg;
33233324
3324− dwc->connected = true;
3325−
33263325 /*
33273326 * WORKAROUND: DWC3 revisions <1.88a have an issue which
33283327 * would cause a missing Disconnect Event if there's a
@@ -3362,6 +3361,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) · 33 unmodified lines
33623361 * transfers."
33633362 */
33643363 dwc3_stop_active_transfers(dwc);
3364+ dwc->connected = true;
33653365
33663366 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
33673367 reg &= ~DWC3_DCTL_TSTCTRL_MASK;
drivers/usb/gadget/configfs.c+10−4
@@ -97,6 +97,8 @@ struct gadget_config_name { · 96 unmodified lines
9797 struct list_head list;
9898 };
9999
100+#define USB_MAX_STRING_WITH_NULL_LEN (USB_MAX_STRING_LEN+1)
101+
100102 static int usb_string_copy(const char *s, char **s_copy)
101103 {
102104 int ret;
@@ -106,12 +108,16 @@ static int usb_string_copy(const char *s, char **s_copy) · 3 unmodified lines
106108 if (ret > USB_MAX_STRING_LEN)
107109 return -EOVERFLOW;
108110
109− str = kstrdup(s, GFP_KERNEL);
110− if (!str)
111− return -ENOMEM;
111+ if (copy) {
112+ str = copy;
113+ } else {
114+ str = kmalloc(USB_MAX_STRING_WITH_NULL_LEN, GFP_KERNEL);
115+ if (!str)
116+ return -ENOMEM;
117+ }
118+ strcpy(str, s);
112119 if (str[ret - 1] == '\n')
113120 str[ret - 1] = '\0';
114− kfree(copy);
115121 *s_copy = str;
116122 return 0;
117123 }
drivers/usb/gadget/udc/amd5536udc_pci.c+5−5
@@ -153,6 +153,11 @@ static int udc_pci_probe( · 152 unmodified lines
153153 pci_set_master(pdev);
154154 pci_try_set_mwi(pdev);
155155
156+ dev->phys_addr = resource;
157+ dev->irq = pdev->irq;
158+ dev->pdev = pdev;
159+ dev->dev = &pdev->dev;
160+
156161 /* init dma pools */
157162 if (use_dma) {
158163 retval = init_dma_pools(dev);
@@ -160,11 +165,6 @@ static int udc_pci_probe( · 1 unmodified line
160165 goto err_dma;
161166 }
162167
163− dev->phys_addr = resource;
164− dev->irq = pdev->irq;
165− dev->pdev = pdev;
166− dev->dev = &pdev->dev;
167−
168168 /* general probing */
169169 if (udc_probe(dev)) {
170170 retval = -ENODEV;
drivers/usb/host/xhci-mtk.c+9−1
@@ -397,6 +397,13 @@ static void xhci_mtk_quirks(struct device *dev, struct xhci_hcd *xhci) · 396 unmodified lines
397397 xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
398398 if (mtk->lpm_support)
399399 xhci->quirks |= XHCI_LPM_SUPPORT;
400+
401+ /*
402+ * MTK xHCI 0.96: PSA is 1 by default even if doesn't support stream,
403+ * and it's 3 when support it.
404+ */
405+ if (xhci->hci_version < 0x100 && HCC_MAX_PSA(xhci->hcc_params) == 4)
406+ xhci->quirks |= XHCI_BROKEN_STREAMS;
400407 }
401408
402409 /* called during probe() after chip reset completes */
@@ -548,7 +555,8 @@ static int xhci_mtk_probe(struct platform_device *pdev) · 145 unmodified lines
548555 if (ret)
549556 goto put_usb3_hcd;
550557
551− if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
558+ if (HCC_MAX_PSA(xhci->hcc_params) >= 4 &&
559+ !(xhci->quirks & XHCI_BROKEN_STREAMS))
552560 xhci->shared_hcd->can_do_streams = 1;
553561
554562 ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
drivers/usb/misc/ldusb.c+0−1
@@ -117,7 +117,6 @@ MODULE_DEVICE_TABLE(usb, ld_usb_table); · 116 unmodified lines
117117 MODULE_AUTHOR("Michael Hund <mhund@ld-didactic.de>");
118118 MODULE_DESCRIPTION("LD USB Driver");
119119 MODULE_LICENSE("GPL");
120−MODULE_SUPPORTED_DEVICE("LD USB Devices");
121120
122121 /* All interrupt in transfers are collected in a ring buffer to
123122 * avoid racing conditions and get better performance of the driver.
drivers/usb/musb/musb_core.c+8−4
@@ -2004,10 +2004,14 @@ static void musb_pm_runtime_check_session(struct musb *musb) · 2003 unmodified lines
20042004 MUSB_DEVCTL_HR;
20052005 switch (devctl & ~s) {
20062006 case MUSB_QUIRK_B_DISCONNECT_99:
2007− musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n");
2008− schedule_delayed_work(&musb->irq_work,
2009− msecs_to_jiffies(1000));
2010− break;
2007+ if (musb->quirk_retries && !musb->flush_irq_work) {
2008+ musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n");
2009+ schedule_delayed_work(&musb->irq_work,
2010+ msecs_to_jiffies(1000));
2011+ musb->quirk_retries--;
2012+ break;
2013+ }
2014+ fallthrough;
20112015 case MUSB_QUIRK_B_INVALID_VBUS_91:
20122016 if (musb->quirk_retries && !musb->flush_irq_work) {
20132017 musb_dbg(musb,
drivers/usb/storage/transport.c+7−0
@@ -656,6 +656,13 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) · 655 unmodified lines
656656 need_auto_sense = 1;
657657 }
658658
659+ /* Some devices (Kindle) require another command after SYNC CACHE */
660+ if ((us->fflags & US_FL_SENSE_AFTER_SYNC) &&
661+ srb->cmnd[0] == SYNCHRONIZE_CACHE) {
662+ usb_stor_dbg(us, "-- sense after SYNC CACHE\n");
663+ need_auto_sense = 1;
664+ }
665+
659666 /*
660667 * If we have a failure, we're going to do a REQUEST_SENSE
661668 * automatically. Note that we differentiate between a command
drivers/usb/storage/unusual_devs.h+12−0
@@ -2211,6 +2211,18 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200, · 2210 unmodified lines
22112211 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
22122212 US_FL_NO_READ_DISC_INFO ),
22132213
2214+/*
2215+ * Reported by Matthias Schwarzott <zzam@gentoo.org>
2216+ * The Amazon Kindle treats SYNCHRONIZE CACHE as an indication that
2217+ * the host may be finished with it, and automatically ejects its
2218+ * emulated media unless it receives another command within one second.
2219+ */
2220+UNUSUAL_DEV( 0x1949, 0x0004, 0x0000, 0x9999,
2221+ "Amazon",
2222+ "Kindle",
2223+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2224+ US_FL_SENSE_AFTER_SYNC ),
2225+
22142226 /*
22152227 * Reported by Oliver Neukum <oneukum@suse.com>
22162228 * This device morphes spontaneously into another device if the access
drivers/usb/typec/tcpm/tcpm.c+9−2
@@ -942,6 +942,7 @@ static int tcpm_set_current_limit(struct tcpm_port *port, u32 max_ma, u32 mv) · 941 unmodified lines
942942
943943 port->supply_voltage = mv;
944944 port->current_limit = max_ma;
945+ power_supply_changed(port->psy);
945946
946947 if (port->tcpc->set_current_limit)
947948 ret = port->tcpc->set_current_limit(port->tcpc, max_ma, mv);
@@ -2928,6 +2929,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo, · 1980 unmodified lines
29282929
29292930 port->pps_data.supported = false;
29302931 port->usb_type = POWER_SUPPLY_USB_TYPE_PD;
2932+ power_supply_changed(port->psy);
29312933
29322934 /*
29332935 * Select the source PDO providing the most power which has a
@@ -2952,6 +2954,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo, · 18 unmodified lines
29522954 port->pps_data.supported = true;
29532955 port->usb_type =
29542956 POWER_SUPPLY_USB_TYPE_PD_PPS;
2957+ power_supply_changed(port->psy);
29552958 }
29562959 continue;
29572960 default:
@@ -3109,6 +3112,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port) · 151 unmodified lines
31093112 port->pps_data.out_volt));
31103113 port->pps_data.op_curr = min(port->pps_data.max_curr,
31113114 port->pps_data.op_curr);
3115+ power_supply_changed(port->psy);
31123116 }
31133117
31143118 return src_pdo;
@@ -3344,6 +3348,7 @@ static int tcpm_set_charge(struct tcpm_port *port, bool charge) · 229 unmodified lines
33443348 return ret;
33453349 }
33463350 port->vbus_charge = charge;
3351+ power_supply_changed(port->psy);
33473352 return 0;
33483353 }
33493354
@@ -3523,6 +3528,7 @@ static void tcpm_reset_port(struct tcpm_port *port) · 173 unmodified lines
35233528 port->try_src_count = 0;
35243529 port->try_snk_count = 0;
35253530 port->usb_type = POWER_SUPPLY_USB_TYPE_C;
3531+ power_supply_changed(port->psy);
35263532 port->nr_sink_caps = 0;
35273533 port->sink_cap_done = false;
35283534 if (port->tcpc->enable_frs)
@@ -5167,7 +5173,7 @@ static void tcpm_enable_frs_work(struct kthread_work *work) · 1638 unmodified lines
51675173 goto unlock;
51685174
51695175 /* Send when the state machine is idle */
5170− if (port->state != SNK_READY || port->vdm_state != VDM_STATE_DONE || port->send_discover)
5176+ if (port->state != SNK_READY || port->vdm_sm_running || port->send_discover)
51715177 goto resched;
51725178
51735179 port->upcoming_state = GET_SINK_CAP;
@@ -5905,7 +5911,7 @@ static int tcpm_psy_set_prop(struct power_supply *psy, · 731 unmodified lines
59055911 ret = -EINVAL;
59065912 break;
59075913 }
5908−
5914+ power_supply_changed(port->psy);
59095915 return ret;
59105916 }
59115917
@@ -6058,6 +6064,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) · 146 unmodified lines
60586064 err = devm_tcpm_psy_register(port);
60596065 if (err)
60606066 goto out_role_sw_put;
6067+ power_supply_changed(port->psy);
60616068
60626069 port->typec_port = typec_register_port(port->dev, &port->typec_caps);
60636070 if (IS_ERR(port->typec_port)) {
drivers/usb/typec/tps6598x.c+0−1
@@ -64,7 +64,6 @@ enum { · 63 unmodified lines
6464 struct tps6598x_rx_identity_reg {
6565 u8 status;
6666 struct usb_pd_identity identity;
67− u32 vdo[3];
6867 } __packed;
6968
7069 /* Standard Task return codes */
drivers/usb/usbip/vhci_hcd.c+2−0
@@ -594,6 +594,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, · 593 unmodified lines
594594 pr_err("invalid port number %d\n", wIndex);
595595 goto error;
596596 }
597+ if (wValue >= 32)
598+ goto error;
597599 if (hcd->speed == HCD_USB3) {
598600 if ((vhci_hcd->port_status[rhport] &
599601 USB_SS_PORT_STAT_POWER) != 0) {
drivers/usb/usbip/vudc_sysfs.c+1−1
@@ -174,7 +174,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, · 173 unmodified lines
174174
175175 udc->ud.tcp_socket = socket;
176176 udc->ud.tcp_rx = tcp_rx;
177− udc->ud.tcp_rx = tcp_tx;
177+ udc->ud.tcp_tx = tcp_tx;
178178 udc->ud.status = SDEV_ST_USED;
179179
180180 spin_unlock_irq(&udc->ud.lock);
drivers/vdpa/ifcvf/ifcvf_main.c+2−3
@@ -431,8 +431,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) · 430 unmodified lines
431431 }
432432
433433 adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa,
434− dev, &ifc_vdpa_ops,
435− IFCVF_MAX_QUEUE_PAIRS * 2, NULL);
434+ dev, &ifc_vdpa_ops, NULL);
436435 if (adapter == NULL) {
437436 IFCVF_ERR(pdev, "Failed to allocate vDPA structure");
438437 return -ENOMEM;
@@ -456,7 +455,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) · 17 unmodified lines
456455 for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++)
457456 vf->vring[i].irq = -EINVAL;
458457
459− ret = vdpa_register_device(&adapter->vdpa);
458+ ret = vdpa_register_device(&adapter->vdpa, IFCVF_MAX_QUEUE_PAIRS * 2);
460459 if (ret) {
461460 IFCVF_ERR(pdev, "Failed to register ifcvf to vdpa bus");
462461 goto err;
drivers/vdpa/mlx5/net/mlx5_vnet.c+2−2
@@ -1982,7 +1982,7 @@ static int mlx5v_probe(struct auxiliary_device *adev, · 1981 unmodified lines
19821982 max_vqs = min_t(u32, max_vqs, MLX5_MAX_SUPPORTED_VQS);
19831983
19841984 ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mlx5_vdpa_ops,
1985− 2 * mlx5_vdpa_max_qps(max_vqs), NULL);
1985+ NULL);
19861986 if (IS_ERR(ndev))
19871987 return PTR_ERR(ndev);
19881988
@@ -2009,7 +2009,7 @@ static int mlx5v_probe(struct auxiliary_device *adev, · 20 unmodified lines
20092009 if (err)
20102010 goto err_res;
20112011
2012− err = vdpa_register_device(&mvdev->vdev);
2012+ err = vdpa_register_device(&mvdev->vdev, 2 * mlx5_vdpa_max_qps(max_vqs));
20132013 if (err)
20142014 goto err_reg;
20152015
drivers/vdpa/vdpa.c+10−8
@@ -69,7 +69,6 @@ static void vdpa_release_dev(struct device *d) · 68 unmodified lines
6969 * initialized but before registered.
7070 * @parent: the parent device
7171 * @config: the bus operations that is supported by this device
72− * @nvqs: number of virtqueues supported by this device
7372 * @size: size of the parent structure that contains private data
7473 * @name: name of the vdpa device; optional.
7574 *
@@ -81,7 +80,7 @@ static void vdpa_release_dev(struct device *d) · 5 unmodified lines
8180 */
8281 struct vdpa_device *__vdpa_alloc_device(struct device *parent,
8382 const struct vdpa_config_ops *config,
84− int nvqs, size_t size, const char *name)
83+ size_t size, const char *name)
8584 {
8685 struct vdpa_device *vdev;
8786 int err = -EINVAL;
@@ -107,7 +106,6 @@ struct vdpa_device *__vdpa_alloc_device(struct device *parent, · 19 unmodified lines
107106 vdev->index = err;
108107 vdev->config = config;
109108 vdev->features_valid = false;
110− vdev->nvqs = nvqs;
111109
112110 if (name)
113111 err = dev_set_name(&vdev->dev, "%s", name);
@@ -136,10 +134,12 @@ static int vdpa_name_match(struct device *dev, const void *data) · 22 unmodified lines
136134 return (strcmp(dev_name(&vdev->dev), data) == 0);
137135 }
138136
139−static int __vdpa_register_device(struct vdpa_device *vdev)
137+static int __vdpa_register_device(struct vdpa_device *vdev, int nvqs)
140138 {
141139 struct device *dev;
142140
141+ vdev->nvqs = nvqs;
142+
143143 lockdep_assert_held(&vdpa_dev_mutex);
144144 dev = bus_find_device(&vdpa_bus, NULL, dev_name(&vdev->dev), vdpa_name_match);
145145 if (dev) {
@@ -155,15 +155,16 @@ static int __vdpa_register_device(struct vdpa_device *vdev) · 9 unmodified lines
155155 * Caller must invoke this routine in the management device dev_add()
156156 * callback after setting up valid mgmtdev for this vdpa device.
157157 * @vdev: the vdpa device to be registered to vDPA bus
158+ * @nvqs: number of virtqueues supported by this device
158159 *
159160 * Returns an error when fail to add device to vDPA bus
160161 */
161−int _vdpa_register_device(struct vdpa_device *vdev)
162+int _vdpa_register_device(struct vdpa_device *vdev, int nvqs)
162163 {
163164 if (!vdev->mdev)
164165 return -EINVAL;
165166
166− return __vdpa_register_device(vdev);
167+ return __vdpa_register_device(vdev, nvqs);
167168 }
168169 EXPORT_SYMBOL_GPL(_vdpa_register_device);
169170
@@ -171,15 +172,16 @@ EXPORT_SYMBOL_GPL(_vdpa_register_device); · 1 unmodified line
171172 * vdpa_register_device - register a vDPA device
172173 * Callers must have a succeed call of vdpa_alloc_device() before.
173174 * @vdev: the vdpa device to be registered to vDPA bus
175+ * @nvqs: number of virtqueues supported by this device
174176 *
175177 * Returns an error when fail to add to vDPA bus
176178 */
177−int vdpa_register_device(struct vdpa_device *vdev)
179+int vdpa_register_device(struct vdpa_device *vdev, int nvqs)
178180 {
179181 int err;
180182
181183 mutex_lock(&vdpa_dev_mutex);
182− err = __vdpa_register_device(vdev);
184+ err = __vdpa_register_device(vdev, nvqs);
183185 mutex_unlock(&vdpa_dev_mutex);
184186 return err;
185187 }
drivers/vdpa/vdpa_sim/vdpa_sim.c+1−1
@@ -235,7 +235,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr) · 234 unmodified lines
235235 ops = &vdpasim_config_ops;
236236
237237 vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops,
238− dev_attr->nvqs, dev_attr->name);
238+ dev_attr->name);
239239 if (!vdpasim)
240240 goto err_alloc;
241241
drivers/vdpa/vdpa_sim/vdpa_sim_net.c+2−3
@@ -110,8 +110,7 @@ out: · 109 unmodified lines
110110
111111 static void vdpasim_net_get_config(struct vdpasim *vdpasim, void *config)
112112 {
113− struct virtio_net_config *net_config =
114− (struct virtio_net_config *)config;
113+ struct virtio_net_config *net_config = config;
115114
116115 net_config->mtu = cpu_to_vdpasim16(vdpasim, 1500);
117116 net_config->status = cpu_to_vdpasim16(vdpasim, VIRTIO_NET_S_LINK_UP);
@@ -147,7 +146,7 @@ static int vdpasim_net_dev_add(struct vdpa_mgmt_dev *mdev, const char *name) · 29 unmodified lines
147146 if (IS_ERR(simdev))
148147 return PTR_ERR(simdev);
149148
150− ret = _vdpa_register_device(&simdev->vdpa);
149+ ret = _vdpa_register_device(&simdev->vdpa, VDPASIM_NET_VQ_NUM);
151150 if (ret)
152151 goto reg_err;
153152
drivers/vfio/Kconfig+2−2
@@ -21,8 +21,8 @@ config VFIO_VIRQFD · 20 unmodified lines
2121
2222 menuconfig VFIO
2323 tristate "VFIO Non-Privileged userspace driver framework"
24− depends on IOMMU_API
25− select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64)
24+ select IOMMU_API
25+ select VFIO_IOMMU_TYPE1 if MMU && (X86 || S390 || ARM || ARM64)
2626 help
2727 VFIO provides a framework for secure userspace device drivers.
2828 See Documentation/driver-api/vfio.rst for more details.
drivers/vfio/pci/Kconfig+1−1
@@ -42,6 +42,6 @@ config VFIO_PCI_IGD · 41 unmodified lines
4242
4343 config VFIO_PCI_NVLINK2
4444 def_bool y
45− depends on VFIO_PCI && PPC_POWERNV
45+ depends on VFIO_PCI && PPC_POWERNV && SPAPR_TCE_IOMMU
4646 help
4747 VFIO PCI support for P9 Witherspoon machine with NVIDIA V100 GPUs
drivers/vfio/platform/Kconfig+2−2
@@ -1,7 +1,7 @@
11 # SPDX-License-Identifier: GPL-2.0-only
22 config VFIO_PLATFORM
33 tristate "VFIO support for platform devices"
4− depends on VFIO && EVENTFD && (ARM || ARM64)
4+ depends on VFIO && EVENTFD && (ARM || ARM64 || COMPILE_TEST)
55 select VFIO_VIRQFD
66 help
77 Support for platform devices with VFIO. This is required to make
@@ -12,7 +12,7 @@ config VFIO_PLATFORM · 4 unmodified lines
1212
1313 config VFIO_AMBA
1414 tristate "VFIO support for AMBA devices"
15− depends on VFIO_PLATFORM && ARM_AMBA
15+ depends on VFIO_PLATFORM && (ARM_AMBA || COMPILE_TEST)
1616 help
1717 Support for ARM AMBA devices with VFIO. This is required to make
1818 use of ARM AMBA devices present on the system using the VFIO
drivers/vfio/vfio_iommu_type1.c+18−8
@@ -189,7 +189,7 @@ static struct vfio_dma *vfio_find_dma(struct vfio_iommu *iommu, · 188 unmodified lines
189189 }
190190
191191 static struct rb_node *vfio_find_dma_first_node(struct vfio_iommu *iommu,
192− dma_addr_t start, size_t size)
192+ dma_addr_t start, u64 size)
193193 {
194194 struct rb_node *res = NULL;
195195 struct rb_node *node = iommu->dma_list.rb_node;
@@ -739,6 +739,12 @@ out: · 543 unmodified lines
739739 ret = vfio_lock_acct(dma, lock_acct, false);
740740
741741 unpin_out:
742+ if (batch->size == 1 && !batch->offset) {
743+ /* May be a VM_PFNMAP pfn, which the batch can't remember. */
744+ put_pfn(pfn, dma->prot);
745+ batch->size = 0;
746+ }
747+
742748 if (ret < 0) {
743749 if (pinned && !rsvd) {
744750 for (pfn = *pfn_base ; pinned ; pfn++, pinned--)
@@ -785,7 +791,12 @@ static int vfio_pin_page_external(struct vfio_dma *dma, unsigned long vaddr, · 40 unmodified lines
785791 return -ENODEV;
786792
787793 ret = vaddr_get_pfns(mm, vaddr, 1, dma->prot, pfn_base, pages);
788− if (ret == 1 && do_accounting && !is_invalid_reserved_pfn(*pfn_base)) {
794+ if (ret != 1)
795+ goto out;
796+
797+ ret = 0;
798+
799+ if (do_accounting && !is_invalid_reserved_pfn(*pfn_base)) {
789800 ret = vfio_lock_acct(dma, 1, true);
790801 if (ret) {
791802 put_pfn(*pfn_base, dma->prot);
@@ -797,6 +808,7 @@ static int vfio_pin_page_external(struct vfio_dma *dma, unsigned long vaddr, · 5 unmodified lines
797808 }
798809 }
799810
811+out:
800812 mmput(mm);
801813 return ret;
802814 }
@@ -1288,7 +1300,7 @@ static int vfio_dma_do_unmap(struct vfio_iommu *iommu, · 485 unmodified lines
12881300 int ret = -EINVAL, retries = 0;
12891301 unsigned long pgshift;
12901302 dma_addr_t iova = unmap->iova;
1291− unsigned long size = unmap->size;
1303+ u64 size = unmap->size;
12921304 bool unmap_all = unmap->flags & VFIO_DMA_UNMAP_FLAG_ALL;
12931305 bool invalidate_vaddr = unmap->flags & VFIO_DMA_UNMAP_FLAG_VADDR;
12941306 struct rb_node *n, *first_n;
@@ -1304,14 +1316,12 @@ static int vfio_dma_do_unmap(struct vfio_iommu *iommu, · 9 unmodified lines
13041316 if (unmap_all) {
13051317 if (iova || size)
13061318 goto unlock;
1307− size = SIZE_MAX;
1308− } else if (!size || size & (pgsize - 1)) {
1319+ size = U64_MAX;
1320+ } else if (!size || size & (pgsize - 1) ||
1321+ iova + size - 1 < iova || size > SIZE_MAX) {
13091322 goto unlock;
13101323 }
13111324
1312− if (iova + size - 1 < iova || size > SIZE_MAX)
1313− goto unlock;
1314−
13151325 /* When dirty tracking is enabled, allow only min supported pgsize */
13161326 if ((unmap->flags & VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP) &&
13171327 (!iommu->dirty_page_tracking || (bitmap->pgsize != pgsize))) {
drivers/vhost/vdpa.c+11−9
@@ -308,8 +308,10 @@ static long vhost_vdpa_get_vring_num(struct vhost_vdpa *v, u16 __user *argp) · 307 unmodified lines
308308
309309 static void vhost_vdpa_config_put(struct vhost_vdpa *v)
310310 {
311− if (v->config_ctx)
311+ if (v->config_ctx) {
312312 eventfd_ctx_put(v->config_ctx);
313+ v->config_ctx = NULL;
314+ }
313315 }
314316
315317 static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp)
@@ -329,8 +331,12 @@ static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp) · 13 unmodified lines
329331 if (!IS_ERR_OR_NULL(ctx))
330332 eventfd_ctx_put(ctx);
331333
332− if (IS_ERR(v->config_ctx))
333− return PTR_ERR(v->config_ctx);
334+ if (IS_ERR(v->config_ctx)) {
335+ long ret = PTR_ERR(v->config_ctx);
336+
337+ v->config_ctx = NULL;
338+ return ret;
339+ }
334340
335341 v->vdpa->config->set_config_cb(v->vdpa, &cb);
336342
@@ -900,14 +906,10 @@ err: · 563 unmodified lines
900906
901907 static void vhost_vdpa_clean_irq(struct vhost_vdpa *v)
902908 {
903− struct vhost_virtqueue *vq;
904909 int i;
905910
906− for (i = 0; i < v->nvqs; i++) {
907− vq = &v->vqs[i];
908− if (vq->call_ctx.producer.irq)
909− irq_bypass_unregister_producer(&vq->call_ctx.producer);
910− }
911+ for (i = 0; i < v->nvqs; i++)
912+ vhost_vdpa_unsetup_vq_irq(v, i);
911913 }
912914
913915 static int vhost_vdpa_release(struct inode *inode, struct file *filep)
drivers/vhost/vhost.c+1−1
@@ -332,8 +332,8 @@ static void vhost_vq_reset(struct vhost_dev *dev, · 331 unmodified lines
332332 vq->error_ctx = NULL;
333333 vq->kick = NULL;
334334 vq->log_ctx = NULL;
335− vhost_reset_is_le(vq);
336335 vhost_disable_cross_endian(vq);
336+ vhost_reset_is_le(vq);
337337 vq->busyloop_timeout = 0;
338338 vq->umem = NULL;
339339 vq->iotlb = NULL;
drivers/video/fbdev/core/fbcon.c+3−0
@@ -1333,6 +1333,9 @@ static void fbcon_cursor(struct vc_data *vc, int mode) · 1332 unmodified lines
13331333
13341334 ops->cursor_flash = (mode == CM_ERASE) ? 0 : 1;
13351335
1336+ if (!ops->cursor)
1337+ return;
1338+
13361339 ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
13371340 get_color(vc, info, c, 0));
13381341 }
drivers/video/fbdev/hyperv_fb.c+0−3
@@ -1031,7 +1031,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) · 1030 unmodified lines
10311031 PCI_DEVICE_ID_HYPERV_VIDEO, NULL);
10321032 if (!pdev) {
10331033 pr_err("Unable to find PCI Hyper-V video\n");
1034− kfree(info->apertures);
10351034 return -ENODEV;
10361035 }
10371036
@@ -1129,7 +1128,6 @@ getmem_done: · 91 unmodified lines
11291128 } else {
11301129 pci_dev_put(pdev);
11311130 }
1132− kfree(info->apertures);
11331131
11341132 return 0;
11351133
@@ -1141,7 +1139,6 @@ err2: · 5 unmodified lines
11411139 err1:
11421140 if (!gen2vm)
11431141 pci_dev_put(pdev);
1144− kfree(info->apertures);
11451142
11461143 return -ENOMEM;
11471144 }
drivers/virtio/virtio.c+2−4
@@ -141,15 +141,14 @@ void virtio_config_changed(struct virtio_device *dev) · 140 unmodified lines
141141 }
142142 EXPORT_SYMBOL_GPL(virtio_config_changed);
143143
144−void virtio_config_disable(struct virtio_device *dev)
144+static void virtio_config_disable(struct virtio_device *dev)
145145 {
146146 spin_lock_irq(&dev->config_lock);
147147 dev->config_enabled = false;
148148 spin_unlock_irq(&dev->config_lock);
149149 }
150−EXPORT_SYMBOL_GPL(virtio_config_disable);
151150
152−void virtio_config_enable(struct virtio_device *dev)
151+static void virtio_config_enable(struct virtio_device *dev)
153152 {
154153 spin_lock_irq(&dev->config_lock);
155154 dev->config_enabled = true;
@@ -158,7 +157,6 @@ void virtio_config_enable(struct virtio_device *dev) · 2 unmodified lines
158157 dev->config_change_pending = false;
159158 spin_unlock_irq(&dev->config_lock);
160159 }
161−EXPORT_SYMBOL_GPL(virtio_config_enable);
162160
163161 void virtio_add_status(struct virtio_device *dev, unsigned int status)
164162 {
drivers/virtio/virtio_mmio.c+1−2
@@ -548,8 +548,7 @@ static void virtio_mmio_release_dev(struct device *_d) · 547 unmodified lines
548548 {
549549 struct virtio_device *vdev =
550550 container_of(_d, struct virtio_device, dev);
551− struct virtio_mmio_device *vm_dev =
552− container_of(vdev, struct virtio_mmio_device, vdev);
551+ struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev);
553552 struct platform_device *pdev = vm_dev->pdev;
554553
555554 devm_kfree(&pdev->dev, vm_dev);
drivers/watchdog/cpu5wdt.c+0−1
@@ -273,7 +273,6 @@ module_exit(cpu5wdt_exit_module); · 272 unmodified lines
273273
274274 MODULE_AUTHOR("Heiko Ronsdorf <hero@ihg.uni-duisburg.de>");
275275 MODULE_DESCRIPTION("sma cpu5 watchdog driver");
276−MODULE_SUPPORTED_DEVICE("sma cpu5 watchdog");
277276 MODULE_LICENSE("GPL");
278277
279278 module_param_hw(port, int, ioport, 0);
drivers/watchdog/cpwd.c+0−1
@@ -172,7 +172,6 @@ MODULE_PARM_DESC(wd2_timeout, "Default watchdog2 timeout in 1/10secs"); · 171 unmodified lines
172172 MODULE_AUTHOR("Eric Brower <ebrower@usa.net>");
173173 MODULE_DESCRIPTION("Hardware watchdog driver for Sun Microsystems CP1400/1500");
174174 MODULE_LICENSE("GPL");
175−MODULE_SUPPORTED_DEVICE("watchdog");
176175
177176 static void cpwd_writew(u16 val, void __iomem *addr)
178177 {
drivers/watchdog/riowd.c+0−1
@@ -46,7 +46,6 @@ · 45 unmodified lines
4646
4747 MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");
4848 MODULE_DESCRIPTION("Hardware watchdog driver for Sun RIO");
49−MODULE_SUPPORTED_DEVICE("watchdog");
5049 MODULE_LICENSE("GPL");
5150
5251 #define DRIVER_NAME "riowd"
drivers/xen/Kconfig+2−2
@@ -50,11 +50,11 @@ config XEN_BALLOON_MEMORY_HOTPLUG · 49 unmodified lines
5050
5151 SUBSYSTEM=="memory", ACTION=="add", RUN+="/bin/sh -c '[ -f /sys$devpath/state ] && echo online > /sys$devpath/state'"
5252
53−config XEN_BALLOON_MEMORY_HOTPLUG_LIMIT
53+config XEN_MEMORY_HOTPLUG_LIMIT
5454 int "Hotplugged memory limit (in GiB) for a PV guest"
5555 default 512
5656 depends on XEN_HAVE_PVMMU
57− depends on XEN_BALLOON_MEMORY_HOTPLUG
57+ depends on MEMORY_HOTPLUG
5858 help
5959 Maxmium amount of memory (in GiB) that a PV guest can be
6060 expanded to when using memory hotplug.
fs/afs/dir.c+0−1
@@ -70,7 +70,6 @@ const struct inode_operations afs_dir_inode_operations = { · 69 unmodified lines
7070 .permission = afs_permission,
7171 .getattr = afs_getattr,
7272 .setattr = afs_setattr,
73− .listxattr = afs_listxattr,
7473 };
7574
7675 const struct address_space_operations afs_dir_aops = {
fs/afs/file.c+0−1
@@ -43,7 +43,6 @@ const struct inode_operations afs_file_inode_operations = { · 42 unmodified lines
4343 .getattr = afs_getattr,
4444 .setattr = afs_setattr,
4545 .permission = afs_permission,
46− .listxattr = afs_listxattr,
4746 };
4847
4948 const struct address_space_operations afs_fs_aops = {
fs/afs/fs_operation.c+5−2
@@ -181,10 +181,13 @@ void afs_wait_for_operation(struct afs_operation *op) · 180 unmodified lines
181181 if (test_bit(AFS_SERVER_FL_IS_YFS, &op->server->flags) &&
182182 op->ops->issue_yfs_rpc)
183183 op->ops->issue_yfs_rpc(op);
184− else
184+ else if (op->ops->issue_afs_rpc)
185185 op->ops->issue_afs_rpc(op);
186+ else
187+ op->ac.error = -ENOTSUPP;
186188
187− op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
189+ if (op->call)
190+ op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
188191 }
189192
190193 switch (op->error) {
fs/afs/inode.c+0−1
@@ -27,7 +27,6 @@ · 26 unmodified lines
2727
2828 static const struct inode_operations afs_symlink_inode_operations = {
2929 .get_link = page_get_link,
30− .listxattr = afs_listxattr,
3130 };
3231
3332 static noinline void dump_vnode(struct afs_vnode *vnode, struct afs_vnode *parent_vnode)
fs/afs/internal.h+0−1
@@ -1509,7 +1509,6 @@ extern int afs_launder_page(struct page *); · 1508 unmodified lines
15091509 * xattr.c
15101510 */
15111511 extern const struct xattr_handler *afs_xattr_handlers[];
1512−extern ssize_t afs_listxattr(struct dentry *, char *, size_t);
15131512
15141513 /*
15151514 * yfsclient.c
fs/afs/mntpt.c+0−1
@@ -32,7 +32,6 @@ const struct inode_operations afs_mntpt_inode_operations = { · 31 unmodified lines
3232 .lookup = afs_mntpt_lookup,
3333 .readlink = page_readlink,
3434 .getattr = afs_getattr,
35− .listxattr = afs_listxattr,
3635 };
3736
3837 const struct inode_operations afs_autocell_inode_operations = {
fs/afs/write.c+1−2
@@ -851,8 +851,7 @@ vm_fault_t afs_page_mkwrite(struct vm_fault *vmf) · 850 unmodified lines
851851 fscache_wait_on_page_write(vnode->cache, vmf->page);
852852 #endif
853853
854− if (PageWriteback(vmf->page) &&
855− wait_on_page_bit_killable(vmf->page, PG_writeback) < 0)
854+ if (wait_on_page_writeback_killable(vmf->page))
856855 return VM_FAULT_RETRY;
857856
858857 if (lock_page_killable(vmf->page) < 0)
fs/afs/xattr.c+7−24
@@ -11,29 +11,6 @@ · 10 unmodified lines
1111 #include <linux/xattr.h>
1212 #include "internal.h"
1313
14−static const char afs_xattr_list[] =
15− "afs.acl\0"
16− "afs.cell\0"
17− "afs.fid\0"
18− "afs.volume\0"
19− "afs.yfs.acl\0"
20− "afs.yfs.acl_inherited\0"
21− "afs.yfs.acl_num_cleaned\0"
22− "afs.yfs.vol_acl";
23−
24−/*
25− * Retrieve a list of the supported xattrs.
26− */
27−ssize_t afs_listxattr(struct dentry *dentry, char *buffer, size_t size)
28−{
29− if (size == 0)
30− return sizeof(afs_xattr_list);
31− if (size < sizeof(afs_xattr_list))
32− return -ERANGE;
33− memcpy(buffer, afs_xattr_list, sizeof(afs_xattr_list));
34− return sizeof(afs_xattr_list);
35−}
36−
3714 /*
3815 * Deal with the result of a successful fetch ACL operation.
3916 */
@@ -231,6 +208,8 @@ static int afs_xattr_get_yfs(const struct xattr_handler *handler, · 191 unmodified lines
231208 else
232209 ret = -ERANGE;
233210 }
211+ } else if (ret == -ENOTSUPP) {
212+ ret = -ENODATA;
234213 }
235214
236215 error_yacl:
@@ -256,6 +235,7 @@ static int afs_xattr_set_yfs(const struct xattr_handler *handler, · 19 unmodified lines
256235 {
257236 struct afs_operation *op;
258237 struct afs_vnode *vnode = AFS_FS_I(inode);
238+ int ret;
259239
260240 if (flags == XATTR_CREATE ||
261241 strcmp(name, "acl") != 0)
@@ -270,7 +250,10 @@ static int afs_xattr_set_yfs(const struct xattr_handler *handler, · 8 unmodified lines
270250 return afs_put_operation(op);
271251
272252 op->ops = &yfs_store_opaque_acl2_operation;
273− return afs_do_sync_operation(op);
253+ ret = afs_do_sync_operation(op);
254+ if (ret == -ENOTSUPP)
255+ ret = -ENODATA;
256+ return ret;
274257 }
275258
276259 static const struct xattr_handler afs_xattr_yfs_handler = {
fs/block_dev.c+6−2
@@ -275,6 +275,8 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter, · 274 unmodified lines
275275 bio.bi_opf = dio_bio_write_op(iocb);
276276 task_io_account_write(ret);
277277 }
278+ if (iocb->ki_flags & IOCB_NOWAIT)
279+ bio.bi_opf |= REQ_NOWAIT;
278280 if (iocb->ki_flags & IOCB_HIPRI)
279281 bio_set_polled(&bio, iocb);
280282
@@ -428,6 +430,8 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, · 147 unmodified lines
428430 bio->bi_opf = dio_bio_write_op(iocb);
429431 task_io_account_write(bio->bi_iter.bi_size);
430432 }
433+ if (iocb->ki_flags & IOCB_NOWAIT)
434+ bio->bi_opf |= REQ_NOWAIT;
431435
432436 dio->size += bio->bi_iter.bi_size;
433437 pos += bio->bi_iter.bi_size;
@@ -1240,13 +1244,13 @@ int bdev_disk_changed(struct block_device *bdev, bool invalidate) · 806 unmodified lines
12401244
12411245 lockdep_assert_held(&bdev->bd_mutex);
12421246
1243− clear_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
1244−
12451247 rescan:
12461248 ret = blk_drop_partitions(bdev);
12471249 if (ret)
12481250 return ret;
12491251
1252+ clear_bit(GD_NEED_PART_SCAN, &disk->state);
1253+
12501254 /*
12511255 * Historically we only set the capacity to zero for devices that
12521256 * support partitions (independ of actually having partitions created).
fs/btrfs/Makefile+6−4
@@ -7,10 +7,12 @@ subdir-ccflags-y += -Wmissing-format-attribute · 6 unmodified lines
77 subdir-ccflags-y += -Wmissing-prototypes
88 subdir-ccflags-y += -Wold-style-definition
99 subdir-ccflags-y += -Wmissing-include-dirs
10−subdir-ccflags-y += $(call cc-option, -Wunused-but-set-variable)
11−subdir-ccflags-y += $(call cc-option, -Wunused-const-variable)
12−subdir-ccflags-y += $(call cc-option, -Wpacked-not-aligned)
13−subdir-ccflags-y += $(call cc-option, -Wstringop-truncation)
10+condflags := \
11+ $(call cc-option, -Wunused-but-set-variable) \
12+ $(call cc-option, -Wunused-const-variable) \
13+ $(call cc-option, -Wpacked-not-aligned) \
14+ $(call cc-option, -Wstringop-truncation)
15+subdir-ccflags-y += $(condflags)
1416 # The following turn off the warnings enabled by -Wextra
1517 subdir-ccflags-y += -Wno-missing-field-initializers
1618 subdir-ccflags-y += -Wno-sign-compare
fs/btrfs/ctree.c+2−0
@@ -1365,7 +1365,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq) · 1364 unmodified lines
13651365 "failed to read tree block %llu from get_old_root",
13661366 logical);
13671367 } else {
1368+ btrfs_tree_read_lock(old);
13681369 eb = btrfs_clone_extent_buffer(old);
1370+ btrfs_tree_read_unlock(old);
13691371 free_extent_buffer(old);
13701372 }
13711373 } else if (old_root) {
fs/btrfs/dev-replace.c+3−0
@@ -81,6 +81,9 @@ int btrfs_init_dev_replace(struct btrfs_fs_info *fs_info) · 80 unmodified lines
8181 struct btrfs_dev_replace_item *ptr;
8282 u64 src_devid;
8383
84+ if (!dev_root)
85+ return 0;
86+
8487 path = btrfs_alloc_path();
8588 if (!path) {
8689 ret = -ENOMEM;
fs/btrfs/disk-io.c+17−2
@@ -2387,8 +2387,9 @@ static int btrfs_read_roots(struct btrfs_fs_info *fs_info) · 2386 unmodified lines
23872387 } else {
23882388 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state);
23892389 fs_info->dev_root = root;
2390− btrfs_init_devices_late(fs_info);
23912390 }
2391+ /* Initialize fs_info for all devices in any case */
2392+ btrfs_init_devices_late(fs_info);
23922393
23932394 /* If IGNOREDATACSUMS is set don't bother reading the csum root. */
23942395 if (!btrfs_test_opt(fs_info, IGNOREDATACSUMS)) {
@@ -3009,6 +3010,21 @@ int btrfs_start_pre_rw_mount(struct btrfs_fs_info *fs_info) · 614 unmodified lines
30093010 }
30103011 }
30113012
3013+ /*
3014+ * btrfs_find_orphan_roots() is responsible for finding all the dead
3015+ * roots (with 0 refs), flag them with BTRFS_ROOT_DEAD_TREE and load
3016+ * them into the fs_info->fs_roots_radix tree. This must be done before
3017+ * calling btrfs_orphan_cleanup() on the tree root. If we don't do it
3018+ * first, then btrfs_orphan_cleanup() will delete a dead root's orphan
3019+ * item before the root's tree is deleted - this means that if we unmount
3020+ * or crash before the deletion completes, on the next mount we will not
3021+ * delete what remains of the tree because the orphan item does not
3022+ * exists anymore, which is what tells us we have a pending deletion.
3023+ */
3024+ ret = btrfs_find_orphan_roots(fs_info);
3025+ if (ret)
3026+ goto out;
3027+
30123028 ret = btrfs_cleanup_fs_roots(fs_info);
30133029 if (ret)
30143030 goto out;
@@ -3068,7 +3084,6 @@ int btrfs_start_pre_rw_mount(struct btrfs_fs_info *fs_info) · 53 unmodified lines
30683084 }
30693085 }
30703086
3071− ret = btrfs_find_orphan_roots(fs_info);
30723087 out:
30733088 return ret;
30743089 }
fs/btrfs/extent-tree.c+22−1
@@ -3323,6 +3323,7 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans, · 3322 unmodified lines
33233323
33243324 if (last_ref && btrfs_header_generation(buf) == trans->transid) {
33253325 struct btrfs_block_group *cache;
3326+ bool must_pin = false;
33263327
33273328 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
33283329 ret = check_ref_cleanup(trans, buf->start);
@@ -3340,7 +3341,27 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans, · 11 unmodified lines
33403341 goto out;
33413342 }
33423343
3343− if (btrfs_is_zoned(fs_info)) {
3344+ /*
3345+ * If this is a leaf and there are tree mod log users, we may
3346+ * have recorded mod log operations that point to this leaf.
3347+ * So we must make sure no one reuses this leaf's extent before
3348+ * mod log operations are applied to a node, otherwise after
3349+ * rewinding a node using the mod log operations we get an
3350+ * inconsistent btree, as the leaf's extent may now be used as
3351+ * a node or leaf for another different btree.
3352+ * We are safe from races here because at this point no other
3353+ * node or root points to this extent buffer, so if after this
3354+ * check a new tree mod log user joins, it will not be able to
3355+ * find a node pointing to this leaf and record operations that
3356+ * point to this leaf.
3357+ */
3358+ if (btrfs_header_level(buf) == 0) {
3359+ read_lock(&fs_info->tree_mod_log_lock);
3360+ must_pin = !list_empty(&fs_info->tree_mod_seq_list);
3361+ read_unlock(&fs_info->tree_mod_log_lock);
3362+ }
3363+
3364+ if (must_pin || btrfs_is_zoned(fs_info)) {
33443365 btrfs_redirty_list_add(trans->transaction, buf);
33453366 pin_down_extent(trans, cache, buf->start, buf->len, 1);
33463367 btrfs_put_block_group(cache);
fs/btrfs/extent_io.c+31−2
@@ -2885,6 +2885,35 @@ static void end_page_read(struct page *page, bool uptodate, u64 start, u32 len) · 2884 unmodified lines
28852885 btrfs_subpage_end_reader(fs_info, page, start, len);
28862886 }
28872887
2888+/*
2889+ * Find extent buffer for a givne bytenr.
2890+ *
2891+ * This is for end_bio_extent_readpage(), thus we can't do any unsafe locking
2892+ * in endio context.
2893+ */
2894+static struct extent_buffer *find_extent_buffer_readpage(
2895+ struct btrfs_fs_info *fs_info, struct page *page, u64 bytenr)
2896+{
2897+ struct extent_buffer *eb;
2898+
2899+ /*
2900+ * For regular sectorsize, we can use page->private to grab extent
2901+ * buffer
2902+ */
2903+ if (fs_info->sectorsize == PAGE_SIZE) {
2904+ ASSERT(PagePrivate(page) && page->private);
2905+ return (struct extent_buffer *)page->private;
2906+ }
2907+
2908+ /* For subpage case, we need to lookup buffer radix tree */
2909+ rcu_read_lock();
2910+ eb = radix_tree_lookup(&fs_info->buffer_radix,
2911+ bytenr >> fs_info->sectorsize_bits);
2912+ rcu_read_unlock();
2913+ ASSERT(eb);
2914+ return eb;
2915+}
2916+
28882917 /*
28892918 * after a readpage IO is done, we need to:
28902919 * clear the uptodate bits on error
@@ -2996,7 +3025,7 @@ static void end_bio_extent_readpage(struct bio *bio) · 105 unmodified lines
29963025 } else {
29973026 struct extent_buffer *eb;
29983027
2999− eb = (struct extent_buffer *)page->private;
3028+ eb = find_extent_buffer_readpage(fs_info, page, start);
30003029 set_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags);
30013030 eb->read_mirror = mirror;
30023031 atomic_dec(&eb->io_pages);
@@ -3020,7 +3049,7 @@ readpage_ok: · 17 unmodified lines
30203049 */
30213050 if (page->index == end_index && i_size <= end) {
30223051 u32 zero_start = max(offset_in_page(i_size),
3023− offset_in_page(end));
3052+ offset_in_page(start));
30243053
30253054 zero_user_segment(page, zero_start,
30263055 offset_in_page(end) + 1);
fs/btrfs/inode.c+35−20
@@ -3099,11 +3099,13 @@ void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start, · 3098 unmodified lines
30993099 * @bio_offset: offset to the beginning of the bio (in bytes)
31003100 * @page: page where is the data to be verified
31013101 * @pgoff: offset inside the page
3102+ * @start: logical offset in the file
31023103 *
31033104 * The length of such check is always one sector size.
31043105 */
31053106 static int check_data_csum(struct inode *inode, struct btrfs_io_bio *io_bio,
3106− u32 bio_offset, struct page *page, u32 pgoff)
3107+ u32 bio_offset, struct page *page, u32 pgoff,
3108+ u64 start)
31073109 {
31083110 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
31093111 SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);
@@ -3130,8 +3132,8 @@ static int check_data_csum(struct inode *inode, struct btrfs_io_bio *io_bio, · 20 unmodified lines
31303132 kunmap_atomic(kaddr);
31313133 return 0;
31323134 zeroit:
3133− btrfs_print_data_csum_error(BTRFS_I(inode), page_offset(page) + pgoff,
3134− csum, csum_expected, io_bio->mirror_num);
3135+ btrfs_print_data_csum_error(BTRFS_I(inode), start, csum, csum_expected,
3136+ io_bio->mirror_num);
31353137 if (io_bio->device)
31363138 btrfs_dev_stat_inc_and_print(io_bio->device,
31373139 BTRFS_DEV_STAT_CORRUPTION_ERRS);
@@ -3184,7 +3186,8 @@ int btrfs_verify_data_csum(struct btrfs_io_bio *io_bio, u32 bio_offset, · 46 unmodified lines
31843186 pg_off += sectorsize, bio_offset += sectorsize) {
31853187 int ret;
31863188
3187− ret = check_data_csum(inode, io_bio, bio_offset, page, pg_off);
3189+ ret = check_data_csum(inode, io_bio, bio_offset, page, pg_off,
3190+ page_offset(page) + pg_off);
31883191 if (ret < 0)
31893192 return -EIO;
31903193 }
@@ -7910,7 +7913,8 @@ static blk_status_t btrfs_check_read_dio_bio(struct inode *inode, · 4719 unmodified lines
79107913 ASSERT(pgoff < PAGE_SIZE);
79117914 if (uptodate &&
79127915 (!csum || !check_data_csum(inode, io_bio,
7913− bio_offset, bvec.bv_page, pgoff))) {
7916+ bio_offset, bvec.bv_page,
7917+ pgoff, start))) {
79147918 clean_io_failure(fs_info, failure_tree, io_tree,
79157919 start, bvec.bv_page,
79167920 btrfs_ino(BTRFS_I(inode)),
@@ -8169,10 +8173,6 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap, · 252 unmodified lines
81698173 bio->bi_end_io = btrfs_end_dio_bio;
81708174 btrfs_io_bio(bio)->logical = file_offset;
81718175
8172− WARN_ON_ONCE(write && btrfs_is_zoned(fs_info) &&
8173− fs_info->max_zone_append_size &&
8174− bio_op(bio) != REQ_OP_ZONE_APPEND);
8175−
81768176 if (bio_op(bio) == REQ_OP_ZONE_APPEND) {
81778177 status = extract_ordered_extent(BTRFS_I(inode), bio,
81788178 file_offset);
@@ -9008,7 +9008,7 @@ int __init btrfs_init_cachep(void) · 829 unmodified lines
90089008
90099009 btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",
90109010 PAGE_SIZE, PAGE_SIZE,
9011− SLAB_RED_ZONE, NULL);
9011+ SLAB_MEM_SPREAD, NULL);
90129012 if (!btrfs_free_space_bitmap_cachep)
90139013 goto fail;
90149014
@@ -9877,6 +9877,7 @@ static struct btrfs_trans_handle *insert_prealloc_file_extent( · 862 unmodified lines
98779877 struct btrfs_path *path;
98789878 u64 start = ins->objectid;
98799879 u64 len = ins->offset;
9880+ int qgroup_released;
98809881 int ret;
98819882
98829883 memset(&stack_fi, 0, sizeof(stack_fi));
@@ -9889,16 +9890,16 @@ static struct btrfs_trans_handle *insert_prealloc_file_extent( · 6 unmodified lines
98899890 btrfs_set_stack_file_extent_compression(&stack_fi, BTRFS_COMPRESS_NONE);
98909891 /* Encryption and other encoding is reserved and all 0 */
98919892
9892− ret = btrfs_qgroup_release_data(inode, file_offset, len);
9893− if (ret < 0)
9894− return ERR_PTR(ret);
9893+ qgroup_released = btrfs_qgroup_release_data(inode, file_offset, len);
9894+ if (qgroup_released < 0)
9895+ return ERR_PTR(qgroup_released);
98959896
98969897 if (trans) {
98979898 ret = insert_reserved_file_extent(trans, inode,
98989899 file_offset, &stack_fi,
9899− true, ret);
9900+ true, qgroup_released);
99009901 if (ret)
9901− return ERR_PTR(ret);
9902+ goto free_qgroup;
99029903 return trans;
99039904 }
99049905
@@ -9909,21 +9910,35 @@ static struct btrfs_trans_handle *insert_prealloc_file_extent( · 4 unmodified lines
99099910 extent_info.file_offset = file_offset;
99109911 extent_info.extent_buf = (char *)&stack_fi;
99119912 extent_info.is_new_extent = true;
9912− extent_info.qgroup_reserved = ret;
9913+ extent_info.qgroup_reserved = qgroup_released;
99139914 extent_info.insertions = 0;
99149915
99159916 path = btrfs_alloc_path();
9916− if (!path)
9917− return ERR_PTR(-ENOMEM);
9917+ if (!path) {
9918+ ret = -ENOMEM;
9919+ goto free_qgroup;
9920+ }
99189921
99199922 ret = btrfs_replace_file_extents(&inode->vfs_inode, path, file_offset,
99209923 file_offset + len - 1, &extent_info,
99219924 &trans);
99229925 btrfs_free_path(path);
99239926 if (ret)
9924− return ERR_PTR(ret);
9925−
9927+ goto free_qgroup;
99269928 return trans;
9929+
9930+free_qgroup:
9931+ /*
9932+ * We have released qgroup data range at the beginning of the function,
9933+ * and normally qgroup_released bytes will be freed when committing
9934+ * transaction.
9935+ * But if we error out early, we have to free what we have released
9936+ * or we leak qgroup data reservation.
9937+ */
9938+ btrfs_qgroup_free_refroot(inode->root->fs_info,
9939+ inode->root->root_key.objectid, qgroup_released,
9940+ BTRFS_QGROUP_RSV_DATA);
9941+ return ERR_PTR(ret);
99279942 }
99289943
99299944 static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
fs/btrfs/qgroup.c+10−2
@@ -226,7 +226,6 @@ static void __del_qgroup_rb(struct btrfs_fs_info *fs_info, · 225 unmodified lines
226226 {
227227 struct btrfs_qgroup_list *list;
228228
229− btrfs_sysfs_del_one_qgroup(fs_info, qgroup);
230229 list_del(&qgroup->dirty);
231230 while (!list_empty(&qgroup->groups)) {
232231 list = list_first_entry(&qgroup->groups,
@@ -243,7 +242,6 @@ static void __del_qgroup_rb(struct btrfs_fs_info *fs_info, · 10 unmodified lines
243242 list_del(&list->next_member);
244243 kfree(list);
245244 }
246− kfree(qgroup);
247245 }
248246
249247 /* must be called with qgroup_lock held */
@@ -569,6 +567,8 @@ void btrfs_free_qgroup_config(struct btrfs_fs_info *fs_info) · 319 unmodified lines
569567 qgroup = rb_entry(n, struct btrfs_qgroup, node);
570568 rb_erase(n, &fs_info->qgroup_tree);
571569 __del_qgroup_rb(fs_info, qgroup);
570+ btrfs_sysfs_del_one_qgroup(fs_info, qgroup);
571+ kfree(qgroup);
572572 }
573573 /*
574574 * We call btrfs_free_qgroup_config() when unmounting
@@ -1578,6 +1578,14 @@ int btrfs_remove_qgroup(struct btrfs_trans_handle *trans, u64 qgroupid) · 1003 unmodified lines
15781578 spin_lock(&fs_info->qgroup_lock);
15791579 del_qgroup_rb(fs_info, qgroupid);
15801580 spin_unlock(&fs_info->qgroup_lock);
1581+
1582+ /*
1583+ * Remove the qgroup from sysfs now without holding the qgroup_lock
1584+ * spinlock, since the sysfs_remove_group() function needs to take
1585+ * the mutex kernfs_mutex through kernfs_remove_by_name_ns().
1586+ */
1587+ btrfs_sysfs_del_one_qgroup(fs_info, qgroup);
1588+ kfree(qgroup);
15811589 out:
15821590 mutex_unlock(&fs_info->qgroup_ioctl_lock);
15831591 return ret;
fs/btrfs/reada.c+18−17
@@ -209,7 +209,7 @@ int btree_readahead_hook(struct extent_buffer *eb, int err) · 208 unmodified lines
209209 /* find extent */
210210 spin_lock(&fs_info->reada_lock);
211211 re = radix_tree_lookup(&fs_info->reada_tree,
212− eb->start >> PAGE_SHIFT);
212+ eb->start >> fs_info->sectorsize_bits);
213213 if (re)
214214 re->refcnt++;
215215 spin_unlock(&fs_info->reada_lock);
@@ -240,7 +240,7 @@ static struct reada_zone *reada_find_zone(struct btrfs_device *dev, u64 logical, · 24 unmodified lines
240240 zone = NULL;
241241 spin_lock(&fs_info->reada_lock);
242242 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone,
243− logical >> PAGE_SHIFT, 1);
243+ logical >> fs_info->sectorsize_bits, 1);
244244 if (ret == 1 && logical >= zone->start && logical <= zone->end) {
245245 kref_get(&zone->refcnt);
246246 spin_unlock(&fs_info->reada_lock);
@@ -283,13 +283,13 @@ static struct reada_zone *reada_find_zone(struct btrfs_device *dev, u64 logical, · 36 unmodified lines
283283
284284 spin_lock(&fs_info->reada_lock);
285285 ret = radix_tree_insert(&dev->reada_zones,
286− (unsigned long)(zone->end >> PAGE_SHIFT),
287− zone);
286+ (unsigned long)(zone->end >> fs_info->sectorsize_bits),
287+ zone);
288288
289289 if (ret == -EEXIST) {
290290 kfree(zone);
291291 ret = radix_tree_gang_lookup(&dev->reada_zones, (void **)&zone,
292− logical >> PAGE_SHIFT, 1);
292+ logical >> fs_info->sectorsize_bits, 1);
293293 if (ret == 1 && logical >= zone->start && logical <= zone->end)
294294 kref_get(&zone->refcnt);
295295 else
@@ -315,7 +315,7 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info, · 19 unmodified lines
315315 u64 length;
316316 int real_stripes;
317317 int nzones = 0;
318− unsigned long index = logical >> PAGE_SHIFT;
318+ unsigned long index = logical >> fs_info->sectorsize_bits;
319319 int dev_replace_is_ongoing;
320320 int have_zone = 0;
321321
@@ -497,7 +497,7 @@ static void reada_extent_put(struct btrfs_fs_info *fs_info, · 175 unmodified lines
497497 struct reada_extent *re)
498498 {
499499 int i;
500− unsigned long index = re->logical >> PAGE_SHIFT;
500+ unsigned long index = re->logical >> fs_info->sectorsize_bits;
501501
502502 spin_lock(&fs_info->reada_lock);
503503 if (--re->refcnt) {
@@ -538,11 +538,12 @@ static void reada_extent_put(struct btrfs_fs_info *fs_info, · 34 unmodified lines
538538 static void reada_zone_release(struct kref *kref)
539539 {
540540 struct reada_zone *zone = container_of(kref, struct reada_zone, refcnt);
541+ struct btrfs_fs_info *fs_info = zone->device->fs_info;
541542
542− lockdep_assert_held(&zone->device->fs_info->reada_lock);
543+ lockdep_assert_held(&fs_info->reada_lock);
543544
544545 radix_tree_delete(&zone->device->reada_zones,
545− zone->end >> PAGE_SHIFT);
546+ zone->end >> fs_info->sectorsize_bits);
546547
547548 kfree(zone);
548549 }
@@ -593,7 +594,7 @@ static int reada_add_block(struct reada_control *rc, u64 logical, · 44 unmodified lines
593594 static void reada_peer_zones_set_lock(struct reada_zone *zone, int lock)
594595 {
595596 int i;
596− unsigned long index = zone->end >> PAGE_SHIFT;
597+ unsigned long index = zone->end >> zone->device->fs_info->sectorsize_bits;
597598
598599 for (i = 0; i < zone->ndevs; ++i) {
599600 struct reada_zone *peer;
@@ -628,7 +629,7 @@ static int reada_pick_zone(struct btrfs_device *dev) · 28 unmodified lines
628629 (void **)&zone, index, 1);
629630 if (ret == 0)
630631 break;
631− index = (zone->end >> PAGE_SHIFT) + 1;
632+ index = (zone->end >> dev->fs_info->sectorsize_bits) + 1;
632633 if (zone->locked) {
633634 if (zone->elems > top_locked_elems) {
634635 top_locked_elems = zone->elems;
@@ -709,7 +710,7 @@ static int reada_start_machine_dev(struct btrfs_device *dev) · 74 unmodified lines
709710 * plugging to speed things up
710711 */
711712 ret = radix_tree_gang_lookup(&dev->reada_extents, (void **)&re,
712− dev->reada_next >> PAGE_SHIFT, 1);
713+ dev->reada_next >> fs_info->sectorsize_bits, 1);
713714 if (ret == 0 || re->logical > dev->reada_curr_zone->end) {
714715 ret = reada_pick_zone(dev);
715716 if (!ret) {
@@ -718,7 +719,7 @@ static int reada_start_machine_dev(struct btrfs_device *dev) · 2 unmodified lines
718719 }
719720 re = NULL;
720721 ret = radix_tree_gang_lookup(&dev->reada_extents, (void **)&re,
721− dev->reada_next >> PAGE_SHIFT, 1);
722+ dev->reada_next >> fs_info->sectorsize_bits, 1);
722723 }
723724 if (ret == 0) {
724725 spin_unlock(&fs_info->reada_lock);
@@ -885,7 +886,7 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) · 160 unmodified lines
885886 pr_cont(" curr off %llu",
886887 device->reada_next - zone->start);
887888 pr_cont("\n");
888− index = (zone->end >> PAGE_SHIFT) + 1;
889+ index = (zone->end >> fs_info->sectorsize_bits) + 1;
889890 }
890891 cnt = 0;
891892 index = 0;
@@ -910,7 +911,7 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) · 18 unmodified lines
910911 }
911912 }
912913 pr_cont("\n");
913− index = (re->logical >> PAGE_SHIFT) + 1;
914+ index = (re->logical >> fs_info->sectorsize_bits) + 1;
914915 if (++cnt > 15)
915916 break;
916917 }
@@ -926,7 +927,7 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) · 9 unmodified lines
926927 if (ret == 0)
927928 break;
928929 if (!re->scheduled) {
929− index = (re->logical >> PAGE_SHIFT) + 1;
930+ index = (re->logical >> fs_info->sectorsize_bits) + 1;
930931 continue;
931932 }
932933 pr_debug("re: logical %llu size %u list empty %d scheduled %d",
@@ -942,7 +943,7 @@ static void dump_devs(struct btrfs_fs_info *fs_info, int all) · 9 unmodified lines
942943 }
943944 }
944945 pr_cont("\n");
945− index = (re->logical >> PAGE_SHIFT) + 1;
946+ index = (re->logical >> fs_info->sectorsize_bits) + 1;
946947 }
947948 spin_unlock(&fs_info->reada_lock);
948949 }
fs/btrfs/tree-log.c+4−4
@@ -3169,10 +3169,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, · 3168 unmodified lines
31693169
31703170 mutex_lock(&log_root_tree->log_mutex);
31713171
3172− index2 = log_root_tree->log_transid % 2;
3173− list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);
3174− root_log_ctx.log_transid = log_root_tree->log_transid;
3175−
31763172 if (btrfs_is_zoned(fs_info)) {
31773173 if (!log_root_tree->node) {
31783174 ret = btrfs_alloc_log_tree_node(trans, log_root_tree);
@@ -3183,6 +3179,10 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, · 4 unmodified lines
31833179 }
31843180 }
31853181
3182+ index2 = log_root_tree->log_transid % 2;
3183+ list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);
3184+ root_log_ctx.log_transid = log_root_tree->log_transid;
3185+
31863186 /*
31873187 * Now we are safe to update the log_root_tree because we're under the
31883188 * log_mutex, and we're a current writer so we're holding the commit
fs/btrfs/volumes.c+3−0
@@ -7448,6 +7448,9 @@ static int btrfs_device_init_dev_stats(struct btrfs_device *device, · 7447 unmodified lines
74487448 int item_size;
74497449 int i, ret, slot;
74507450
7451+ if (!device->fs_info->dev_root)
7452+ return 0;
7453+
74517454 key.objectid = BTRFS_DEV_STATS_OBJECTID;
74527455 key.type = BTRFS_PERSISTENT_ITEM_KEY;
74537456 key.offset = device->devid;
fs/cachefiles/bind.c+6−0
@@ -118,6 +118,12 @@ static int cachefiles_daemon_add_cache(struct cachefiles_cache *cache) · 117 unmodified lines
118118 cache->mnt = path.mnt;
119119 root = path.dentry;
120120
121+ ret = -EINVAL;
122+ if (mnt_user_ns(path.mnt) != &init_user_ns) {
123+ pr_warn("File cache on idmapped mounts not supported");
124+ goto error_unsupported;
125+ }
126+
121127 /* check parameters */
122128 ret = -EOPNOTSUPP;
123129 if (d_is_negative(root) ||
fs/cachefiles/rdwr.c+3−4
@@ -24,17 +24,16 @@ static int cachefiles_read_waiter(wait_queue_entry_t *wait, unsigned mode, · 23 unmodified lines
2424 container_of(wait, struct cachefiles_one_read, monitor);
2525 struct cachefiles_object *object;
2626 struct fscache_retrieval *op = monitor->op;
27− struct wait_bit_key *key = _key;
27+ struct wait_page_key *key = _key;
2828 struct page *page = wait->private;
2929
3030 ASSERT(key);
3131
3232 _enter("{%lu},%u,%d,{%p,%u}",
3333 monitor->netfs_page->index, mode, sync,
34− key->flags, key->bit_nr);
34+ key->page, key->bit_nr);
3535
36− if (key->flags != &page->flags ||
37− key->bit_nr != PG_locked)
36+ if (key->page != page || key->bit_nr != PG_locked)
3837 return 0;
3938
4039 _debug("--- monitor %p %lx ---", page, page->flags);
fs/cifs/cifs_swn.c+1−1
@@ -248,7 +248,7 @@ nlmsg_fail: · 247 unmodified lines
248248
249249 /*
250250 * Try to find a matching registration for the tcon's server name and share name.
251− * Calls to this funciton must be protected by cifs_swnreg_idr_mutex.
251+ * Calls to this function must be protected by cifs_swnreg_idr_mutex.
252252 * TODO Try to avoid memory allocations
253253 */
254254 static struct cifs_swn_reg *cifs_find_swn_reg(struct cifs_tcon *tcon)
fs/cifs/cifsacl.c+5−3
@@ -1118,7 +1118,6 @@ static int set_chmod_dacl(struct cifs_acl *pdacl, struct cifs_acl *pndacl, · 1117 unmodified lines
11181118 /* Retain old ACEs which we can retain */
11191119 for (i = 0; i < src_num_aces; ++i) {
11201120 pntace = (struct cifs_ace *) (acl_base + size);
1121− pnntace = (struct cifs_ace *) (nacl_base + nsize);
11221121
11231122 if (!new_aces_set && (pntace->flags & INHERITED_ACE)) {
11241123 /* Place the new ACEs in between existing explicit and inherited */
@@ -1131,14 +1130,17 @@ static int set_chmod_dacl(struct cifs_acl *pdacl, struct cifs_acl *pndacl, · 6 unmodified lines
11311130 }
11321131
11331132 /* If it's any one of the ACE we're replacing, skip! */
1134− if ((compare_sids(&pntace->sid, &sid_unix_NFS_mode) == 0) ||
1133+ if (((compare_sids(&pntace->sid, &sid_unix_NFS_mode) == 0) ||
11351134 (compare_sids(&pntace->sid, pownersid) == 0) ||
11361135 (compare_sids(&pntace->sid, pgrpsid) == 0) ||
11371136 (compare_sids(&pntace->sid, &sid_everyone) == 0) ||
1138− (compare_sids(&pntace->sid, &sid_authusers) == 0)) {
1137+ (compare_sids(&pntace->sid, &sid_authusers) == 0))) {
11391138 goto next_ace;
11401139 }
11411140
1141+ /* update the pointer to the next ACE to populate*/
1142+ pnntace = (struct cifs_ace *) (nacl_base + nsize);
1143+
11421144 nsize += cifs_copy_ace(pnntace, pntace, NULL);
11431145 num_aces++;
11441146
fs/cifs/cifsglob.h+2−2
@@ -919,8 +919,8 @@ struct cifs_ses { · 918 unmodified lines
919919 bool binding:1; /* are we binding the session? */
920920 __u16 session_flags;
921921 __u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
922− __u8 smb3encryptionkey[SMB3_SIGN_KEY_SIZE];
923− __u8 smb3decryptionkey[SMB3_SIGN_KEY_SIZE];
922+ __u8 smb3encryptionkey[SMB3_ENC_DEC_KEY_SIZE];
923+ __u8 smb3decryptionkey[SMB3_ENC_DEC_KEY_SIZE];
924924 __u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
925925
926926 __u8 binding_preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
fs/cifs/cifspdu.h+5−0
@@ -147,6 +147,11 @@ · 146 unmodified lines
147147 */
148148 #define SMB3_SIGN_KEY_SIZE (16)
149149
150+/*
151+ * Size of the smb3 encryption/decryption keys
152+ */
153+#define SMB3_ENC_DEC_KEY_SIZE (32)
154+
150155 #define CIFS_CLIENT_CHALLENGE_SIZE (8)
151156 #define CIFS_SERVER_CHALLENGE_SIZE (8)
152157 #define CIFS_HMAC_MD5_HASH_SIZE (16)
fs/cifs/file.c+1−0
@@ -165,6 +165,7 @@ int cifs_posix_open(char *full_path, struct inode **pinode, · 164 unmodified lines
165165 goto posix_open_ret;
166166 }
167167 } else {
168+ cifs_revalidate_mapping(*pinode);
168169 cifs_fattr_to_inode(*pinode, &fattr);
169170 }
170171
fs/cifs/fs_context.c+4−2
@@ -1196,9 +1196,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, · 1195 unmodified lines
11961196 pr_warn_once("Witness protocol support is experimental\n");
11971197 break;
11981198 case Opt_rootfs:
1199−#ifdef CONFIG_CIFS_ROOT
1200− ctx->rootfs = true;
1199+#ifndef CONFIG_CIFS_ROOT
1200+ cifs_dbg(VFS, "rootfs support requires CONFIG_CIFS_ROOT config option\n");
1201+ goto cifs_parse_mount_err;
12011202 #endif
1203+ ctx->rootfs = true;
12021204 break;
12031205 case Opt_posixpaths:
12041206 if (result.negated)
fs/cifs/inode.c+9−1
@@ -2395,7 +2395,7 @@ int cifs_getattr(struct user_namespace *mnt_userns, const struct path *path, · 2394 unmodified lines
23952395 * We need to be sure that all dirty pages are written and the server
23962396 * has actual ctime, mtime and file length.
23972397 */
2398− if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE)) &&
2398+ if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE | STATX_BLOCKS)) &&
23992399 !CIFS_CACHE_READ(CIFS_I(inode)) &&
24002400 inode->i_mapping && inode->i_mapping->nrpages != 0) {
24012401 rc = filemap_fdatawait(inode->i_mapping);
@@ -2585,6 +2585,14 @@ set_size_out: · 183 unmodified lines
25852585 if (rc == 0) {
25862586 cifsInode->server_eof = attrs->ia_size;
25872587 cifs_setsize(inode, attrs->ia_size);
2588+ /*
2589+ * i_blocks is not related to (i_size / i_blksize), but instead
2590+ * 512 byte (2**9) size is required for calculating num blocks.
2591+ * Until we can query the server for actual allocation size,
2592+ * this is best estimate we have for blocks allocated for a file
2593+ * Number of blocks must be rounded up so size 1 is not 0 blocks
2594+ */
2595+ inode->i_blocks = (512 - 1 + attrs->ia_size) >> 9;
25882596
25892597 /*
25902598 * The man page of truncate says if the size changed,
fs/cifs/smb2glob.h+1−0
@@ -58,6 +58,7 @@ · 57 unmodified lines
5858 #define SMB2_HMACSHA256_SIZE (32)
5959 #define SMB2_CMACAES_SIZE (16)
6060 #define SMB3_SIGNKEY_SIZE (16)
61+#define SMB3_GCM128_CRYPTKEY_SIZE (16)
6162 #define SMB3_GCM256_CRYPTKEY_SIZE (32)
6263
6364 /* Maximum buffer size value we can send with 1 credit */
fs/cifs/smb2misc.c+2−2
@@ -754,8 +754,8 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server) · 753 unmodified lines
754754 }
755755 }
756756 spin_unlock(&cifs_tcp_ses_lock);
757− cifs_dbg(FYI, "Can not process oplock break for non-existent connection\n");
758− return false;
757+ cifs_dbg(FYI, "No file id matched, oplock break ignored\n");
758+ return true;
759759 }
760760
761761 void
fs/cifs/smb2ops.c+20−7
@@ -2038,6 +2038,7 @@ smb2_duplicate_extents(const unsigned int xid, · 2037 unmodified lines
20382038 {
20392039 int rc;
20402040 unsigned int ret_data_len;
2041+ struct inode *inode;
20412042 struct duplicate_extents_to_file dup_ext_buf;
20422043 struct cifs_tcon *tcon = tlink_tcon(trgtfile->tlink);
20432044
@@ -2054,10 +2055,21 @@ smb2_duplicate_extents(const unsigned int xid, · 10 unmodified lines
20542055 cifs_dbg(FYI, "Duplicate extents: src off %lld dst off %lld len %lld\n",
20552056 src_off, dest_off, len);
20562057
2057− rc = smb2_set_file_size(xid, tcon, trgtfile, dest_off + len, false);
2058− if (rc)
2059− goto duplicate_extents_out;
2058+ inode = d_inode(trgtfile->dentry);
2059+ if (inode->i_size < dest_off + len) {
2060+ rc = smb2_set_file_size(xid, tcon, trgtfile, dest_off + len, false);
2061+ if (rc)
2062+ goto duplicate_extents_out;
20602063
2064+ /*
2065+ * Although also could set plausible allocation size (i_blocks)
2066+ * here in addition to setting the file size, in reflink
2067+ * it is likely that the target file is sparse. Its allocation
2068+ * size will be queried on next revalidate, but it is important
2069+ * to make sure that file's cached size is updated immediately
2070+ */
2071+ cifs_setsize(inode, dest_off + len);
2072+ }
20612073 rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,
20622074 trgtfile->fid.volatile_fid,
20632075 FSCTL_DUPLICATE_EXTENTS_TO_FILE,
@@ -4158,7 +4170,7 @@ smb2_get_enc_key(struct TCP_Server_Info *server, __u64 ses_id, int enc, u8 *key) · 2094 unmodified lines
41584170 if (ses->Suid == ses_id) {
41594171 ses_enc_key = enc ? ses->smb3encryptionkey :
41604172 ses->smb3decryptionkey;
4161− memcpy(key, ses_enc_key, SMB3_SIGN_KEY_SIZE);
4173+ memcpy(key, ses_enc_key, SMB3_ENC_DEC_KEY_SIZE);
41624174 spin_unlock(&cifs_tcp_ses_lock);
41634175 return 0;
41644176 }
@@ -4185,7 +4197,7 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, · 20 unmodified lines
41854197 int rc = 0;
41864198 struct scatterlist *sg;
41874199 u8 sign[SMB2_SIGNATURE_SIZE] = {};
4188− u8 key[SMB3_SIGN_KEY_SIZE];
4200+ u8 key[SMB3_ENC_DEC_KEY_SIZE];
41894201 struct aead_request *req;
41904202 char *iv;
41914203 unsigned int iv_len;
@@ -4209,10 +4221,11 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, · 17 unmodified lines
42094221 tfm = enc ? server->secmech.ccmaesencrypt :
42104222 server->secmech.ccmaesdecrypt;
42114223
4212− if (server->cipher_type == SMB2_ENCRYPTION_AES256_GCM)
4224+ if ((server->cipher_type == SMB2_ENCRYPTION_AES256_CCM) ||
4225+ (server->cipher_type == SMB2_ENCRYPTION_AES256_GCM))
42134226 rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE);
42144227 else
4215− rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE);
4228+ rc = crypto_aead_setkey(tfm, key, SMB3_GCM128_CRYPTKEY_SIZE);
42164229
42174230 if (rc) {
42184231 cifs_server_dbg(VFS, "%s: Failed to set aead key %d\n", __func__, rc);
fs/cifs/smb2transport.c+28−9
@@ -298,7 +298,8 @@ static int generate_key(struct cifs_ses *ses, struct kvec label, · 297 unmodified lines
298298 {
299299 unsigned char zero = 0x0;
300300 __u8 i[4] = {0, 0, 0, 1};
301− __u8 L[4] = {0, 0, 0, 128};
301+ __u8 L128[4] = {0, 0, 0, 128};
302+ __u8 L256[4] = {0, 0, 1, 0};
302303 int rc = 0;
303304 unsigned char prfhash[SMB2_HMACSHA256_SIZE];
304305 unsigned char *hashptr = prfhash;
@@ -354,8 +355,14 @@ static int generate_key(struct cifs_ses *ses, struct kvec label, · 49 unmodified lines
354355 goto smb3signkey_ret;
355356 }
356357
357− rc = crypto_shash_update(&server->secmech.sdeschmacsha256->shash,
358− L, 4);
358+ if ((server->cipher_type == SMB2_ENCRYPTION_AES256_CCM) ||
359+ (server->cipher_type == SMB2_ENCRYPTION_AES256_GCM)) {
360+ rc = crypto_shash_update(&server->secmech.sdeschmacsha256->shash,
361+ L256, 4);
362+ } else {
363+ rc = crypto_shash_update(&server->secmech.sdeschmacsha256->shash,
364+ L128, 4);
365+ }
359366 if (rc) {
360367 cifs_server_dbg(VFS, "%s: Could not update with L\n", __func__);
361368 goto smb3signkey_ret;
@@ -390,6 +397,9 @@ generate_smb3signingkey(struct cifs_ses *ses, · 28 unmodified lines
390397 const struct derivation_triplet *ptriplet)
391398 {
392399 int rc;
400+#ifdef CONFIG_CIFS_DEBUG_DUMP_KEYS
401+ struct TCP_Server_Info *server = ses->server;
402+#endif
393403
394404 /*
395405 * All channels use the same encryption/decryption keys but
@@ -422,11 +432,11 @@ generate_smb3signingkey(struct cifs_ses *ses, · 26 unmodified lines
422432 rc = generate_key(ses, ptriplet->encryption.label,
423433 ptriplet->encryption.context,
424434 ses->smb3encryptionkey,
425− SMB3_SIGN_KEY_SIZE);
435+ SMB3_ENC_DEC_KEY_SIZE);
426436 rc = generate_key(ses, ptriplet->decryption.label,
427437 ptriplet->decryption.context,
428438 ses->smb3decryptionkey,
429− SMB3_SIGN_KEY_SIZE);
439+ SMB3_ENC_DEC_KEY_SIZE);
430440 if (rc)
431441 return rc;
432442 }
@@ -442,14 +452,23 @@ generate_smb3signingkey(struct cifs_ses *ses, · 9 unmodified lines
442452 */
443453 cifs_dbg(VFS, "Session Id %*ph\n", (int)sizeof(ses->Suid),
444454 &ses->Suid);
455+ cifs_dbg(VFS, "Cipher type %d\n", server->cipher_type);
445456 cifs_dbg(VFS, "Session Key %*ph\n",
446457 SMB2_NTLMV2_SESSKEY_SIZE, ses->auth_key.response);
447458 cifs_dbg(VFS, "Signing Key %*ph\n",
448459 SMB3_SIGN_KEY_SIZE, ses->smb3signingkey);
449− cifs_dbg(VFS, "ServerIn Key %*ph\n",
450− SMB3_SIGN_KEY_SIZE, ses->smb3encryptionkey);
451− cifs_dbg(VFS, "ServerOut Key %*ph\n",
452− SMB3_SIGN_KEY_SIZE, ses->smb3decryptionkey);
460+ if ((server->cipher_type == SMB2_ENCRYPTION_AES256_CCM) ||
461+ (server->cipher_type == SMB2_ENCRYPTION_AES256_GCM)) {
462+ cifs_dbg(VFS, "ServerIn Key %*ph\n",
463+ SMB3_GCM256_CRYPTKEY_SIZE, ses->smb3encryptionkey);
464+ cifs_dbg(VFS, "ServerOut Key %*ph\n",
465+ SMB3_GCM256_CRYPTKEY_SIZE, ses->smb3decryptionkey);
466+ } else {
467+ cifs_dbg(VFS, "ServerIn Key %*ph\n",
468+ SMB3_GCM128_CRYPTKEY_SIZE, ses->smb3encryptionkey);
469+ cifs_dbg(VFS, "ServerOut Key %*ph\n",
470+ SMB3_GCM128_CRYPTKEY_SIZE, ses->smb3decryptionkey);
471+ }
453472 #endif
454473 return rc;
455474 }
fs/cifs/transport.c+6−1
@@ -1196,9 +1196,12 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses, · 1195 unmodified lines
11961196 /*
11971197 * Compounding is never used during session establish.
11981198 */
1199− if ((ses->status == CifsNew) || (optype & CIFS_NEG_OP) || (optype & CIFS_SESS_OP))
1199+ if ((ses->status == CifsNew) || (optype & CIFS_NEG_OP) || (optype & CIFS_SESS_OP)) {
1200+ mutex_lock(&server->srv_mutex);
12001201 smb311_update_preauth_hash(ses, rqst[0].rq_iov,
12011202 rqst[0].rq_nvec);
1203+ mutex_unlock(&server->srv_mutex);
1204+ }
12021205
12031206 for (i = 0; i < num_rqst; i++) {
12041207 rc = wait_for_response(server, midQ[i]);
@@ -1266,7 +1269,9 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses, · 61 unmodified lines
12661269 .iov_base = resp_iov[0].iov_base,
12671270 .iov_len = resp_iov[0].iov_len
12681271 };
1272+ mutex_lock(&server->srv_mutex);
12691273 smb311_update_preauth_hash(ses, &iov, 1);
1274+ mutex_unlock(&server->srv_mutex);
12701275 }
12711276
12721277 out:
fs/ext4/balloc.c+26−12
@@ -626,27 +626,41 @@ int ext4_claim_free_clusters(struct ext4_sb_info *sbi, · 625 unmodified lines
626626
627627 /**
628628 * ext4_should_retry_alloc() - check if a block allocation should be retried
629− * @sb: super block
630− * @retries: number of attemps has been made
629+ * @sb: superblock
630+ * @retries: number of retry attempts made so far
631631 *
632− * ext4_should_retry_alloc() is called when ENOSPC is returned, and if
633− * it is profitable to retry the operation, this function will wait
634− * for the current or committing transaction to complete, and then
635− * return TRUE. We will only retry once.
632+ * ext4_should_retry_alloc() is called when ENOSPC is returned while
633+ * attempting to allocate blocks. If there's an indication that a pending
634+ * journal transaction might free some space and allow another attempt to
635+ * succeed, this function will wait for the current or committing transaction
636+ * to complete and then return TRUE.
636637 */
637638 int ext4_should_retry_alloc(struct super_block *sb, int *retries)
638639 {
639− if (!ext4_has_free_clusters(EXT4_SB(sb), 1, 0) ||
640− (*retries)++ > 1 ||
641− !EXT4_SB(sb)->s_journal)
640+ struct ext4_sb_info *sbi = EXT4_SB(sb);
641+
642+ if (!sbi->s_journal)
642643 return 0;
643644
644− smp_mb();
645− if (EXT4_SB(sb)->s_mb_free_pending == 0)
645+ if (++(*retries) > 3) {
646+ percpu_counter_inc(&sbi->s_sra_exceeded_retry_limit);
646647 return 0;
648+ }
647649
650+ /*
651+ * if there's no indication that blocks are about to be freed it's
652+ * possible we just missed a transaction commit that did so
653+ */
654+ smp_mb();
655+ if (sbi->s_mb_free_pending == 0)
656+ return ext4_has_free_clusters(sbi, 1, 0);
657+
658+ /*
659+ * it's possible we've just missed a transaction commit here,
660+ * so ignore the returned status
661+ */
648662 jbd_debug(1, "%s: retrying operation after ENOSPC\n", sb->s_id);
649− jbd2_journal_force_commit_nested(EXT4_SB(sb)->s_journal);
663+ (void) jbd2_journal_force_commit_nested(sbi->s_journal);
650664 return 1;
651665 }
652666
fs/ext4/ext4.h+3−0
@@ -1484,6 +1484,7 @@ struct ext4_sb_info { · 1483 unmodified lines
14841484 struct percpu_counter s_freeinodes_counter;
14851485 struct percpu_counter s_dirs_counter;
14861486 struct percpu_counter s_dirtyclusters_counter;
1487+ struct percpu_counter s_sra_exceeded_retry_limit;
14871488 struct blockgroup_lock *s_blockgroup_lock;
14881489 struct proc_dir_entry *s_proc;
14891490 struct kobject s_kobj;
@@ -2793,6 +2794,8 @@ void __ext4_fc_track_link(handle_t *handle, struct inode *inode, · 1303 unmodified lines
27932794 struct dentry *dentry);
27942795 void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry);
27952796 void ext4_fc_track_link(handle_t *handle, struct dentry *dentry);
2797+void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
2798+ struct dentry *dentry);
27962799 void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
27972800 void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
27982801 void ext4_fc_mark_ineligible(struct super_block *sb, int reason);
fs/ext4/extents.c+1−1
@@ -4382,7 +4382,7 @@ static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset, · 4381 unmodified lines
43824382 {
43834383 struct inode *inode = file_inode(file);
43844384 handle_t *handle;
4385− int ret, ret2 = 0, ret3 = 0;
4385+ int ret = 0, ret2 = 0, ret3 = 0;
43864386 int retries = 0;
43874387 int depth = 0;
43884388 struct ext4_map_blocks map;
fs/ext4/fast_commit.c+7−2
@@ -513,10 +513,10 @@ void ext4_fc_track_link(handle_t *handle, struct dentry *dentry) · 512 unmodified lines
513513 __ext4_fc_track_link(handle, d_inode(dentry), dentry);
514514 }
515515
516−void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
516+void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
517+ struct dentry *dentry)
517518 {
518519 struct __track_dentry_update_args args;
519− struct inode *inode = d_inode(dentry);
520520 int ret;
521521
522522 args.dentry = dentry;
@@ -527,6 +527,11 @@ void ext4_fc_track_create(handle_t *handle, struct dentry *dentry) · 4 unmodified lines
527527 trace_ext4_fc_track_create(inode, dentry, ret);
528528 }
529529
530+void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
531+{
532+ __ext4_fc_track_create(handle, d_inode(dentry), dentry);
533+}
534+
530535 /* __track_fn for inode tracking */
531536 static int __track_inode(struct inode *inode, void *arg, bool update)
532537 {
fs/ext4/inode.c+10−8
@@ -1938,13 +1938,13 @@ static int __ext4_journalled_writepage(struct page *page, · 1937 unmodified lines
19381938 if (!ret)
19391939 ret = err;
19401940
1941− if (!ext4_has_inline_data(inode))
1942− ext4_walk_page_buffers(NULL, page_bufs, 0, len,
1943− NULL, bput_one);
19441941 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
19451942 out:
19461943 unlock_page(page);
19471944 out_no_pagelock:
1945+ if (!inline_data && page_bufs)
1946+ ext4_walk_page_buffers(NULL, page_bufs, 0, len,
1947+ NULL, bput_one);
19481948 brelse(inode_bh);
19491949 return ret;
19501950 }
@@ -5026,7 +5026,7 @@ static int ext4_do_update_inode(handle_t *handle, · 3075 unmodified lines
50265026 struct ext4_inode_info *ei = EXT4_I(inode);
50275027 struct buffer_head *bh = iloc->bh;
50285028 struct super_block *sb = inode->i_sb;
5029− int err = 0, rc, block;
5029+ int err = 0, block;
50305030 int need_datasync = 0, set_large_file = 0;
50315031 uid_t i_uid;
50325032 gid_t i_gid;
@@ -5138,9 +5138,9 @@ static int ext4_do_update_inode(handle_t *handle, · 105 unmodified lines
51385138 bh->b_data);
51395139
51405140 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
5141− rc = ext4_handle_dirty_metadata(handle, NULL, bh);
5142− if (!err)
5143− err = rc;
5141+ err = ext4_handle_dirty_metadata(handle, NULL, bh);
5142+ if (err)
5143+ goto out_brelse;
51445144 ext4_clear_inode_state(inode, EXT4_STATE_NEW);
51455145 if (set_large_file) {
51465146 BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access");
@@ -5387,8 +5387,10 @@ int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, · 240 unmodified lines
53875387 inode->i_gid = attr->ia_gid;
53885388 error = ext4_mark_inode_dirty(handle, inode);
53895389 ext4_journal_stop(handle);
5390− if (unlikely(error))
5390+ if (unlikely(error)) {
5391+ ext4_fc_stop_update(inode);
53915392 return error;
5393+ }
53925394 }
53935395
53945396 if (attr->ia_valid & ATTR_SIZE) {
fs/ext4/mballoc.c+9−2
@@ -2709,8 +2709,15 @@ static int ext4_mb_init_backend(struct super_block *sb) · 2708 unmodified lines
27092709 }
27102710
27112711 if (ext4_has_feature_flex_bg(sb)) {
2712− /* a single flex group is supposed to be read by a single IO */
2713− sbi->s_mb_prefetch = min(1 << sbi->s_es->s_log_groups_per_flex,
2712+ /* a single flex group is supposed to be read by a single IO.
2713+ * 2 ^ s_log_groups_per_flex != UINT_MAX as s_mb_prefetch is
2714+ * unsigned integer, so the maximum shift is 32.
2715+ */
2716+ if (sbi->s_es->s_log_groups_per_flex >= 32) {
2717+ ext4_msg(sb, KERN_ERR, "too many log groups per flexible block group");
2718+ goto err_freesgi;
2719+ }
2720+ sbi->s_mb_prefetch = min_t(uint, 1 << sbi->s_es->s_log_groups_per_flex,
27142721 BLK_MAX_SEGMENT_SIZE >> (sb->s_blocksize_bits - 9));
27152722 sbi->s_mb_prefetch *= 8; /* 8 prefetch IOs in flight at most */
27162723 } else {
fs/ext4/namei.c+39−11
@@ -3613,6 +3613,31 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent, · 3612 unmodified lines
36133613 return retval;
36143614 }
36153615
3616+static void ext4_resetent(handle_t *handle, struct ext4_renament *ent,
3617+ unsigned ino, unsigned file_type)
3618+{
3619+ struct ext4_renament old = *ent;
3620+ int retval = 0;
3621+
3622+ /*
3623+ * old->de could have moved from under us during make indexed dir,
3624+ * so the old->de may no longer valid and need to find it again
3625+ * before reset old inode info.
3626+ */
3627+ old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
3628+ if (IS_ERR(old.bh))
3629+ retval = PTR_ERR(old.bh);
3630+ if (!old.bh)
3631+ retval = -ENOENT;
3632+ if (retval) {
3633+ ext4_std_error(old.dir->i_sb, retval);
3634+ return;
3635+ }
3636+
3637+ ext4_setent(handle, &old, ino, file_type);
3638+ brelse(old.bh);
3639+}
3640+
36163641 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir,
36173642 const struct qstr *d_name)
36183643 {
@@ -3774,14 +3799,14 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 155 unmodified lines
37743799 */
37753800 retval = -ENOENT;
37763801 if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino)
3777− goto end_rename;
3802+ goto release_bh;
37783803
37793804 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
37803805 &new.de, &new.inlined);
37813806 if (IS_ERR(new.bh)) {
37823807 retval = PTR_ERR(new.bh);
37833808 new.bh = NULL;
3784− goto end_rename;
3809+ goto release_bh;
37853810 }
37863811 if (new.bh) {
37873812 if (!new.inode) {
@@ -3798,15 +3823,13 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 10 unmodified lines
37983823 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits);
37993824 if (IS_ERR(handle)) {
38003825 retval = PTR_ERR(handle);
3801− handle = NULL;
3802− goto end_rename;
3826+ goto release_bh;
38033827 }
38043828 } else {
38053829 whiteout = ext4_whiteout_for_rename(mnt_userns, &old, credits, &handle);
38063830 if (IS_ERR(whiteout)) {
38073831 retval = PTR_ERR(whiteout);
3808− whiteout = NULL;
3809− goto end_rename;
3832+ goto release_bh;
38103833 }
38113834 }
38123835
@@ -3850,6 +3873,7 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 37 unmodified lines
38503873 retval = ext4_mark_inode_dirty(handle, whiteout);
38513874 if (unlikely(retval))
38523875 goto end_rename;
3876+
38533877 }
38543878 if (!new.bh) {
38553879 retval = ext4_add_entry(handle, new.dentry, old.inode);
@@ -3923,6 +3947,8 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 67 unmodified lines
39233947 ext4_fc_track_unlink(handle, new.dentry);
39243948 __ext4_fc_track_link(handle, old.inode, new.dentry);
39253949 __ext4_fc_track_unlink(handle, old.inode, old.dentry);
3950+ if (whiteout)
3951+ __ext4_fc_track_create(handle, whiteout, old.dentry);
39263952 }
39273953
39283954 if (new.inode) {
@@ -3937,19 +3963,21 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 8 unmodified lines
39373963 end_rename:
39383964 if (whiteout) {
39393965 if (retval) {
3940− ext4_setent(handle, &old,
3941− old.inode->i_ino, old_file_type);
3966+ ext4_resetent(handle, &old,
3967+ old.inode->i_ino, old_file_type);
39423968 drop_nlink(whiteout);
3969+ ext4_orphan_add(handle, whiteout);
39433970 }
39443971 unlock_new_inode(whiteout);
3972+ ext4_journal_stop(handle);
39453973 iput(whiteout);
3946−
3974+ } else {
3975+ ext4_journal_stop(handle);
39473976 }
3977+release_bh:
39483978 brelse(old.dir_bh);
39493979 brelse(old.bh);
39503980 brelse(new.bh);
3951− if (handle)
3952− ext4_journal_stop(handle);
39533981 return retval;
39543982 }
39553983
fs/ext4/super.c+6−1
@@ -1210,6 +1210,7 @@ static void ext4_put_super(struct super_block *sb) · 1209 unmodified lines
12101210 percpu_counter_destroy(&sbi->s_freeinodes_counter);
12111211 percpu_counter_destroy(&sbi->s_dirs_counter);
12121212 percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1213+ percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
12131214 percpu_free_rwsem(&sbi->s_writepages_rwsem);
12141215 #ifdef CONFIG_QUOTA
12151216 for (i = 0; i < EXT4_MAXQUOTAS; i++)
@@ -5011,6 +5012,9 @@ no_journal: · 3795 unmodified lines
50115012 if (!err)
50125013 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
50135014 GFP_KERNEL);
5015+ if (!err)
5016+ err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
5017+ GFP_KERNEL);
50145018 if (!err)
50155019 err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
50165020
@@ -5124,6 +5128,7 @@ failed_mount6: · 107 unmodified lines
51245128 percpu_counter_destroy(&sbi->s_freeinodes_counter);
51255129 percpu_counter_destroy(&sbi->s_dirs_counter);
51265130 percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
5131+ percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
51275132 percpu_free_rwsem(&sbi->s_writepages_rwsem);
51285133 failed_mount5:
51295134 ext4_ext_release(sb);
@@ -5149,8 +5154,8 @@ failed_mount_wq: · 19 unmodified lines
51495154 failed_mount3a:
51505155 ext4_es_unregister_shrinker(sbi);
51515156 failed_mount3:
5152− del_timer_sync(&sbi->s_err_report);
51535157 flush_work(&sbi->s_error_work);
5158+ del_timer_sync(&sbi->s_err_report);
51545159 if (sbi->s_mmp_tsk)
51555160 kthread_stop(sbi->s_mmp_tsk);
51565161 failed_mount2:
fs/ext4/sysfs.c+7−0
@@ -24,6 +24,7 @@ typedef enum { · 23 unmodified lines
2424 attr_session_write_kbytes,
2525 attr_lifetime_write_kbytes,
2626 attr_reserved_clusters,
27+ attr_sra_exceeded_retry_limit,
2728 attr_inode_readahead,
2829 attr_trigger_test_error,
2930 attr_first_error_time,
@@ -202,6 +203,7 @@ EXT4_ATTR_FUNC(delayed_allocation_blocks, 0444); · 172 unmodified lines
202203 EXT4_ATTR_FUNC(session_write_kbytes, 0444);
203204 EXT4_ATTR_FUNC(lifetime_write_kbytes, 0444);
204205 EXT4_ATTR_FUNC(reserved_clusters, 0644);
206+EXT4_ATTR_FUNC(sra_exceeded_retry_limit, 0444);
205207
206208 EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, inode_readahead,
207209 ext4_sb_info, s_inode_readahead_blks);
@@ -251,6 +253,7 @@ static struct attribute *ext4_attrs[] = { · 43 unmodified lines
251253 ATTR_LIST(session_write_kbytes),
252254 ATTR_LIST(lifetime_write_kbytes),
253255 ATTR_LIST(reserved_clusters),
256+ ATTR_LIST(sra_exceeded_retry_limit),
254257 ATTR_LIST(inode_readahead_blks),
255258 ATTR_LIST(inode_goal),
256259 ATTR_LIST(mb_stats),
@@ -374,6 +377,10 @@ static ssize_t ext4_attr_show(struct kobject *kobj, · 117 unmodified lines
374377 return snprintf(buf, PAGE_SIZE, "%llu\n",
375378 (unsigned long long)
376379 atomic64_read(&sbi->s_resv_clusters));
380+ case attr_sra_exceeded_retry_limit:
381+ return snprintf(buf, PAGE_SIZE, "%llu\n",
382+ (unsigned long long)
383+ percpu_counter_sum(&sbi->s_sra_exceeded_retry_limit));
377384 case attr_inode_readahead:
378385 case attr_pointer_ui:
379386 if (!ptr)
fs/ext4/verity.c+55−34
@@ -201,55 +201,76 @@ static int ext4_end_enable_verity(struct file *filp, const void *desc, · 200 unmodified lines
201201 struct inode *inode = file_inode(filp);
202202 const int credits = 2; /* superblock and inode for ext4_orphan_del() */
203203 handle_t *handle;
204+ struct ext4_iloc iloc;
204205 int err = 0;
205− int err2;
206206
207− if (desc != NULL) {
208− /* Succeeded; write the verity descriptor. */
209− err = ext4_write_verity_descriptor(inode, desc, desc_size,
210− merkle_tree_size);
211−
212− /* Write all pages before clearing VERITY_IN_PROGRESS. */
213− if (!err)
214− err = filemap_write_and_wait(inode->i_mapping);
215− }
207+ /*
208+ * If an error already occurred (which fs/verity/ signals by passing
209+ * desc == NULL), then only clean-up is needed.
210+ */
211+ if (desc == NULL)
212+ goto cleanup;
216213
217− /* If we failed, truncate anything we wrote past i_size. */
218− if (desc == NULL || err)
219− ext4_truncate(inode);
214+ /* Append the verity descriptor. */
215+ err = ext4_write_verity_descriptor(inode, desc, desc_size,
216+ merkle_tree_size);
217+ if (err)
218+ goto cleanup;
220219
221220 /*
222− * We must always clean up by clearing EXT4_STATE_VERITY_IN_PROGRESS and
223− * deleting the inode from the orphan list, even if something failed.
224− * If everything succeeded, we'll also set the verity bit in the same
225− * transaction.
221+ * Write all pages (both data and verity metadata). Note that this must
222+ * happen before clearing EXT4_STATE_VERITY_IN_PROGRESS; otherwise pages
223+ * beyond i_size won't be written properly. For crash consistency, this
224+ * also must happen before the verity inode flag gets persisted.
226225 */
226+ err = filemap_write_and_wait(inode->i_mapping);
227+ if (err)
228+ goto cleanup;
227229
228− ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
230+ /*
231+ * Finally, set the verity inode flag and remove the inode from the
232+ * orphan list (in a single transaction).
233+ */
229234
230235 handle = ext4_journal_start(inode, EXT4_HT_INODE, credits);
231236 if (IS_ERR(handle)) {
232− ext4_orphan_del(NULL, inode);
233− return PTR_ERR(handle);
237+ err = PTR_ERR(handle);
238+ goto cleanup;
234239 }
235240
236− err2 = ext4_orphan_del(handle, inode);
237− if (err2)
238− goto out_stop;
241+ err = ext4_orphan_del(handle, inode);
242+ if (err)
243+ goto stop_and_cleanup;
239244
240− if (desc != NULL && !err) {
241− struct ext4_iloc iloc;
245+ err = ext4_reserve_inode_write(handle, inode, &iloc);
246+ if (err)
247+ goto stop_and_cleanup;
242248
243− err = ext4_reserve_inode_write(handle, inode, &iloc);
244− if (err)
245− goto out_stop;
246− ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
247− ext4_set_inode_flags(inode, false);
248− err = ext4_mark_iloc_dirty(handle, inode, &iloc);
249− }
250−out_stop:
249+ ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
250+ ext4_set_inode_flags(inode, false);
251+ err = ext4_mark_iloc_dirty(handle, inode, &iloc);
252+ if (err)
253+ goto stop_and_cleanup;
254+
255+ ext4_journal_stop(handle);
256+
257+ ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
258+ return 0;
259+
260+stop_and_cleanup:
251261 ext4_journal_stop(handle);
252− return err ?: err2;
262+cleanup:
263+ /*
264+ * Verity failed to be enabled, so clean up by truncating any verity
265+ * metadata that was written beyond i_size (both from cache and from
266+ * disk), removing the inode from the orphan list (if it wasn't done
267+ * already), and clearing EXT4_STATE_VERITY_IN_PROGRESS.
268+ */
269+ truncate_inode_pages(inode->i_mapping, inode->i_size);
270+ ext4_truncate(inode);
271+ ext4_orphan_del(NULL, inode);
272+ ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
273+ return err;
253274 }
254275
255276 static int ext4_get_verity_descriptor_location(struct inode *inode,
fs/ext4/xattr.c+5−1
@@ -1462,6 +1462,9 @@ ext4_xattr_inode_cache_find(struct inode *inode, const void *value, · 1461 unmodified lines
14621462 if (!ce)
14631463 return NULL;
14641464
1465+ WARN_ON_ONCE(ext4_handle_valid(journal_current_handle()) &&
1466+ !(current->flags & PF_MEMALLOC_NOFS));
1467+
14651468 ea_data = kvmalloc(value_len, GFP_KERNEL);
14661469 if (!ea_data) {
14671470 mb_cache_entry_put(ea_inode_cache, ce);
@@ -2327,6 +2330,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, · 859 unmodified lines
23272330 error = -ENOSPC;
23282331 goto cleanup;
23292332 }
2333+ WARN_ON_ONCE(!(current->flags & PF_MEMALLOC_NOFS));
23302334 }
23312335
23322336 error = ext4_reserve_inode_write(handle, inode, &is.iloc);
@@ -2400,7 +2404,7 @@ retry_inode: · 67 unmodified lines
24002404 * external inode if possible.
24012405 */
24022406 if (ext4_has_feature_ea_inode(inode->i_sb) &&
2403− !i.in_inode) {
2407+ i.value_len && !i.in_inode) {
24042408 i.in_inode = 1;
24052409 goto retry_inode;
24062410 }
fs/fuse/dev.c+16−10
@@ -2229,19 +2229,21 @@ static int fuse_device_clone(struct fuse_conn *fc, struct file *new) · 2228 unmodified lines
22292229 static long fuse_dev_ioctl(struct file *file, unsigned int cmd,
22302230 unsigned long arg)
22312231 {
2232− int err = -ENOTTY;
2232+ int res;
2233+ int oldfd;
2234+ struct fuse_dev *fud = NULL;
22332235
2234− if (cmd == FUSE_DEV_IOC_CLONE) {
2235− int oldfd;
2236+ if (_IOC_TYPE(cmd) != FUSE_DEV_IOC_MAGIC)
2237+ return -ENOTTY;
22362238
2237− err = -EFAULT;
2238− if (!get_user(oldfd, (__u32 __user *) arg)) {
2239+ switch (_IOC_NR(cmd)) {
2240+ case _IOC_NR(FUSE_DEV_IOC_CLONE):
2241+ res = -EFAULT;
2242+ if (!get_user(oldfd, (__u32 __user *)arg)) {
22392243 struct file *old = fget(oldfd);
22402244
2241− err = -EINVAL;
2245+ res = -EINVAL;
22422246 if (old) {
2243− struct fuse_dev *fud = NULL;
2244−
22452247 /*
22462248 * Check against file->f_op because CUSE
22472249 * uses the same ioctl handler.
@@ -2252,14 +2254,18 @@ static long fuse_dev_ioctl(struct file *file, unsigned int cmd, · 4 unmodified lines
22522254
22532255 if (fud) {
22542256 mutex_lock(&fuse_mutex);
2255− err = fuse_device_clone(fud->fc, file);
2257+ res = fuse_device_clone(fud->fc, file);
22562258 mutex_unlock(&fuse_mutex);
22572259 }
22582260 fput(old);
22592261 }
22602262 }
2263+ break;
2264+ default:
2265+ res = -ENOTTY;
2266+ break;
22612267 }
2262− return err;
2268+ return res;
22632269 }
22642270
22652271 const struct file_operations fuse_dev_operations = {
fs/fuse/fuse_i.h+1−0
@@ -863,6 +863,7 @@ static inline u64 fuse_get_attr_version(struct fuse_conn *fc) · 862 unmodified lines
863863
864864 static inline void fuse_make_bad(struct inode *inode)
865865 {
866+ remove_inode_hash(inode);
866867 set_bit(FUSE_I_BAD, &get_fuse_inode(inode)->state);
867868 }
868869
fs/fuse/virtio_fs.c+8−1
@@ -1324,8 +1324,15 @@ static int virtio_fs_fill_super(struct super_block *sb, struct fs_context *fsc) · 1323 unmodified lines
13241324
13251325 /* virtiofs allocates and installs its own fuse devices */
13261326 ctx->fudptr = NULL;
1327− if (ctx->dax)
1327+ if (ctx->dax) {
1328+ if (!fs->dax_dev) {
1329+ err = -EINVAL;
1330+ pr_err("virtio-fs: dax can't be enabled as filesystem"
1331+ " device does not support it.\n");
1332+ goto err_free_fuse_devs;
1333+ }
13281334 ctx->dax_dev = fs->dax_dev;
1335+ }
13291336 err = fuse_fill_super_common(sb, ctx);
13301337 if (err < 0)
13311338 goto err_free_fuse_devs;
fs/gfs2/super.c+9−5
@@ -162,8 +162,10 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp) · 161 unmodified lines
162162 int error;
163163
164164 error = init_threads(sdp);
165− if (error)
165+ if (error) {
166+ gfs2_withdraw_delayed(sdp);
166167 return error;
168+ }
167169
168170 j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
169171 if (gfs2_withdrawn(sdp)) {
@@ -750,11 +752,13 @@ void gfs2_freeze_func(struct work_struct *work) · 580 unmodified lines
750752 static int gfs2_freeze(struct super_block *sb)
751753 {
752754 struct gfs2_sbd *sdp = sb->s_fs_info;
753− int error = 0;
755+ int error;
754756
755757 mutex_lock(&sdp->sd_freeze_mutex);
756− if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN)
758+ if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN) {
759+ error = -EBUSY;
757760 goto out;
761+ }
758762
759763 for (;;) {
760764 if (gfs2_withdrawn(sdp)) {
@@ -795,10 +799,10 @@ static int gfs2_unfreeze(struct super_block *sb) · 34 unmodified lines
795799 struct gfs2_sbd *sdp = sb->s_fs_info;
796800
797801 mutex_lock(&sdp->sd_freeze_mutex);
798− if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
802+ if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
799803 !gfs2_holder_initialized(&sdp->sd_freeze_gh)) {
800804 mutex_unlock(&sdp->sd_freeze_mutex);
801− return 0;
805+ return -EINVAL;
802806 }
803807
804808 gfs2_freeze_unlock(&sdp->sd_freeze_gh);
fs/io-wq.c+31−13
@@ -16,7 +16,6 @@ · 15 unmodified lines
1616 #include <linux/rculist_nulls.h>
1717 #include <linux/cpu.h>
1818 #include <linux/tracehook.h>
19−#include <linux/freezer.h>
2019
2120 #include "../kernel/sched/sched.h"
2221 #include "io-wq.h"
@@ -386,13 +385,14 @@ static struct io_wq_work *io_get_next_work(struct io_wqe *wqe) · 363 unmodified lines
386385 return NULL;
387386 }
388387
389−static void io_flush_signals(void)
388+static bool io_flush_signals(void)
390389 {
391− if (unlikely(test_tsk_thread_flag(current, TIF_NOTIFY_SIGNAL))) {
392− if (current->task_works)
393− task_work_run();
394− clear_tsk_thread_flag(current, TIF_NOTIFY_SIGNAL);
390+ if (unlikely(test_thread_flag(TIF_NOTIFY_SIGNAL))) {
391+ __set_current_state(TASK_RUNNING);
392+ tracehook_notify_signal();
393+ return true;
395394 }
395+ return false;
396396 }
397397
398398 static void io_assign_current_work(struct io_worker *worker,
@@ -484,10 +484,12 @@ static int io_wqe_worker(void *data) · 85 unmodified lines
484484 worker->flags |= (IO_WORKER_F_UP | IO_WORKER_F_RUNNING);
485485 io_wqe_inc_running(worker);
486486
487− sprintf(buf, "iou-wrk-%d", wq->task_pid);
487+ snprintf(buf, sizeof(buf), "iou-wrk-%d", wq->task_pid);
488488 set_task_comm(current, buf);
489489
490490 while (!test_bit(IO_WQ_BIT_EXIT, &wq->state)) {
491+ long ret;
492+
491493 set_current_state(TASK_INTERRUPTIBLE);
492494 loop:
493495 raw_spin_lock_irq(&wqe->lock);
@@ -497,11 +499,18 @@ loop: · 3 unmodified lines
497499 }
498500 __io_worker_idle(wqe, worker);
499501 raw_spin_unlock_irq(&wqe->lock);
500− io_flush_signals();
501− if (schedule_timeout(WORKER_IDLE_TIMEOUT))
502+ if (io_flush_signals())
502503 continue;
503− if (fatal_signal_pending(current))
504+ ret = schedule_timeout(WORKER_IDLE_TIMEOUT);
505+ if (signal_pending(current)) {
506+ struct ksignal ksig;
507+
508+ if (!get_signal(&ksig))
509+ continue;
504510 break;
511+ }
512+ if (ret)
513+ continue;
505514 /* timed out, exit unless we're the fixed worker */
506515 if (test_bit(IO_WQ_BIT_EXIT, &wq->state) ||
507516 !(worker->flags & IO_WORKER_F_FIXED))
@@ -702,15 +711,20 @@ static int io_wq_manager(void *data) · 194 unmodified lines
702711 char buf[TASK_COMM_LEN];
703712 int node;
704713
705− sprintf(buf, "iou-mgr-%d", wq->task_pid);
714+ snprintf(buf, sizeof(buf), "iou-mgr-%d", wq->task_pid);
706715 set_task_comm(current, buf);
707716
708717 do {
709718 set_current_state(TASK_INTERRUPTIBLE);
710719 io_wq_check_workers(wq);
711720 schedule_timeout(HZ);
712− if (fatal_signal_pending(current))
721+ if (signal_pending(current)) {
722+ struct ksignal ksig;
723+
724+ if (!get_signal(&ksig))
725+ continue;
713726 set_bit(IO_WQ_BIT_EXIT, &wq->state);
727+ }
714728 } while (!test_bit(IO_WQ_BIT_EXIT, &wq->state));
715729
716730 io_wq_check_workers(wq);
@@ -1057,7 +1071,11 @@ static void io_wq_destroy(struct io_wq *wq) · 340 unmodified lines
10571071
10581072 for_each_node(node) {
10591073 struct io_wqe *wqe = wq->wqes[node];
1060− WARN_ON_ONCE(!wq_list_empty(&wqe->work_list));
1074+ struct io_cb_cancel_data match = {
1075+ .fn = io_wq_work_match_all,
1076+ .cancel_all = true,
1077+ };
1078+ io_wqe_cancel_pending_work(wqe, &match);
10611079 kfree(wqe);
10621080 }
10631081 io_wq_put_hash(wq->hash);
fs/io-wq.h+9−1
@@ -2,7 +2,6 @@ · 1 unmodified line
22 #define INTERNAL_IO_WQ_H
33
44 #include <linux/refcount.h>
5−#include <linux/io_uring.h>
65
76 struct io_wq;
87
@@ -21,6 +20,15 @@ enum io_wq_cancel { · 12 unmodified lines
2120 IO_WQ_CANCEL_NOTFOUND, /* work not found */
2221 };
2322
23+struct io_wq_work_node {
24+ struct io_wq_work_node *next;
25+};
26+
27+struct io_wq_work_list {
28+ struct io_wq_work_node *first;
29+ struct io_wq_work_node *last;
30+};
31+
2432 static inline void wq_list_add_after(struct io_wq_work_node *node,
2533 struct io_wq_work_node *pos,
2634 struct io_wq_work_list *list)
fs/io_uring.c+216−155
@@ -78,7 +78,6 @@ · 77 unmodified lines
7878 #include <linux/task_work.h>
7979 #include <linux/pagemap.h>
8080 #include <linux/io_uring.h>
81−#include <linux/freezer.h>
8281
8382 #define CREATE_TRACE_POINTS
8483 #include <trace/events/io_uring.h>
@@ -258,7 +257,8 @@ enum { · 173 unmodified lines
258257
259258 struct io_sq_data {
260259 refcount_t refs;
261− struct rw_semaphore rw_lock;
260+ atomic_t park_pending;
261+ struct mutex lock;
262262
263263 /* ctx's that are using this sqd */
264264 struct list_head ctx_list;
@@ -273,6 +273,7 @@ struct io_sq_data { · 8 unmodified lines
273273
274274 unsigned long state;
275275 struct completion exited;
276+ struct callback_head *park_task_work;
276277 };
277278
278279 #define IO_IOPOLL_BATCH 8
@@ -402,7 +403,7 @@ struct io_ring_ctx { · 123 unmodified lines
402403 struct socket *ring_sock;
403404 #endif
404405
405− struct idr io_buffer_idr;
406+ struct xarray io_buffers;
406407
407408 struct xarray personalities;
408409 u32 pers_next;
@@ -454,6 +455,22 @@ struct io_ring_ctx { · 45 unmodified lines
454455 struct list_head tctx_list;
455456 };
456457
458+struct io_uring_task {
459+ /* submission side */
460+ struct xarray xa;
461+ struct wait_queue_head wait;
462+ const struct io_ring_ctx *last;
463+ struct io_wq *io_wq;
464+ struct percpu_counter inflight;
465+ atomic_t in_idle;
466+ bool sqpoll;
467+
468+ spinlock_t task_lock;
469+ struct io_wq_work_list task_list;
470+ unsigned long task_state;
471+ struct callback_head task_work;
472+};
473+
457474 /*
458475 * First field must be the file pointer in all the
459476 * iocb unions! See also 'struct kiocb' in <linux/fs.h>
@@ -680,6 +697,7 @@ enum { · 220 unmodified lines
680697 REQ_F_NO_FILE_TABLE_BIT,
681698 REQ_F_LTIMEOUT_ACTIVE_BIT,
682699 REQ_F_COMPLETE_INLINE_BIT,
700+ REQ_F_REISSUE_BIT,
683701
684702 /* not a real bit, just to check we're not overflowing the space */
685703 __REQ_F_LAST_BIT,
@@ -723,6 +741,8 @@ enum { · 37 unmodified lines
723741 REQ_F_LTIMEOUT_ACTIVE = BIT(REQ_F_LTIMEOUT_ACTIVE_BIT),
724742 /* completion is deferred through io_comp_state */
725743 REQ_F_COMPLETE_INLINE = BIT(REQ_F_COMPLETE_INLINE_BIT),
744+ /* caller should reissue async */
745+ REQ_F_REISSUE = BIT(REQ_F_REISSUE_BIT),
726746 };
727747
728748 struct async_poll {
@@ -1077,8 +1097,6 @@ static bool io_match_task(struct io_kiocb *head, · 348 unmodified lines
10771097 io_for_each_link(req, head) {
10781098 if (req->flags & REQ_F_INFLIGHT)
10791099 return true;
1080− if (req->task->files == files)
1081− return true;
10821100 }
10831101 return false;
10841102 }
@@ -1135,7 +1153,7 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p) · 50 unmodified lines
11351153 init_waitqueue_head(&ctx->cq_wait);
11361154 INIT_LIST_HEAD(&ctx->cq_overflow_list);
11371155 init_completion(&ctx->ref_comp);
1138− idr_init(&ctx->io_buffer_idr);
1156+ xa_init_flags(&ctx->io_buffers, XA_FLAGS_ALLOC1);
11391157 xa_init_flags(&ctx->personalities, XA_FLAGS_ALLOC1);
11401158 mutex_init(&ctx->uring_lock);
11411159 init_waitqueue_head(&ctx->wait);
@@ -1198,7 +1216,7 @@ static void io_prep_async_work(struct io_kiocb *req) · 56 unmodified lines
11981216 if (req->flags & REQ_F_ISREG) {
11991217 if (def->hash_reg_file || (ctx->flags & IORING_SETUP_IOPOLL))
12001218 io_wq_hash_work(&req->work, file_inode(req->file));
1201− } else {
1219+ } else if (!req->file || !S_ISBLK(file_inode(req->file)->i_mode)) {
12021220 if (def->unbound_nonreg_file)
12031221 req->work.flags |= IO_WQ_WORK_UNBOUND;
12041222 }
@@ -1221,16 +1239,16 @@ static void io_queue_async_work(struct io_kiocb *req) · 16 unmodified lines
12211239 BUG_ON(!tctx);
12221240 BUG_ON(!tctx->io_wq);
12231241
1224− trace_io_uring_queue_async_work(ctx, io_wq_is_hashed(&req->work), req,
1225− &req->work, req->flags);
12261242 /* init ->work of the whole link before punting */
12271243 io_prep_async_link(req);
1244+ trace_io_uring_queue_async_work(ctx, io_wq_is_hashed(&req->work), req,
1245+ &req->work, req->flags);
12281246 io_wq_enqueue(tctx->io_wq, &req->work);
12291247 if (link)
12301248 io_queue_linked_timeout(link);
12311249 }
12321250
1233−static void io_kill_timeout(struct io_kiocb *req)
1251+static void io_kill_timeout(struct io_kiocb *req, int status)
12341252 {
12351253 struct io_timeout_data *io = req->async_data;
12361254 int ret;
@@ -1240,31 +1258,11 @@ static void io_kill_timeout(struct io_kiocb *req) · 3 unmodified lines
12401258 atomic_set(&req->ctx->cq_timeouts,
12411259 atomic_read(&req->ctx->cq_timeouts) + 1);
12421260 list_del_init(&req->timeout.list);
1243− io_cqring_fill_event(req, 0);
1261+ io_cqring_fill_event(req, status);
12441262 io_put_req_deferred(req, 1);
12451263 }
12461264 }
12471265
1248−/*
1249− * Returns true if we found and killed one or more timeouts
1250− */
1251−static bool io_kill_timeouts(struct io_ring_ctx *ctx, struct task_struct *tsk,
1252− struct files_struct *files)
1253−{
1254− struct io_kiocb *req, *tmp;
1255− int canceled = 0;
1256−
1257− spin_lock_irq(&ctx->completion_lock);
1258− list_for_each_entry_safe(req, tmp, &ctx->timeout_list, timeout.list) {
1259− if (io_match_task(req, tsk, files)) {
1260− io_kill_timeout(req);
1261− canceled++;
1262− }
1263− }
1264− spin_unlock_irq(&ctx->completion_lock);
1265− return canceled != 0;
1266−}
1267−
12681266 static void __io_queue_deferred(struct io_ring_ctx *ctx)
12691267 {
12701268 do {
@@ -1309,7 +1307,7 @@ static void io_flush_timeouts(struct io_ring_ctx *ctx) · 38 unmodified lines
13091307 break;
13101308
13111309 list_del_init(&req->timeout.list);
1312− io_kill_timeout(req);
1310+ io_kill_timeout(req, 0);
13131311 } while (!list_empty(&ctx->timeout_list));
13141312
13151313 ctx->cq_last_tm_flush = seq;
@@ -1550,14 +1548,17 @@ static void io_req_complete_post(struct io_kiocb *req, long res, · 234 unmodified lines
15501548 io_put_task(req->task, 1);
15511549 list_add(&req->compl.list, &cs->locked_free_list);
15521550 cs->locked_free_nr++;
1553− } else
1554− req = NULL;
1551+ } else {
1552+ if (!percpu_ref_tryget(&ctx->refs))
1553+ req = NULL;
1554+ }
15551555 io_commit_cqring(ctx);
15561556 spin_unlock_irqrestore(&ctx->completion_lock, flags);
1557− io_cqring_ev_posted(ctx);
15581557
1559− if (req)
1558+ if (req) {
1559+ io_cqring_ev_posted(ctx);
15601560 percpu_ref_put(&ctx->refs);
1561+ }
15611562 }
15621563
15631564 static void io_req_complete_state(struct io_kiocb *req, long res,
@@ -1925,17 +1926,44 @@ static int io_req_task_work_add(struct io_kiocb *req) · 361 unmodified lines
19251926 return ret;
19261927 }
19271928
1928−static void io_req_task_work_add_fallback(struct io_kiocb *req,
1929− task_work_func_t cb)
1929+static bool io_run_task_work_head(struct callback_head **work_head)
1930+{
1931+ struct callback_head *work, *next;
1932+ bool executed = false;
1933+
1934+ do {
1935+ work = xchg(work_head, NULL);
1936+ if (!work)
1937+ break;
1938+
1939+ do {
1940+ next = work->next;
1941+ work->func(work);
1942+ work = next;
1943+ cond_resched();
1944+ } while (work);
1945+ executed = true;
1946+ } while (1);
1947+
1948+ return executed;
1949+}
1950+
1951+static void io_task_work_add_head(struct callback_head **work_head,
1952+ struct callback_head *task_work)
19301953 {
1931− struct io_ring_ctx *ctx = req->ctx;
19321954 struct callback_head *head;
19331955
1934− init_task_work(&req->task_work, cb);
19351956 do {
1936− head = READ_ONCE(ctx->exit_task_work);
1937− req->task_work.next = head;
1938− } while (cmpxchg(&ctx->exit_task_work, head, &req->task_work) != head);
1957+ head = READ_ONCE(*work_head);
1958+ task_work->next = head;
1959+ } while (cmpxchg(work_head, head, task_work) != head);
1960+}
1961+
1962+static void io_req_task_work_add_fallback(struct io_kiocb *req,
1963+ task_work_func_t cb)
1964+{
1965+ init_task_work(&req->task_work, cb);
1966+ io_task_work_add_head(&req->ctx->exit_task_work, &req->task_work);
19391967 }
19401968
19411969 static void __io_req_task_cancel(struct io_kiocb *req, int error)
@@ -2451,6 +2479,11 @@ static bool io_rw_should_reissue(struct io_kiocb *req) · 509 unmodified lines
24512479 return false;
24522480 return true;
24532481 }
2482+#else
2483+static bool io_rw_should_reissue(struct io_kiocb *req)
2484+{
2485+ return false;
2486+}
24542487 #endif
24552488
24562489 static bool io_rw_reissue(struct io_kiocb *req)
@@ -2476,13 +2509,14 @@ static void __io_complete_rw(struct io_kiocb *req, long res, long res2, · 19 unmodified lines
24762509 {
24772510 int cflags = 0;
24782511
2479− if ((res == -EAGAIN || res == -EOPNOTSUPP) && io_rw_reissue(req))
2512+ if (req->rw.kiocb.ki_flags & IOCB_WRITE)
2513+ kiocb_end_write(req);
2514+ if ((res == -EAGAIN || res == -EOPNOTSUPP) && io_rw_should_reissue(req)) {
2515+ req->flags |= REQ_F_REISSUE;
24802516 return;
2517+ }
24812518 if (res != req->result)
24822519 req_set_fail_links(req);
2483−
2484− if (req->rw.kiocb.ki_flags & IOCB_WRITE)
2485− kiocb_end_write(req);
24862520 if (req->flags & REQ_F_BUFFER_SELECTED)
24872521 cflags = io_put_rw_kbuf(req);
24882522 __io_req_complete(req, issue_flags, res, cflags);
@@ -2843,7 +2877,7 @@ static struct io_buffer *io_buffer_select(struct io_kiocb *req, size_t *len, · 354 unmodified lines
28432877
28442878 lockdep_assert_held(&req->ctx->uring_lock);
28452879
2846− head = idr_find(&req->ctx->io_buffer_idr, bgid);
2880+ head = xa_load(&req->ctx->io_buffers, bgid);
28472881 if (head) {
28482882 if (!list_empty(&head->list)) {
28492883 kbuf = list_last_entry(&head->list, struct io_buffer,
@@ -2851,7 +2885,7 @@ static struct io_buffer *io_buffer_select(struct io_kiocb *req, size_t *len, · 1 unmodified line
28512885 list_del(&kbuf->list);
28522886 } else {
28532887 kbuf = head;
2854− idr_remove(&req->ctx->io_buffer_idr, bgid);
2888+ xa_erase(&req->ctx->io_buffers, bgid);
28552889 }
28562890 if (*len > kbuf->len)
28572891 *len = kbuf->len;
@@ -3259,11 +3293,7 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags) · 401 unmodified lines
32593293
32603294 ret = io_iter_do_read(req, iter);
32613295
3262− if (ret == -EIOCBQUEUED) {
3263− if (req->async_data)
3264− iov_iter_revert(iter, io_size - iov_iter_count(iter));
3265− goto out_free;
3266− } else if (ret == -EAGAIN) {
3296+ if (ret == -EAGAIN || (req->flags & REQ_F_REISSUE)) {
32673297 /* IOPOLL retry should happen for io-wq threads */
32683298 if (!force_nonblock && !(req->ctx->flags & IORING_SETUP_IOPOLL))
32693299 goto done;
@@ -3273,6 +3303,8 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags) · 3 unmodified lines
32733303 /* some cases will consume bytes even on error returns */
32743304 iov_iter_revert(iter, io_size - iov_iter_count(iter));
32753305 ret = 0;
3306+ } else if (ret == -EIOCBQUEUED) {
3307+ goto out_free;
32763308 } else if (ret <= 0 || ret == io_size || !force_nonblock ||
32773309 (req->flags & REQ_F_NOWAIT) || !(req->flags & REQ_F_ISREG)) {
32783310 /* read all, failed, already did sync or don't want to retry */
@@ -3385,6 +3417,9 @@ static int io_write(struct io_kiocb *req, unsigned int issue_flags) · 106 unmodified lines
33853417 else
33863418 ret2 = -EINVAL;
33873419
3420+ if (req->flags & REQ_F_REISSUE)
3421+ ret2 = -EAGAIN;
3422+
33883423 /*
33893424 * Raw bdev writes will return -EOPNOTSUPP for IOCB_NOWAIT. Just
33903425 * retry them without IOCB_NOWAIT.
@@ -3394,8 +3429,6 @@ static int io_write(struct io_kiocb *req, unsigned int issue_flags) · 3 unmodified lines
33943429 /* no retry on NONBLOCK nor RWF_NOWAIT */
33953430 if (ret2 == -EAGAIN && (req->flags & REQ_F_NOWAIT))
33963431 goto done;
3397− if (ret2 == -EIOCBQUEUED && req->async_data)
3398− iov_iter_revert(iter, io_size - iov_iter_count(iter));
33993432 if (!force_nonblock || ret2 != -EAGAIN) {
34003433 /* IOPOLL retry should happen for io-wq threads */
34013434 if ((req->ctx->flags & IORING_SETUP_IOPOLL) && ret2 == -EAGAIN)
@@ -3892,7 +3925,7 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx, struct io_buffer *buf, · 490 unmodified lines
38923925 }
38933926 i++;
38943927 kfree(buf);
3895− idr_remove(&ctx->io_buffer_idr, bgid);
3928+ xa_erase(&ctx->io_buffers, bgid);
38963929
38973930 return i;
38983931 }
@@ -3910,7 +3943,7 @@ static int io_remove_buffers(struct io_kiocb *req, unsigned int issue_flags) · 11 unmodified lines
39103943 lockdep_assert_held(&ctx->uring_lock);
39113944
39123945 ret = -ENOENT;
3913− head = idr_find(&ctx->io_buffer_idr, p->bgid);
3946+ head = xa_load(&ctx->io_buffers, p->bgid);
39143947 if (head)
39153948 ret = __io_remove_buffers(ctx, head, p->bgid, p->nbufs);
39163949 if (ret < 0)
@@ -3930,6 +3963,7 @@ static int io_remove_buffers(struct io_kiocb *req, unsigned int issue_flags) · 13 unmodified lines
39303963 static int io_provide_buffers_prep(struct io_kiocb *req,
39313964 const struct io_uring_sqe *sqe)
39323965 {
3966+ unsigned long size;
39333967 struct io_provide_buf *p = &req->pbuf;
39343968 u64 tmp;
39353969
@@ -3943,7 +3977,8 @@ static int io_provide_buffers_prep(struct io_kiocb *req, · 7 unmodified lines
39433977 p->addr = READ_ONCE(sqe->addr);
39443978 p->len = READ_ONCE(sqe->len);
39453979
3946− if (!access_ok(u64_to_user_ptr(p->addr), (p->len * p->nbufs)))
3980+ size = (unsigned long)p->len * p->nbufs;
3981+ if (!access_ok(u64_to_user_ptr(p->addr), size))
39473982 return -EFAULT;
39483983
39493984 p->bgid = READ_ONCE(sqe->buf_group);
@@ -3993,21 +4028,14 @@ static int io_provide_buffers(struct io_kiocb *req, unsigned int issue_flags) · 43 unmodified lines
39934028
39944029 lockdep_assert_held(&ctx->uring_lock);
39954030
3996− list = head = idr_find(&ctx->io_buffer_idr, p->bgid);
4031+ list = head = xa_load(&ctx->io_buffers, p->bgid);
39974032
39984033 ret = io_add_buffers(p, &head);
3999− if (ret < 0)
4000− goto out;
4001−
4002− if (!list) {
4003− ret = idr_alloc(&ctx->io_buffer_idr, head, p->bgid, p->bgid + 1,
4004− GFP_KERNEL);
4005− if (ret < 0) {
4034+ if (ret >= 0 && !list) {
4035+ ret = xa_insert(&ctx->io_buffers, p->bgid, head, GFP_KERNEL);
4036+ if (ret < 0)
40064037 __io_remove_buffers(ctx, head, p->bgid, -1U);
4007− goto out;
4008− }
40094038 }
4010−out:
40114039 if (ret < 0)
40124040 req_set_fail_links(req);
40134041
@@ -4345,6 +4373,7 @@ static int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags) · 331 unmodified lines
43454373 struct io_async_msghdr iomsg, *kmsg;
43464374 struct socket *sock;
43474375 unsigned flags;
4376+ int min_ret = 0;
43484377 int ret;
43494378
43504379 sock = sock_from_file(req->file);
@@ -4359,12 +4388,15 @@ static int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags) · 8 unmodified lines
43594388 kmsg = &iomsg;
43604389 }
43614390
4362− flags = req->sr_msg.msg_flags;
4391+ flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
43634392 if (flags & MSG_DONTWAIT)
43644393 req->flags |= REQ_F_NOWAIT;
43654394 else if (issue_flags & IO_URING_F_NONBLOCK)
43664395 flags |= MSG_DONTWAIT;
43674396
4397+ if (flags & MSG_WAITALL)
4398+ min_ret = iov_iter_count(&kmsg->msg.msg_iter);
4399+
43684400 ret = __sys_sendmsg_sock(sock, &kmsg->msg, flags);
43694401 if ((issue_flags & IO_URING_F_NONBLOCK) && ret == -EAGAIN)
43704402 return io_setup_async_msg(req, kmsg);
@@ -4375,7 +4407,7 @@ static int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags) · 4 unmodified lines
43754407 if (kmsg->free_iov)
43764408 kfree(kmsg->free_iov);
43774409 req->flags &= ~REQ_F_NEED_CLEANUP;
4378− if (ret < 0)
4410+ if (ret < min_ret)
43794411 req_set_fail_links(req);
43804412 __io_req_complete(req, issue_flags, ret, 0);
43814413 return 0;
@@ -4388,6 +4420,7 @@ static int io_send(struct io_kiocb *req, unsigned int issue_flags) · 6 unmodified lines
43884420 struct iovec iov;
43894421 struct socket *sock;
43904422 unsigned flags;
4423+ int min_ret = 0;
43914424 int ret;
43924425
43934426 sock = sock_from_file(req->file);
@@ -4403,12 +4436,15 @@ static int io_send(struct io_kiocb *req, unsigned int issue_flags) · 9 unmodified lines
44034436 msg.msg_controllen = 0;
44044437 msg.msg_namelen = 0;
44054438
4406− flags = req->sr_msg.msg_flags;
4439+ flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
44074440 if (flags & MSG_DONTWAIT)
44084441 req->flags |= REQ_F_NOWAIT;
44094442 else if (issue_flags & IO_URING_F_NONBLOCK)
44104443 flags |= MSG_DONTWAIT;
44114444
4445+ if (flags & MSG_WAITALL)
4446+ min_ret = iov_iter_count(&msg.msg_iter);
4447+
44124448 msg.msg_flags = flags;
44134449 ret = sock_sendmsg(sock, &msg);
44144450 if ((issue_flags & IO_URING_F_NONBLOCK) && ret == -EAGAIN)
@@ -4416,7 +4452,7 @@ static int io_send(struct io_kiocb *req, unsigned int issue_flags) · 1 unmodified line
44164452 if (ret == -ERESTARTSYS)
44174453 ret = -EINTR;
44184454
4419− if (ret < 0)
4455+ if (ret < min_ret)
44204456 req_set_fail_links(req);
44214457 __io_req_complete(req, issue_flags, ret, 0);
44224458 return 0;
@@ -4568,6 +4604,7 @@ static int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) · 145 unmodified lines
45684604 struct socket *sock;
45694605 struct io_buffer *kbuf;
45704606 unsigned flags;
4607+ int min_ret = 0;
45714608 int ret, cflags = 0;
45724609 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
45734610
@@ -4593,12 +4630,15 @@ static int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) · 19 unmodified lines
45934630 1, req->sr_msg.len);
45944631 }
45954632
4596− flags = req->sr_msg.msg_flags;
4633+ flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
45974634 if (flags & MSG_DONTWAIT)
45984635 req->flags |= REQ_F_NOWAIT;
45994636 else if (force_nonblock)
46004637 flags |= MSG_DONTWAIT;
46014638
4639+ if (flags & MSG_WAITALL)
4640+ min_ret = iov_iter_count(&kmsg->msg.msg_iter);
4641+
46024642 ret = __sys_recvmsg_sock(sock, &kmsg->msg, req->sr_msg.umsg,
46034643 kmsg->uaddr, flags);
46044644 if (force_nonblock && ret == -EAGAIN)
@@ -4612,7 +4652,7 @@ static int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) · 7 unmodified lines
46124652 if (kmsg->free_iov)
46134653 kfree(kmsg->free_iov);
46144654 req->flags &= ~REQ_F_NEED_CLEANUP;
4615− if (ret < 0)
4655+ if (ret < min_ret || ((flags & MSG_WAITALL) && (kmsg->msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))))
46164656 req_set_fail_links(req);
46174657 __io_req_complete(req, issue_flags, ret, cflags);
46184658 return 0;
@@ -4627,6 +4667,7 @@ static int io_recv(struct io_kiocb *req, unsigned int issue_flags) · 8 unmodified lines
46274667 struct socket *sock;
46284668 struct iovec iov;
46294669 unsigned flags;
4670+ int min_ret = 0;
46304671 int ret, cflags = 0;
46314672 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
46324673
@@ -4652,12 +4693,15 @@ static int io_recv(struct io_kiocb *req, unsigned int issue_flags) · 19 unmodified lines
46524693 msg.msg_iocb = NULL;
46534694 msg.msg_flags = 0;
46544695
4655− flags = req->sr_msg.msg_flags;
4696+ flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
46564697 if (flags & MSG_DONTWAIT)
46574698 req->flags |= REQ_F_NOWAIT;
46584699 else if (force_nonblock)
46594700 flags |= MSG_DONTWAIT;
46604701
4702+ if (flags & MSG_WAITALL)
4703+ min_ret = iov_iter_count(&msg.msg_iter);
4704+
46614705 ret = sock_recvmsg(sock, &msg, flags);
46624706 if (force_nonblock && ret == -EAGAIN)
46634707 return -EAGAIN;
@@ -4666,7 +4710,7 @@ static int io_recv(struct io_kiocb *req, unsigned int issue_flags) · 2 unmodified lines
46664710 out_free:
46674711 if (req->flags & REQ_F_BUFFER_SELECTED)
46684712 cflags = io_put_recv_kbuf(req);
4669− if (ret < 0)
4713+ if (ret < min_ret || ((flags & MSG_WAITALL) && (msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))))
46704714 req_set_fail_links(req);
46714715 __io_req_complete(req, issue_flags, ret, cflags);
46724716 return 0;
@@ -4763,7 +4807,6 @@ static int io_connect(struct io_kiocb *req, unsigned int issue_flags) · 90 unmodified lines
47634807 ret = -ENOMEM;
47644808 goto out;
47654809 }
4766− io = req->async_data;
47674810 memcpy(req->async_data, &__io, sizeof(__io));
47684811 return -EAGAIN;
47694812 }
@@ -5526,7 +5569,8 @@ static int io_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe, · 756 unmodified lines
55265569
55275570 data->mode = io_translate_timeout_mode(flags);
55285571 hrtimer_init(&data->timer, CLOCK_MONOTONIC, data->mode);
5529− io_req_track_inflight(req);
5572+ if (is_timeout_link)
5573+ io_req_track_inflight(req);
55305574 return 0;
55315575 }
55325576
@@ -6129,6 +6173,7 @@ static void io_wq_submit_work(struct io_wq_work *work) · 596 unmodified lines
61296173 ret = -ECANCELED;
61306174
61316175 if (!ret) {
6176+ req->flags &= ~REQ_F_REISSUE;
61326177 do {
61336178 ret = io_issue_sqe(req, 0);
61346179 /*
@@ -6204,7 +6249,6 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer) · 69 unmodified lines
62046249 spin_unlock_irqrestore(&ctx->completion_lock, flags);
62056250
62066251 if (prev) {
6207− req_set_fail_links(prev);
62086252 io_async_find_and_cancel(ctx, req, prev->user_data, -ETIME);
62096253 io_put_req_deferred(prev, 1);
62106254 } else {
@@ -6423,8 +6467,6 @@ static int io_submit_sqe(struct io_ring_ctx *ctx, struct io_kiocb *req, · 212 unmodified lines
64236467 ret = io_init_req(ctx, req, sqe);
64246468 if (unlikely(ret)) {
64256469 fail_req:
6426− io_put_req(req);
6427− io_req_complete(req, ret);
64286470 if (link->head) {
64296471 /* fail even hard links since we don't submit */
64306472 link->head->flags |= REQ_F_FAIL_LINK;
@@ -6432,6 +6474,8 @@ fail_req: · 1 unmodified line
64326474 io_req_complete(link->head, -ECANCELED);
64336475 link->head = NULL;
64346476 }
6477+ io_put_req(req);
6478+ io_req_complete(req, ret);
64356479 return ret;
64366480 }
64376481 ret = io_req_prep(req, sqe);
@@ -6684,7 +6728,7 @@ static int io_sq_thread(void *data) · 246 unmodified lines
66846728 char buf[TASK_COMM_LEN];
66856729 DEFINE_WAIT(wait);
66866730
6687− sprintf(buf, "iou-sqp-%d", sqd->task_pid);
6731+ snprintf(buf, sizeof(buf), "iou-sqp-%d", sqd->task_pid);
66886732 set_task_comm(current, buf);
66896733 current->pf_io_worker = NULL;
66906734
@@ -6694,22 +6738,30 @@ static int io_sq_thread(void *data) · 3 unmodified lines
66946738 set_cpus_allowed_ptr(current, cpu_online_mask);
66956739 current->flags |= PF_NO_SETAFFINITY;
66966740
6697− down_read(&sqd->rw_lock);
6698−
6741+ mutex_lock(&sqd->lock);
66996742 while (!test_bit(IO_SQ_THREAD_SHOULD_STOP, &sqd->state)) {
67006743 int ret;
67016744 bool cap_entries, sqt_spin, needs_sched;
67026745
6703− if (test_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state)) {
6704− up_read(&sqd->rw_lock);
6746+ if (test_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state) ||
6747+ signal_pending(current)) {
6748+ bool did_sig = false;
6749+
6750+ mutex_unlock(&sqd->lock);
6751+ if (signal_pending(current)) {
6752+ struct ksignal ksig;
6753+
6754+ did_sig = get_signal(&ksig);
6755+ }
67056756 cond_resched();
6706− down_read(&sqd->rw_lock);
6757+ mutex_lock(&sqd->lock);
6758+ if (did_sig)
6759+ break;
67076760 io_run_task_work();
6761+ io_run_task_work_head(&sqd->park_task_work);
67086762 timeout = jiffies + sqd->sq_thread_idle;
67096763 continue;
67106764 }
6711− if (fatal_signal_pending(current))
6712− break;
67136765 sqt_spin = false;
67146766 cap_entries = !list_is_singular(&sqd->ctx_list);
67156767 list_for_each_entry(ctx, &sqd->ctx_list, sqd_list) {
@@ -6750,32 +6802,27 @@ static int io_sq_thread(void *data) · 34 unmodified lines
67506802 list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
67516803 io_ring_set_wakeup_flag(ctx);
67526804
6753− up_read(&sqd->rw_lock);
6805+ mutex_unlock(&sqd->lock);
67546806 schedule();
6755− down_read(&sqd->rw_lock);
6807+ mutex_lock(&sqd->lock);
67566808 list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
67576809 io_ring_clear_wakeup_flag(ctx);
67586810 }
67596811
67606812 finish_wait(&sqd->wait, &wait);
6813+ io_run_task_work_head(&sqd->park_task_work);
67616814 timeout = jiffies + sqd->sq_thread_idle;
67626815 }
6763− up_read(&sqd->rw_lock);
6764− down_write(&sqd->rw_lock);
6765− /*
6766− * someone may have parked and added a cancellation task_work, run
6767− * it first because we don't want it in io_uring_cancel_sqpoll()
6768− */
6769− io_run_task_work();
67706816
67716817 list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
67726818 io_uring_cancel_sqpoll(ctx);
67736819 sqd->thread = NULL;
67746820 list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
67756821 io_ring_set_wakeup_flag(ctx);
6776− up_write(&sqd->rw_lock);
6822+ mutex_unlock(&sqd->lock);
67776823
67786824 io_run_task_work();
6825+ io_run_task_work_head(&sqd->park_task_work);
67796826 complete(&sqd->exited);
67806827 do_exit(0);
67816828 }
@@ -6821,7 +6868,7 @@ static int io_run_task_work_sig(void) · 39 unmodified lines
68216868 return 1;
68226869 if (!signal_pending(current))
68236870 return 0;
6824− if (test_tsk_thread_flag(current, TIF_NOTIFY_SIGNAL))
6871+ if (test_thread_flag(TIF_NOTIFY_SIGNAL))
68256872 return -ERESTARTSYS;
68266873 return -EINTR;
68276874 }
@@ -7075,23 +7122,28 @@ static int io_sqe_files_unregister(struct io_ring_ctx *ctx) · 247 unmodified lines
70757122 }
70767123
70777124 static void io_sq_thread_unpark(struct io_sq_data *sqd)
7078− __releases(&sqd->rw_lock)
7125+ __releases(&sqd->lock)
70797126 {
70807127 WARN_ON_ONCE(sqd->thread == current);
70817128
7129+ /*
7130+ * Do the dance but not conditional clear_bit() because it'd race with
7131+ * other threads incrementing park_pending and setting the bit.
7132+ */
70827133 clear_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state);
7083− up_write(&sqd->rw_lock);
7134+ if (atomic_dec_return(&sqd->park_pending))
7135+ set_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state);
7136+ mutex_unlock(&sqd->lock);
70847137 }
70857138
70867139 static void io_sq_thread_park(struct io_sq_data *sqd)
7087− __acquires(&sqd->rw_lock)
7140+ __acquires(&sqd->lock)
70887141 {
70897142 WARN_ON_ONCE(sqd->thread == current);
70907143
7144+ atomic_inc(&sqd->park_pending);
70917145 set_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state);
7092− down_write(&sqd->rw_lock);
7093− /* set again for consistency, in case concurrent parks are happening */
7094− set_bit(IO_SQ_THREAD_SHOULD_PARK, &sqd->state);
7146+ mutex_lock(&sqd->lock);
70957147 if (sqd->thread)
70967148 wake_up_process(sqd->thread);
70977149 }
@@ -7100,17 +7152,19 @@ static void io_sq_thread_stop(struct io_sq_data *sqd) · 2 unmodified lines
71007152 {
71017153 WARN_ON_ONCE(sqd->thread == current);
71027154
7103− down_write(&sqd->rw_lock);
7155+ mutex_lock(&sqd->lock);
71047156 set_bit(IO_SQ_THREAD_SHOULD_STOP, &sqd->state);
71057157 if (sqd->thread)
71067158 wake_up_process(sqd->thread);
7107− up_write(&sqd->rw_lock);
7159+ mutex_unlock(&sqd->lock);
71087160 wait_for_completion(&sqd->exited);
71097161 }
71107162
71117163 static void io_put_sq_data(struct io_sq_data *sqd)
71127164 {
71137165 if (refcount_dec_and_test(&sqd->refs)) {
7166+ WARN_ON_ONCE(atomic_read(&sqd->park_pending));
7167+
71147168 io_sq_thread_stop(sqd);
71157169 kfree(sqd);
71167170 }
@@ -7184,9 +7238,10 @@ static struct io_sq_data *io_get_sq_data(struct io_uring_params *p, · 67 unmodified lines
71847238 if (!sqd)
71857239 return ERR_PTR(-ENOMEM);
71867240
7241+ atomic_set(&sqd->park_pending, 0);
71877242 refcount_set(&sqd->refs, 1);
71887243 INIT_LIST_HEAD(&sqd->ctx_list);
7189− init_rwsem(&sqd->rw_lock);
7244+ mutex_init(&sqd->lock);
71907245 init_waitqueue_head(&sqd->wait);
71917246 init_completion(&sqd->exited);
71927247 return sqd;
@@ -7866,22 +7921,17 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx, · 673 unmodified lines
78667921
78677922 ret = 0;
78687923 io_sq_thread_park(sqd);
7924+ list_add(&ctx->sqd_list, &sqd->ctx_list);
7925+ io_sqd_update_thread_idle(sqd);
78697926 /* don't attach to a dying SQPOLL thread, would be racy */
7870− if (attached && !sqd->thread) {
7927+ if (attached && !sqd->thread)
78717928 ret = -ENXIO;
7872− } else {
7873− list_add(&ctx->sqd_list, &sqd->ctx_list);
7874− io_sqd_update_thread_idle(sqd);
7875− }
78767929 io_sq_thread_unpark(sqd);
78777930
7878− if (ret < 0) {
7879− io_put_sq_data(sqd);
7880− ctx->sq_data = NULL;
7881− return ret;
7882− } else if (attached) {
7931+ if (ret < 0)
7932+ goto err;
7933+ if (attached)
78837934 return 0;
7884− }
78857935
78867936 if (p->flags & IORING_SETUP_SQ_AFF) {
78877937 int cpu = p->sq_thread_cpu;
@@ -8332,19 +8382,13 @@ static int io_eventfd_unregister(struct io_ring_ctx *ctx) · 444 unmodified lines
83328382 return -ENXIO;
83338383 }
83348384
8335−static int __io_destroy_buffers(int id, void *p, void *data)
8336−{
8337− struct io_ring_ctx *ctx = data;
8338− struct io_buffer *buf = p;
8339−
8340− __io_remove_buffers(ctx, buf, id, -1U);
8341− return 0;
8342−}
8343−
83448385 static void io_destroy_buffers(struct io_ring_ctx *ctx)
83458386 {
8346− idr_for_each(&ctx->io_buffer_idr, __io_destroy_buffers, ctx);
8347− idr_destroy(&ctx->io_buffer_idr);
8387+ struct io_buffer *buf;
8388+ unsigned long index;
8389+
8390+ xa_for_each(&ctx->io_buffers, index, buf)
8391+ __io_remove_buffers(ctx, buf, index, -1U);
83488392 }
83498393
83508394 static void io_req_cache_free(struct list_head *list, struct task_struct *tsk)
@@ -8386,11 +8430,13 @@ static void io_ring_ctx_free(struct io_ring_ctx *ctx) · 35 unmodified lines
83868430 {
83878431 /*
83888432 * Some may use context even when all refs and requests have been put,
8389− * and they are free to do so while still holding uring_lock, see
8390− * __io_req_task_submit(). Wait for them to finish.
8433+ * and they are free to do so while still holding uring_lock or
8434+ * completion_lock, see __io_req_task_submit(). Wait for them to finish.
83918435 */
83928436 mutex_lock(&ctx->uring_lock);
83938437 mutex_unlock(&ctx->uring_lock);
8438+ spin_lock_irq(&ctx->completion_lock);
8439+ spin_unlock_irq(&ctx->completion_lock);
83948440
83958441 io_sq_thread_finish(ctx);
83968442 io_sqe_buffers_unregister(ctx);
@@ -8478,26 +8524,9 @@ static int io_unregister_personality(struct io_ring_ctx *ctx, unsigned id) · 81 unmodified lines
84788524 return -EINVAL;
84798525 }
84808526
8481−static bool io_run_ctx_fallback(struct io_ring_ctx *ctx)
8527+static inline bool io_run_ctx_fallback(struct io_ring_ctx *ctx)
84828528 {
8483− struct callback_head *work, *next;
8484− bool executed = false;
8485−
8486− do {
8487− work = xchg(&ctx->exit_task_work, NULL);
8488− if (!work)
8489− break;
8490−
8491− do {
8492− next = work->next;
8493− work->func(work);
8494− work = next;
8495− cond_resched();
8496− } while (work);
8497− executed = true;
8498− } while (1);
8499−
8500− return executed;
8529+ return io_run_task_work_head(&ctx->exit_task_work);
85018530 }
85028531
85038532 struct io_tctx_exit {
@@ -8529,6 +8558,14 @@ static void io_ring_exit_work(struct work_struct *work) · 25 unmodified lines
85298558 struct io_tctx_node *node;
85308559 int ret;
85318560
8561+ /* prevent SQPOLL from submitting new requests */
8562+ if (ctx->sq_data) {
8563+ io_sq_thread_park(ctx->sq_data);
8564+ list_del_init(&ctx->sqd_list);
8565+ io_sqd_update_thread_idle(ctx->sq_data);
8566+ io_sq_thread_unpark(ctx->sq_data);
8567+ }
8568+
85328569 /*
85338570 * If we're doing polled IO and end up having requests being
85348571 * submitted async (out-of-line), then completions can come in while
@@ -8565,6 +8602,28 @@ static void io_ring_exit_work(struct work_struct *work) · 30 unmodified lines
85658602 io_ring_ctx_free(ctx);
85668603 }
85678604
8605+/* Returns true if we found and killed one or more timeouts */
8606+static bool io_kill_timeouts(struct io_ring_ctx *ctx, struct task_struct *tsk,
8607+ struct files_struct *files)
8608+{
8609+ struct io_kiocb *req, *tmp;
8610+ int canceled = 0;
8611+
8612+ spin_lock_irq(&ctx->completion_lock);
8613+ list_for_each_entry_safe(req, tmp, &ctx->timeout_list, timeout.list) {
8614+ if (io_match_task(req, tsk, files)) {
8615+ io_kill_timeout(req, -ECANCELED);
8616+ canceled++;
8617+ }
8618+ }
8619+ if (canceled != 0)
8620+ io_commit_cqring(ctx);
8621+ spin_unlock_irq(&ctx->completion_lock);
8622+ if (canceled != 0)
8623+ io_cqring_ev_posted(ctx);
8624+ return canceled != 0;
8625+}
8626+
85688627 static void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx)
85698628 {
85708629 unsigned long index;
@@ -8879,7 +8938,7 @@ static void io_sqpoll_cancel_sync(struct io_ring_ctx *ctx) · 308 unmodified lines
88798938 if (task) {
88808939 init_completion(&work.completion);
88818940 init_task_work(&work.task_work, io_sqpoll_cancel_cb);
8882− WARN_ON_ONCE(task_work_add(task, &work.task_work, TWA_SIGNAL));
8941+ io_task_work_add_head(&sqd->park_task_work, &work.task_work);
88838942 wake_up_process(task);
88848943 }
88858944 io_sq_thread_unpark(sqd);
@@ -8956,6 +9015,8 @@ void __io_uring_task_cancel(void) · 70 unmodified lines
89569015
89579016 /* make sure overflow events are dropped */
89589017 atomic_inc(&tctx->in_idle);
9018+ __io_uring_files_cancel(NULL);
9019+
89599020 do {
89609021 /* read completions before cancelations */
89619022 inflight = tctx_inflight(tctx);
fs/iomap/swapfile.c+10−0
@@ -170,6 +170,16 @@ int iomap_swapfile_activate(struct swap_info_struct *sis, · 169 unmodified lines
170170 return ret;
171171 }
172172
173+ /*
174+ * If this swapfile doesn't contain even a single page-aligned
175+ * contiguous range of blocks, reject this useless swapfile to
176+ * prevent confusion later on.
177+ */
178+ if (isi.nr_pages == 0) {
179+ pr_warn("swapon: Cannot find a single usable page in file.\n");
180+ return -EINVAL;
181+ }
182+
173183 *pagespan = 1 + isi.highest_ppage - isi.lowest_ppage;
174184 sis->max = isi.nr_pages;
175185 sis->pages = isi.nr_pages - 1;
fs/locks.c+0−3
@@ -1808,9 +1808,6 @@ check_conflicting_open(struct file *filp, const long arg, int flags) · 1807 unmodified lines
18081808
18091809 if (flags & FL_LAYOUT)
18101810 return 0;
1811− if (flags & FL_DELEG)
1812− /* We leave these checks to the caller. */
1813− return 0;
18141811
18151812 if (arg == F_RDLCK)
18161813 return inode_is_open_for_write(inode) ? -EAGAIN : 0;
fs/nfsd/Kconfig+1−0
@@ -73,6 +73,7 @@ config NFSD_V4 · 72 unmodified lines
7373 select NFSD_V3
7474 select FS_POSIX_ACL
7575 select SUNRPC_GSS
76+ select CRYPTO
7677 select CRYPTO_MD5
7778 select CRYPTO_SHA256
7879 select GRACE_PERIOD
fs/nfsd/filecache.c+2−0
@@ -898,6 +898,8 @@ nfsd_file_find_locked(struct inode *inode, unsigned int may_flags, · 897 unmodified lines
898898 continue;
899899 if (!nfsd_match_cred(nf->nf_cred, current_cred()))
900900 continue;
901+ if (!test_bit(NFSD_FILE_HASHED, &nf->nf_flags))
902+ continue;
901903 if (nfsd_file_get(nf) != NULL)
902904 return nf;
903905 }
fs/nfsd/nfs4callback.c+1−0
@@ -1189,6 +1189,7 @@ static void nfsd4_cb_done(struct rpc_task *task, void *calldata) · 1188 unmodified lines
11891189 switch (task->tk_status) {
11901190 case -EIO:
11911191 case -ETIMEDOUT:
1192+ case -EACCES:
11921193 nfsd4_mark_cb_down(clp, task->tk_status);
11931194 }
11941195 break;
fs/nfsd/nfs4proc.c+1−1
@@ -1302,7 +1302,7 @@ nfsd4_cleanup_inter_ssc(struct vfsmount *ss_mnt, struct nfsd_file *src, · 1301 unmodified lines
13021302 struct nfsd_file *dst)
13031303 {
13041304 nfs42_ssc_close(src->nf_file);
1305− /* 'src' is freed by nfsd4_do_async_copy */
1305+ fput(src->nf_file);
13061306 nfsd_file_put(dst);
13071307 mntput(ss_mnt);
13081308 }
fs/nfsd/nfs4state.c+15−40
@@ -4940,31 +4940,6 @@ static struct file_lock *nfs4_alloc_init_lease(struct nfs4_delegation *dp, · 4939 unmodified lines
49404940 return fl;
49414941 }
49424942
4943−static int nfsd4_check_conflicting_opens(struct nfs4_client *clp,
4944− struct nfs4_file *fp)
4945−{
4946− struct nfs4_clnt_odstate *co;
4947− struct file *f = fp->fi_deleg_file->nf_file;
4948− struct inode *ino = locks_inode(f);
4949− int writes = atomic_read(&ino->i_writecount);
4950−
4951− if (fp->fi_fds[O_WRONLY])
4952− writes--;
4953− if (fp->fi_fds[O_RDWR])
4954− writes--;
4955− if (writes > 0)
4956− return -EAGAIN;
4957− spin_lock(&fp->fi_lock);
4958− list_for_each_entry(co, &fp->fi_clnt_odstate, co_perfile) {
4959− if (co->co_client != clp) {
4960− spin_unlock(&fp->fi_lock);
4961− return -EAGAIN;
4962− }
4963− }
4964− spin_unlock(&fp->fi_lock);
4965− return 0;
4966−}
4967−
49684943 static struct nfs4_delegation *
49694944 nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh,
49704945 struct nfs4_file *fp, struct nfs4_clnt_odstate *odstate)
@@ -4984,12 +4959,9 @@ nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh, · 13 unmodified lines
49844959
49854960 nf = find_readable_file(fp);
49864961 if (!nf) {
4987− /*
4988− * We probably could attempt another open and get a read
4989− * delegation, but for now, don't bother until the
4990− * client actually sends us one.
4991− */
4992− return ERR_PTR(-EAGAIN);
4962+ /* We should always have a readable file here */
4963+ WARN_ON_ONCE(1);
4964+ return ERR_PTR(-EBADF);
49934965 }
49944966 spin_lock(&state_lock);
49954967 spin_lock(&fp->fi_lock);
@@ -5019,19 +4991,11 @@ nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh, · 23 unmodified lines
50194991 if (!fl)
50204992 goto out_clnt_odstate;
50214993
5022− status = nfsd4_check_conflicting_opens(clp, fp);
5023− if (status) {
5024− locks_free_lock(fl);
5025− goto out_clnt_odstate;
5026− }
50274994 status = vfs_setlease(fp->fi_deleg_file->nf_file, fl->fl_type, &fl, NULL);
50284995 if (fl)
50294996 locks_free_lock(fl);
50304997 if (status)
50314998 goto out_clnt_odstate;
5032− status = nfsd4_check_conflicting_opens(clp, fp);
5033− if (status)
5034− goto out_clnt_odstate;
50354999
50365000 spin_lock(&state_lock);
50375001 spin_lock(&fp->fi_lock);
@@ -5113,6 +5077,17 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, · 75 unmodified lines
51135077 goto out_no_deleg;
51145078 if (!cb_up || !(oo->oo_flags & NFS4_OO_CONFIRMED))
51155079 goto out_no_deleg;
5080+ /*
5081+ * Also, if the file was opened for write or
5082+ * create, there's a good chance the client's
5083+ * about to write to it, resulting in an
5084+ * immediate recall (since we don't support
5085+ * write delegations):
5086+ */
5087+ if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE)
5088+ goto out_no_deleg;
5089+ if (open->op_create == NFS4_OPEN_CREATE)
5090+ goto out_no_deleg;
51165091 break;
51175092 default:
51185093 goto out_no_deleg;
@@ -5389,7 +5364,7 @@ nfs4_laundromat(struct nfsd_net *nn) · 270 unmodified lines
53895364 idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) {
53905365 cps = container_of(cps_t, struct nfs4_cpntf_state, cp_stateid);
53915366 if (cps->cp_stateid.sc_type == NFS4_COPYNOTIFY_STID &&
5392− cps->cpntf_time > cutoff)
5367+ cps->cpntf_time < cutoff)
53935368 _free_cpntf_state_locked(nn, cps);
53945369 }
53955370 spin_unlock(&nn->s2s_cp_lock);
fs/reiserfs/xattr.h+1−1
@@ -44,7 +44,7 @@ void reiserfs_security_free(struct reiserfs_security_handle *sec); · 43 unmodified lines
4444
4545 static inline int reiserfs_xattrs_initialized(struct super_block *sb)
4646 {
47− return REISERFS_SB(sb)->priv_root != NULL;
47+ return REISERFS_SB(sb)->priv_root && REISERFS_SB(sb)->xattr_root;
4848 }
4949
5050 #define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header))
fs/select.c+4−6
@@ -1055,10 +1055,9 @@ static long do_restart_poll(struct restart_block *restart_block) · 1054 unmodified lines
10551055
10561056 ret = do_sys_poll(ufds, nfds, to);
10571057
1058− if (ret == -ERESTARTNOHAND) {
1059− restart_block->fn = do_restart_poll;
1060− ret = -ERESTART_RESTARTBLOCK;
1061− }
1058+ if (ret == -ERESTARTNOHAND)
1059+ ret = set_restart_fn(restart_block, do_restart_poll);
1060+
10621061 return ret;
10631062 }
10641063
@@ -1080,7 +1079,6 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, · 15 unmodified lines
10801079 struct restart_block *restart_block;
10811080
10821081 restart_block = &current->restart_block;
1083− restart_block->fn = do_restart_poll;
10841082 restart_block->poll.ufds = ufds;
10851083 restart_block->poll.nfds = nfds;
10861084
@@ -1091,7 +1089,7 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, · 4 unmodified lines
10911089 } else
10921090 restart_block->poll.has_timeout = 0;
10931091
1094− ret = -ERESTART_RESTARTBLOCK;
1092+ ret = set_restart_fn(restart_block, do_restart_poll);
10951093 }
10961094 return ret;
10971095 }
fs/squashfs/export.c+6−2
@@ -152,14 +152,18 @@ __le64 *squashfs_read_inode_lookup_table(struct super_block *sb, · 151 unmodified lines
152152 start = le64_to_cpu(table[n]);
153153 end = le64_to_cpu(table[n + 1]);
154154
155− if (start >= end || (end - start) > SQUASHFS_METADATA_SIZE) {
155+ if (start >= end
156+ || (end - start) >
157+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
156158 kfree(table);
157159 return ERR_PTR(-EINVAL);
158160 }
159161 }
160162
161163 start = le64_to_cpu(table[indexes - 1]);
162− if (start >= lookup_table_start || (lookup_table_start - start) > SQUASHFS_METADATA_SIZE) {
164+ if (start >= lookup_table_start ||
165+ (lookup_table_start - start) >
166+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
163167 kfree(table);
164168 return ERR_PTR(-EINVAL);
165169 }
fs/squashfs/id.c+4−2
@@ -97,14 +97,16 @@ __le64 *squashfs_read_id_index_table(struct super_block *sb, · 96 unmodified lines
9797 start = le64_to_cpu(table[n]);
9898 end = le64_to_cpu(table[n + 1]);
9999
100− if (start >= end || (end - start) > SQUASHFS_METADATA_SIZE) {
100+ if (start >= end || (end - start) >
101+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
101102 kfree(table);
102103 return ERR_PTR(-EINVAL);
103104 }
104105 }
105106
106107 start = le64_to_cpu(table[indexes - 1]);
107− if (start >= id_table_start || (id_table_start - start) > SQUASHFS_METADATA_SIZE) {
108+ if (start >= id_table_start || (id_table_start - start) >
109+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
108110 kfree(table);
109111 return ERR_PTR(-EINVAL);
110112 }
fs/squashfs/squashfs_fs.h+1−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
1717
1818 /* size of metadata (inode and directory) blocks */
1919 #define SQUASHFS_METADATA_SIZE 8192
20+#define SQUASHFS_BLOCK_OFFSET 2
2021
2122 /* default size of block device I/O */
2223 #ifdef CONFIG_SQUASHFS_4K_DEVBLK_SIZE
fs/squashfs/xattr_id.c+4−2
@@ -109,14 +109,16 @@ __le64 *squashfs_read_xattr_id_table(struct super_block *sb, u64 table_start, · 108 unmodified lines
109109 start = le64_to_cpu(table[n]);
110110 end = le64_to_cpu(table[n + 1]);
111111
112− if (start >= end || (end - start) > SQUASHFS_METADATA_SIZE) {
112+ if (start >= end || (end - start) >
113+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
113114 kfree(table);
114115 return ERR_PTR(-EINVAL);
115116 }
116117 }
117118
118119 start = le64_to_cpu(table[indexes - 1]);
119− if (start >= table_start || (table_start - start) > SQUASHFS_METADATA_SIZE) {
120+ if (start >= table_start || (table_start - start) >
121+ (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
120122 kfree(table);
121123 return ERR_PTR(-EINVAL);
122124 }
fs/xfs/xfs_inode.c+8−6
@@ -1007,9 +1007,10 @@ xfs_create( · 1006 unmodified lines
10071007 /*
10081008 * Make sure that we have allocated dquot(s) on disk.
10091009 */
1010− error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid,
1011− XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT,
1012− &udqp, &gdqp, &pdqp);
1010+ error = xfs_qm_vop_dqalloc(dp, fsuid_into_mnt(mnt_userns),
1011+ fsgid_into_mnt(mnt_userns), prid,
1012+ XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT,
1013+ &udqp, &gdqp, &pdqp);
10131014 if (error)
10141015 return error;
10151016
@@ -1157,9 +1158,10 @@ xfs_create_tmpfile( · 141 unmodified lines
11571158 /*
11581159 * Make sure that we have allocated dquot(s) on disk.
11591160 */
1160− error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid,
1161− XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT,
1162− &udqp, &gdqp, &pdqp);
1161+ error = xfs_qm_vop_dqalloc(dp, fsuid_into_mnt(mnt_userns),
1162+ fsgid_into_mnt(mnt_userns), prid,
1163+ XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT,
1164+ &udqp, &gdqp, &pdqp);
11631165 if (error)
11641166 return error;
11651167
fs/xfs/xfs_itable.c+6−0
@@ -168,6 +168,12 @@ xfs_bulkstat_one( · 167 unmodified lines
168168 };
169169 int error;
170170
171+ if (breq->mnt_userns != &init_user_ns) {
172+ xfs_warn_ratelimited(breq->mp,
173+ "bulkstat not supported inside of idmapped mounts.");
174+ return -EINVAL;
175+ }
176+
171177 ASSERT(breq->icount == 1);
172178
173179 bc.buf = kmem_zalloc(sizeof(struct xfs_bulkstat),
fs/xfs/xfs_mount.c+44−46
@@ -634,6 +634,47 @@ xfs_check_summary_counts( · 633 unmodified lines
634634 return xfs_initialize_perag_data(mp, mp->m_sb.sb_agcount);
635635 }
636636
637+/*
638+ * Flush and reclaim dirty inodes in preparation for unmount. Inodes and
639+ * internal inode structures can be sitting in the CIL and AIL at this point,
640+ * so we need to unpin them, write them back and/or reclaim them before unmount
641+ * can proceed.
642+ *
643+ * An inode cluster that has been freed can have its buffer still pinned in
644+ * memory because the transaction is still sitting in a iclog. The stale inodes
645+ * on that buffer will be pinned to the buffer until the transaction hits the
646+ * disk and the callbacks run. Pushing the AIL will skip the stale inodes and
647+ * may never see the pinned buffer, so nothing will push out the iclog and
648+ * unpin the buffer.
649+ *
650+ * Hence we need to force the log to unpin everything first. However, log
651+ * forces don't wait for the discards they issue to complete, so we have to
652+ * explicitly wait for them to complete here as well.
653+ *
654+ * Then we can tell the world we are unmounting so that error handling knows
655+ * that the filesystem is going away and we should error out anything that we
656+ * have been retrying in the background. This will prevent never-ending
657+ * retries in AIL pushing from hanging the unmount.
658+ *
659+ * Finally, we can push the AIL to clean all the remaining dirty objects, then
660+ * reclaim the remaining inodes that are still in memory at this point in time.
661+ */
662+static void
663+xfs_unmount_flush_inodes(
664+ struct xfs_mount *mp)
665+{
666+ xfs_log_force(mp, XFS_LOG_SYNC);
667+ xfs_extent_busy_wait_all(mp);
668+ flush_workqueue(xfs_discard_wq);
669+
670+ mp->m_flags |= XFS_MOUNT_UNMOUNTING;
671+
672+ xfs_ail_push_all_sync(mp->m_ail);
673+ cancel_delayed_work_sync(&mp->m_reclaim_work);
674+ xfs_reclaim_inodes(mp);
675+ xfs_health_unmount(mp);
676+}
677+
637678 /*
638679 * This function does the following on an initial mount of a file system:
639680 * - reads the superblock from disk and init the mount struct
@@ -1008,7 +1049,7 @@ xfs_mountfs( · 368 unmodified lines
10081049 /* Clean out dquots that might be in memory after quotacheck. */
10091050 xfs_qm_unmount(mp);
10101051 /*
1011− * Cancel all delayed reclaim work and reclaim the inodes directly.
1052+ * Flush all inode reclamation work and flush the log.
10121053 * We have to do this /after/ rtunmount and qm_unmount because those
10131054 * two will have scheduled delayed reclaim for the rt/quota inodes.
10141055 *
@@ -1018,11 +1059,8 @@ xfs_mountfs( · 3 unmodified lines
10181059 * qm_unmount_quotas and therefore rely on qm_unmount to release the
10191060 * quota inodes.
10201061 */
1021− cancel_delayed_work_sync(&mp->m_reclaim_work);
1022− xfs_reclaim_inodes(mp);
1023− xfs_health_unmount(mp);
1062+ xfs_unmount_flush_inodes(mp);
10241063 out_log_dealloc:
1025− mp->m_flags |= XFS_MOUNT_UNMOUNTING;
10261064 xfs_log_mount_cancel(mp);
10271065 out_fail_wait:
10281066 if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
@@ -1063,47 +1101,7 @@ xfs_unmountfs( · 34 unmodified lines
10631101 xfs_rtunmount_inodes(mp);
10641102 xfs_irele(mp->m_rootip);
10651103
1066− /*
1067− * We can potentially deadlock here if we have an inode cluster
1068− * that has been freed has its buffer still pinned in memory because
1069− * the transaction is still sitting in a iclog. The stale inodes
1070− * on that buffer will be pinned to the buffer until the
1071− * transaction hits the disk and the callbacks run. Pushing the AIL will
1072− * skip the stale inodes and may never see the pinned buffer, so
1073− * nothing will push out the iclog and unpin the buffer. Hence we
1074− * need to force the log here to ensure all items are flushed into the
1075− * AIL before we go any further.
1076− */
1077− xfs_log_force(mp, XFS_LOG_SYNC);
1078−
1079− /*
1080− * Wait for all busy extents to be freed, including completion of
1081− * any discard operation.
1082− */
1083− xfs_extent_busy_wait_all(mp);
1084− flush_workqueue(xfs_discard_wq);
1085−
1086− /*
1087− * We now need to tell the world we are unmounting. This will allow
1088− * us to detect that the filesystem is going away and we should error
1089− * out anything that we have been retrying in the background. This will
1090− * prevent neverending retries in AIL pushing from hanging the unmount.
1091− */
1092− mp->m_flags |= XFS_MOUNT_UNMOUNTING;
1093−
1094− /*
1095− * Flush all pending changes from the AIL.
1096− */
1097− xfs_ail_push_all_sync(mp->m_ail);
1098−
1099− /*
1100− * Reclaim all inodes. At this point there should be no dirty inodes and
1101− * none should be pinned or locked. Stop background inode reclaim here
1102− * if it is still running.
1103− */
1104− cancel_delayed_work_sync(&mp->m_reclaim_work);
1105− xfs_reclaim_inodes(mp);
1106− xfs_health_unmount(mp);
1104+ xfs_unmount_flush_inodes(mp);
11071105
11081106 xfs_qm_unmount(mp);
11091107
fs/xfs/xfs_symlink.c+2−1
@@ -182,7 +182,8 @@ xfs_symlink( · 181 unmodified lines
182182 /*
183183 * Make sure that we have allocated dquot(s) on disk.
184184 */
185− error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid,
185+ error = xfs_qm_vop_dqalloc(dp, fsuid_into_mnt(mnt_userns),
186+ fsgid_into_mnt(mnt_userns), prid,
186187 XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT,
187188 &udqp, &gdqp, &pdqp);
188189 if (error)
fs/zonefs/super.c+87−14
@@ -165,6 +165,21 @@ static int zonefs_writepages(struct address_space *mapping, · 164 unmodified lines
165165 return iomap_writepages(mapping, wbc, &wpc, &zonefs_writeback_ops);
166166 }
167167
168+static int zonefs_swap_activate(struct swap_info_struct *sis,
169+ struct file *swap_file, sector_t *span)
170+{
171+ struct inode *inode = file_inode(swap_file);
172+ struct zonefs_inode_info *zi = ZONEFS_I(inode);
173+
174+ if (zi->i_ztype != ZONEFS_ZTYPE_CNV) {
175+ zonefs_err(inode->i_sb,
176+ "swap file: not a conventional zone file\n");
177+ return -EINVAL;
178+ }
179+
180+ return iomap_swapfile_activate(sis, swap_file, span, &zonefs_iomap_ops);
181+}
182+
168183 static const struct address_space_operations zonefs_file_aops = {
169184 .readpage = zonefs_readpage,
170185 .readahead = zonefs_readahead,
@@ -177,6 +192,7 @@ static const struct address_space_operations zonefs_file_aops = { · 6 unmodified lines
177192 .is_partially_uptodate = iomap_is_partially_uptodate,
178193 .error_remove_page = generic_error_remove_page,
179194 .direct_IO = noop_direct_IO,
195+ .swap_activate = zonefs_swap_activate,
180196 };
181197
182198 static void zonefs_update_stats(struct inode *inode, loff_t new_isize)
@@ -727,6 +743,68 @@ out_release: · 544 unmodified lines
727743 return ret;
728744 }
729745
746+/*
747+ * Do not exceed the LFS limits nor the file zone size. If pos is under the
748+ * limit it becomes a short access. If it exceeds the limit, return -EFBIG.
749+ */
750+static loff_t zonefs_write_check_limits(struct file *file, loff_t pos,
751+ loff_t count)
752+{
753+ struct inode *inode = file_inode(file);
754+ struct zonefs_inode_info *zi = ZONEFS_I(inode);
755+ loff_t limit = rlimit(RLIMIT_FSIZE);
756+ loff_t max_size = zi->i_max_size;
757+
758+ if (limit != RLIM_INFINITY) {
759+ if (pos >= limit) {
760+ send_sig(SIGXFSZ, current, 0);
761+ return -EFBIG;
762+ }
763+ count = min(count, limit - pos);
764+ }
765+
766+ if (!(file->f_flags & O_LARGEFILE))
767+ max_size = min_t(loff_t, MAX_NON_LFS, max_size);
768+
769+ if (unlikely(pos >= max_size))
770+ return -EFBIG;
771+
772+ return min(count, max_size - pos);
773+}
774+
775+static ssize_t zonefs_write_checks(struct kiocb *iocb, struct iov_iter *from)
776+{
777+ struct file *file = iocb->ki_filp;
778+ struct inode *inode = file_inode(file);
779+ struct zonefs_inode_info *zi = ZONEFS_I(inode);
780+ loff_t count;
781+
782+ if (IS_SWAPFILE(inode))
783+ return -ETXTBSY;
784+
785+ if (!iov_iter_count(from))
786+ return 0;
787+
788+ if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT))
789+ return -EINVAL;
790+
791+ if (iocb->ki_flags & IOCB_APPEND) {
792+ if (zi->i_ztype != ZONEFS_ZTYPE_SEQ)
793+ return -EINVAL;
794+ mutex_lock(&zi->i_truncate_mutex);
795+ iocb->ki_pos = zi->i_wpoffset;
796+ mutex_unlock(&zi->i_truncate_mutex);
797+ }
798+
799+ count = zonefs_write_check_limits(file, iocb->ki_pos,
800+ iov_iter_count(from));
801+ if (count < 0)
802+ return count;
803+
804+ iov_iter_truncate(from, count);
805+ return iov_iter_count(from);
806+}
807+
730808 /*
731809 * Handle direct writes. For sequential zone files, this is the only possible
732810 * write path. For these files, check that the user is issuing writes
@@ -744,8 +822,7 @@ static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from) · 11 unmodified lines
744822 struct super_block *sb = inode->i_sb;
745823 bool sync = is_sync_kiocb(iocb);
746824 bool append = false;
747− size_t count;
748− ssize_t ret;
825+ ssize_t ret, count;
749826
750827 /*
751828 * For async direct IOs to sequential zone files, refuse IOCB_NOWAIT
@@ -763,12 +840,11 @@ static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from) · 11 unmodified lines
763840 inode_lock(inode);
764841 }
765842
766− ret = generic_write_checks(iocb, from);
767− if (ret <= 0)
843+ count = zonefs_write_checks(iocb, from);
844+ if (count <= 0) {
845+ ret = count;
768846 goto inode_unlock;
769−
770− iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
771− count = iov_iter_count(from);
847+ }
772848
773849 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
774850 ret = -EINVAL;
@@ -828,12 +904,10 @@ static ssize_t zonefs_file_buffered_write(struct kiocb *iocb, · 53 unmodified lines
828904 inode_lock(inode);
829905 }
830906
831− ret = generic_write_checks(iocb, from);
907+ ret = zonefs_write_checks(iocb, from);
832908 if (ret <= 0)
833909 goto inode_unlock;
834910
835− iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
836−
837911 ret = iomap_file_buffered_write(iocb, from, &zonefs_iomap_ops);
838912 if (ret > 0)
839913 iocb->ki_pos += ret;
@@ -966,9 +1040,7 @@ static int zonefs_open_zone(struct inode *inode) · 126 unmodified lines
9661040
9671041 mutex_lock(&zi->i_truncate_mutex);
9681042
969− zi->i_wr_refcnt++;
970− if (zi->i_wr_refcnt == 1) {
971−
1043+ if (!zi->i_wr_refcnt) {
9721044 if (atomic_inc_return(&sbi->s_open_zones) > sbi->s_max_open_zones) {
9731045 atomic_dec(&sbi->s_open_zones);
9741046 ret = -EBUSY;
@@ -978,7 +1050,6 @@ static int zonefs_open_zone(struct inode *inode) · 3 unmodified lines
9781050 if (i_size_read(inode) < zi->i_max_size) {
9791051 ret = zonefs_zone_mgmt(inode, REQ_OP_ZONE_OPEN);
9801052 if (ret) {
981− zi->i_wr_refcnt--;
9821053 atomic_dec(&sbi->s_open_zones);
9831054 goto unlock;
9841055 }
@@ -986,6 +1057,8 @@ static int zonefs_open_zone(struct inode *inode) · 1 unmodified line
9861057 }
9871058 }
9881059
1060+ zi->i_wr_refcnt++;
1061+
9891062 unlock:
9901063 mutex_unlock(&zi->i_truncate_mutex);
9911064
include/acpi/acpi_bus.h+1−0
@@ -233,6 +233,7 @@ struct acpi_pnp_type { · 232 unmodified lines
233233
234234 struct acpi_device_pnp {
235235 acpi_bus_id bus_id; /* Object name */
236+ int instance_no; /* Instance number of this object */
236237 struct acpi_pnp_type type; /* ID type */
237238 acpi_bus_address bus_address; /* _ADR */
238239 char *unique_id; /* _UID */
include/drm/ttm/ttm_bo_api.h+4−2
@@ -612,9 +612,11 @@ static inline void ttm_bo_pin(struct ttm_buffer_object *bo) · 611 unmodified lines
612612 static inline void ttm_bo_unpin(struct ttm_buffer_object *bo)
613613 {
614614 dma_resv_assert_held(bo->base.resv);
615− WARN_ON_ONCE(!bo->pin_count);
616615 WARN_ON_ONCE(!kref_read(&bo->kref));
617− --bo->pin_count;
616+ if (bo->pin_count)
617+ --bo->pin_count;
618+ else
619+ WARN_ON_ONCE(true);
618620 }
619621
620622 int ttm_mem_evict_first(struct ttm_bo_device *bdev,
include/linux/acpi.h+8−1
@@ -222,10 +222,14 @@ void __iomem *__acpi_map_table(unsigned long phys, unsigned long size); · 221 unmodified lines
222222 void __acpi_unmap_table(void __iomem *map, unsigned long size);
223223 int early_acpi_boot_init(void);
224224 int acpi_boot_init (void);
225+void acpi_boot_table_prepare (void);
225226 void acpi_boot_table_init (void);
226227 int acpi_mps_check (void);
227228 int acpi_numa_init (void);
228229
230+int acpi_locate_initial_tables (void);
231+void acpi_reserve_initial_tables (void);
232+void acpi_table_init_complete (void);
229233 int acpi_table_init (void);
230234 int acpi_table_parse(char *id, acpi_tbl_table_handler handler);
231235 int __init acpi_table_parse_entries(char *id, unsigned long table_size,
@@ -814,9 +818,12 @@ static inline int acpi_boot_init(void) · 582 unmodified lines
814818 return 0;
815819 }
816820
821+static inline void acpi_boot_table_prepare(void)
822+{
823+}
824+
817825 static inline void acpi_boot_table_init(void)
818826 {
819− return;
820827 }
821828
822829 static inline int acpi_mps_check(void)
include/linux/amba/bus.h+11−0
@@ -105,8 +105,19 @@ extern struct bus_type amba_bustype; · 104 unmodified lines
105105 #define amba_get_drvdata(d) dev_get_drvdata(&d->dev)
106106 #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p)
107107
108+#ifdef CONFIG_ARM_AMBA
108109 int amba_driver_register(struct amba_driver *);
109110 void amba_driver_unregister(struct amba_driver *);
111+#else
112+static inline int amba_driver_register(struct amba_driver *drv)
113+{
114+ return -EINVAL;
115+}
116+static inline void amba_driver_unregister(struct amba_driver *drv)
117+{
118+}
119+#endif
120+
110121 struct amba_device *amba_device_alloc(const char *, resource_size_t, size_t);
111122 void amba_device_put(struct amba_device *);
112123 int amba_device_add(struct amba_device *, struct resource *);
include/linux/blkdev.h+0−2
@@ -85,8 +85,6 @@ typedef __u32 __bitwise req_flags_t; · 84 unmodified lines
8585 #define RQF_ELVPRIV ((__force req_flags_t)(1 << 12))
8686 /* account into disk and partition IO statistics */
8787 #define RQF_IO_STAT ((__force req_flags_t)(1 << 13))
88−/* request came from our alloc pool */
89−#define RQF_ALLOCED ((__force req_flags_t)(1 << 14))
9088 /* runtime pm request */
9189 #define RQF_PM ((__force req_flags_t)(1 << 15))
9290 /* on IO scheduler merge hash */
include/linux/bpf.h+25−8
@@ -21,6 +21,7 @@ · 20 unmodified lines
2121 #include <linux/capability.h>
2222 #include <linux/sched/mm.h>
2323 #include <linux/slab.h>
24+#include <linux/percpu-refcount.h>
2425
2526 struct bpf_verifier_env;
2627 struct bpf_verifier_log;
@@ -556,7 +557,8 @@ struct bpf_tramp_progs { · 529 unmodified lines
556557 * fentry = a set of program to run before calling original function
557558 * fexit = a set of program to run after original function
558559 */
559−int arch_prepare_bpf_trampoline(void *image, void *image_end,
560+struct bpf_tramp_image;
561+int arch_prepare_bpf_trampoline(struct bpf_tramp_image *tr, void *image, void *image_end,
560562 const struct btf_func_model *m, u32 flags,
561563 struct bpf_tramp_progs *tprogs,
562564 void *orig_call);
@@ -565,6 +567,8 @@ u64 notrace __bpf_prog_enter(struct bpf_prog *prog); · 2 unmodified lines
565567 void notrace __bpf_prog_exit(struct bpf_prog *prog, u64 start);
566568 u64 notrace __bpf_prog_enter_sleepable(struct bpf_prog *prog);
567569 void notrace __bpf_prog_exit_sleepable(struct bpf_prog *prog, u64 start);
570+void notrace __bpf_tramp_enter(struct bpf_tramp_image *tr);
571+void notrace __bpf_tramp_exit(struct bpf_tramp_image *tr);
568572
569573 struct bpf_ksym {
570574 unsigned long start;
@@ -583,6 +587,18 @@ enum bpf_tramp_prog_type { · 12 unmodified lines
583587 BPF_TRAMP_REPLACE, /* more than MAX */
584588 };
585589
590+struct bpf_tramp_image {
591+ void *image;
592+ struct bpf_ksym ksym;
593+ struct percpu_ref pcref;
594+ void *ip_after_call;
595+ void *ip_epilogue;
596+ union {
597+ struct rcu_head rcu;
598+ struct work_struct work;
599+ };
600+};
601+
586602 struct bpf_trampoline {
587603 /* hlist for trampoline_table */
588604 struct hlist_node hlist;
@@ -605,9 +621,8 @@ struct bpf_trampoline { · 16 unmodified lines
605621 /* Number of attached programs. A counter per kind. */
606622 int progs_cnt[BPF_TRAMP_MAX];
607623 /* Executable image of trampoline */
608− void *image;
624+ struct bpf_tramp_image *cur_image;
609625 u64 selector;
610− struct bpf_ksym ksym;
611626 };
612627
613628 struct bpf_attach_target_info {
@@ -691,6 +706,8 @@ void bpf_image_ksym_add(void *data, struct bpf_ksym *ksym); · 77 unmodified lines
691706 void bpf_image_ksym_del(struct bpf_ksym *ksym);
692707 void bpf_ksym_add(struct bpf_ksym *ksym);
693708 void bpf_ksym_del(struct bpf_ksym *ksym);
709+int bpf_jit_charge_modmem(u32 pages);
710+void bpf_jit_uncharge_modmem(u32 pages);
694711 #else
695712 static inline int bpf_trampoline_link_prog(struct bpf_prog *prog,
696713 struct bpf_trampoline *tr)
@@ -787,7 +804,6 @@ struct bpf_prog_aux { · 90 unmodified lines
787804 bool func_proto_unreliable;
788805 bool sleepable;
789806 bool tail_call_reachable;
790− enum bpf_tramp_prog_type trampoline_prog_type;
791807 struct hlist_node tramp_hlist;
792808 /* BTF_KIND_FUNC_PROTO for valid attach_btf_id */
793809 const struct btf_type *attach_func_proto;
@@ -1093,7 +1109,7 @@ int bpf_prog_array_copy(struct bpf_prog_array *old_array, · 299 unmodified lines
10931109 _ret; \
10941110 })
10951111
1096−#define __BPF_PROG_RUN_ARRAY(array, ctx, func, check_non_null) \
1112+#define __BPF_PROG_RUN_ARRAY(array, ctx, func, check_non_null, set_cg_storage) \
10971113 ({ \
10981114 struct bpf_prog_array_item *_item; \
10991115 struct bpf_prog *_prog; \
@@ -1106,7 +1122,8 @@ int bpf_prog_array_copy(struct bpf_prog_array *old_array, · 6 unmodified lines
11061122 goto _out; \
11071123 _item = &_array->items[0]; \
11081124 while ((_prog = READ_ONCE(_item->prog))) { \
1109− bpf_cgroup_storage_set(_item->cgroup_storage); \
1125+ if (set_cg_storage) \
1126+ bpf_cgroup_storage_set(_item->cgroup_storage); \
11101127 _ret &= func(_prog, ctx); \
11111128 _item++; \
11121129 } \
@@ -1153,10 +1170,10 @@ _out: \ · 40 unmodified lines
11531170 })
11541171
11551172 #define BPF_PROG_RUN_ARRAY(array, ctx, func) \
1156− __BPF_PROG_RUN_ARRAY(array, ctx, func, false)
1173+ __BPF_PROG_RUN_ARRAY(array, ctx, func, false, true)
11571174
11581175 #define BPF_PROG_RUN_ARRAY_CHECK(array, ctx, func) \
1159− __BPF_PROG_RUN_ARRAY(array, ctx, func, true)
1176+ __BPF_PROG_RUN_ARRAY(array, ctx, func, true, false)
11601177
11611178 #ifdef CONFIG_BPF_SYSCALL
11621179 DECLARE_PER_CPU(int, bpf_prog_active);
include/linux/device-mapper.h+14−1
@@ -253,7 +253,11 @@ struct target_type { · 252 unmodified lines
253253 #define dm_target_passes_integrity(type) ((type)->features & DM_TARGET_PASSES_INTEGRITY)
254254
255255 /*
256− * Indicates that a target supports host-managed zoned block devices.
256+ * Indicates support for zoned block devices:
257+ * - DM_TARGET_ZONED_HM: the target also supports host-managed zoned
258+ * block devices but does not support combining different zoned models.
259+ * - DM_TARGET_MIXED_ZONED_MODEL: the target supports combining multiple
260+ * devices with different zoned models.
257261 */
258262 #ifdef CONFIG_BLK_DEV_ZONED
259263 #define DM_TARGET_ZONED_HM 0x00000040
@@ -275,6 +279,15 @@ struct target_type { · 15 unmodified lines
275279 #define DM_TARGET_PASSES_CRYPTO 0x00000100
276280 #define dm_target_passes_crypto(type) ((type)->features & DM_TARGET_PASSES_CRYPTO)
277281
282+#ifdef CONFIG_BLK_DEV_ZONED
283+#define DM_TARGET_MIXED_ZONED_MODEL 0x00000200
284+#define dm_target_supports_mixed_zoned_model(type) \
285+ ((type)->features & DM_TARGET_MIXED_ZONED_MODEL)
286+#else
287+#define DM_TARGET_MIXED_ZONED_MODEL 0x00000000
288+#define dm_target_supports_mixed_zoned_model(type) (false)
289+#endif
290+
278291 struct dm_target {
279292 struct dm_table *table;
280293 struct target_type *type;
include/linux/efi.h+4−2
@@ -72,8 +72,10 @@ typedef void *efi_handle_t; · 71 unmodified lines
7272 */
7373 typedef guid_t efi_guid_t __aligned(__alignof__(u32));
7474
75−#define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
76− GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)
75+#define EFI_GUID(a, b, c, d...) (efi_guid_t){ { \
76+ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
77+ (b) & 0xff, ((b) >> 8) & 0xff, \
78+ (c) & 0xff, ((c) >> 8) & 0xff, d } }
7779
7880 /*
7981 * Generic EFI table header
include/linux/extcon.h+23−0
@@ -271,6 +271,29 @@ static inline void devm_extcon_unregister_notifier(struct device *dev, · 270 unmodified lines
271271 struct extcon_dev *edev, unsigned int id,
272272 struct notifier_block *nb) { }
273273
274+static inline int extcon_register_notifier_all(struct extcon_dev *edev,
275+ struct notifier_block *nb)
276+{
277+ return 0;
278+}
279+
280+static inline int extcon_unregister_notifier_all(struct extcon_dev *edev,
281+ struct notifier_block *nb)
282+{
283+ return 0;
284+}
285+
286+static inline int devm_extcon_register_notifier_all(struct device *dev,
287+ struct extcon_dev *edev,
288+ struct notifier_block *nb)
289+{
290+ return 0;
291+}
292+
293+static inline void devm_extcon_unregister_notifier_all(struct device *dev,
294+ struct extcon_dev *edev,
295+ struct notifier_block *nb) { }
296+
274297 static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name)
275298 {
276299 return ERR_PTR(-ENODEV);
include/linux/firmware/intel/stratix10-svc-client.h+1−1
@@ -56,7 +56,7 @@ · 55 unmodified lines
5656 * COMMAND_RECONFIG_FLAG_PARTIAL:
5757 * Set to FPGA configuration type (full or partial).
5858 */
59−#define COMMAND_RECONFIG_FLAG_PARTIAL 1
59+#define COMMAND_RECONFIG_FLAG_PARTIAL 0
6060
6161 /*
6262 * Timeout settings for service clients:
include/linux/host1x.h+8−1
@@ -320,7 +320,14 @@ static inline struct host1x_device *to_host1x_device(struct device *dev) · 319 unmodified lines
320320 int host1x_device_init(struct host1x_device *device);
321321 int host1x_device_exit(struct host1x_device *device);
322322
323−int host1x_client_register(struct host1x_client *client);
323+int __host1x_client_register(struct host1x_client *client,
324+ struct lock_class_key *key);
325+#define host1x_client_register(class) \
326+ ({ \
327+ static struct lock_class_key __key; \
328+ __host1x_client_register(class, &__key); \
329+ })
330+
324331 int host1x_client_unregister(struct host1x_client *client);
325332
326333 int host1x_client_suspend(struct host1x_client *client);
include/linux/hugetlb_cgroup.h+13−2
@@ -113,6 +113,11 @@ static inline bool hugetlb_cgroup_disabled(void) · 112 unmodified lines
113113 return !cgroup_subsys_enabled(hugetlb_cgrp_subsys);
114114 }
115115
116+static inline void hugetlb_cgroup_put_rsvd_cgroup(struct hugetlb_cgroup *h_cg)
117+{
118+ css_put(&h_cg->css);
119+}
120+
116121 extern int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages,
117122 struct hugetlb_cgroup **ptr);
118123 extern int hugetlb_cgroup_charge_cgroup_rsvd(int idx, unsigned long nr_pages,
@@ -138,7 +143,8 @@ extern void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, · 19 unmodified lines
138143
139144 extern void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
140145 struct file_region *rg,
141− unsigned long nr_pages);
146+ unsigned long nr_pages,
147+ bool region_del);
142148
143149 extern void hugetlb_cgroup_file_init(void) __init;
144150 extern void hugetlb_cgroup_migrate(struct page *oldhpage,
@@ -147,7 +153,8 @@ extern void hugetlb_cgroup_migrate(struct page *oldhpage, · 2 unmodified lines
147153 #else
148154 static inline void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
149155 struct file_region *rg,
150− unsigned long nr_pages)
156+ unsigned long nr_pages,
157+ bool region_del)
151158 {
152159 }
153160
@@ -185,6 +192,10 @@ static inline bool hugetlb_cgroup_disabled(void) · 31 unmodified lines
185192 return true;
186193 }
187194
195+static inline void hugetlb_cgroup_put_rsvd_cgroup(struct hugetlb_cgroup *h_cg)
196+{
197+}
198+
188199 static inline int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages,
189200 struct hugetlb_cgroup **ptr)
190201 {
include/linux/if_macvlan.h+2−1
@@ -43,13 +43,14 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan, · 42 unmodified lines
4343 if (likely(success)) {
4444 struct vlan_pcpu_stats *pcpu_stats;
4545
46− pcpu_stats = this_cpu_ptr(vlan->pcpu_stats);
46+ pcpu_stats = get_cpu_ptr(vlan->pcpu_stats);
4747 u64_stats_update_begin(&pcpu_stats->syncp);
4848 pcpu_stats->rx_packets++;
4949 pcpu_stats->rx_bytes += len;
5050 if (multicast)
5151 pcpu_stats->rx_multicast++;
5252 u64_stats_update_end(&pcpu_stats->syncp);
53+ put_cpu_ptr(vlan->pcpu_stats);
5354 } else {
5455 this_cpu_inc(vlan->pcpu_stats->rx_errors);
5556 }
include/linux/io_uring.h+0−25
@@ -5,31 +5,6 @@ · 4 unmodified lines
55 #include <linux/sched.h>
66 #include <linux/xarray.h>
77
8−struct io_wq_work_node {
9− struct io_wq_work_node *next;
10−};
11−
12−struct io_wq_work_list {
13− struct io_wq_work_node *first;
14− struct io_wq_work_node *last;
15−};
16−
17−struct io_uring_task {
18− /* submission side */
19− struct xarray xa;
20− struct wait_queue_head wait;
21− void *last;
22− void *io_wq;
23− struct percpu_counter inflight;
24− atomic_t in_idle;
25− bool sqpoll;
26−
27− spinlock_t task_lock;
28− struct io_wq_work_list task_list;
29− unsigned long task_state;
30− struct callback_head task_work;
31−};
32−
338 #if defined(CONFIG_IO_URING)
349 struct sock *io_uring_get_socket(struct file *file);
3510 void __io_uring_task_cancel(void);
include/linux/memblock.h+2−2
@@ -460,7 +460,7 @@ static inline void memblock_free_late(phys_addr_t base, phys_addr_t size) · 459 unmodified lines
460460 /*
461461 * Set the allocation direction to bottom-up or top-down.
462462 */
463−static inline __init void memblock_set_bottom_up(bool enable)
463+static inline __init_memblock void memblock_set_bottom_up(bool enable)
464464 {
465465 memblock.bottom_up = enable;
466466 }
@@ -470,7 +470,7 @@ static inline __init void memblock_set_bottom_up(bool enable) · 3 unmodified lines
470470 * if this is true, that said, memblock will allocate memory
471471 * in bottom-up direction.
472472 */
473−static inline __init bool memblock_bottom_up(void)
473+static inline __init_memblock bool memblock_bottom_up(void)
474474 {
475475 return memblock.bottom_up;
476476 }
include/linux/mlx5/qp.h+7−0
@@ -547,4 +547,11 @@ static inline const char *mlx5_qp_state_str(int state) · 546 unmodified lines
547547 }
548548 }
549549
550+static inline int mlx5_get_qp_default_ts(struct mlx5_core_dev *dev)
551+{
552+ return !MLX5_CAP_ROCE(dev, qp_ts_format) ?
553+ MLX5_QPC_TIMESTAMP_FORMAT_FREE_RUNNING :
554+ MLX5_QPC_TIMESTAMP_FORMAT_DEFAULT;
555+}
556+
550557 #endif /* MLX5_QP_H */
include/linux/mm.h+15−3
@@ -1461,16 +1461,28 @@ static inline bool cpupid_match_pid(struct task_struct *task, int cpupid) · 1460 unmodified lines
14611461
14621462 #if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS)
14631463
1464+/*
1465+ * KASAN per-page tags are stored xor'ed with 0xff. This allows to avoid
1466+ * setting tags for all pages to native kernel tag value 0xff, as the default
1467+ * value 0x00 maps to 0xff.
1468+ */
1469+
14641470 static inline u8 page_kasan_tag(const struct page *page)
14651471 {
1466− if (kasan_enabled())
1467− return (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK;
1468− return 0xff;
1472+ u8 tag = 0xff;
1473+
1474+ if (kasan_enabled()) {
1475+ tag = (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK;
1476+ tag ^= 0xff;
1477+ }
1478+
1479+ return tag;
14691480 }
14701481
14711482 static inline void page_kasan_tag_set(struct page *page, u8 tag)
14721483 {
14731484 if (kasan_enabled()) {
1485+ tag ^= 0xff;
14741486 page->flags &= ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT);
14751487 page->flags |= (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT;
14761488 }
include/linux/mmu_notifier.h+5−5
@@ -169,11 +169,11 @@ struct mmu_notifier_ops { · 168 unmodified lines
169169 * the last refcount is dropped.
170170 *
171171 * If blockable argument is set to false then the callback cannot
172− * sleep and has to return with -EAGAIN. 0 should be returned
173− * otherwise. Please note that if invalidate_range_start approves
174− * a non-blocking behavior then the same applies to
175− * invalidate_range_end.
176− *
172+ * sleep and has to return with -EAGAIN if sleeping would be required.
173+ * 0 should be returned otherwise. Please note that notifiers that can
174+ * fail invalidate_range_start are not allowed to implement
175+ * invalidate_range_end, as there is no mechanism for informing the
176+ * notifier that its start failed.
177177 */
178178 int (*invalidate_range_start)(struct mmu_notifier *subscription,
179179 const struct mmu_notifier_range *range);
include/linux/module.h+0−3
@@ -30,9 +30,6 @@ · 29 unmodified lines
3030 #include <linux/percpu.h>
3131 #include <asm/module.h>
3232
33−/* Not Yet Implemented */
34−#define MODULE_SUPPORTED_DEVICE(name)
35−
3633 #define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN
3734
3835 struct modversion_info {
include/linux/mutex.h+1−1
@@ -185,7 +185,7 @@ extern void mutex_lock_io(struct mutex *lock); · 184 unmodified lines
185185 # define mutex_lock_interruptible_nested(lock, subclass) mutex_lock_interruptible(lock)
186186 # define mutex_lock_killable_nested(lock, subclass) mutex_lock_killable(lock)
187187 # define mutex_lock_nest_lock(lock, nest_lock) mutex_lock(lock)
188−# define mutex_lock_io_nested(lock, subclass) mutex_lock(lock)
188+# define mutex_lock_io_nested(lock, subclass) mutex_lock_io(lock)
189189 #endif
190190
191191 /*
include/linux/netdevice.h+2−0
@@ -360,6 +360,7 @@ enum { · 359 unmodified lines
360360 NAPI_STATE_IN_BUSY_POLL, /* sk_busy_loop() owns this NAPI */
361361 NAPI_STATE_PREFER_BUSY_POLL, /* prefer busy-polling over softirq processing*/
362362 NAPI_STATE_THREADED, /* The poll is performed inside its own thread*/
363+ NAPI_STATE_SCHED_THREADED, /* Napi is currently scheduled in threaded mode */
363364 };
364365
365366 enum {
@@ -372,6 +373,7 @@ enum { · 6 unmodified lines
372373 NAPIF_STATE_IN_BUSY_POLL = BIT(NAPI_STATE_IN_BUSY_POLL),
373374 NAPIF_STATE_PREFER_BUSY_POLL = BIT(NAPI_STATE_PREFER_BUSY_POLL),
374375 NAPIF_STATE_THREADED = BIT(NAPI_STATE_THREADED),
376+ NAPIF_STATE_SCHED_THREADED = BIT(NAPI_STATE_SCHED_THREADED),
375377 };
376378
377379 enum gro_result {
include/linux/netfilter/x_tables.h+2−5
@@ -227,7 +227,7 @@ struct xt_table { · 226 unmodified lines
227227 unsigned int valid_hooks;
228228
229229 /* Man behind the curtain... */
230− struct xt_table_info __rcu *private;
230+ struct xt_table_info *private;
231231
232232 /* Set this to THIS_MODULE if you are a module, otherwise NULL */
233233 struct module *me;
@@ -376,7 +376,7 @@ static inline unsigned int xt_write_recseq_begin(void) · 142 unmodified lines
376376 * since addend is most likely 1
377377 */
378378 __this_cpu_add(xt_recseq.sequence, addend);
379− smp_wmb();
379+ smp_mb();
380380
381381 return addend;
382382 }
@@ -448,9 +448,6 @@ xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu) · 65 unmodified lines
448448
449449 struct nf_hook_ops *xt_hook_ops_alloc(const struct xt_table *, nf_hookfn *);
450450
451−struct xt_table_info
452−*xt_table_get_private_protected(const struct xt_table *table);
453−
454451 #ifdef CONFIG_COMPAT
455452 #include <net/compat.h>
456453
include/linux/pagemap.h+1−1
@@ -559,7 +559,6 @@ static inline pgoff_t linear_page_index(struct vm_area_struct *vma, · 558 unmodified lines
559559 return pgoff;
560560 }
561561
562−/* This has the same layout as wait_bit_key - see fs/cachefiles/rdwr.c */
563562 struct wait_page_key {
564563 struct page *page;
565564 int bit_nr;
@@ -683,6 +682,7 @@ static inline int wait_on_page_locked_killable(struct page *page) · 117 unmodified lines
683682
684683 int put_and_wait_on_page_locked(struct page *page, int state);
685684 void wait_on_page_writeback(struct page *page);
685+int wait_on_page_writeback_killable(struct page *page);
686686 extern void end_page_writeback(struct page *page);
687687 void wait_for_stable_page(struct page *page);
688688
include/linux/qcom-geni-se.h+0−2
@@ -460,7 +460,5 @@ void geni_icc_set_tag(struct geni_se *se, u32 tag); · 459 unmodified lines
460460 int geni_icc_enable(struct geni_se *se);
461461
462462 int geni_icc_disable(struct geni_se *se);
463−
464−void geni_remove_earlycon_icc_vote(void);
465463 #endif
466464 #endif
include/linux/restart_block.h+1−0
@@ -23,6 +23,7 @@ enum timespec_type { · 22 unmodified lines
2323 * System call restart block.
2424 */
2525 struct restart_block {
26+ unsigned long arch_data;
2627 long (*fn)(struct restart_block *);
2728 union {
2829 /* For futex_wait and futex_wait_requeue_pi */
include/linux/skbuff.h+1−0
@@ -285,6 +285,7 @@ struct nf_bridge_info { · 284 unmodified lines
285285 struct tc_skb_ext {
286286 __u32 chain;
287287 __u16 mru;
288+ bool post_ct;
288289 };
289290 #endif
290291
include/linux/sunrpc/svc_rdma.h+0−1
@@ -104,7 +104,6 @@ struct svcxprt_rdma { · 103 unmodified lines
104104
105105 wait_queue_head_t sc_send_wait; /* SQ exhaustion waitlist */
106106 unsigned long sc_flags;
107− u32 sc_pending_recvs;
108107 struct list_head sc_read_complete_q;
109108 struct work_struct sc_work;
110109
include/linux/thread_info.h+13−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
1111 #include <linux/types.h>
1212 #include <linux/bug.h>
1313 #include <linux/restart_block.h>
14+#include <linux/errno.h>
1415
1516 #ifdef CONFIG_THREAD_INFO_IN_TASK
1617 /*
@@ -59,6 +60,18 @@ enum syscall_work_bit { · 42 unmodified lines
5960
6061 #ifdef __KERNEL__
6162
63+#ifndef arch_set_restart_data
64+#define arch_set_restart_data(restart) do { } while (0)
65+#endif
66+
67+static inline long set_restart_fn(struct restart_block *restart,
68+ long (*fn)(struct restart_block *))
69+{
70+ restart->fn = fn;
71+ arch_set_restart_data(restart);
72+ return -ERESTART_RESTARTBLOCK;
73+}
74+
6275 #ifndef THREAD_ALIGN
6376 #define THREAD_ALIGN THREAD_SIZE
6477 #endif
include/linux/usb_usual.h+2−0
@@ -86,6 +86,8 @@ · 85 unmodified lines
8686 /* lies about caching, so always sync */ \
8787 US_FLAG(NO_SAME, 0x40000000) \
8888 /* Cannot handle WRITE_SAME */ \
89+ US_FLAG(SENSE_AFTER_SYNC, 0x80000000) \
90+ /* Do REQUEST_SENSE after SYNCHRONIZE_CACHE */ \
8991
9092 #define US_FLAG(name, value) US_FL_##name = value ,
9193 enum { US_DO_ALL_FLAGS };
include/linux/usermode_driver.h+1−0
@@ -14,5 +14,6 @@ struct umd_info { · 13 unmodified lines
1414 int umd_load_blob(struct umd_info *info, const void *data, size_t len);
1515 int umd_unload_blob(struct umd_info *info);
1616 int fork_usermode_driver(struct umd_info *info);
17+void umd_cleanup_helper(struct umd_info *info);
1718
1819 #endif /* __LINUX_USERMODE_DRIVER_H__ */
include/linux/vdpa.h+5−5
@@ -250,20 +250,20 @@ struct vdpa_config_ops { · 249 unmodified lines
250250
251251 struct vdpa_device *__vdpa_alloc_device(struct device *parent,
252252 const struct vdpa_config_ops *config,
253− int nvqs, size_t size, const char *name);
253+ size_t size, const char *name);
254254
255−#define vdpa_alloc_device(dev_struct, member, parent, config, nvqs, name) \
255+#define vdpa_alloc_device(dev_struct, member, parent, config, name) \
256256 container_of(__vdpa_alloc_device( \
257− parent, config, nvqs, \
257+ parent, config, \
258258 sizeof(dev_struct) + \
259259 BUILD_BUG_ON_ZERO(offsetof( \
260260 dev_struct, member)), name), \
261261 dev_struct, member)
262262
263−int vdpa_register_device(struct vdpa_device *vdev);
263+int vdpa_register_device(struct vdpa_device *vdev, int nvqs);
264264 void vdpa_unregister_device(struct vdpa_device *vdev);
265265
266−int _vdpa_register_device(struct vdpa_device *vdev);
266+int _vdpa_register_device(struct vdpa_device *vdev, int nvqs);
267267 void _vdpa_unregister_device(struct vdpa_device *vdev);
268268
269269 /**
include/linux/virtio.h+0−2
@@ -132,8 +132,6 @@ bool is_virtio_device(struct device *dev); · 131 unmodified lines
132132 void virtio_break_device(struct virtio_device *dev);
133133
134134 void virtio_config_changed(struct virtio_device *dev);
135−void virtio_config_disable(struct virtio_device *dev);
136−void virtio_config_enable(struct virtio_device *dev);
137135 int virtio_finalize_features(struct virtio_device *dev);
138136 #ifdef CONFIG_PM_SLEEP
139137 int virtio_device_freeze(struct virtio_device *dev);
include/linux/ww_mutex.h+3−2
@@ -173,9 +173,10 @@ static inline void ww_acquire_done(struct ww_acquire_ctx *ctx) · 172 unmodified lines
173173 */
174174 static inline void ww_acquire_fini(struct ww_acquire_ctx *ctx)
175175 {
176−#ifdef CONFIG_DEBUG_MUTEXES
176+#ifdef CONFIG_DEBUG_LOCK_ALLOC
177177 mutex_release(&ctx->dep_map, _THIS_IP_);
178−
178+#endif
179+#ifdef CONFIG_DEBUG_MUTEXES
179180 DEBUG_LOCKS_WARN_ON(ctx->acquired);
180181 if (!IS_ENABLED(CONFIG_PROVE_LOCKING))
181182 /*
include/linux/xarray.h+3−1
@@ -229,9 +229,10 @@ static inline int xa_err(void *entry) · 228 unmodified lines
229229 *
230230 * This structure is used either directly or via the XA_LIMIT() macro
231231 * to communicate the range of IDs that are valid for allocation.
232− * Two common ranges are predefined for you:
232+ * Three common ranges are predefined for you:
233233 * * xa_limit_32b - [0 - UINT_MAX]
234234 * * xa_limit_31b - [0 - INT_MAX]
235+ * * xa_limit_16b - [0 - USHRT_MAX]
235236 */
236237 struct xa_limit {
237238 u32 max;
@@ -242,6 +243,7 @@ struct xa_limit { · 4 unmodified lines
242243
243244 #define xa_limit_32b XA_LIMIT(0, UINT_MAX)
244245 #define xa_limit_31b XA_LIMIT(0, INT_MAX)
246+#define xa_limit_16b XA_LIMIT(0, USHRT_MAX)
245247
246248 typedef unsigned __bitwise xa_mark_t;
247249 #define XA_MARK_0 ((__force xa_mark_t)0U)
include/net/dst.h+11−0
@@ -550,4 +550,15 @@ static inline void skb_dst_update_pmtu_no_confirm(struct sk_buff *skb, u32 mtu) · 549 unmodified lines
550550 dst->ops->update_pmtu(dst, NULL, skb, mtu, false);
551551 }
552552
553+struct dst_entry *dst_blackhole_check(struct dst_entry *dst, u32 cookie);
554+void dst_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
555+ struct sk_buff *skb, u32 mtu, bool confirm_neigh);
556+void dst_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
557+ struct sk_buff *skb);
558+u32 *dst_blackhole_cow_metrics(struct dst_entry *dst, unsigned long old);
559+struct neighbour *dst_blackhole_neigh_lookup(const struct dst_entry *dst,
560+ struct sk_buff *skb,
561+ const void *daddr);
562+unsigned int dst_blackhole_mtu(const struct dst_entry *dst);
563+
553564 #endif /* _NET_DST_H */
include/net/inet_connection_sock.h+1−1
@@ -282,7 +282,7 @@ static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk) · 281 unmodified lines
282282 return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog;
283283 }
284284
285−void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
285+bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
286286 void inet_csk_reqsk_queue_drop_and_put(struct sock *sk, struct request_sock *req);
287287
288288 static inline void inet_csk_prepare_for_destroy_sock(struct sock *sk)
include/net/netfilter/nf_tables.h+3−0
@@ -1536,6 +1536,7 @@ struct nft_trans_flowtable { · 1535 unmodified lines
15361536 struct nft_flowtable *flowtable;
15371537 bool update;
15381538 struct list_head hook_list;
1539+ u32 flags;
15391540 };
15401541
15411542 #define nft_trans_flowtable(trans) \
@@ -1544,6 +1545,8 @@ struct nft_trans_flowtable { · 2 unmodified lines
15441545 (((struct nft_trans_flowtable *)trans->data)->update)
15451546 #define nft_trans_flowtable_hooks(trans) \
15461547 (((struct nft_trans_flowtable *)trans->data)->hook_list)
1548+#define nft_trans_flowtable_flags(trans) \
1549+ (((struct nft_trans_flowtable *)trans->data)->flags)
15471550
15481551 int __init nft_chain_filter_init(void);
15491552 void nft_chain_filter_fini(void);
include/net/nexthop.h+24−0
@@ -410,6 +410,7 @@ static inline struct fib_nh *fib_info_nh(struct fib_info *fi, int nhsel) · 409 unmodified lines
410410 int fib6_check_nexthop(struct nexthop *nh, struct fib6_config *cfg,
411411 struct netlink_ext_ack *extack);
412412
413+/* Caller should either hold rcu_read_lock(), or RTNL. */
413414 static inline struct fib6_nh *nexthop_fib6_nh(struct nexthop *nh)
414415 {
415416 struct nh_info *nhi;
@@ -430,6 +431,29 @@ static inline struct fib6_nh *nexthop_fib6_nh(struct nexthop *nh) · 14 unmodified lines
430431 return NULL;
431432 }
432433
434+/* Variant of nexthop_fib6_nh().
435+ * Caller should either hold rcu_read_lock_bh(), or RTNL.
436+ */
437+static inline struct fib6_nh *nexthop_fib6_nh_bh(struct nexthop *nh)
438+{
439+ struct nh_info *nhi;
440+
441+ if (nh->is_group) {
442+ struct nh_group *nh_grp;
443+
444+ nh_grp = rcu_dereference_bh_rtnl(nh->nh_grp);
445+ nh = nexthop_mpath_select(nh_grp, 0);
446+ if (!nh)
447+ return NULL;
448+ }
449+
450+ nhi = rcu_dereference_bh_rtnl(nh->nh_info);
451+ if (nhi->family == AF_INET6)
452+ return &nhi->fib6_nh;
453+
454+ return NULL;
455+}
456+
433457 static inline struct net_device *fib6_info_nh_dev(struct fib6_info *f6i)
434458 {
435459 struct fib6_nh *fib6_nh;
include/net/red.h+10−2
@@ -168,7 +168,8 @@ static inline void red_set_vars(struct red_vars *v) · 167 unmodified lines
168168 v->qcount = -1;
169169 }
170170
171−static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog, u8 Scell_log)
171+static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog,
172+ u8 Scell_log, u8 *stab)
172173 {
173174 if (fls(qth_min) + Wlog > 32)
174175 return false;
@@ -178,6 +179,13 @@ static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog, u8 Scell_ · 3 unmodified lines
178179 return false;
179180 if (qth_max < qth_min)
180181 return false;
182+ if (stab) {
183+ int i;
184+
185+ for (i = 0; i < RED_STAB_SIZE; i++)
186+ if (stab[i] >= 32)
187+ return false;
188+ }
181189 return true;
182190 }
183191
@@ -287,7 +295,7 @@ static inline unsigned long red_calc_qavg_from_idle_time(const struct red_parms · 103 unmodified lines
287295 int shift;
288296
289297 /*
290− * The problem: ideally, average length queue recalcultion should
298+ * The problem: ideally, average length queue recalculation should
291299 * be done over constant clock intervals. This is too expensive, so
292300 * that the calculation is driven by outgoing packets.
293301 * When the queue is idle we have to model this clock by hand.
include/net/rtnetlink.h+2−0
@@ -33,6 +33,7 @@ static inline int rtnl_msg_family(const struct nlmsghdr *nlh) · 32 unmodified lines
3333 *
3434 * @list: Used internally
3535 * @kind: Identifier
36+ * @netns_refund: Physical device, move to init_net on netns exit
3637 * @maxtype: Highest device specific netlink attribute number
3738 * @policy: Netlink policy for device specific attribute validation
3839 * @validate: Optional validation function for netlink/changelink parameters
@@ -64,6 +65,7 @@ struct rtnl_link_ops { · 25 unmodified lines
6465 size_t priv_size;
6566 void (*setup)(struct net_device *dev);
6667
68+ bool netns_refund;
6769 unsigned int maxtype;
6870 const struct nla_policy *policy;
6971 int (*validate)(struct nlattr *tb[],
include/net/sock.h+1−1
@@ -936,7 +936,7 @@ static inline void sk_acceptq_added(struct sock *sk) · 935 unmodified lines
936936
937937 static inline bool sk_acceptq_is_full(const struct sock *sk)
938938 {
939− return READ_ONCE(sk->sk_ack_backlog) > READ_ONCE(sk->sk_max_ack_backlog);
939+ return READ_ONCE(sk->sk_ack_backlog) >= READ_ONCE(sk->sk_max_ack_backlog);
940940 }
941941
942942 /*
include/scsi/scsi_transport_iscsi.h+1−0
@@ -193,6 +193,7 @@ enum iscsi_connection_state { · 192 unmodified lines
193193 ISCSI_CONN_UP = 0,
194194 ISCSI_CONN_DOWN,
195195 ISCSI_CONN_FAILED,
196+ ISCSI_CONN_BOUND,
196197 };
197198
198199 struct iscsi_cls_conn {
include/trace/events/workqueue.h+3−3
@@ -30,7 +30,7 @@ TRACE_EVENT(workqueue_queue_work, · 29 unmodified lines
3030 TP_STRUCT__entry(
3131 __field( void *, work )
3232 __field( void *, function)
33− __field( const char *, workqueue)
33+ __string( workqueue, pwq->wq->name)
3434 __field( unsigned int, req_cpu )
3535 __field( unsigned int, cpu )
3636 ),
@@ -38,13 +38,13 @@ TRACE_EVENT(workqueue_queue_work, · 1 unmodified line
3838 TP_fast_assign(
3939 __entry->work = work;
4040 __entry->function = work->func;
41− __entry->workqueue = pwq->wq->name;
41+ __assign_str(workqueue, pwq->wq->name);
4242 __entry->req_cpu = req_cpu;
4343 __entry->cpu = pwq->pool->cpu;
4444 ),
4545
4646 TP_printk("work struct=%p function=%ps workqueue=%s req_cpu=%u cpu=%u",
47− __entry->work, __entry->function, __entry->workqueue,
47+ __entry->work, __entry->function, __get_str(workqueue),
4848 __entry->req_cpu, __entry->cpu)
4949 );
5050
include/uapi/linux/blkpg.h+2−26
@@ -2,29 +2,6 @@ · 1 unmodified line
22 #ifndef _UAPI__LINUX_BLKPG_H
33 #define _UAPI__LINUX_BLKPG_H
44
5−/*
6− * Partition table and disk geometry handling
7− *
8− * A single ioctl with lots of subfunctions:
9− *
10− * Device number stuff:
11− * get_whole_disk() (given the device number of a partition,
12− * find the device number of the encompassing disk)
13− * get_all_partitions() (given the device number of a disk, return the
14− * device numbers of all its known partitions)
15− *
16− * Partition stuff:
17− * add_partition()
18− * delete_partition()
19− * test_partition_in_use() (also for test_disk_in_use)
20− *
21− * Geometry stuff:
22− * get_geometry()
23− * set_geometry()
24− * get_bios_drivedata()
25− *
26− * For today, only the partition stuff - aeb, 990515
27− */
285 #include <linux/compiler.h>
296 #include <linux/ioctl.h>
307
@@ -52,9 +29,8 @@ struct blkpg_partition { · 21 unmodified lines
5229 long long start; /* starting offset in bytes */
5330 long long length; /* length in bytes */
5431 int pno; /* partition number */
55− char devname[BLKPG_DEVNAMELTH]; /* partition name, like sda5 or c0d1p2,
56− to be used in kernel messages */
57− char volname[BLKPG_VOLNAMELTH]; /* volume label */
32+ char devname[BLKPG_DEVNAMELTH]; /* unused / ignored */
33+ char volname[BLKPG_VOLNAMELTH]; /* unused / ignore */
5834 };
5935
6036 #endif /* _UAPI__LINUX_BLKPG_H */
include/uapi/linux/bpf.h+11−5
@@ -3850,7 +3850,7 @@ union bpf_attr { · 3849 unmodified lines
38503850 *
38513851 * long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
38523852 * Description
3853− * Check ctx packet size against exceeding MTU of net device (based
3853+ * Check packet size against exceeding MTU of net device (based
38543854 * on *ifindex*). This helper will likely be used in combination
38553855 * with helpers that adjust/change the packet size.
38563856 *
@@ -3867,6 +3867,14 @@ union bpf_attr { · 10 unmodified lines
38673867 * against the current net device. This is practical if this isn't
38683868 * used prior to redirect.
38693869 *
3870+ * On input *mtu_len* must be a valid pointer, else verifier will
3871+ * reject BPF program. If the value *mtu_len* is initialized to
3872+ * zero then the ctx packet size is use. When value *mtu_len* is
3873+ * provided as input this specify the L3 length that the MTU check
3874+ * is done against. Remember XDP and TC length operate at L2, but
3875+ * this value is L3 as this correlate to MTU and IP-header tot_len
3876+ * values which are L3 (similar behavior as bpf_fib_lookup).
3877+ *
38703878 * The Linux kernel route table can configure MTUs on a more
38713879 * specific per route level, which is not provided by this helper.
38723880 * For route level MTU checks use the **bpf_fib_lookup**\ ()
@@ -3891,11 +3899,9 @@ union bpf_attr { · 18 unmodified lines
38913899 *
38923900 * On return *mtu_len* pointer contains the MTU value of the net
38933901 * device. Remember the net device configured MTU is the L3 size,
3894− * which is returned here and XDP and TX length operate at L2.
3902+ * which is returned here and XDP and TC length operate at L2.
38953903 * Helper take this into account for you, but remember when using
3896− * MTU value in your BPF-code. On input *mtu_len* must be a valid
3897− * pointer and be initialized (to zero), else verifier will reject
3898− * BPF program.
3904+ * MTU value in your BPF-code.
38993905 *
39003906 * Return
39013907 * * 0 on success, and populate MTU value in *mtu_len* pointer.
include/uapi/linux/fuse.h+2−1
@@ -903,7 +903,8 @@ struct fuse_notify_retrieve_in { · 902 unmodified lines
903903 };
904904
905905 /* Device ioctls: */
906−#define FUSE_DEV_IOC_CLONE _IOR(229, 0, uint32_t)
906+#define FUSE_DEV_IOC_MAGIC 229
907+#define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
907908
908909 struct fuse_lseek_in {
909910 uint64_t fh;
include/uapi/linux/psample.h+1−4
@@ -3,7 +3,6 @@ · 2 unmodified lines
33 #define __UAPI_PSAMPLE_H
44
55 enum {
6− /* sampled packet metadata */
76 PSAMPLE_ATTR_IIFINDEX,
87 PSAMPLE_ATTR_OIFINDEX,
98 PSAMPLE_ATTR_ORIGSIZE,
@@ -11,10 +10,8 @@ enum { · 1 unmodified line
1110 PSAMPLE_ATTR_GROUP_SEQ,
1211 PSAMPLE_ATTR_SAMPLE_RATE,
1312 PSAMPLE_ATTR_DATA,
14− PSAMPLE_ATTR_TUNNEL,
15−
16− /* commands attributes */
1713 PSAMPLE_ATTR_GROUP_REFCOUNT,
14+ PSAMPLE_ATTR_TUNNEL,
1815
1916 __PSAMPLE_ATTR_MAX
2017 };
kernel/bpf/bpf_inode_storage.c+1−1
@@ -109,7 +109,7 @@ static void *bpf_fd_inode_storage_lookup_elem(struct bpf_map *map, void *key) · 108 unmodified lines
109109 fd = *(int *)key;
110110 f = fget_raw(fd);
111111 if (!f)
112− return NULL;
112+ return ERR_PTR(-EBADF);
113113
114114 sdata = inode_storage_lookup(f->f_inode, map, true);
115115 fput(f);
kernel/bpf/bpf_struct_ops.c+1−1
@@ -430,7 +430,7 @@ static int bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key, · 429 unmodified lines
430430
431431 tprogs[BPF_TRAMP_FENTRY].progs[0] = prog;
432432 tprogs[BPF_TRAMP_FENTRY].nr_progs = 1;
433− err = arch_prepare_bpf_trampoline(image,
433+ err = arch_prepare_bpf_trampoline(NULL, image,
434434 st_map->image + PAGE_SIZE,
435435 &st_ops->func_models[i], 0,
436436 tprogs, NULL);
kernel/bpf/core.c+2−2
@@ -827,7 +827,7 @@ static int __init bpf_jit_charge_init(void) · 826 unmodified lines
827827 }
828828 pure_initcall(bpf_jit_charge_init);
829829
830−static int bpf_jit_charge_modmem(u32 pages)
830+int bpf_jit_charge_modmem(u32 pages)
831831 {
832832 if (atomic_long_add_return(pages, &bpf_jit_current) >
833833 (bpf_jit_limit >> PAGE_SHIFT)) {
@@ -840,7 +840,7 @@ static int bpf_jit_charge_modmem(u32 pages) · 6 unmodified lines
840840 return 0;
841841 }
842842
843−static void bpf_jit_uncharge_modmem(u32 pages)
843+void bpf_jit_uncharge_modmem(u32 pages)
844844 {
845845 atomic_long_sub(pages, &bpf_jit_current);
846846 }
kernel/bpf/preload/bpf_preload_kern.c+15−4
@@ -60,9 +60,12 @@ static int finish(void) · 59 unmodified lines
6060 &magic, sizeof(magic), &pos);
6161 if (n != sizeof(magic))
6262 return -EPIPE;
63+
6364 tgid = umd_ops.info.tgid;
64− wait_event(tgid->wait_pidfd, thread_group_exited(tgid));
65− umd_ops.info.tgid = NULL;
65+ if (tgid) {
66+ wait_event(tgid->wait_pidfd, thread_group_exited(tgid));
67+ umd_cleanup_helper(&umd_ops.info);
68+ }
6669 return 0;
6770 }
6871
@@ -80,10 +83,18 @@ static int __init load_umd(void) · 11 unmodified lines
8083
8184 static void __exit fini_umd(void)
8285 {
86+ struct pid *tgid;
87+
8388 bpf_preload_ops = NULL;
89+
8490 /* kill UMD in case it's still there due to earlier error */
85− kill_pid(umd_ops.info.tgid, SIGKILL, 1);
86− umd_ops.info.tgid = NULL;
91+ tgid = umd_ops.info.tgid;
92+ if (tgid) {
93+ kill_pid(tgid, SIGKILL, 1);
94+
95+ wait_event(tgid->wait_pidfd, thread_group_exited(tgid));
96+ umd_cleanup_helper(&umd_ops.info);
97+ }
8798 umd_unload_blob(&umd_ops.info);
8899 }
89100 late_initcall(load_umd);
kernel/bpf/syscall.c+5−0
@@ -854,6 +854,11 @@ static int map_create(union bpf_attr *attr) · 853 unmodified lines
854854 err = PTR_ERR(btf);
855855 goto free_map;
856856 }
857+ if (btf_is_kernel(btf)) {
858+ btf_put(btf);
859+ err = -EACCES;
860+ goto free_map;
861+ }
857862 map->btf = btf;
858863
859864 if (attr->btf_value_type_id) {
kernel/bpf/trampoline.c+168−50
@@ -57,19 +57,10 @@ void bpf_image_ksym_del(struct bpf_ksym *ksym) · 56 unmodified lines
5757 PAGE_SIZE, true, ksym->name);
5858 }
5959
60−static void bpf_trampoline_ksym_add(struct bpf_trampoline *tr)
61−{
62− struct bpf_ksym *ksym = &tr->ksym;
63−
64− snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu", tr->key);
65− bpf_image_ksym_add(tr->image, ksym);
66−}
67−
6860 static struct bpf_trampoline *bpf_trampoline_lookup(u64 key)
6961 {
7062 struct bpf_trampoline *tr;
7163 struct hlist_head *head;
72− void *image;
7364 int i;
7465
7566 mutex_lock(&trampoline_mutex);
@@ -84,14 +75,6 @@ static struct bpf_trampoline *bpf_trampoline_lookup(u64 key) · 8 unmodified lines
8475 if (!tr)
8576 goto out;
8677
87− /* is_root was checked earlier. No need for bpf_jit_charge_modmem() */
88− image = bpf_jit_alloc_exec_page();
89− if (!image) {
90− kfree(tr);
91− tr = NULL;
92− goto out;
93− }
94−
9578 tr->key = key;
9679 INIT_HLIST_NODE(&tr->hlist);
9780 hlist_add_head(&tr->hlist, head);
@@ -99,9 +82,6 @@ static struct bpf_trampoline *bpf_trampoline_lookup(u64 key) · 1 unmodified line
9982 mutex_init(&tr->mutex);
10083 for (i = 0; i < BPF_TRAMP_MAX; i++)
10184 INIT_HLIST_HEAD(&tr->progs_hlist[i]);
102− tr->image = image;
103− INIT_LIST_HEAD_RCU(&tr->ksym.lnode);
104− bpf_trampoline_ksym_add(tr);
10585 out:
10686 mutex_unlock(&trampoline_mutex);
10787 return tr;
@@ -185,10 +165,142 @@ bpf_trampoline_get_progs(const struct bpf_trampoline *tr, int *total) · 77 unmodified lines
185165 return tprogs;
186166 }
187167
168+static void __bpf_tramp_image_put_deferred(struct work_struct *work)
169+{
170+ struct bpf_tramp_image *im;
171+
172+ im = container_of(work, struct bpf_tramp_image, work);
173+ bpf_image_ksym_del(&im->ksym);
174+ bpf_jit_free_exec(im->image);
175+ bpf_jit_uncharge_modmem(1);
176+ percpu_ref_exit(&im->pcref);
177+ kfree_rcu(im, rcu);
178+}
179+
180+/* callback, fexit step 3 or fentry step 2 */
181+static void __bpf_tramp_image_put_rcu(struct rcu_head *rcu)
182+{
183+ struct bpf_tramp_image *im;
184+
185+ im = container_of(rcu, struct bpf_tramp_image, rcu);
186+ INIT_WORK(&im->work, __bpf_tramp_image_put_deferred);
187+ schedule_work(&im->work);
188+}
189+
190+/* callback, fexit step 2. Called after percpu_ref_kill confirms. */
191+static void __bpf_tramp_image_release(struct percpu_ref *pcref)
192+{
193+ struct bpf_tramp_image *im;
194+
195+ im = container_of(pcref, struct bpf_tramp_image, pcref);
196+ call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
197+}
198+
199+/* callback, fexit or fentry step 1 */
200+static void __bpf_tramp_image_put_rcu_tasks(struct rcu_head *rcu)
201+{
202+ struct bpf_tramp_image *im;
203+
204+ im = container_of(rcu, struct bpf_tramp_image, rcu);
205+ if (im->ip_after_call)
206+ /* the case of fmod_ret/fexit trampoline and CONFIG_PREEMPTION=y */
207+ percpu_ref_kill(&im->pcref);
208+ else
209+ /* the case of fentry trampoline */
210+ call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
211+}
212+
213+static void bpf_tramp_image_put(struct bpf_tramp_image *im)
214+{
215+ /* The trampoline image that calls original function is using:
216+ * rcu_read_lock_trace to protect sleepable bpf progs
217+ * rcu_read_lock to protect normal bpf progs
218+ * percpu_ref to protect trampoline itself
219+ * rcu tasks to protect trampoline asm not covered by percpu_ref
220+ * (which are few asm insns before __bpf_tramp_enter and
221+ * after __bpf_tramp_exit)
222+ *
223+ * The trampoline is unreachable before bpf_tramp_image_put().
224+ *
225+ * First, patch the trampoline to avoid calling into fexit progs.
226+ * The progs will be freed even if the original function is still
227+ * executing or sleeping.
228+ * In case of CONFIG_PREEMPT=y use call_rcu_tasks() to wait on
229+ * first few asm instructions to execute and call into
230+ * __bpf_tramp_enter->percpu_ref_get.
231+ * Then use percpu_ref_kill to wait for the trampoline and the original
232+ * function to finish.
233+ * Then use call_rcu_tasks() to make sure few asm insns in
234+ * the trampoline epilogue are done as well.
235+ *
236+ * In !PREEMPT case the task that got interrupted in the first asm
237+ * insns won't go through an RCU quiescent state which the
238+ * percpu_ref_kill will be waiting for. Hence the first
239+ * call_rcu_tasks() is not necessary.
240+ */
241+ if (im->ip_after_call) {
242+ int err = bpf_arch_text_poke(im->ip_after_call, BPF_MOD_JUMP,
243+ NULL, im->ip_epilogue);
244+ WARN_ON(err);
245+ if (IS_ENABLED(CONFIG_PREEMPTION))
246+ call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
247+ else
248+ percpu_ref_kill(&im->pcref);
249+ return;
250+ }
251+
252+ /* The trampoline without fexit and fmod_ret progs doesn't call original
253+ * function and doesn't use percpu_ref.
254+ * Use call_rcu_tasks_trace() to wait for sleepable progs to finish.
255+ * Then use call_rcu_tasks() to wait for the rest of trampoline asm
256+ * and normal progs.
257+ */
258+ call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
259+}
260+
261+static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx)
262+{
263+ struct bpf_tramp_image *im;
264+ struct bpf_ksym *ksym;
265+ void *image;
266+ int err = -ENOMEM;
267+
268+ im = kzalloc(sizeof(*im), GFP_KERNEL);
269+ if (!im)
270+ goto out;
271+
272+ err = bpf_jit_charge_modmem(1);
273+ if (err)
274+ goto out_free_im;
275+
276+ err = -ENOMEM;
277+ im->image = image = bpf_jit_alloc_exec_page();
278+ if (!image)
279+ goto out_uncharge;
280+
281+ err = percpu_ref_init(&im->pcref, __bpf_tramp_image_release, 0, GFP_KERNEL);
282+ if (err)
283+ goto out_free_image;
284+
285+ ksym = &im->ksym;
286+ INIT_LIST_HEAD_RCU(&ksym->lnode);
287+ snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu_%u", key, idx);
288+ bpf_image_ksym_add(image, ksym);
289+ return im;
290+
291+out_free_image:
292+ bpf_jit_free_exec(im->image);
293+out_uncharge:
294+ bpf_jit_uncharge_modmem(1);
295+out_free_im:
296+ kfree(im);
297+out:
298+ return ERR_PTR(err);
299+}
300+
188301 static int bpf_trampoline_update(struct bpf_trampoline *tr)
189302 {
190− void *old_image = tr->image + ((tr->selector + 1) & 1) * PAGE_SIZE/2;
191− void *new_image = tr->image + (tr->selector & 1) * PAGE_SIZE/2;
303+ struct bpf_tramp_image *im;
192304 struct bpf_tramp_progs *tprogs;
193305 u32 flags = BPF_TRAMP_F_RESTORE_REGS;
194306 int err, total;
@@ -198,41 +310,42 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr) · 3 unmodified lines
198310 return PTR_ERR(tprogs);
199311
200312 if (total == 0) {
201− err = unregister_fentry(tr, old_image);
313+ err = unregister_fentry(tr, tr->cur_image->image);
314+ bpf_tramp_image_put(tr->cur_image);
315+ tr->cur_image = NULL;
202316 tr->selector = 0;
203317 goto out;
204318 }
205319
320+ im = bpf_tramp_image_alloc(tr->key, tr->selector);
321+ if (IS_ERR(im)) {
322+ err = PTR_ERR(im);
323+ goto out;
324+ }
325+
206326 if (tprogs[BPF_TRAMP_FEXIT].nr_progs ||
207327 tprogs[BPF_TRAMP_MODIFY_RETURN].nr_progs)
208328 flags = BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_SKIP_FRAME;
209329
210− /* Though the second half of trampoline page is unused a task could be
211− * preempted in the middle of the first half of trampoline and two
212− * updates to trampoline would change the code from underneath the
213− * preempted task. Hence wait for tasks to voluntarily schedule or go
214− * to userspace.
215− * The same trampoline can hold both sleepable and non-sleepable progs.
216− * synchronize_rcu_tasks_trace() is needed to make sure all sleepable
217− * programs finish executing.
218− * Wait for these two grace periods together.
219− */
220− synchronize_rcu_mult(call_rcu_tasks, call_rcu_tasks_trace);
221−
222− err = arch_prepare_bpf_trampoline(new_image, new_image + PAGE_SIZE / 2,
330+ err = arch_prepare_bpf_trampoline(im, im->image, im->image + PAGE_SIZE,
223331 &tr->func.model, flags, tprogs,
224332 tr->func.addr);
225333 if (err < 0)
226334 goto out;
227335
228− if (tr->selector)
336+ WARN_ON(tr->cur_image && tr->selector == 0);
337+ WARN_ON(!tr->cur_image && tr->selector);
338+ if (tr->cur_image)
229339 /* progs already running at this address */
230− err = modify_fentry(tr, old_image, new_image);
340+ err = modify_fentry(tr, tr->cur_image->image, im->image);
231341 else
232342 /* first time registering */
233− err = register_fentry(tr, new_image);
343+ err = register_fentry(tr, im->image);
234344 if (err)
235345 goto out;
346+ if (tr->cur_image)
347+ bpf_tramp_image_put(tr->cur_image);
348+ tr->cur_image = im;
236349 tr->selector++;
237350 out:
238351 kfree(tprogs);
@@ -364,17 +477,12 @@ void bpf_trampoline_put(struct bpf_trampoline *tr) · 125 unmodified lines
364477 goto out;
365478 if (WARN_ON_ONCE(!hlist_empty(&tr->progs_hlist[BPF_TRAMP_FEXIT])))
366479 goto out;
367− bpf_image_ksym_del(&tr->ksym);
368− /* This code will be executed when all bpf progs (both sleepable and
369− * non-sleepable) went through
370− * bpf_prog_put()->call_rcu[_tasks_trace]()->bpf_prog_free_deferred().
371− * Hence no need for another synchronize_rcu_tasks_trace() here,
372− * but synchronize_rcu_tasks() is still needed, since trampoline
373− * may not have had any sleepable programs and we need to wait
374− * for tasks to get out of trampoline code before freeing it.
480+ /* This code will be executed even when the last bpf_tramp_image
481+ * is alive. All progs are detached from the trampoline and the
482+ * trampoline image is patched with jmp into epilogue to skip
483+ * fexit progs. The fentry-only trampoline will be freed via
484+ * multiple rcu callbacks.
375485 */
376− synchronize_rcu_tasks();
377− bpf_jit_free_exec(tr->image);
378486 hlist_del(&tr->hlist);
379487 kfree(tr);
380488 out:
@@ -478,8 +586,18 @@ void notrace __bpf_prog_exit_sleepable(struct bpf_prog *prog, u64 start) · 97 unmodified lines
478586 rcu_read_unlock_trace();
479587 }
480588
589+void notrace __bpf_tramp_enter(struct bpf_tramp_image *tr)
590+{
591+ percpu_ref_get(&tr->pcref);
592+}
593+
594+void notrace __bpf_tramp_exit(struct bpf_tramp_image *tr)
595+{
596+ percpu_ref_put(&tr->pcref);
597+}
598+
481599 int __weak
482−arch_prepare_bpf_trampoline(void *image, void *image_end,
600+arch_prepare_bpf_trampoline(struct bpf_tramp_image *tr, void *image, void *image_end,
483601 const struct btf_func_model *m, u32 flags,
484602 struct bpf_tramp_progs *tprogs,
485603 void *orig_call)
kernel/bpf/verifier.c+25−12
@@ -5861,10 +5861,14 @@ static int retrieve_ptr_limit(const struct bpf_reg_state *ptr_reg, · 5860 unmodified lines
58615861 {
58625862 bool mask_to_left = (opcode == BPF_ADD && off_is_neg) ||
58635863 (opcode == BPF_SUB && !off_is_neg);
5864− u32 off;
5864+ u32 off, max;
58655865
58665866 switch (ptr_reg->type) {
58675867 case PTR_TO_STACK:
5868+ /* Offset 0 is out-of-bounds, but acceptable start for the
5869+ * left direction, see BPF_REG_FP.
5870+ */
5871+ max = MAX_BPF_STACK + mask_to_left;
58685872 /* Indirect variable offset stack access is prohibited in
58695873 * unprivileged mode so it's not handled here.
58705874 */
@@ -5872,16 +5876,17 @@ static int retrieve_ptr_limit(const struct bpf_reg_state *ptr_reg, · 1 unmodified line
58725876 if (mask_to_left)
58735877 *ptr_limit = MAX_BPF_STACK + off;
58745878 else
5875− *ptr_limit = -off;
5876− return 0;
5879+ *ptr_limit = -off - 1;
5880+ return *ptr_limit >= max ? -ERANGE : 0;
58775881 case PTR_TO_MAP_VALUE:
5882+ max = ptr_reg->map_ptr->value_size;
58785883 if (mask_to_left) {
58795884 *ptr_limit = ptr_reg->umax_value + ptr_reg->off;
58805885 } else {
58815886 off = ptr_reg->smin_value + ptr_reg->off;
5882− *ptr_limit = ptr_reg->map_ptr->value_size - off;
5887+ *ptr_limit = ptr_reg->map_ptr->value_size - off - 1;
58835888 }
5884− return 0;
5889+ return *ptr_limit >= max ? -ERANGE : 0;
58855890 default:
58865891 return -EINVAL;
58875892 }
@@ -5934,6 +5939,7 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env, · 46 unmodified lines
59345939 u32 alu_state, alu_limit;
59355940 struct bpf_reg_state tmp;
59365941 bool ret;
5942+ int err;
59375943
59385944 if (can_skip_alu_sanitation(env, insn))
59395945 return 0;
@@ -5949,10 +5955,13 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env, · 9 unmodified lines
59495955 alu_state |= ptr_is_dst_reg ?
59505956 BPF_ALU_SANITIZE_SRC : BPF_ALU_SANITIZE_DST;
59515957
5952− if (retrieve_ptr_limit(ptr_reg, &alu_limit, opcode, off_is_neg))
5953− return 0;
5954− if (update_alu_sanitation_state(aux, alu_state, alu_limit))
5955− return -EACCES;
5958+ err = retrieve_ptr_limit(ptr_reg, &alu_limit, opcode, off_is_neg);
5959+ if (err < 0)
5960+ return err;
5961+
5962+ err = update_alu_sanitation_state(aux, alu_state, alu_limit);
5963+ if (err < 0)
5964+ return err;
59565965 do_sim:
59575966 /* Simulate and find potential out-of-bounds access under
59585967 * speculative execution from truncation as a result of
@@ -6103,7 +6112,7 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env, · 144 unmodified lines
61036112 case BPF_ADD:
61046113 ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0);
61056114 if (ret < 0) {
6106− verbose(env, "R%d tried to add from different maps or paths\n", dst);
6115+ verbose(env, "R%d tried to add from different maps, paths, or prohibited types\n", dst);
61076116 return ret;
61086117 }
61096118 /* We can take a fixed offset as long as it doesn't overflow
@@ -6158,7 +6167,7 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env, · 48 unmodified lines
61586167 case BPF_SUB:
61596168 ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0);
61606169 if (ret < 0) {
6161− verbose(env, "R%d tried to sub from different maps or paths\n", dst);
6170+ verbose(env, "R%d tried to sub from different maps, paths, or prohibited types\n", dst);
61626171 return ret;
61636172 }
61646173 if (dst_reg == off_reg) {
@@ -9056,6 +9065,10 @@ static int check_btf_info(struct bpf_verifier_env *env, · 2891 unmodified lines
90569065 btf = btf_get_by_fd(attr->prog_btf_fd);
90579066 if (IS_ERR(btf))
90589067 return PTR_ERR(btf);
9068+ if (btf_is_kernel(btf)) {
9069+ btf_put(btf);
9070+ return -EACCES;
9071+ }
90599072 env->prog->aux->btf = btf;
90609073
90619074 err = check_btf_func(env, attr, uattr);
@@ -11660,7 +11673,7 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env) · 2598 unmodified lines
1166011673 off_reg = issrc ? insn->src_reg : insn->dst_reg;
1166111674 if (isneg)
1166211675 *patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1);
11663− *patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit - 1);
11676+ *patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit);
1166411677 *patch++ = BPF_ALU64_REG(BPF_SUB, BPF_REG_AX, off_reg);
1166511678 *patch++ = BPF_ALU64_REG(BPF_OR, BPF_REG_AX, off_reg);
1166611679 *patch++ = BPF_ALU64_IMM(BPF_NEG, BPF_REG_AX, 0);
kernel/fork.c+8−9
@@ -1948,8 +1948,14 @@ static __latent_entropy struct task_struct *copy_process( · 1947 unmodified lines
19481948 p = dup_task_struct(current, node);
19491949 if (!p)
19501950 goto fork_out;
1951− if (args->io_thread)
1951+ if (args->io_thread) {
1952+ /*
1953+ * Mark us an IO worker, and block any signal that isn't
1954+ * fatal or STOP
1955+ */
19521956 p->flags |= PF_IO_WORKER;
1957+ siginitsetinv(&p->blocked, sigmask(SIGKILL)|sigmask(SIGSTOP));
1958+ }
19531959
19541960 /*
19551961 * This _must_ happen before we call free_task(), i.e. before we jump
@@ -2438,15 +2444,8 @@ struct task_struct *create_io_thread(int (*fn)(void *), void *arg, int node) · 482 unmodified lines
24382444 .stack_size = (unsigned long)arg,
24392445 .io_thread = 1,
24402446 };
2441− struct task_struct *tsk;
24422447
2443− tsk = copy_process(NULL, 0, node, &args);
2444− if (!IS_ERR(tsk)) {
2445− sigfillset(&tsk->blocked);
2446− sigdelsetmask(&tsk->blocked, sigmask(SIGKILL));
2447− tsk->flags |= PF_NOFREEZE;
2448− }
2449− return tsk;
2448+ return copy_process(NULL, 0, node, &args);
24502449 }
24512450
24522451 /*
kernel/futex.c+1−2
@@ -2728,14 +2728,13 @@ retry: · 2727 unmodified lines
27282728 goto out;
27292729
27302730 restart = &current->restart_block;
2731− restart->fn = futex_wait_restart;
27322731 restart->futex.uaddr = uaddr;
27332732 restart->futex.val = val;
27342733 restart->futex.time = *abs_time;
27352734 restart->futex.bitset = bitset;
27362735 restart->futex.flags = flags | FLAGS_HAS_TIMEOUT;
27372736
2738− ret = -ERESTART_RESTARTBLOCK;
2737+ ret = set_restart_fn(restart, futex_wait_restart);
27392738
27402739 out:
27412740 if (to) {
kernel/gcov/clang.c+69−0
@@ -75,7 +75,9 @@ struct gcov_fn_info { · 74 unmodified lines
7575
7676 u32 num_counters;
7777 u64 *counters;
78+#if CONFIG_CLANG_VERSION < 110000
7879 const char *function_name;
80+#endif
7981 };
8082
8183 static struct gcov_info *current_info;
@@ -105,6 +107,7 @@ void llvm_gcov_init(llvm_gcov_callback writeout, llvm_gcov_callback flush) · 23 unmodified lines
105107 }
106108 EXPORT_SYMBOL(llvm_gcov_init);
107109
110+#if CONFIG_CLANG_VERSION < 110000
108111 void llvm_gcda_start_file(const char *orig_filename, const char version[4],
109112 u32 checksum)
110113 {
@@ -113,7 +116,17 @@ void llvm_gcda_start_file(const char *orig_filename, const char version[4], · 2 unmodified lines
113116 current_info->checksum = checksum;
114117 }
115118 EXPORT_SYMBOL(llvm_gcda_start_file);
119+#else
120+void llvm_gcda_start_file(const char *orig_filename, u32 version, u32 checksum)
121+{
122+ current_info->filename = orig_filename;
123+ current_info->version = version;
124+ current_info->checksum = checksum;
125+}
126+EXPORT_SYMBOL(llvm_gcda_start_file);
127+#endif
116128
129+#if CONFIG_CLANG_VERSION < 110000
117130 void llvm_gcda_emit_function(u32 ident, const char *function_name,
118131 u32 func_checksum, u8 use_extra_checksum, u32 cfg_checksum)
119132 {
@@ -133,6 +146,24 @@ void llvm_gcda_emit_function(u32 ident, const char *function_name, · 13 unmodified lines
133146 list_add_tail(&info->head, &current_info->functions);
134147 }
135148 EXPORT_SYMBOL(llvm_gcda_emit_function);
149+#else
150+void llvm_gcda_emit_function(u32 ident, u32 func_checksum,
151+ u8 use_extra_checksum, u32 cfg_checksum)
152+{
153+ struct gcov_fn_info *info = kzalloc(sizeof(*info), GFP_KERNEL);
154+
155+ if (!info)
156+ return;
157+
158+ INIT_LIST_HEAD(&info->head);
159+ info->ident = ident;
160+ info->checksum = func_checksum;
161+ info->use_extra_checksum = use_extra_checksum;
162+ info->cfg_checksum = cfg_checksum;
163+ list_add_tail(&info->head, &current_info->functions);
164+}
165+EXPORT_SYMBOL(llvm_gcda_emit_function);
166+#endif
136167
137168 void llvm_gcda_emit_arcs(u32 num_counters, u64 *counters)
138169 {
@@ -295,6 +326,7 @@ void gcov_info_add(struct gcov_info *dst, struct gcov_info *src) · 156 unmodified lines
295326 }
296327 }
297328
329+#if CONFIG_CLANG_VERSION < 110000
298330 static struct gcov_fn_info *gcov_fn_info_dup(struct gcov_fn_info *fn)
299331 {
300332 size_t cv_size; /* counter values size */
@@ -322,6 +354,28 @@ err_name: · 21 unmodified lines
322354 kfree(fn_dup);
323355 return NULL;
324356 }
357+#else
358+static struct gcov_fn_info *gcov_fn_info_dup(struct gcov_fn_info *fn)
359+{
360+ size_t cv_size; /* counter values size */
361+ struct gcov_fn_info *fn_dup = kmemdup(fn, sizeof(*fn),
362+ GFP_KERNEL);
363+ if (!fn_dup)
364+ return NULL;
365+ INIT_LIST_HEAD(&fn_dup->head);
366+
367+ cv_size = fn->num_counters * sizeof(fn->counters[0]);
368+ fn_dup->counters = vmalloc(cv_size);
369+ if (!fn_dup->counters) {
370+ kfree(fn_dup);
371+ return NULL;
372+ }
373+
374+ memcpy(fn_dup->counters, fn->counters, cv_size);
375+
376+ return fn_dup;
377+}
378+#endif
325379
326380 /**
327381 * gcov_info_dup - duplicate profiling data set
@@ -362,6 +416,7 @@ err: · 34 unmodified lines
362416 * gcov_info_free - release memory for profiling data set duplicate
363417 * @info: profiling data set duplicate to free
364418 */
419+#if CONFIG_CLANG_VERSION < 110000
365420 void gcov_info_free(struct gcov_info *info)
366421 {
367422 struct gcov_fn_info *fn, *tmp;
@@ -375,6 +430,20 @@ void gcov_info_free(struct gcov_info *info) · 7 unmodified lines
375430 kfree(info->filename);
376431 kfree(info);
377432 }
433+#else
434+void gcov_info_free(struct gcov_info *info)
435+{
436+ struct gcov_fn_info *fn, *tmp;
437+
438+ list_for_each_entry_safe(fn, tmp, &info->functions, head) {
439+ vfree(fn->counters);
440+ list_del(&fn->head);
441+ kfree(fn);
442+ }
443+ kfree(info->filename);
444+ kfree(info);
445+}
446+#endif
378447
379448 #define ITER_STRIDE PAGE_SIZE
380449
kernel/irq/irq_sim.c+2−2
@@ -159,7 +159,7 @@ static const struct irq_domain_ops irq_sim_domain_ops = { · 158 unmodified lines
159159 * irq_domain_create_sim - Create a new interrupt simulator irq_domain and
160160 * allocate a range of dummy interrupts.
161161 *
162− * @fnode: struct fwnode_handle to be associated with this domain.
162+ * @fwnode: struct fwnode_handle to be associated with this domain.
163163 * @num_irqs: Number of interrupts to allocate.
164164 *
165165 * On success: return a new irq_domain object.
@@ -228,7 +228,7 @@ static void devm_irq_domain_release_sim(struct device *dev, void *res) · 62 unmodified lines
228228 * a managed device.
229229 *
230230 * @dev: Device to initialize the simulator object for.
231− * @fnode: struct fwnode_handle to be associated with this domain.
231+ * @fwnode: struct fwnode_handle to be associated with this domain.
232232 * @num_irqs: Number of interrupts to allocate
233233 *
234234 * On success: return a new irq_domain object.
kernel/irq/manage.c+4−0
@@ -1142,11 +1142,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action) · 1141 unmodified lines
11421142 irqreturn_t ret;
11431143
11441144 local_bh_disable();
1145+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
1146+ local_irq_disable();
11451147 ret = action->thread_fn(action->irq, action->dev_id);
11461148 if (ret == IRQ_HANDLED)
11471149 atomic_inc(&desc->threads_handled);
11481150
11491151 irq_finalize_oneshot(desc, action);
1152+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
1153+ local_irq_enable();
11501154 local_bh_enable();
11511155 return ret;
11521156 }
kernel/jump_label.c+8−0
@@ -407,6 +407,14 @@ static bool jump_label_can_update(struct jump_entry *entry, bool init) · 406 unmodified lines
407407 return false;
408408
409409 if (!kernel_text_address(jump_entry_code(entry))) {
410+ /*
411+ * This skips patching built-in __exit, which
412+ * is part of init_section_contains() but is
413+ * not part of kernel_text_address().
414+ *
415+ * Skipping built-in __exit is fine since it
416+ * will never be executed.
417+ */
410418 WARN_ONCE(!jump_entry_is_init(entry),
411419 "can't patch jump_label at %pS",
412420 (void *)jump_entry_code(entry));
kernel/locking/mutex.c+14−11
@@ -626,7 +626,7 @@ static inline int mutex_can_spin_on_owner(struct mutex *lock) · 625 unmodified lines
626626 */
627627 static __always_inline bool
628628 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
629− const bool use_ww_ctx, struct mutex_waiter *waiter)
629+ struct mutex_waiter *waiter)
630630 {
631631 if (!waiter) {
632632 /*
@@ -702,7 +702,7 @@ fail: · 69 unmodified lines
702702 #else
703703 static __always_inline bool
704704 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
705− const bool use_ww_ctx, struct mutex_waiter *waiter)
705+ struct mutex_waiter *waiter)
706706 {
707707 return false;
708708 }
@@ -922,6 +922,9 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 213 unmodified lines
922922 struct ww_mutex *ww;
923923 int ret;
924924
925+ if (!use_ww_ctx)
926+ ww_ctx = NULL;
927+
925928 might_sleep();
926929
927930 #ifdef CONFIG_DEBUG_MUTEXES
@@ -929,7 +932,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 1 unmodified line
929932 #endif
930933
931934 ww = container_of(lock, struct ww_mutex, base);
932− if (use_ww_ctx && ww_ctx) {
935+ if (ww_ctx) {
933936 if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
934937 return -EALREADY;
935938
@@ -946,10 +949,10 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 10 unmodified lines
946949 mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
947950
948951 if (__mutex_trylock(lock) ||
949− mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, NULL)) {
952+ mutex_optimistic_spin(lock, ww_ctx, NULL)) {
950953 /* got the lock, yay! */
951954 lock_acquired(&lock->dep_map, ip);
952− if (use_ww_ctx && ww_ctx)
955+ if (ww_ctx)
953956 ww_mutex_set_context_fastpath(ww, ww_ctx);
954957 preempt_enable();
955958 return 0;
@@ -960,7 +963,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 4 unmodified lines
960963 * After waiting to acquire the wait_lock, try again.
961964 */
962965 if (__mutex_trylock(lock)) {
963− if (use_ww_ctx && ww_ctx)
966+ if (ww_ctx)
964967 __ww_mutex_check_waiters(lock, ww_ctx);
965968
966969 goto skip_wait;
@@ -1013,7 +1016,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 46 unmodified lines
10131016 goto err;
10141017 }
10151018
1016− if (use_ww_ctx && ww_ctx) {
1019+ if (ww_ctx) {
10171020 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx);
10181021 if (ret)
10191022 goto err;
@@ -1026,7 +1029,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 6 unmodified lines
10261029 * ww_mutex needs to always recheck its position since its waiter
10271030 * list is not FIFO ordered.
10281031 */
1029− if ((use_ww_ctx && ww_ctx) || !first) {
1032+ if (ww_ctx || !first) {
10301033 first = __mutex_waiter_is_first(lock, &waiter);
10311034 if (first)
10321035 __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
@@ -1039,7 +1042,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 6 unmodified lines
10391042 * or we must see its unlock and acquire.
10401043 */
10411044 if (__mutex_trylock(lock) ||
1042− (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, &waiter)))
1045+ (first && mutex_optimistic_spin(lock, ww_ctx, &waiter)))
10431046 break;
10441047
10451048 spin_lock(&lock->wait_lock);
@@ -1048,7 +1051,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, · 2 unmodified lines
10481051 acquired:
10491052 __set_current_state(TASK_RUNNING);
10501053
1051− if (use_ww_ctx && ww_ctx) {
1054+ if (ww_ctx) {
10521055 /*
10531056 * Wound-Wait; we stole the lock (!first_waiter), check the
10541057 * waiters as anyone might want to wound us.
@@ -1068,7 +1071,7 @@ skip_wait: · 13 unmodified lines
10681071 /* got the lock - cleanup and rejoice! */
10691072 lock_acquired(&lock->dep_map, ip);
10701073
1071− if (use_ww_ctx && ww_ctx)
1074+ if (ww_ctx)
10721075 ww_mutex_lock_acquired(ww, ww_ctx);
10731076
10741077 spin_unlock(&lock->wait_lock);
kernel/power/energy_model.c+1−1
@@ -98,7 +98,7 @@ static int __init em_debug_init(void) · 97 unmodified lines
9898
9999 return 0;
100100 }
101−core_initcall(em_debug_init);
101+fs_initcall(em_debug_init);
102102 #else /* CONFIG_DEBUG_FS */
103103 static void em_debug_create_pd(struct device *dev) {}
104104 static void em_debug_remove_pd(struct device *dev) {}
kernel/ptrace.c+1−1
@@ -375,7 +375,7 @@ static int ptrace_attach(struct task_struct *task, long request, · 374 unmodified lines
375375 audit_ptrace(task);
376376
377377 retval = -EPERM;
378− if (unlikely(task->flags & (PF_KTHREAD | PF_IO_WORKER)))
378+ if (unlikely(task->flags & PF_KTHREAD))
379379 goto out;
380380 if (same_thread_group(task, current))
381381 goto out;
kernel/reboot.c+0−2
@@ -244,8 +244,6 @@ void migrate_to_reboot_cpu(void) · 243 unmodified lines
244244 void kernel_restart(char *cmd)
245245 {
246246 kernel_restart_prepare(cmd);
247− if (pm_power_off_prepare)
248− pm_power_off_prepare();
249247 migrate_to_reboot_cpu();
250248 syscore_shutdown();
251249 if (!cmd)
kernel/signal.c+11−3
@@ -91,7 +91,7 @@ static bool sig_task_ignored(struct task_struct *t, int sig, bool force) · 90 unmodified lines
9191 return true;
9292
9393 /* Only allow kernel generated signals to this kthread */
94− if (unlikely((t->flags & (PF_KTHREAD | PF_IO_WORKER)) &&
94+ if (unlikely((t->flags & PF_KTHREAD) &&
9595 (handler == SIG_KTHREAD_KERNEL) && !force))
9696 return true;
9797
@@ -1096,7 +1096,7 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc · 998 unmodified lines
10961096 /*
10971097 * Skip useless siginfo allocation for SIGKILL and kernel threads.
10981098 */
1099− if ((sig == SIGKILL) || (t->flags & (PF_KTHREAD | PF_IO_WORKER)))
1099+ if ((sig == SIGKILL) || (t->flags & PF_KTHREAD))
11001100 goto out_set;
11011101
11021102 /*
@@ -2767,6 +2767,14 @@ relock: · 1664 unmodified lines
27672767 do_coredump(&ksig->info);
27682768 }
27692769
2770+ /*
2771+ * PF_IO_WORKER threads will catch and exit on fatal signals
2772+ * themselves. They have cleanup that must be performed, so
2773+ * we cannot call do_exit() on their behalf.
2774+ */
2775+ if (current->flags & PF_IO_WORKER)
2776+ goto out;
2777+
27702778 /*
27712779 * Death signals, no core dump.
27722780 */
@@ -2774,7 +2782,7 @@ relock: · 1 unmodified line
27742782 /* NOTREACHED */
27752783 }
27762784 spin_unlock_irq(&sighand->siglock);
2777−
2785+out:
27782786 ksig->sig = signr;
27792787
27802788 if (!(ksig->ka.sa.sa_flags & SA_EXPOSE_TAGBITS))
kernel/static_call.c+24−18
@@ -35,27 +35,30 @@ static inline void *static_call_addr(struct static_call_site *site) · 34 unmodified lines
3535 return (void *)((long)site->addr + (long)&site->addr);
3636 }
3737
38+static inline unsigned long __static_call_key(const struct static_call_site *site)
39+{
40+ return (long)site->key + (long)&site->key;
41+}
3842
3943 static inline struct static_call_key *static_call_key(const struct static_call_site *site)
4044 {
41− return (struct static_call_key *)
42− (((long)site->key + (long)&site->key) & ~STATIC_CALL_SITE_FLAGS);
45+ return (void *)(__static_call_key(site) & ~STATIC_CALL_SITE_FLAGS);
4346 }
4447
4548 /* These assume the key is word-aligned. */
4649 static inline bool static_call_is_init(struct static_call_site *site)
4750 {
48− return ((long)site->key + (long)&site->key) & STATIC_CALL_SITE_INIT;
51+ return __static_call_key(site) & STATIC_CALL_SITE_INIT;
4952 }
5053
5154 static inline bool static_call_is_tail(struct static_call_site *site)
5255 {
53− return ((long)site->key + (long)&site->key) & STATIC_CALL_SITE_TAIL;
56+ return __static_call_key(site) & STATIC_CALL_SITE_TAIL;
5457 }
5558
5659 static inline void static_call_set_init(struct static_call_site *site)
5760 {
58− site->key = ((long)static_call_key(site) | STATIC_CALL_SITE_INIT) -
61+ site->key = (__static_call_key(site) | STATIC_CALL_SITE_INIT) -
5962 (long)&site->key;
6063 }
6164
@@ -146,6 +149,7 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func) · 84 unmodified lines
146149 };
147150
148151 for (site_mod = &first; site_mod; site_mod = site_mod->next) {
152+ bool init = system_state < SYSTEM_RUNNING;
149153 struct module *mod = site_mod->mod;
150154
151155 if (!site_mod->sites) {
@@ -165,6 +169,7 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func) · 13 unmodified lines
165169 if (mod) {
166170 stop = mod->static_call_sites +
167171 mod->num_static_call_sites;
172+ init = mod->state == MODULE_STATE_COMING;
168173 }
169174 #endif
170175
@@ -172,25 +177,26 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func) · 1 unmodified line
172177 site < stop && static_call_key(site) == key; site++) {
173178 void *site_addr = static_call_addr(site);
174179
175− if (static_call_is_init(site)) {
176− /*
177− * Don't write to call sites which were in
178− * initmem and have since been freed.
179− */
180− if (!mod && system_state >= SYSTEM_RUNNING)
181− continue;
182− if (mod && !within_module_init((unsigned long)site_addr, mod))
183− continue;
184− }
180+ if (!init && static_call_is_init(site))
181+ continue;
185182
186183 if (!kernel_text_address((unsigned long)site_addr)) {
187− WARN_ONCE(1, "can't patch static call site at %pS",
184+ /*
185+ * This skips patching built-in __exit, which
186+ * is part of init_section_contains() but is
187+ * not part of kernel_text_address().
188+ *
189+ * Skipping built-in __exit is fine since it
190+ * will never be executed.
191+ */
192+ WARN_ONCE(!static_call_is_init(site),
193+ "can't patch static call site at %pS",
188194 site_addr);
189195 continue;
190196 }
191197
192198 arch_static_call_transform(site_addr, NULL, func,
193− static_call_is_tail(site));
199+ static_call_is_tail(site));
194200 }
195201 }
196202
@@ -349,7 +355,7 @@ static int static_call_add_module(struct module *mod) · 152 unmodified lines
349355 struct static_call_site *site;
350356
351357 for (site = start; site != stop; site++) {
352− unsigned long s_key = (long)site->key + (long)&site->key;
358+ unsigned long s_key = __static_call_key(site);
353359 unsigned long addr = s_key & ~STATIC_CALL_SITE_FLAGS;
354360 unsigned long key;
355361
kernel/time/alarmtimer.c+1−1
@@ -854,9 +854,9 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags, · 853 unmodified lines
854854 if (flags == TIMER_ABSTIME)
855855 return -ERESTARTNOHAND;
856856
857− restart->fn = alarm_timer_nsleep_restart;
858857 restart->nanosleep.clockid = type;
859858 restart->nanosleep.expires = exp;
859+ set_restart_fn(restart, alarm_timer_nsleep_restart);
860860 return ret;
861861 }
862862
kernel/time/hrtimer.c+1−1
@@ -1957,9 +1957,9 @@ long hrtimer_nanosleep(ktime_t rqtp, const enum hrtimer_mode mode, · 1956 unmodified lines
19571957 }
19581958
19591959 restart = &current->restart_block;
1960− restart->fn = hrtimer_nanosleep_restart;
19611960 restart->nanosleep.clockid = t.timer.base->clockid;
19621961 restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
1962+ set_restart_fn(restart, hrtimer_nanosleep_restart);
19631963 out:
19641964 destroy_hrtimer_on_stack(&t.timer);
19651965 return ret;
kernel/time/posix-cpu-timers.c+1−1
@@ -1480,8 +1480,8 @@ static int posix_cpu_nsleep(const clockid_t which_clock, int flags, · 1479 unmodified lines
14801480 if (flags & TIMER_ABSTIME)
14811481 return -ERESTARTNOHAND;
14821482
1483− restart_block->fn = posix_cpu_nsleep_restart;
14841483 restart_block->nanosleep.clockid = which_clock;
1484+ set_restart_fn(restart_block, posix_cpu_nsleep_restart);
14851485 }
14861486 return error;
14871487 }
kernel/trace/ftrace.c+44−8
@@ -3231,7 +3231,8 @@ ftrace_allocate_pages(unsigned long num_to_init) · 3230 unmodified lines
32313231 pg = start_pg;
32323232 while (pg) {
32333233 order = get_count_order(pg->size / ENTRIES_PER_PAGE);
3234− free_pages((unsigned long)pg->records, order);
3234+ if (order >= 0)
3235+ free_pages((unsigned long)pg->records, order);
32353236 start_pg = pg->next;
32363237 kfree(pg);
32373238 pg = start_pg;
@@ -5045,6 +5046,20 @@ struct ftrace_direct_func *ftrace_find_direct_func(unsigned long addr) · 1807 unmodified lines
50455046 return NULL;
50465047 }
50475048
5049+static struct ftrace_direct_func *ftrace_alloc_direct_func(unsigned long addr)
5050+{
5051+ struct ftrace_direct_func *direct;
5052+
5053+ direct = kmalloc(sizeof(*direct), GFP_KERNEL);
5054+ if (!direct)
5055+ return NULL;
5056+ direct->addr = addr;
5057+ direct->count = 0;
5058+ list_add_rcu(&direct->next, &ftrace_direct_funcs);
5059+ ftrace_direct_func_count++;
5060+ return direct;
5061+}
5062+
50485063 /**
50495064 * register_ftrace_direct - Call a custom trampoline directly
50505065 * @ip: The address of the nop at the beginning of a function
@@ -5120,15 +5135,11 @@ int register_ftrace_direct(unsigned long ip, unsigned long addr) · 69 unmodified lines
51205135
51215136 direct = ftrace_find_direct_func(addr);
51225137 if (!direct) {
5123− direct = kmalloc(sizeof(*direct), GFP_KERNEL);
5138+ direct = ftrace_alloc_direct_func(addr);
51245139 if (!direct) {
51255140 kfree(entry);
51265141 goto out_unlock;
51275142 }
5128− direct->addr = addr;
5129− direct->count = 0;
5130− list_add_rcu(&direct->next, &ftrace_direct_funcs);
5131− ftrace_direct_func_count++;
51325143 }
51335144
51345145 entry->ip = ip;
@@ -5329,6 +5340,7 @@ int __weak ftrace_modify_direct_caller(struct ftrace_func_entry *entry, · 194 unmodified lines
53295340 int modify_ftrace_direct(unsigned long ip,
53305341 unsigned long old_addr, unsigned long new_addr)
53315342 {
5343+ struct ftrace_direct_func *direct, *new_direct = NULL;
53325344 struct ftrace_func_entry *entry;
53335345 struct dyn_ftrace *rec;
53345346 int ret = -ENODEV;
@@ -5344,6 +5356,20 @@ int modify_ftrace_direct(unsigned long ip, · 9 unmodified lines
53445356 if (entry->direct != old_addr)
53455357 goto out_unlock;
53465358
5359+ direct = ftrace_find_direct_func(old_addr);
5360+ if (WARN_ON(!direct))
5361+ goto out_unlock;
5362+ if (direct->count > 1) {
5363+ ret = -ENOMEM;
5364+ new_direct = ftrace_alloc_direct_func(new_addr);
5365+ if (!new_direct)
5366+ goto out_unlock;
5367+ direct->count--;
5368+ new_direct->count++;
5369+ } else {
5370+ direct->addr = new_addr;
5371+ }
5372+
53475373 /*
53485374 * If there's no other ftrace callback on the rec->ip location,
53495375 * then it can be changed directly by the architecture.
@@ -5357,6 +5383,14 @@ int modify_ftrace_direct(unsigned long ip, · 7 unmodified lines
53575383 ret = 0;
53585384 }
53595385
5386+ if (unlikely(ret && new_direct)) {
5387+ direct->count++;
5388+ list_del_rcu(&new_direct->next);
5389+ synchronize_rcu_tasks();
5390+ kfree(new_direct);
5391+ ftrace_direct_func_count--;
5392+ }
5393+
53605394 out_unlock:
53615395 mutex_unlock(&ftrace_lock);
53625396 mutex_unlock(&direct_mutex);
@@ -6418,7 +6452,8 @@ void ftrace_release_mod(struct module *mod) · 1055 unmodified lines
64186452 clear_mod_from_hashes(pg);
64196453
64206454 order = get_count_order(pg->size / ENTRIES_PER_PAGE);
6421− free_pages((unsigned long)pg->records, order);
6455+ if (order >= 0)
6456+ free_pages((unsigned long)pg->records, order);
64226457 tmp_page = pg->next;
64236458 kfree(pg);
64246459 ftrace_number_of_pages -= 1 << order;
@@ -6778,7 +6813,8 @@ void ftrace_free_mem(struct module *mod, void *start_ptr, void *end_ptr) · 353 unmodified lines
67786813 if (!pg->index) {
67796814 *last_pg = pg->next;
67806815 order = get_count_order(pg->size / ENTRIES_PER_PAGE);
6781− free_pages((unsigned long)pg->records, order);
6816+ if (order >= 0)
6817+ free_pages((unsigned long)pg->records, order);
67826818 ftrace_number_of_pages -= 1 << order;
67836819 ftrace_number_of_groups--;
67846820 kfree(pg);
kernel/trace/trace.c+2−1
@@ -2984,7 +2984,8 @@ static void __ftrace_trace_stack(struct trace_buffer *buffer, · 2983 unmodified lines
29842984
29852985 size = nr_entries * sizeof(unsigned long);
29862986 event = __trace_buffer_lock_reserve(buffer, TRACE_STACK,
2987− sizeof(*entry) + size, trace_ctx);
2987+ (sizeof(*entry) - sizeof(entry->caller)) + size,
2988+ trace_ctx);
29882989 if (!event)
29892990 goto out;
29902991 entry = ring_buffer_event_data(event);
kernel/usermode_driver.c+15−6
@@ -139,13 +139,22 @@ static void umd_cleanup(struct subprocess_info *info) · 138 unmodified lines
139139 struct umd_info *umd_info = info->data;
140140
141141 /* cleanup if umh_setup() was successful but exec failed */
142− if (info->retval) {
143− fput(umd_info->pipe_to_umh);
144− fput(umd_info->pipe_from_umh);
145− put_pid(umd_info->tgid);
146− umd_info->tgid = NULL;
147− }
142+ if (info->retval)
143+ umd_cleanup_helper(umd_info);
144+}
145+
146+/**
147+ * umd_cleanup_helper - release the resources which were allocated in umd_setup
148+ * @info: information about usermode driver
149+ */
150+void umd_cleanup_helper(struct umd_info *info)
151+{
152+ fput(info->pipe_to_umh);
153+ fput(info->pipe_from_umh);
154+ put_pid(info->tgid);
155+ info->tgid = NULL;
148156 }
157+EXPORT_SYMBOL_GPL(umd_cleanup_helper);
149158
150159 /**
151160 * fork_usermode_driver - fork a usermode driver
lib/math/div64.c+1−0
@@ -232,4 +232,5 @@ u64 mul_u64_u64_div_u64(u64 a, u64 b, u64 c) · 231 unmodified lines
232232
233233 return res + div64_u64(a * b, c);
234234 }
235+EXPORT_SYMBOL(mul_u64_u64_div_u64);
235236 #endif
lib/test_xarray.c+14−12
@@ -1530,24 +1530,24 @@ static noinline void check_store_range(struct xarray *xa) · 1529 unmodified lines
15301530
15311531 #ifdef CONFIG_XARRAY_MULTI
15321532 static void check_split_1(struct xarray *xa, unsigned long index,
1533− unsigned int order)
1533+ unsigned int order, unsigned int new_order)
15341534 {
1535− XA_STATE(xas, xa, index);
1536− void *entry;
1537− unsigned int i = 0;
1535+ XA_STATE_ORDER(xas, xa, index, new_order);
1536+ unsigned int i;
15381537
15391538 xa_store_order(xa, index, order, xa, GFP_KERNEL);
15401539
15411540 xas_split_alloc(&xas, xa, order, GFP_KERNEL);
15421541 xas_lock(&xas);
15431542 xas_split(&xas, xa, order);
1543+ for (i = 0; i < (1 << order); i += (1 << new_order))
1544+ __xa_store(xa, index + i, xa_mk_index(index + i), 0);
15441545 xas_unlock(&xas);
15451546
1546− xa_for_each(xa, index, entry) {
1547− XA_BUG_ON(xa, entry != xa);
1548− i++;
1547+ for (i = 0; i < (1 << order); i++) {
1548+ unsigned int val = index + (i & ~((1 << new_order) - 1));
1549+ XA_BUG_ON(xa, xa_load(xa, index + i) != xa_mk_index(val));
15491550 }
1550− XA_BUG_ON(xa, i != 1 << order);
15511551
15521552 xa_set_mark(xa, index, XA_MARK_0);
15531553 XA_BUG_ON(xa, !xa_get_mark(xa, index, XA_MARK_0));
@@ -1557,14 +1557,16 @@ static void check_split_1(struct xarray *xa, unsigned long index, · 3 unmodified lines
15571557
15581558 static noinline void check_split(struct xarray *xa)
15591559 {
1560− unsigned int order;
1560+ unsigned int order, new_order;
15611561
15621562 XA_BUG_ON(xa, !xa_empty(xa));
15631563
15641564 for (order = 1; order < 2 * XA_CHUNK_SHIFT; order++) {
1565− check_split_1(xa, 0, order);
1566− check_split_1(xa, 1UL << order, order);
1567− check_split_1(xa, 3UL << order, order);
1565+ for (new_order = 0; new_order < order; new_order++) {
1566+ check_split_1(xa, 0, order, new_order);
1567+ check_split_1(xa, 1UL << order, order, new_order);
1568+ check_split_1(xa, 3UL << order, order, new_order);
1569+ }
15681570 }
15691571 }
15701572 #else
lib/xarray.c+6−5
@@ -987,7 +987,7 @@ static void node_set_marks(struct xa_node *node, unsigned int offset, · 986 unmodified lines
987987 * xas_split_alloc() - Allocate memory for splitting an entry.
988988 * @xas: XArray operation state.
989989 * @entry: New entry which will be stored in the array.
990− * @order: New entry order.
990+ * @order: Current entry order.
991991 * @gfp: Memory allocation flags.
992992 *
993993 * This function should be called before calling xas_split().
@@ -1011,7 +1011,7 @@ void xas_split_alloc(struct xa_state *xas, void *entry, unsigned int order, · 17 unmodified lines
10111011
10121012 do {
10131013 unsigned int i;
1014− void *sibling;
1014+ void *sibling = NULL;
10151015 struct xa_node *node;
10161016
10171017 node = kmem_cache_alloc(radix_tree_node_cachep, gfp);
@@ -1021,7 +1021,7 @@ void xas_split_alloc(struct xa_state *xas, void *entry, unsigned int order, · 3 unmodified lines
10211021 for (i = 0; i < XA_CHUNK_SIZE; i++) {
10221022 if ((i & mask) == 0) {
10231023 RCU_INIT_POINTER(node->slots[i], entry);
1024− sibling = xa_mk_sibling(0);
1024+ sibling = xa_mk_sibling(i);
10251025 } else {
10261026 RCU_INIT_POINTER(node->slots[i], sibling);
10271027 }
@@ -1041,9 +1041,10 @@ EXPORT_SYMBOL_GPL(xas_split_alloc); · 13 unmodified lines
10411041 * xas_split() - Split a multi-index entry into smaller entries.
10421042 * @xas: XArray operation state.
10431043 * @entry: New entry to store in the array.
1044− * @order: New entry order.
1044+ * @order: Current entry order.
10451045 *
1046− * The value in the entry is copied to all the replacement entries.
1046+ * The size of the new entries is set in @xas. The value in @entry is
1047+ * copied to all the replacement entries.
10471048 *
10481049 * Context: Any context. The caller should hold the xa_lock.
10491050 */
mm/highmem.c+2−2
@@ -618,7 +618,7 @@ void __kmap_local_sched_out(void) · 617 unmodified lines
618618 int idx;
619619
620620 /* With debug all even slots are unmapped and act as guard */
621− if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !(i & 0x01)) {
621+ if (IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL) && !(i & 0x01)) {
622622 WARN_ON_ONCE(!pte_none(pteval));
623623 continue;
624624 }
@@ -654,7 +654,7 @@ void __kmap_local_sched_in(void) · 29 unmodified lines
654654 int idx;
655655
656656 /* With debug all even slots are unmapped and act as guard */
657− if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !(i & 0x01)) {
657+ if (IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL) && !(i & 0x01)) {
658658 WARN_ON_ONCE(!pte_none(pteval));
659659 continue;
660660 }
mm/hugetlb.c+37−4
@@ -280,6 +280,17 @@ static void record_hugetlb_cgroup_uncharge_info(struct hugetlb_cgroup *h_cg, · 279 unmodified lines
280280 nrg->reservation_counter =
281281 &h_cg->rsvd_hugepage[hstate_index(h)];
282282 nrg->css = &h_cg->css;
283+ /*
284+ * The caller will hold exactly one h_cg->css reference for the
285+ * whole contiguous reservation region. But this area might be
286+ * scattered when there are already some file_regions reside in
287+ * it. As a result, many file_regions may share only one css
288+ * reference. In order to ensure that one file_region must hold
289+ * exactly one h_cg->css reference, we should do css_get for
290+ * each file_region and leave the reference held by caller
291+ * untouched.
292+ */
293+ css_get(&h_cg->css);
283294 if (!resv->pages_per_hpage)
284295 resv->pages_per_hpage = pages_per_huge_page(h);
285296 /* pages_per_hpage should be the same for all entries in
@@ -293,6 +304,14 @@ static void record_hugetlb_cgroup_uncharge_info(struct hugetlb_cgroup *h_cg, · 7 unmodified lines
293304 #endif
294305 }
295306
307+static void put_uncharge_info(struct file_region *rg)
308+{
309+#ifdef CONFIG_CGROUP_HUGETLB
310+ if (rg->css)
311+ css_put(rg->css);
312+#endif
313+}
314+
296315 static bool has_same_uncharge_info(struct file_region *rg,
297316 struct file_region *org)
298317 {
@@ -316,6 +335,7 @@ static void coalesce_file_region(struct resv_map *resv, struct file_region *rg) · 17 unmodified lines
316335 prg->to = rg->to;
317336
318337 list_del(&rg->link);
338+ put_uncharge_info(rg);
319339 kfree(rg);
320340
321341 rg = prg;
@@ -327,6 +347,7 @@ static void coalesce_file_region(struct resv_map *resv, struct file_region *rg) · 5 unmodified lines
327347 nrg->from = rg->from;
328348
329349 list_del(&rg->link);
350+ put_uncharge_info(rg);
330351 kfree(rg);
331352 }
332353 }
@@ -662,7 +683,7 @@ retry: · 329 unmodified lines
662683
663684 del += t - f;
664685 hugetlb_cgroup_uncharge_file_region(
665− resv, rg, t - f);
686+ resv, rg, t - f, false);
666687
667688 /* New entry for end of split region */
668689 nrg->from = t;
@@ -683,7 +704,7 @@ retry: · 14 unmodified lines
683704 if (f <= rg->from && t >= rg->to) { /* Remove entire region */
684705 del += rg->to - rg->from;
685706 hugetlb_cgroup_uncharge_file_region(resv, rg,
686− rg->to - rg->from);
707+ rg->to - rg->from, true);
687708 list_del(&rg->link);
688709 kfree(rg);
689710 continue;
@@ -691,13 +712,13 @@ retry: · 1 unmodified line
691712
692713 if (f <= rg->from) { /* Trim beginning of region */
693714 hugetlb_cgroup_uncharge_file_region(resv, rg,
694− t - rg->from);
715+ t - rg->from, false);
695716
696717 del += t - rg->from;
697718 rg->from = t;
698719 } else { /* Trim end of region */
699720 hugetlb_cgroup_uncharge_file_region(resv, rg,
700− rg->to - f);
721+ rg->to - f, false);
701722
702723 del += rg->to - f;
703724 rg->to = f;
@@ -5187,6 +5208,10 @@ bool hugetlb_reserve_pages(struct inode *inode, · 4483 unmodified lines
51875208 */
51885209 long rsv_adjust;
51895210
5211+ /*
5212+ * hugetlb_cgroup_uncharge_cgroup_rsvd() will put the
5213+ * reference to h_cg->css. See comment below for detail.
5214+ */
51905215 hugetlb_cgroup_uncharge_cgroup_rsvd(
51915216 hstate_index(h),
51925217 (chg - add) * pages_per_huge_page(h), h_cg);
@@ -5194,6 +5219,14 @@ bool hugetlb_reserve_pages(struct inode *inode, · 1 unmodified line
51945219 rsv_adjust = hugepage_subpool_put_pages(spool,
51955220 chg - add);
51965221 hugetlb_acct_memory(h, -rsv_adjust);
5222+ } else if (h_cg) {
5223+ /*
5224+ * The file_regions will hold their own reference to
5225+ * h_cg->css. So we should release the reference held
5226+ * via hugetlb_cgroup_charge_cgroup_rsvd() when we are
5227+ * done.
5228+ */
5229+ hugetlb_cgroup_put_rsvd_cgroup(h_cg);
51975230 }
51985231 }
51995232 return true;
mm/hugetlb_cgroup.c+8−2
@@ -391,7 +391,8 @@ void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, unsigned long start, · 390 unmodified lines
391391
392392 void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
393393 struct file_region *rg,
394− unsigned long nr_pages)
394+ unsigned long nr_pages,
395+ bool region_del)
395396 {
396397 if (hugetlb_cgroup_disabled() || !resv || !rg || !nr_pages)
397398 return;
@@ -400,7 +401,12 @@ void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv, · 2 unmodified lines
400401 !resv->reservation_counter) {
401402 page_counter_uncharge(rg->reservation_counter,
402403 nr_pages * resv->pages_per_hpage);
403− css_put(rg->css);
404+ /*
405+ * Only do css_put(rg->css) when we delete the entire region
406+ * because one file_region must hold exactly one css reference.
407+ */
408+ if (region_del)
409+ css_put(rg->css);
404410 }
405411 }
406412
mm/kfence/core.c+9−0
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <linux/debugfs.h>
1313 #include <linux/kcsan-checks.h>
1414 #include <linux/kfence.h>
15+#include <linux/kmemleak.h>
1516 #include <linux/list.h>
1617 #include <linux/lockdep.h>
1718 #include <linux/memblock.h>
@@ -480,6 +481,14 @@ static bool __init kfence_init_pool(void) · 462 unmodified lines
480481 addr += 2 * PAGE_SIZE;
481482 }
482483
484+ /*
485+ * The pool is live and will never be deallocated from this point on.
486+ * Remove the pool object from the kmemleak object tree, as it would
487+ * otherwise overlap with allocations returned by kfence_alloc(), which
488+ * are registered with kmemleak through the slab post-alloc hook.
489+ */
490+ kmemleak_free(__kfence_pool);
491+
483492 return true;
484493
485494 err:
mm/kmemleak.c+2−1
@@ -97,6 +97,7 @@ · 96 unmodified lines
9797 #include <linux/atomic.h>
9898
9999 #include <linux/kasan.h>
100+#include <linux/kfence.h>
100101 #include <linux/kmemleak.h>
101102 #include <linux/memory_hotplug.h>
102103
@@ -589,7 +590,7 @@ static struct kmemleak_object *create_object(unsigned long ptr, size_t size, · 486 unmodified lines
589590 atomic_set(&object->use_count, 1);
590591 object->flags = OBJECT_ALLOCATED;
591592 object->pointer = ptr;
592− object->size = size;
593+ object->size = kfence_ksize((void *)ptr) ?: size;
593594 object->excess_ref = 0;
594595 object->min_count = min_count;
595596 object->count = 0; /* white color initially */
mm/memory.c+1−1
@@ -166,7 +166,7 @@ static int __init init_zero_pfn(void) · 165 unmodified lines
166166 zero_pfn = page_to_pfn(ZERO_PAGE(0));
167167 return 0;
168168 }
169−core_initcall(init_zero_pfn);
169+early_initcall(init_zero_pfn);
170170
171171 void mm_trace_rss_stat(struct mm_struct *mm, int member, long count)
172172 {
mm/mmu_notifier.c+23−0
@@ -501,10 +501,33 @@ static int mn_hlist_invalidate_range_start( · 500 unmodified lines
501501 "");
502502 WARN_ON(mmu_notifier_range_blockable(range) ||
503503 _ret != -EAGAIN);
504+ /*
505+ * We call all the notifiers on any EAGAIN,
506+ * there is no way for a notifier to know if
507+ * its start method failed, thus a start that
508+ * does EAGAIN can't also do end.
509+ */
510+ WARN_ON(ops->invalidate_range_end);
504511 ret = _ret;
505512 }
506513 }
507514 }
515+
516+ if (ret) {
517+ /*
518+ * Must be non-blocking to get here. If there are multiple
519+ * notifiers and one or more failed start, any that succeeded
520+ * start are expecting their end to be called. Do so now.
521+ */
522+ hlist_for_each_entry_rcu(subscription, &subscriptions->list,
523+ hlist, srcu_read_lock_held(&srcu)) {
524+ if (!subscription->ops->invalidate_range_end)
525+ continue;
526+
527+ subscription->ops->invalidate_range_end(subscription,
528+ range);
529+ }
530+ }
508531 srcu_read_unlock(&srcu, id);
509532
510533 return ret;
mm/page-writeback.c+16−0
@@ -2833,6 +2833,22 @@ void wait_on_page_writeback(struct page *page) · 2832 unmodified lines
28332833 }
28342834 EXPORT_SYMBOL_GPL(wait_on_page_writeback);
28352835
2836+/*
2837+ * Wait for a page to complete writeback. Returns -EINTR if we get a
2838+ * fatal signal while waiting.
2839+ */
2840+int wait_on_page_writeback_killable(struct page *page)
2841+{
2842+ while (PageWriteback(page)) {
2843+ trace_wait_on_page_writeback(page, page_mapping(page));
2844+ if (wait_on_page_bit_killable(page, PG_writeback))
2845+ return -EINTR;
2846+ }
2847+
2848+ return 0;
2849+}
2850+EXPORT_SYMBOL_GPL(wait_on_page_writeback_killable);
2851+
28362852 /**
28372853 * wait_for_stable_page() - wait for writeback to finish, if necessary.
28382854 * @page: The page to wait on.
mm/z3fold.c+15−1
@@ -1346,8 +1346,22 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) · 1345 unmodified lines
13461346 page = list_entry(pos, struct page, lru);
13471347
13481348 zhdr = page_address(page);
1349− if (test_bit(PAGE_HEADLESS, &page->private))
1349+ if (test_bit(PAGE_HEADLESS, &page->private)) {
1350+ /*
1351+ * For non-headless pages, we wait to do this
1352+ * until we have the page lock to avoid racing
1353+ * with __z3fold_alloc(). Headless pages don't
1354+ * have a lock (and __z3fold_alloc() will never
1355+ * see them), but we still need to test and set
1356+ * PAGE_CLAIMED to avoid racing with
1357+ * z3fold_free(), so just do it now before
1358+ * leaving the loop.
1359+ */
1360+ if (test_and_set_bit(PAGE_CLAIMED, &page->private))
1361+ continue;
1362+
13501363 break;
1364+ }
13511365
13521366 if (kref_get_unless_zero(&zhdr->refcount) == 0) {
13531367 zhdr = NULL;
net/batman-adv/main.c+0−1
@@ -702,7 +702,6 @@ MODULE_LICENSE("GPL"); · 701 unmodified lines
702702
703703 MODULE_AUTHOR(BATADV_DRIVER_AUTHOR);
704704 MODULE_DESCRIPTION(BATADV_DRIVER_DESC);
705−MODULE_SUPPORTED_DEVICE(BATADV_DRIVER_DEVICE);
706705 MODULE_VERSION(BATADV_SOURCE_VERSION);
707706 MODULE_ALIAS_RTNL_LINK("batadv");
708707 MODULE_ALIAS_GENL_FAMILY(BATADV_NL_NAME);
net/bridge/br_switchdev.c+2−0
@@ -128,6 +128,8 @@ br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type) · 127 unmodified lines
128128 {
129129 if (!fdb->dst)
130130 return;
131+ if (test_bit(BR_FDB_LOCAL, &fdb->flags))
132+ return;
131133
132134 switch (type) {
133135 case RTM_DELNEIGH:
net/can/isotp.c+8−10
@@ -196,7 +196,7 @@ static int isotp_send_fc(struct sock *sk, int ae, u8 flowstatus) · 195 unmodified lines
196196 nskb->dev = dev;
197197 can_skb_set_owner(nskb, sk);
198198 ncf = (struct canfd_frame *)nskb->data;
199− skb_put(nskb, so->ll.mtu);
199+ skb_put_zero(nskb, so->ll.mtu);
200200
201201 /* create & send flow control reply */
202202 ncf->can_id = so->txid;
@@ -215,8 +215,7 @@ static int isotp_send_fc(struct sock *sk, int ae, u8 flowstatus) · 12 unmodified lines
215215 if (ae)
216216 ncf->data[0] = so->opt.ext_address;
217217
218− if (so->ll.mtu == CANFD_MTU)
219− ncf->flags = so->ll.tx_flags;
218+ ncf->flags = so->ll.tx_flags;
220219
221220 can_send_ret = can_send(nskb, 1);
222221 if (can_send_ret)
@@ -780,7 +779,7 @@ isotp_tx_burst: · 557 unmodified lines
780779 can_skb_prv(skb)->skbcnt = 0;
781780
782781 cf = (struct canfd_frame *)skb->data;
783− skb_put(skb, so->ll.mtu);
782+ skb_put_zero(skb, so->ll.mtu);
784783
785784 /* create consecutive frame */
786785 isotp_fill_dataframe(cf, so, ae, 0);
@@ -790,8 +789,7 @@ isotp_tx_burst: · 3 unmodified lines
790789 so->tx.sn %= 16;
791790 so->tx.bs++;
792791
793− if (so->ll.mtu == CANFD_MTU)
794− cf->flags = so->ll.tx_flags;
792+ cf->flags = so->ll.tx_flags;
795793
796794 skb->dev = dev;
797795 can_skb_set_owner(skb, sk);
@@ -897,7 +895,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 99 unmodified lines
897895 so->tx.idx = 0;
898896
899897 cf = (struct canfd_frame *)skb->data;
900− skb_put(skb, so->ll.mtu);
898+ skb_put_zero(skb, so->ll.mtu);
901899
902900 /* check for single frame transmission depending on TX_DL */
903901 if (size <= so->tx.ll_dl - SF_PCI_SZ4 - ae - off) {
@@ -939,8 +937,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 35 unmodified lines
939937 }
940938
941939 /* send the first or only CAN frame */
942− if (so->ll.mtu == CANFD_MTU)
943− cf->flags = so->ll.tx_flags;
940+ cf->flags = so->ll.tx_flags;
944941
945942 skb->dev = dev;
946943 skb->sk = sk;
@@ -1228,7 +1225,8 @@ static int isotp_setsockopt(struct socket *sock, int level, int optname, · 281 unmodified lines
12281225 if (ll.mtu != CAN_MTU && ll.mtu != CANFD_MTU)
12291226 return -EINVAL;
12301227
1231− if (ll.mtu == CAN_MTU && ll.tx_dl > CAN_MAX_DLEN)
1228+ if (ll.mtu == CAN_MTU &&
1229+ (ll.tx_dl > CAN_MAX_DLEN || ll.tx_flags != 0))
12321230 return -EINVAL;
12331231
12341232 memcpy(&so->ll, &ll, sizeof(ll));
net/core/dev.c+31−2
@@ -1184,6 +1184,18 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf) · 1183 unmodified lines
11841184 return -ENOMEM;
11851185
11861186 for_each_netdev(net, d) {
1187+ struct netdev_name_node *name_node;
1188+ list_for_each_entry(name_node, &d->name_node->list, list) {
1189+ if (!sscanf(name_node->name, name, &i))
1190+ continue;
1191+ if (i < 0 || i >= max_netdevices)
1192+ continue;
1193+
1194+ /* avoid cases where sscanf is not exact inverse of printf */
1195+ snprintf(buf, IFNAMSIZ, name, i);
1196+ if (!strncmp(buf, name_node->name, IFNAMSIZ))
1197+ set_bit(i, inuse);
1198+ }
11871199 if (!sscanf(d->name, name, &i))
11881200 continue;
11891201 if (i < 0 || i >= max_netdevices)
@@ -4294,6 +4306,13 @@ static inline void ____napi_schedule(struct softnet_data *sd, · 3104 unmodified lines
42944306 */
42954307 thread = READ_ONCE(napi->thread);
42964308 if (thread) {
4309+ /* Avoid doing set_bit() if the thread is in
4310+ * INTERRUPTIBLE state, cause napi_thread_wait()
4311+ * makes sure to proceed with napi polling
4312+ * if the thread is explicitly woken from here.
4313+ */
4314+ if (READ_ONCE(thread->state) != TASK_INTERRUPTIBLE)
4315+ set_bit(NAPI_STATE_SCHED_THREADED, &napi->state);
42974316 wake_up_process(thread);
42984317 return;
42994318 }
@@ -6486,6 +6505,7 @@ bool napi_complete_done(struct napi_struct *n, int work_done) · 2186 unmodified lines
64866505 WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));
64876506
64886507 new = val & ~(NAPIF_STATE_MISSED | NAPIF_STATE_SCHED |
6508+ NAPIF_STATE_SCHED_THREADED |
64896509 NAPIF_STATE_PREFER_BUSY_POLL);
64906510
64916511 /* If STATE_MISSED was set, leave STATE_SCHED set,
@@ -6968,16 +6988,25 @@ static int napi_poll(struct napi_struct *n, struct list_head *repoll) · 476 unmodified lines
69686988
69696989 static int napi_thread_wait(struct napi_struct *napi)
69706990 {
6991+ bool woken = false;
6992+
69716993 set_current_state(TASK_INTERRUPTIBLE);
69726994
69736995 while (!kthread_should_stop() && !napi_disable_pending(napi)) {
6974− if (test_bit(NAPI_STATE_SCHED, &napi->state)) {
6996+ /* Testing SCHED_THREADED bit here to make sure the current
6997+ * kthread owns this napi and could poll on this napi.
6998+ * Testing SCHED bit is not enough because SCHED bit might be
6999+ * set by some other busy poll thread or by napi_disable().
7000+ */
7001+ if (test_bit(NAPI_STATE_SCHED_THREADED, &napi->state) || woken) {
69757002 WARN_ON(!list_empty(&napi->poll_list));
69767003 __set_current_state(TASK_RUNNING);
69777004 return 0;
69787005 }
69797006
69807007 schedule();
7008+ /* woken being true indicates this thread owns this napi. */
7009+ woken = true;
69817010 set_current_state(TASK_INTERRUPTIBLE);
69827011 }
69837012 __set_current_state(TASK_RUNNING);
@@ -11346,7 +11375,7 @@ static void __net_exit default_device_exit(struct net *net) · 4362 unmodified lines
1134611375 continue;
1134711376
1134811377 /* Leave virtual devices for the generic cleanup */
11349− if (dev->rtnl_link_ops)
11378+ if (dev->rtnl_link_ops && !dev->rtnl_link_ops->netns_refund)
1135011379 continue;
1135111380
1135211381 /* Push remaining network devices to init_net */
net/core/drop_monitor.c+23−0
@@ -1053,6 +1053,20 @@ static int net_dm_hw_monitor_start(struct netlink_ext_ack *extack) · 1052 unmodified lines
10531053 return 0;
10541054
10551055 err_module_put:
1056+ for_each_possible_cpu(cpu) {
1057+ struct per_cpu_dm_data *hw_data = &per_cpu(dm_hw_cpu_data, cpu);
1058+ struct sk_buff *skb;
1059+
1060+ del_timer_sync(&hw_data->send_timer);
1061+ cancel_work_sync(&hw_data->dm_alert_work);
1062+ while ((skb = __skb_dequeue(&hw_data->drop_queue))) {
1063+ struct devlink_trap_metadata *hw_metadata;
1064+
1065+ hw_metadata = NET_DM_SKB_CB(skb)->hw_metadata;
1066+ net_dm_hw_metadata_free(hw_metadata);
1067+ consume_skb(skb);
1068+ }
1069+ }
10561070 module_put(THIS_MODULE);
10571071 return rc;
10581072 }
@@ -1134,6 +1148,15 @@ static int net_dm_trace_on_set(struct netlink_ext_ack *extack) · 75 unmodified lines
11341148 err_unregister_trace:
11351149 unregister_trace_kfree_skb(ops->kfree_skb_probe, NULL);
11361150 err_module_put:
1151+ for_each_possible_cpu(cpu) {
1152+ struct per_cpu_dm_data *data = &per_cpu(dm_cpu_data, cpu);
1153+ struct sk_buff *skb;
1154+
1155+ del_timer_sync(&data->send_timer);
1156+ cancel_work_sync(&data->dm_alert_work);
1157+ while ((skb = __skb_dequeue(&data->drop_queue)))
1158+ consume_skb(skb);
1159+ }
11371160 module_put(THIS_MODULE);
11381161 return rc;
11391162 }
net/core/dst.c+42−17
@@ -237,37 +237,62 @@ void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old) · 236 unmodified lines
237237 }
238238 EXPORT_SYMBOL(__dst_destroy_metrics_generic);
239239
240−static struct dst_ops md_dst_ops = {
241− .family = AF_UNSPEC,
242−};
240+struct dst_entry *dst_blackhole_check(struct dst_entry *dst, u32 cookie)
241+{
242+ return NULL;
243+}
243244
244−static int dst_md_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb)
245+u32 *dst_blackhole_cow_metrics(struct dst_entry *dst, unsigned long old)
245246 {
246− WARN_ONCE(1, "Attempting to call output on metadata dst\n");
247− kfree_skb(skb);
248− return 0;
247+ return NULL;
249248 }
250249
251−static int dst_md_discard(struct sk_buff *skb)
250+struct neighbour *dst_blackhole_neigh_lookup(const struct dst_entry *dst,
251+ struct sk_buff *skb,
252+ const void *daddr)
252253 {
253− WARN_ONCE(1, "Attempting to call input on metadata dst\n");
254− kfree_skb(skb);
255− return 0;
254+ return NULL;
255+}
256+
257+void dst_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
258+ struct sk_buff *skb, u32 mtu,
259+ bool confirm_neigh)
260+{
261+}
262+EXPORT_SYMBOL_GPL(dst_blackhole_update_pmtu);
263+
264+void dst_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
265+ struct sk_buff *skb)
266+{
267+}
268+EXPORT_SYMBOL_GPL(dst_blackhole_redirect);
269+
270+unsigned int dst_blackhole_mtu(const struct dst_entry *dst)
271+{
272+ unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
273+
274+ return mtu ? : dst->dev->mtu;
256275 }
276+EXPORT_SYMBOL_GPL(dst_blackhole_mtu);
277+
278+static struct dst_ops dst_blackhole_ops = {
279+ .family = AF_UNSPEC,
280+ .neigh_lookup = dst_blackhole_neigh_lookup,
281+ .check = dst_blackhole_check,
282+ .cow_metrics = dst_blackhole_cow_metrics,
283+ .update_pmtu = dst_blackhole_update_pmtu,
284+ .redirect = dst_blackhole_redirect,
285+ .mtu = dst_blackhole_mtu,
286+};
257287
258288 static void __metadata_dst_init(struct metadata_dst *md_dst,
259289 enum metadata_type type, u8 optslen)
260−
261290 {
262291 struct dst_entry *dst;
263292
264293 dst = &md_dst->dst;
265− dst_init(dst, &md_dst_ops, NULL, 1, DST_OBSOLETE_NONE,
294+ dst_init(dst, &dst_blackhole_ops, NULL, 1, DST_OBSOLETE_NONE,
266295 DST_METADATA | DST_NOCOUNT);
267−
268− dst->input = dst_md_discard;
269− dst->output = dst_md_discard_out;
270−
271296 memset(dst + 1, 0, sizeof(*md_dst) + optslen - sizeof(*dst));
272297 md_dst->type = type;
273298 }
net/core/filter.c+10−2
@@ -5658,7 +5658,7 @@ BPF_CALL_5(bpf_skb_check_mtu, struct sk_buff *, skb, · 5657 unmodified lines
56585658 if (unlikely(flags & ~(BPF_MTU_CHK_SEGS)))
56595659 return -EINVAL;
56605660
5661− if (unlikely(flags & BPF_MTU_CHK_SEGS && len_diff))
5661+ if (unlikely(flags & BPF_MTU_CHK_SEGS && (len_diff || *mtu_len)))
56625662 return -EINVAL;
56635663
56645664 dev = __dev_via_ifindex(dev, ifindex);
@@ -5668,7 +5668,11 @@ BPF_CALL_5(bpf_skb_check_mtu, struct sk_buff *, skb, · 3 unmodified lines
56685668 mtu = READ_ONCE(dev->mtu);
56695669
56705670 dev_len = mtu + dev->hard_header_len;
5671− skb_len = skb->len + len_diff; /* minus result pass check */
5671+
5672+ /* If set use *mtu_len as input, L3 as iph->tot_len (like fib_lookup) */
5673+ skb_len = *mtu_len ? *mtu_len + dev->hard_header_len : skb->len;
5674+
5675+ skb_len += len_diff; /* minus result pass check */
56725676 if (skb_len <= dev_len) {
56735677 ret = BPF_MTU_CHK_RET_SUCCESS;
56745678 goto out;
@@ -5713,6 +5717,10 @@ BPF_CALL_5(bpf_xdp_check_mtu, struct xdp_buff *, xdp, · 38 unmodified lines
57135717 /* Add L2-header as dev MTU is L3 size */
57145718 dev_len = mtu + dev->hard_header_len;
57155719
5720+ /* Use *mtu_len as input, L3 as iph->tot_len (like fib_lookup) */
5721+ if (*mtu_len)
5722+ xdp_len = *mtu_len + dev->hard_header_len;
5723+
57165724 xdp_len += len_diff; /* minus result pass check */
57175725 if (xdp_len > dev_len)
57185726 ret = BPF_MTU_CHK_RET_FRAG_NEEDED;
net/core/flow_dissector.c+1−1
@@ -176,7 +176,7 @@ void skb_flow_get_icmp_tci(const struct sk_buff *skb, · 175 unmodified lines
176176 * avoid confusion with packets without such field
177177 */
178178 if (icmp_has_id(ih->type))
179− key_icmp->id = ih->un.echo.id ? : 1;
179+ key_icmp->id = ih->un.echo.id ? ntohs(ih->un.echo.id) : 1;
180180 else
181181 key_icmp->id = 0;
182182 }
net/core/sock.c+28−16
@@ -3440,6 +3440,32 @@ static void tw_prot_cleanup(struct timewait_sock_ops *twsk_prot) · 3439 unmodified lines
34403440 twsk_prot->twsk_slab = NULL;
34413441 }
34423442
3443+static int tw_prot_init(const struct proto *prot)
3444+{
3445+ struct timewait_sock_ops *twsk_prot = prot->twsk_prot;
3446+
3447+ if (!twsk_prot)
3448+ return 0;
3449+
3450+ twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s",
3451+ prot->name);
3452+ if (!twsk_prot->twsk_slab_name)
3453+ return -ENOMEM;
3454+
3455+ twsk_prot->twsk_slab =
3456+ kmem_cache_create(twsk_prot->twsk_slab_name,
3457+ twsk_prot->twsk_obj_size, 0,
3458+ SLAB_ACCOUNT | prot->slab_flags,
3459+ NULL);
3460+ if (!twsk_prot->twsk_slab) {
3461+ pr_crit("%s: Can't create timewait sock SLAB cache!\n",
3462+ prot->name);
3463+ return -ENOMEM;
3464+ }
3465+
3466+ return 0;
3467+}
3468+
34433469 static void req_prot_cleanup(struct request_sock_ops *rsk_prot)
34443470 {
34453471 if (!rsk_prot)
@@ -3496,22 +3522,8 @@ int proto_register(struct proto *prot, int alloc_slab) · 50 unmodified lines
34963522 if (req_prot_init(prot))
34973523 goto out_free_request_sock_slab;
34983524
3499− if (prot->twsk_prot != NULL) {
3500− prot->twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s", prot->name);
3501−
3502− if (prot->twsk_prot->twsk_slab_name == NULL)
3503− goto out_free_request_sock_slab;
3504−
3505− prot->twsk_prot->twsk_slab =
3506− kmem_cache_create(prot->twsk_prot->twsk_slab_name,
3507− prot->twsk_prot->twsk_obj_size,
3508− 0,
3509− SLAB_ACCOUNT |
3510− prot->slab_flags,
3511− NULL);
3512− if (prot->twsk_prot->twsk_slab == NULL)
3513− goto out_free_timewait_sock_slab;
3514− }
3525+ if (tw_prot_init(prot))
3526+ goto out_free_timewait_sock_slab;
35153527 }
35163528
35173529 mutex_lock(&proto_list_mutex);
net/dccp/ipv6.c+5−0
@@ -319,6 +319,11 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) · 318 unmodified lines
319319 if (!ipv6_unicast_destination(skb))
320320 return 0; /* discard, don't send a reset here */
321321
322+ if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) {
323+ __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
324+ return 0;
325+ }
326+
322327 if (dccp_bad_service_code(sk, service)) {
323328 dcb->dccpd_reset_code = DCCP_RESET_CODE_BAD_SERVICE_CODE;
324329 goto drop;
net/dsa/dsa2.c+7−4
@@ -1066,6 +1066,7 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master) · 1065 unmodified lines
10661066 {
10671067 struct dsa_switch *ds = dp->ds;
10681068 struct dsa_switch_tree *dst = ds->dst;
1069+ const struct dsa_device_ops *tag_ops;
10691070 enum dsa_tag_protocol tag_protocol;
10701071
10711072 tag_protocol = dsa_get_tag_protocol(dp, master);
@@ -1080,14 +1081,16 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master) · 8 unmodified lines
10801081 * nothing to do here.
10811082 */
10821083 } else {
1083− dst->tag_ops = dsa_tag_driver_get(tag_protocol);
1084− if (IS_ERR(dst->tag_ops)) {
1085− if (PTR_ERR(dst->tag_ops) == -ENOPROTOOPT)
1084+ tag_ops = dsa_tag_driver_get(tag_protocol);
1085+ if (IS_ERR(tag_ops)) {
1086+ if (PTR_ERR(tag_ops) == -ENOPROTOOPT)
10861087 return -EPROBE_DEFER;
10871088 dev_warn(ds->dev, "No tagger for this switch\n");
10881089 dp->master = NULL;
1089− return PTR_ERR(dst->tag_ops);
1090+ return PTR_ERR(tag_ops);
10901091 }
1092+
1093+ dst->tag_ops = tag_ops;
10911094 }
10921095
10931096 dp->master = master;
net/ipv4/inet_connection_sock.c+5−2
@@ -705,12 +705,15 @@ static bool reqsk_queue_unlink(struct request_sock *req) · 704 unmodified lines
705705 return found;
706706 }
707707
708−void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req)
708+bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req)
709709 {
710− if (reqsk_queue_unlink(req)) {
710+ bool unlinked = reqsk_queue_unlink(req);
711+
712+ if (unlinked) {
711713 reqsk_queue_removed(&inet_csk(sk)->icsk_accept_queue, req);
712714 reqsk_put(req);
713715 }
716+ return unlinked;
714717 }
715718 EXPORT_SYMBOL(inet_csk_reqsk_queue_drop);
716719
net/ipv4/ipconfig.c+8−6
@@ -309,7 +309,7 @@ have_carrier: · 308 unmodified lines
309309 */
310310 static void __init ic_close_devs(void)
311311 {
312− struct net_device *selected_dev = ic_dev->dev;
312+ struct net_device *selected_dev = ic_dev ? ic_dev->dev : NULL;
313313 struct ic_device *d, *next;
314314 struct net_device *dev;
315315
@@ -317,16 +317,18 @@ static void __init ic_close_devs(void) · 1 unmodified line
317317 next = ic_first_dev;
318318 while ((d = next)) {
319319 bool bring_down = (d != ic_dev);
320− struct net_device *lower_dev;
320+ struct net_device *lower;
321321 struct list_head *iter;
322322
323323 next = d->next;
324324 dev = d->dev;
325325
326− netdev_for_each_lower_dev(selected_dev, lower_dev, iter) {
327− if (dev == lower_dev) {
328− bring_down = false;
329− break;
326+ if (selected_dev) {
327+ netdev_for_each_lower_dev(selected_dev, lower, iter) {
328+ if (dev == lower) {
329+ bring_down = false;
330+ break;
331+ }
330332 }
331333 }
332334 if (bring_down) {
net/ipv4/netfilter/arp_tables.c+8−8
@@ -203,7 +203,7 @@ unsigned int arpt_do_table(struct sk_buff *skb, · 202 unmodified lines
203203
204204 local_bh_disable();
205205 addend = xt_write_recseq_begin();
206− private = rcu_access_pointer(table->private);
206+ private = READ_ONCE(table->private); /* Address dependency. */
207207 cpu = smp_processor_id();
208208 table_base = private->entries;
209209 jumpstack = (struct arpt_entry **)private->jumpstack[cpu];
@@ -649,7 +649,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) · 439 unmodified lines
649649 {
650650 unsigned int countersize;
651651 struct xt_counters *counters;
652− const struct xt_table_info *private = xt_table_get_private_protected(table);
652+ const struct xt_table_info *private = table->private;
653653
654654 /* We need atomic snapshot of counters: rest doesn't change
655655 * (other than comefrom, which userspace doesn't care
@@ -673,7 +673,7 @@ static int copy_entries_to_user(unsigned int total_size, · 17 unmodified lines
673673 unsigned int off, num;
674674 const struct arpt_entry *e;
675675 struct xt_counters *counters;
676− struct xt_table_info *private = xt_table_get_private_protected(table);
676+ struct xt_table_info *private = table->private;
677677 int ret = 0;
678678 void *loc_cpu_entry;
679679
@@ -807,7 +807,7 @@ static int get_info(struct net *net, void __user *user, const int *len) · 127 unmodified lines
807807 t = xt_request_find_table_lock(net, NFPROTO_ARP, name);
808808 if (!IS_ERR(t)) {
809809 struct arpt_getinfo info;
810− const struct xt_table_info *private = xt_table_get_private_protected(t);
810+ const struct xt_table_info *private = t->private;
811811 #ifdef CONFIG_COMPAT
812812 struct xt_table_info tmp;
813813
@@ -860,7 +860,7 @@ static int get_entries(struct net *net, struct arpt_get_entries __user *uptr, · 46 unmodified lines
860860
861861 t = xt_find_table_lock(net, NFPROTO_ARP, get.name);
862862 if (!IS_ERR(t)) {
863− const struct xt_table_info *private = xt_table_get_private_protected(t);
863+ const struct xt_table_info *private = t->private;
864864
865865 if (get.size == private->size)
866866 ret = copy_entries_to_user(private->size,
@@ -1017,7 +1017,7 @@ static int do_add_counters(struct net *net, sockptr_t arg, unsigned int len) · 150 unmodified lines
10171017 }
10181018
10191019 local_bh_disable();
1020− private = xt_table_get_private_protected(t);
1020+ private = t->private;
10211021 if (private->number != tmp.num_counters) {
10221022 ret = -EINVAL;
10231023 goto unlock_up_free;
@@ -1330,7 +1330,7 @@ static int compat_copy_entries_to_user(unsigned int total_size, · 306 unmodified lines
13301330 void __user *userptr)
13311331 {
13321332 struct xt_counters *counters;
1333− const struct xt_table_info *private = xt_table_get_private_protected(table);
1333+ const struct xt_table_info *private = table->private;
13341334 void __user *pos;
13351335 unsigned int size;
13361336 int ret = 0;
@@ -1379,7 +1379,7 @@ static int compat_get_entries(struct net *net, · 42 unmodified lines
13791379 xt_compat_lock(NFPROTO_ARP);
13801380 t = xt_find_table_lock(net, NFPROTO_ARP, get.name);
13811381 if (!IS_ERR(t)) {
1382− const struct xt_table_info *private = xt_table_get_private_protected(t);
1382+ const struct xt_table_info *private = t->private;
13831383 struct xt_table_info info;
13841384
13851385 ret = compat_table_info(private, &info);
net/ipv4/netfilter/ip_tables.c+8−8
@@ -258,7 +258,7 @@ ipt_do_table(struct sk_buff *skb, · 257 unmodified lines
258258 WARN_ON(!(table->valid_hooks & (1 << hook)));
259259 local_bh_disable();
260260 addend = xt_write_recseq_begin();
261− private = rcu_access_pointer(table->private);
261+ private = READ_ONCE(table->private); /* Address dependency. */
262262 cpu = smp_processor_id();
263263 table_base = private->entries;
264264 jumpstack = (struct ipt_entry **)private->jumpstack[cpu];
@@ -791,7 +791,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) · 526 unmodified lines
791791 {
792792 unsigned int countersize;
793793 struct xt_counters *counters;
794− const struct xt_table_info *private = xt_table_get_private_protected(table);
794+ const struct xt_table_info *private = table->private;
795795
796796 /* We need atomic snapshot of counters: rest doesn't change
797797 (other than comefrom, which userspace doesn't care
@@ -815,7 +815,7 @@ copy_entries_to_user(unsigned int total_size, · 17 unmodified lines
815815 unsigned int off, num;
816816 const struct ipt_entry *e;
817817 struct xt_counters *counters;
818− const struct xt_table_info *private = xt_table_get_private_protected(table);
818+ const struct xt_table_info *private = table->private;
819819 int ret = 0;
820820 const void *loc_cpu_entry;
821821
@@ -964,7 +964,7 @@ static int get_info(struct net *net, void __user *user, const int *len) · 142 unmodified lines
964964 t = xt_request_find_table_lock(net, AF_INET, name);
965965 if (!IS_ERR(t)) {
966966 struct ipt_getinfo info;
967− const struct xt_table_info *private = xt_table_get_private_protected(t);
967+ const struct xt_table_info *private = t->private;
968968 #ifdef CONFIG_COMPAT
969969 struct xt_table_info tmp;
970970
@@ -1018,7 +1018,7 @@ get_entries(struct net *net, struct ipt_get_entries __user *uptr, · 47 unmodified lines
10181018
10191019 t = xt_find_table_lock(net, AF_INET, get.name);
10201020 if (!IS_ERR(t)) {
1021− const struct xt_table_info *private = xt_table_get_private_protected(t);
1021+ const struct xt_table_info *private = t->private;
10221022 if (get.size == private->size)
10231023 ret = copy_entries_to_user(private->size,
10241024 t, uptr->entrytable);
@@ -1173,7 +1173,7 @@ do_add_counters(struct net *net, sockptr_t arg, unsigned int len) · 148 unmodified lines
11731173 }
11741174
11751175 local_bh_disable();
1176− private = xt_table_get_private_protected(t);
1176+ private = t->private;
11771177 if (private->number != tmp.num_counters) {
11781178 ret = -EINVAL;
11791179 goto unlock_up_free;
@@ -1543,7 +1543,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table, · 363 unmodified lines
15431543 void __user *userptr)
15441544 {
15451545 struct xt_counters *counters;
1546− const struct xt_table_info *private = xt_table_get_private_protected(table);
1546+ const struct xt_table_info *private = table->private;
15471547 void __user *pos;
15481548 unsigned int size;
15491549 int ret = 0;
@@ -1589,7 +1589,7 @@ compat_get_entries(struct net *net, struct compat_ipt_get_entries __user *uptr, · 39 unmodified lines
15891589 xt_compat_lock(AF_INET);
15901590 t = xt_find_table_lock(net, AF_INET, get.name);
15911591 if (!IS_ERR(t)) {
1592− const struct xt_table_info *private = xt_table_get_private_protected(t);
1592+ const struct xt_table_info *private = t->private;
15931593 struct xt_table_info info;
15941594 ret = compat_table_info(private, &info);
15951595 if (!ret && get.size == info.size)
net/ipv4/route.c+8−37
@@ -2687,44 +2687,15 @@ out: · 2686 unmodified lines
26872687 return rth;
26882688 }
26892689
2690−static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 cookie)
2691−{
2692− return NULL;
2693−}
2694−
2695−static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst)
2696−{
2697− unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
2698−
2699− return mtu ? : dst->dev->mtu;
2700−}
2701−
2702−static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
2703− struct sk_buff *skb, u32 mtu,
2704− bool confirm_neigh)
2705−{
2706−}
2707−
2708−static void ipv4_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
2709− struct sk_buff *skb)
2710−{
2711−}
2712−
2713−static u32 *ipv4_rt_blackhole_cow_metrics(struct dst_entry *dst,
2714− unsigned long old)
2715−{
2716− return NULL;
2717−}
2718−
27192690 static struct dst_ops ipv4_dst_blackhole_ops = {
2720− .family = AF_INET,
2721− .check = ipv4_blackhole_dst_check,
2722− .mtu = ipv4_blackhole_mtu,
2723− .default_advmss = ipv4_default_advmss,
2724− .update_pmtu = ipv4_rt_blackhole_update_pmtu,
2725− .redirect = ipv4_rt_blackhole_redirect,
2726− .cow_metrics = ipv4_rt_blackhole_cow_metrics,
2727− .neigh_lookup = ipv4_neigh_lookup,
2691+ .family = AF_INET,
2692+ .default_advmss = ipv4_default_advmss,
2693+ .neigh_lookup = ipv4_neigh_lookup,
2694+ .check = dst_blackhole_check,
2695+ .cow_metrics = dst_blackhole_cow_metrics,
2696+ .update_pmtu = dst_blackhole_update_pmtu,
2697+ .redirect = dst_blackhole_redirect,
2698+ .mtu = dst_blackhole_mtu,
27282699 };
27292700
27302701 struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_orig)
net/ipv4/tcp_minisocks.c+5−2
@@ -804,8 +804,11 @@ embryonic_reset: · 803 unmodified lines
804804 tcp_reset(sk, skb);
805805 }
806806 if (!fastopen) {
807− inet_csk_reqsk_queue_drop(sk, req);
808− __NET_INC_STATS(sock_net(sk), LINUX_MIB_EMBRYONICRSTS);
807+ bool unlinked = inet_csk_reqsk_queue_drop(sk, req);
808+
809+ if (unlinked)
810+ __NET_INC_STATS(sock_net(sk), LINUX_MIB_EMBRYONICRSTS);
811+ *req_stolen = !unlinked;
809812 }
810813 return NULL;
811814 }
net/ipv6/ip6_fib.c+1−1
@@ -2486,7 +2486,7 @@ static int ipv6_route_native_seq_show(struct seq_file *seq, void *v) · 2485 unmodified lines
24862486 const struct net_device *dev;
24872487
24882488 if (rt->nh)
2489− fib6_nh = nexthop_fib6_nh(rt->nh);
2489+ fib6_nh = nexthop_fib6_nh_bh(rt->nh);
24902490
24912491 seq_printf(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
24922492
net/ipv6/ip6_input.c+0−10
@@ -245,16 +245,6 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev, · 244 unmodified lines
245245 if (ipv6_addr_is_multicast(&hdr->saddr))
246246 goto err;
247247
248− /* While RFC4291 is not explicit about v4mapped addresses
249− * in IPv6 headers, it seems clear linux dual-stack
250− * model can not deal properly with these.
251− * Security models could be fooled by ::ffff:127.0.0.1 for example.
252− *
253− * https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02
254− */
255− if (ipv6_addr_v4mapped(&hdr->saddr))
256− goto err;
257−
258248 skb->transport_header = skb->network_header + sizeof(*hdr);
259249 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
260250
net/ipv6/netfilter/ip6_tables.c+8−8
@@ -280,7 +280,7 @@ ip6t_do_table(struct sk_buff *skb, · 279 unmodified lines
280280
281281 local_bh_disable();
282282 addend = xt_write_recseq_begin();
283− private = rcu_access_pointer(table->private);
283+ private = READ_ONCE(table->private); /* Address dependency. */
284284 cpu = smp_processor_id();
285285 table_base = private->entries;
286286 jumpstack = (struct ip6t_entry **)private->jumpstack[cpu];
@@ -807,7 +807,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) · 520 unmodified lines
807807 {
808808 unsigned int countersize;
809809 struct xt_counters *counters;
810− const struct xt_table_info *private = xt_table_get_private_protected(table);
810+ const struct xt_table_info *private = table->private;
811811
812812 /* We need atomic snapshot of counters: rest doesn't change
813813 (other than comefrom, which userspace doesn't care
@@ -831,7 +831,7 @@ copy_entries_to_user(unsigned int total_size, · 17 unmodified lines
831831 unsigned int off, num;
832832 const struct ip6t_entry *e;
833833 struct xt_counters *counters;
834− const struct xt_table_info *private = xt_table_get_private_protected(table);
834+ const struct xt_table_info *private = table->private;
835835 int ret = 0;
836836 const void *loc_cpu_entry;
837837
@@ -980,7 +980,7 @@ static int get_info(struct net *net, void __user *user, const int *len) · 142 unmodified lines
980980 t = xt_request_find_table_lock(net, AF_INET6, name);
981981 if (!IS_ERR(t)) {
982982 struct ip6t_getinfo info;
983− const struct xt_table_info *private = xt_table_get_private_protected(t);
983+ const struct xt_table_info *private = t->private;
984984 #ifdef CONFIG_COMPAT
985985 struct xt_table_info tmp;
986986
@@ -1035,7 +1035,7 @@ get_entries(struct net *net, struct ip6t_get_entries __user *uptr, · 48 unmodified lines
10351035
10361036 t = xt_find_table_lock(net, AF_INET6, get.name);
10371037 if (!IS_ERR(t)) {
1038− struct xt_table_info *private = xt_table_get_private_protected(t);
1038+ struct xt_table_info *private = t->private;
10391039 if (get.size == private->size)
10401040 ret = copy_entries_to_user(private->size,
10411041 t, uptr->entrytable);
@@ -1189,7 +1189,7 @@ do_add_counters(struct net *net, sockptr_t arg, unsigned int len) · 147 unmodified lines
11891189 }
11901190
11911191 local_bh_disable();
1192− private = xt_table_get_private_protected(t);
1192+ private = t->private;
11931193 if (private->number != tmp.num_counters) {
11941194 ret = -EINVAL;
11951195 goto unlock_up_free;
@@ -1552,7 +1552,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table, · 356 unmodified lines
15521552 void __user *userptr)
15531553 {
15541554 struct xt_counters *counters;
1555− const struct xt_table_info *private = xt_table_get_private_protected(table);
1555+ const struct xt_table_info *private = table->private;
15561556 void __user *pos;
15571557 unsigned int size;
15581558 int ret = 0;
@@ -1598,7 +1598,7 @@ compat_get_entries(struct net *net, struct compat_ip6t_get_entries __user *uptr, · 39 unmodified lines
15981598 xt_compat_lock(AF_INET6);
15991599 t = xt_find_table_lock(net, AF_INET6, get.name);
16001600 if (!IS_ERR(t)) {
1601− const struct xt_table_info *private = xt_table_get_private_protected(t);
1601+ const struct xt_table_info *private = t->private;
16021602 struct xt_table_info info;
16031603 ret = compat_table_info(private, &info);
16041604 if (!ret && get.size == info.size)
net/ipv6/route.c+9−27
@@ -260,34 +260,16 @@ static struct dst_ops ip6_dst_ops_template = { · 259 unmodified lines
260260 .confirm_neigh = ip6_confirm_neigh,
261261 };
262262
263−static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst)
264−{
265− unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
266−
267− return mtu ? : dst->dev->mtu;
268−}
269−
270−static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
271− struct sk_buff *skb, u32 mtu,
272− bool confirm_neigh)
273−{
274−}
275−
276−static void ip6_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
277− struct sk_buff *skb)
278−{
279−}
280−
281263 static struct dst_ops ip6_dst_blackhole_ops = {
282− .family = AF_INET6,
283− .destroy = ip6_dst_destroy,
284− .check = ip6_dst_check,
285− .mtu = ip6_blackhole_mtu,
286− .default_advmss = ip6_default_advmss,
287− .update_pmtu = ip6_rt_blackhole_update_pmtu,
288− .redirect = ip6_rt_blackhole_redirect,
289− .cow_metrics = dst_cow_metrics_generic,
290− .neigh_lookup = ip6_dst_neigh_lookup,
264+ .family = AF_INET6,
265+ .default_advmss = ip6_default_advmss,
266+ .neigh_lookup = ip6_dst_neigh_lookup,
267+ .check = ip6_dst_check,
268+ .destroy = ip6_dst_destroy,
269+ .cow_metrics = dst_cow_metrics_generic,
270+ .update_pmtu = dst_blackhole_update_pmtu,
271+ .redirect = dst_blackhole_redirect,
272+ .mtu = dst_blackhole_mtu,
291273 };
292274
293275 static const u32 ip6_template_metrics[RTAX_MAX] = {
net/ipv6/tcp_ipv6.c+5−0
@@ -1175,6 +1175,11 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) · 1174 unmodified lines
11751175 if (!ipv6_unicast_destination(skb))
11761176 goto drop;
11771177
1178+ if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) {
1179+ __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
1180+ return 0;
1181+ }
1182+
11781183 return tcp_conn_request(&tcp6_request_sock_ops,
11791184 &tcp_request_sock_ipv6_ops, sk, skb);
11801185
net/mac80211/aead_api.c+3−2
@@ -23,6 +23,7 @@ int aead_encrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len, · 22 unmodified lines
2323 struct aead_request *aead_req;
2424 int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm);
2525 u8 *__aad;
26+ int ret;
2627
2728 aead_req = kzalloc(reqsize + aad_len, GFP_ATOMIC);
2829 if (!aead_req)
@@ -40,10 +41,10 @@ int aead_encrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len, · 11 unmodified lines
4041 aead_request_set_crypt(aead_req, sg, sg, data_len, b_0);
4142 aead_request_set_ad(aead_req, sg[0].length);
4243
43− crypto_aead_encrypt(aead_req);
44+ ret = crypto_aead_encrypt(aead_req);
4445 kfree_sensitive(aead_req);
4546
46− return 0;
47+ return ret;
4748 }
4849
4950 int aead_decrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
net/mac80211/aes_gmac.c+3−2
@@ -22,6 +22,7 @@ int ieee80211_aes_gmac(struct crypto_aead *tfm, const u8 *aad, u8 *nonce, · 21 unmodified lines
2222 struct aead_request *aead_req;
2323 int reqsize = sizeof(*aead_req) + crypto_aead_reqsize(tfm);
2424 const __le16 *fc;
25+ int ret;
2526
2627 if (data_len < GMAC_MIC_LEN)
2728 return -EINVAL;
@@ -59,10 +60,10 @@ int ieee80211_aes_gmac(struct crypto_aead *tfm, const u8 *aad, u8 *nonce, · 31 unmodified lines
5960 aead_request_set_crypt(aead_req, sg, sg, 0, iv);
6061 aead_request_set_ad(aead_req, GMAC_AAD_LEN + data_len);
6162
62− crypto_aead_encrypt(aead_req);
63+ ret = crypto_aead_encrypt(aead_req);
6364 kfree_sensitive(aead_req);
6465
65− return 0;
66+ return ret;
6667 }
6768
6869 struct crypto_aead *ieee80211_aes_gmac_key_setup(const u8 key[],
net/mac80211/cfg.c+2−2
@@ -2950,14 +2950,14 @@ static int ieee80211_set_bitrate_mask(struct wiphy *wiphy, · 2949 unmodified lines
29502950 continue;
29512951

14 more lines aren’t shown here.

net/mac80211/ibss.c+2−0

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

net/mac80211/main.c+12−1

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

net/mac80211/mlme.c+1−1

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

net/mac80211/rc80211_minstrel_ht.c+0−2

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

net/mac80211/util.c+1−1

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

net/mptcp/options.c+14−10

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

net/mptcp/protocol.c+2−2

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

net/mptcp/subflow.c+5−0

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

net/netfilter/nf_conntrack_netlink.c+1−0

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

net/netfilter/nf_conntrack_proto_gre.c+0−3

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

net/netfilter/nf_flow_table_core.c+1−1

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

net/netfilter/nf_tables_api.c+21−1

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

net/netfilter/x_tables.c+34−15

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

net/openvswitch/conntrack.c+5−3

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

net/openvswitch/conntrack.h+4−2

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

net/openvswitch/flow.c+3−1

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

net/qrtr/qrtr.c+5−0

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

net/sched/act_ct.c+4−2

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

net/sched/cls_api.c+1−0

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

net/sched/cls_flower.c+1−1

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

net/sched/sch_choke.c+4−3

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

net/sched/sch_gred.c+1−1

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

net/sched/sch_htb.c+13−6

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

net/sched/sch_red.c+5−2

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

net/sched/sch_sfq.c+1−1

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

net/sctp/output.c+0−7

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

net/sctp/outqueue.c+7−0

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

net/sunrpc/auth_gss/svcauth_gss.c+7−4

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

net/sunrpc/svc.c+4−2

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

net/sunrpc/svc_xprt.c+2−2

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

net/sunrpc/xprtrdma/svc_rdma_backchannel.c+3−3

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

net/sunrpc/xprtrdma/svc_rdma_recvfrom.c+39−43

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

net/tipc/node.c+8−3

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

net/vmw_vsock/af_vsock.c+1−0

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

net/wireless/nl80211.c+8−4

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

scripts/module.lds.S+2−0

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

security/integrity/iint.c+8−0

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

security/selinux/include/security.h+11−4

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

security/selinux/selinuxfs.c+9−13

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

security/selinux/ss/services.c+39−24

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

security/tomoyo/network.c+1−1

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

sound/drivers/aloop.c+0−1

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

sound/drivers/dummy.c+0−1

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

sound/drivers/mtpav.c+0−1

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

sound/drivers/mts64.c+0−1

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

sound/drivers/pcsp/pcsp.c+0−1

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

sound/drivers/portman2x4.c+0−1

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

sound/drivers/serial-u16550.c+0−1

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

sound/drivers/virmidi.c+0−1

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

sound/firewire/dice/dice-stream.c+2−3

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

sound/isa/ad1816a/ad1816a.c+0−7

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

sound/isa/ad1848/ad1848.c+0−3

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

sound/isa/als100.c+0−11

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

sound/isa/azt2320.c+0−5

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

sound/isa/cmi8330.c+0−1

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

sound/isa/cs423x/cs4231.c+0−1

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

sound/isa/cs423x/cs4236.c+0−34

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

sound/isa/es1688/es1688.c+0−5

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

sound/isa/es18xx.c+1−9

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

sound/isa/gus/gusclassic.c+0−1

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

sound/isa/gus/gusextreme.c+0−1

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

sound/isa/gus/gusmax.c+0−1

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

sound/isa/gus/interwave.c+0−6

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

sound/isa/opl3sa2.c+0−5

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

sound/isa/opti9xx/miro.c+0−3

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

sound/isa/opti9xx/opti92x-ad1848.c+0−6

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

sound/isa/sb/jazz16.c+0−3

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

sound/isa/sb/sb16.c+0−8

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

sound/isa/sb/sb8.c+0−1

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

sound/isa/sc6000.c+0−3

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

sound/isa/wavefront/wavefront.c+0−1

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

sound/mips/sgio2audio.c+0−1

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

sound/pci/ad1889.c+0−1

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

sound/pci/ali5451/ali5451.c+0−1

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

sound/pci/als300.c+0−1

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

sound/pci/als4000.c+0−1

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

sound/pci/atiixp.c+0−1

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

sound/pci/atiixp_modem.c+0−1

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

sound/pci/au88x0/au88x0.c+0−2

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

sound/pci/azt3328.c+0−1

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

sound/pci/bt87x.c+0−2

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

sound/pci/ca0106/ca0106_main.c+0−1

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

sound/pci/cmipci.c+0−4

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

sound/pci/cs4281.c+0−1

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

sound/pci/cs46xx/cs46xx.c+0−7

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

sound/pci/cs5535audio/cs5535audio.c+0−1

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

sound/pci/ctxfi/xfi.c+0−1

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

sound/pci/echoaudio/echoaudio.c+0−1

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

sound/pci/emu10k1/emu10k1.c+0−2

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

sound/pci/emu10k1/emu10k1x.c+0−1

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

sound/pci/ens1370.c+0−8

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

sound/pci/es1938.c+0−4

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

sound/pci/es1968.c+0−4

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

sound/pci/fm801.c+0−2

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

sound/pci/hda/hda_generic.c+1−1

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

sound/pci/hda/hda_intel.c+8−34

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

sound/pci/hda/patch_realtek.c+19−1

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

sound/pci/ice1712/ice1712.c+0−6

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

sound/pci/ice1712/ice1724.c+0−19

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

sound/pci/intel8x0.c+0−23

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

sound/pci/intel8x0m.c+0−15

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

sound/pci/korg1212/korg1212.c+0−1

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

sound/pci/lola/lola.c+0−1

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

sound/pci/lx6464es/lx6464es.c+0−2

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

sound/pci/maestro3.c+0−5

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

sound/pci/mixart/mixart.c+0−1

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

sound/pci/nm256/nm256.c+0−2

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

sound/pci/oxygen/oxygen.c+0−3

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

sound/pci/oxygen/se6x.c+0−1

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

sound/pci/oxygen/virtuoso.c+0−1

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

sound/pci/pcxhr/pcxhr.c+0−1

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

sound/pci/riptide/riptide.c+0−1

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

sound/pci/rme32.c+0−1

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

sound/pci/rme96.c+0−5

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

sound/pci/rme9652/hdsp.c+0−3

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

sound/pci/rme9652/hdspm.c+0−1

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

sound/pci/rme9652/rme9652.c+0−2

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

sound/pci/sis7019.c+0−1

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

sound/pci/sonicvibes.c+0−1

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

sound/pci/trident/trident.c+0−12

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

sound/pci/via82xx.c+0−1

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

sound/pci/via82xx_modem.c+0−1

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

sound/pci/vx222/vx222.c+0−1

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

sound/pci/ymfpci/ymfpci.c+0−6

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

sound/pcmcia/pdaudiocf/pdaudiocf.c+0−1

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

sound/pcmcia/vx/vxpocket.c+0−4

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

sound/ppc/powermac.c+0−1

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

sound/sh/aica.c+0−1

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

sound/sh/sh_dac_audio.c+0−1

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

sound/soc/codecs/Kconfig+0−5

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

sound/soc/codecs/ak4458.c+1−0

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

sound/soc/codecs/ak5558.c+1−0

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

sound/soc/codecs/cs42l42.c+34−78

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

sound/soc/codecs/cs42l42.h+7−6

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

sound/soc/codecs/es8316.c+2−7

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

sound/soc/codecs/lpass-rx-macro.c+1−1

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

sound/soc/codecs/lpass-va-macro.c+13−15

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

sound/soc/codecs/lpass-wsa-macro.c+11−9

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

sound/soc/codecs/rt1015.c+2−0

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

sound/soc/codecs/rt5640.c+2−2

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

sound/soc/codecs/rt5651.c+2−2

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

sound/soc/codecs/rt5659.c+5−0

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

sound/soc/codecs/rt5670.c+96−14

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

sound/soc/codecs/rt5670.h+5−4

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

sound/soc/codecs/rt711.c+8−0

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

sound/soc/codecs/sgtl5000.c+1−1

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

sound/soc/codecs/sirf-audio-codec.h+0−124

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

sound/soc/codecs/wcd934x.c+6−0

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

sound/soc/fsl/fsl_ssi.c+4−2

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

sound/soc/generic/simple-card-utils.c+7−6

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

sound/soc/intel/boards/bytcr_rt5640.c+1−1

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

sound/soc/mediatek/mt8192/mt8192-dai-tdm.c+3−1

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

sound/soc/mediatek/mt8192/mt8192-reg.h+5−3

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

sound/soc/qcom/lpass-cpu.c+1−1

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

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

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

sound/soc/soc-core.c+4−0

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

sound/soc/sof/intel/hda-dsp.c+1−1

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

sound/soc/sof/intel/hda.c+1−0

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

sound/sparc/amd7930.c+0−1

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

sound/sparc/cs4231.c+0−1

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

sound/sparc/dbri.c+0−1

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

sound/usb/6fire/chip.c+0−1

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

sound/usb/caiaq/device.c+0−14

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

sound/usb/card.c+0−2

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

sound/usb/hiface/chip.c+0−17

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

sound/usb/misc/ua101.c+0−1

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

sound/usb/mixer_quirks.c+2−2

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

sound/usb/quirks.c+1−0

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

sound/usb/usx2y/usbusx2y.c+0−1

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

sound/x86/intel_hdmi_audio.c+0−1

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

sound/xen/xen_snd_front.c+0−1

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

tools/include/uapi/linux/kvm.h+13−0

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

tools/kvm/kvm_stat/kvm_stat.service+1−0

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

tools/lib/bpf/Makefile+1−1

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

tools/lib/bpf/btf_dump.c+1−1

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

tools/lib/bpf/libbpf.c+2−1

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

tools/lib/bpf/netlink.c+1−1

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

tools/perf/builtin-daemon.c+33−24

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

tools/perf/tests/bpf.c+1−8

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

tools/perf/tests/shell/daemon.sh+1−1

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

tools/perf/util/auxtrace.c+0−4

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

tools/perf/util/bpf-event.c+10−3

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

tools/perf/util/parse-events.c+3−0

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

tools/perf/util/pmu.c+33−0

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

tools/perf/util/pmu.h+3−0

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

tools/perf/util/synthetic-events.c+6−5

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

tools/perf/util/vdso.c+2−0

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

tools/testing/kunit/configs/broken_on_uml.config+2−0

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

tools/testing/kunit/kunit_config.py+1−1

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

tools/testing/radix-tree/idr-test.c+18−3

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

tools/testing/radix-tree/linux/compiler_types.h+0−0

Empty file deleted.

tools/testing/radix-tree/multiorder.c+2−0

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

tools/testing/radix-tree/xarray.c+2−0

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

tools/testing/selftests/arm64/fp/sve-test.S+17−5

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

tools/testing/selftests/bpf/prog_tests/check_mtu.c+4−0

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

tools/testing/selftests/bpf/prog_tests/fexit_sleep.c+82−0

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

tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c+8−0

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

tools/testing/selftests/bpf/progs/fexit_sleep.c+31−0

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

tools/testing/selftests/bpf/progs/test_check_mtu.c+92−0

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

tools/testing/selftests/bpf/progs/test_tunnel_kern.c+2−4

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

tools/testing/selftests/bpf/verifier/bounds_deduction.c+19−8

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

tools/testing/selftests/bpf/verifier/map_ptr.c+4−0

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

tools/testing/selftests/bpf/verifier/unpriv.c+14−1

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

tools/testing/selftests/bpf/verifier/value_ptr_arith.c+22−1

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

tools/testing/selftests/kvm/.gitignore+3−0

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

tools/testing/selftests/kvm/Makefile+3−0

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

tools/testing/selftests/kvm/hardware_disable_test.c+5−5

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

tools/testing/selftests/kvm/include/kvm_util.h+2−0

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

tools/testing/selftests/kvm/lib/kvm_util.c+6−1

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

tools/testing/selftests/kvm/lib/kvm_util_internal.h+0−2

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

tools/testing/selftests/kvm/x86_64/get_msr_index_features.c+134−0

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

tools/testing/selftests/kvm/x86_64/hyperv_clock.c+269−0

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

tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c+166−0

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

tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh+1−1

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

tools/testing/selftests/net/mptcp/mptcp_join.sh+20−10

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

tools/testing/selftests/net/reuseaddr_ports_exhausted.c+16−16

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

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

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