History

Merge 4.14-rc4 into tty-next

We want the tty/serial fixes in here as well.

Greg Kroah-Hartman committed 9 years ago

Commit 9424e8b2 parents bccf1da 8a5776a967 files · +12885 −6418Browse files

Unified · Split

967 files
  1. .mailmap +2 −0
  2. Documentation/ABI/testing/sysfs-power +1 −1
  3. Documentation/core-api/workqueue.rst +6 −6
  4. Documentation/cpu-freq/index.txt +0 −2
  5. Documentation/device-mapper/dm-raid.txt +1 −0
  6. Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt +1 −1
  7. Documentation/devicetree/bindings/leds/ams,as3645a.txt +18 −10
  8. Documentation/devicetree/bindings/mmc/marvell,xenon-sdhci.txt +7 −5
  9. Documentation/devicetree/bindings/net/marvell-pp2.txt +6 −4
  10. Documentation/devicetree/bindings/net/rockchip-dwmac.txt +1 −0
  11. Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt +28 −0
  12. Documentation/devicetree/bindings/security/tpm/tpm-i2c.txt +6 −0
  13. Documentation/devicetree/bindings/serial/renesas,sci-serial.txt +2 −0
  14. Documentation/devicetree/bindings/vendor-prefixes.txt +1 −1
  15. Documentation/driver-api/pm/devices.rst +1 −1
  16. Documentation/driver-model/driver.txt +4 −3
  17. Documentation/filesystems/cifs/AUTHORS +5 −0
  18. Documentation/filesystems/cifs/README +38 −43
  19. Documentation/filesystems/cifs/TODO +34 −38
  20. Documentation/filesystems/cifs/cifs.txt +14 −10
  21. Documentation/filesystems/overlayfs.txt +4 −1
  22. Documentation/filesystems/sysfs.txt +2 −1
  23. Documentation/i2c/busses/i2c-i801 +1 −0
  24. Documentation/networking/filter.txt +1 −1
  25. Documentation/networking/ip-sysctl.txt +14 −4
  26. Documentation/networking/switchdev.txt +34 −34
  27. Documentation/sysctl/kernel.txt +1 −0
  28. Documentation/userspace-api/seccomp_filter.rst +50 −2
  29. MAINTAINERS +35 −12
  30. Makefile +3 −3
  31. arch/alpha/include/asm/mmu_context.h +1 −0
  32. arch/arc/Kconfig +1 −1
  33. arch/arc/Makefile +0 −2
  34. arch/arc/boot/dts/axs10x_mb.dtsi +8 −1
  35. arch/arc/boot/dts/hsdk.dts +29 −3
  36. arch/arc/configs/axs101_defconfig +1 −1
  37. arch/arc/configs/axs103_defconfig +1 −1
  38. arch/arc/configs/axs103_smp_defconfig +1 −1
  39. arch/arc/configs/haps_hs_smp_defconfig +1 −1
  40. arch/arc/configs/hsdk_defconfig +2 −1
  41. arch/arc/configs/vdk_hs38_defconfig +1 −1
  42. arch/arc/configs/vdk_hs38_smp_defconfig +1 −1
  43. arch/arc/include/asm/arcregs.h +6 −5
  44. arch/arc/include/asm/processor.h +0 −3
  45. arch/arc/kernel/setup.c +25 −7
  46. arch/arc/plat-axs10x/axs10x.c +7 −0
  47. arch/arc/plat-hsdk/Kconfig +2 −1
  48. arch/arc/plat-hsdk/platform.c +42 −0
  49. arch/arm/boot/dts/am33xx.dtsi +2 −0
  50. arch/arm/boot/dts/am43x-epos-evm.dts +1 −5
  51. arch/arm/boot/dts/at91-sama5d27_som1_ek.dts +11 −8
  52. arch/arm/boot/dts/da850-evm.dts +7 −0
  53. arch/arm/boot/dts/dra7xx-clocks.dtsi +2 −0
  54. arch/arm/boot/dts/omap3-n900.dts +0 −11
  55. arch/arm/boot/dts/omap3-n950-n9.dtsi +7 −3
  56. arch/arm/boot/dts/stm32429i-eval.dts +2 −3
  57. arch/arm/boot/dts/stm32f4-pinctrl.dtsi +343 −0
  58. arch/arm/boot/dts/stm32f429-disco.dts +1 −0
  59. arch/arm/boot/dts/stm32f429-pinctrl.dtsi +95 −0
  60. arch/arm/boot/dts/stm32f429.dtsi +0 −297
  61. arch/arm/boot/dts/stm32f469-disco.dts +1 −0
  62. arch/arm/boot/dts/stm32f469-pinctrl.dtsi +96 −0
  63. arch/arm/configs/gemini_defconfig +2 −1
  64. arch/arm/configs/pxa_defconfig +1 −1
  65. arch/arm/configs/viper_defconfig +1 −1
  66. arch/arm/configs/zeus_defconfig +1 −1
  67. arch/arm/include/asm/thread_info.h +6 −9
  68. arch/arm/include/asm/uaccess.h +0 −2
  69. arch/arm/kernel/entry-common.S +13 −7
  70. arch/arm/kernel/signal.c +6 −4
  71. arch/arm/mach-at91/pm.c +2 −2
  72. arch/arm/mach-omap2/hsmmc.c +2 −2
  73. arch/arm/mach-omap2/omap_hwmod_7xx_data.c +1 −0
  74. arch/arm64/Makefile +5 −0
  75. arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi +6 −4
  76. arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts +14 −5
  77. arch/arm64/boot/dts/amlogic/meson-gxbb-nexbox-a95x.dts +7 −5
  78. arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts +5 −4
  79. arch/arm64/boot/dts/amlogic/meson-gxbb-p20x.dtsi +9 −4
  80. arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi +6 −4
  81. arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi +36 −3
  82. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-hwacom-amazetv.dts +4 −3
  83. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts +11 −2
  84. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-nexbox-a95x.dts +6 −4
  85. arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi +6 −4
  86. arch/arm64/boot/dts/amlogic/meson-gxl.dtsi +36 −3
  87. arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts +4 −3
  88. arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts +0 −1
  89. arch/arm64/boot/dts/marvell/armada-ap806.dtsi +2 −2
  90. arch/arm64/boot/dts/rockchip/rk3368.dtsi +2 −70
  91. arch/arm64/boot/dts/rockchip/rk3399.dtsi +3 −3
  92. arch/arm64/include/asm/linkage.h +2 −2
  93. arch/arm64/include/asm/memory.h +6 −3
  94. arch/arm64/include/asm/pgtable.h +1 −1
  95. arch/arm64/kernel/armv8_deprecated.c +1 −1
  96. arch/arm64/kernel/cpufeature.c +1 −1
  97. arch/arm64/kernel/fpsimd.c +5 −1
  98. arch/arm64/kernel/head.S +1 −0
  99. arch/arm64/kernel/signal.c +3 −3
  100. arch/arm64/mm/fault.c +2 −2
  101. arch/c6x/include/asm/processor.h +0 −3
  102. arch/frv/include/asm/processor.h +0 −4
  103. arch/m32r/Kconfig +4 −0
  104. arch/m32r/include/asm/processor.h +0 −8
  105. arch/m32r/kernel/traps.c +9 −0
  106. arch/metag/include/asm/processor.h +0 −3
  107. arch/microblaze/Kconfig +1 −1
  108. arch/microblaze/include/uapi/asm/Kbuild +1 −0
  109. arch/microblaze/kernel/dma.c +1 −1
  110. arch/mips/ath79/pci.c +6 −6
  111. arch/mips/include/asm/mipsregs.h +9 −6
  112. arch/mips/kernel/perf_event_mipsxx.c +1 −2
  113. arch/mips/pci/fixup-capcella.c +2 −2
  114. arch/mips/pci/fixup-cobalt.c +4 −4
  115. arch/mips/pci/fixup-emma2rh.c +2 −2
  116. arch/mips/pci/fixup-fuloong2e.c +1 −1
  117. arch/mips/pci/fixup-ip32.c +2 −2
  118. arch/mips/pci/fixup-jmr3927.c +1 −1
  119. arch/mips/pci/fixup-lantiq.c +1 −1
  120. arch/mips/pci/fixup-lemote2f.c +2 −2
  121. arch/mips/pci/fixup-loongson3.c +1 −1
  122. arch/mips/pci/fixup-malta.c +2 −2
  123. arch/mips/pci/fixup-mpc30x.c +3 −3
  124. arch/mips/pci/fixup-pmcmsp.c +4 −4
  125. arch/mips/pci/fixup-rbtx4927.c +1 −1
  126. arch/mips/pci/fixup-rbtx4938.c +1 −1
  127. arch/mips/pci/fixup-sni.c +6 −6
  128. arch/mips/pci/fixup-tb0219.c +1 −1
  129. arch/mips/pci/fixup-tb0226.c +1 −1
  130. arch/mips/pci/fixup-tb0287.c +1 −1
  131. arch/mips/pci/pci-alchemy.c +1 −1
  132. arch/mips/pci/pci-bcm47xx.c +1 −1
  133. arch/mips/pci/pci-lasat.c +1 −1
  134. arch/mips/pci/pci-mt7620.c +1 −1
  135. arch/mips/pci/pci-octeon.c +2 −3
  136. arch/mips/pci/pci-rt2880.c +1 −1
  137. arch/mips/pci/pci-rt3883.c +1 −1
  138. arch/mips/pci/pci-tx4938.c +1 −1
  139. arch/mips/pci/pci-tx4939.c +2 −2
  140. arch/mips/pci/pci-xlp.c +1 −1
  141. arch/mips/pci/pci-xlr.c +1 −1
  142. arch/mips/pci/pcie-octeon.c +1 −2
  143. arch/mips/pmcs-msp71xx/msp_smp.c +2 −0
  144. arch/mips/txx9/generic/pci.c +6 −2
  145. arch/mn10300/kernel/process.c +0 −12
  146. arch/parisc/Kconfig +12 −0
  147. arch/parisc/Makefile +5 −0
  148. arch/parisc/boot/compressed/Makefile +1 −1
  149. arch/parisc/boot/compressed/misc.c +2 −1
  150. arch/parisc/include/asm/pdc.h +1 −0
  151. arch/parisc/include/asm/smp.h +1 −0
  152. arch/parisc/kernel/firmware.c +20 −0
  153. arch/parisc/kernel/pdt.c +9 −0
  154. arch/parisc/kernel/process.c +1 −1
  155. arch/parisc/kernel/processor.c +1 −1
  156. arch/parisc/kernel/setup.c +3 −3
  157. arch/parisc/kernel/smp.c +1 −2
  158. arch/parisc/kernel/traps.c +9 −1
  159. arch/parisc/kernel/unwind.c +12 −0
  160. arch/parisc/mm/fault.c +29 −4
  161. arch/powerpc/configs/g5_defconfig +3 −2
  162. arch/powerpc/configs/gamecube_defconfig +3 −2
  163. arch/powerpc/configs/pasemi_defconfig +2 −1
  164. arch/powerpc/configs/pmac32_defconfig +4 −3
  165. arch/powerpc/configs/ppc64_defconfig +4 −3
  166. arch/powerpc/configs/ppc64e_defconfig +4 −3
  167. arch/powerpc/configs/ppc6xx_defconfig +4 −3
  168. arch/powerpc/configs/wii_defconfig +3 −2
  169. arch/powerpc/kernel/dt_cpu_ftrs.c +2 −2
  170. arch/powerpc/kernel/eeh.c +4 −0
  171. arch/powerpc/kernel/eeh_dev.c +0 −18
  172. arch/powerpc/kernel/mce_power.c +13 −0
  173. arch/powerpc/kernel/optprobes.c +3 −1
  174. arch/powerpc/kernel/ptrace.c +1 −1
  175. arch/powerpc/kernel/setup-common.c +0 −3
  176. arch/powerpc/kernel/traps.c +10 −2
  177. arch/powerpc/kernel/watchdog.c +15 −15
  178. arch/powerpc/kvm/book3s_hv_rmhandlers.S +13 −1
  179. arch/powerpc/kvm/book3s_xive.c +2 −3
  180. arch/powerpc/kvm/book3s_xive.h +0 −1
  181. arch/powerpc/lib/sstep.c +12 −11
  182. arch/powerpc/mm/pgtable_32.c +1 −1
  183. arch/powerpc/perf/core-book3s.c +5 −0
  184. arch/powerpc/platforms/powernv/idle.c +7 −1
  185. arch/powerpc/platforms/powernv/setup.c +9 −1
  186. arch/powerpc/platforms/pseries/dlpar.c +0 −1
  187. arch/powerpc/platforms/pseries/hotplug-cpu.c +5 −1
  188. arch/powerpc/platforms/pseries/mobility.c +3 −1
  189. arch/powerpc/sysdev/fsl_rio.c +15 −2
  190. arch/powerpc/sysdev/fsl_rmu.c +8 −0
  191. arch/powerpc/sysdev/xive/common.c +8 −0
  192. arch/powerpc/sysdev/xive/spapr.c +4 −0
  193. arch/s390/include/asm/pgtable.h +3 −1
  194. arch/s390/kernel/early.c +0 −12
  195. arch/s390/kernel/perf_cpum_sf.c +6 −3
  196. arch/s390/kernel/topology.c +135 −13
  197. arch/s390/mm/gup.c +3 −4
  198. arch/sh/include/asm/processor_32.h +0 −4
  199. arch/sh/include/asm/processor_64.h +0 −4
  200. arch/sh/include/cpu-sh2a/cpu/sh7264.h +1 −3
  201. arch/sh/include/cpu-sh2a/cpu/sh7269.h +1 −3
  202. arch/sh/include/cpu-sh4/cpu/sh7722.h +1 −1
  203. arch/sh/include/cpu-sh4/cpu/sh7757.h +4 −4
  204. arch/tile/configs/tilegx_defconfig +0 −1
  205. arch/tile/configs/tilepro_defconfig +0 −2
  206. arch/tile/kernel/setup.c +1 −1
  207. arch/um/include/asm/processor-generic.h +0 −5
  208. arch/um/kernel/time.c +2 −2
  209. arch/x86/crypto/blowfish-x86_64-asm_64.S +26 −22
  210. arch/x86/crypto/camellia-x86_64-asm_64.S +13 −13
  211. arch/x86/crypto/cast5-avx-x86_64-asm_64.S +30 −17
  212. arch/x86/crypto/cast6-avx-x86_64-asm_64.S +34 −16
  213. arch/x86/crypto/des3_ede-asm_64.S +9 −6
  214. arch/x86/crypto/sha1_avx2_x86_64_asm.S +1 −3
  215. arch/x86/crypto/sha1_ssse3_asm.S +5 −6
  216. arch/x86/crypto/sha256-avx-asm.S +7 −8
  217. arch/x86/crypto/sha256-avx2-asm.S +7 −15
  218. arch/x86/crypto/sha256-ssse3-asm.S +7 −8
  219. arch/x86/crypto/sha512-avx2-asm.S +39 −36
  220. arch/x86/crypto/twofish-avx-x86_64-asm_64.S +6 −6
  221. arch/x86/events/intel/core.c +4 −7
  222. arch/x86/events/intel/cstate.c +4 −0
  223. arch/x86/events/intel/rapl.c +3 −0
  224. arch/x86/events/intel/uncore_snbep.c +2 −2
  225. arch/x86/events/msr.c +8 −0
  226. arch/x86/ia32/ia32_signal.c +1 −1
  227. arch/x86/include/asm/alternative.h +1 −2
  228. arch/x86/include/asm/asm.h +14 −1
  229. arch/x86/include/asm/fpu/internal.h +22 −68
  230. arch/x86/include/asm/fpu/types.h +6 −26
  231. arch/x86/include/asm/fpu/xstate.h +8 −4
  232. arch/x86/include/asm/kvm_para.h +2 −2
  233. arch/x86/include/asm/mmu_context.h +28 −4
  234. arch/x86/include/asm/mshyperv.h +4 −6
  235. arch/x86/include/asm/paravirt_types.h +7 −7
  236. arch/x86/include/asm/preempt.h +5 −10
  237. arch/x86/include/asm/processor.h +2 −4
  238. arch/x86/include/asm/rwsem.h +2 −2
  239. arch/x86/include/asm/thread_info.h +0 −11
  240. arch/x86/include/asm/trace/fpu.h +4 −7
  241. arch/x86/include/asm/uaccess.h +3 −3
  242. arch/x86/include/asm/xen/hypercall.h +4 −5
  243. arch/x86/kernel/cpu/amd.c +11 −0
  244. arch/x86/kernel/cpu/bugs.c +0 −8
  245. arch/x86/kernel/cpu/common.c +8 −0
  246. arch/x86/kernel/fpu/core.c +43 −112
  247. arch/x86/kernel/fpu/init.c +1 −1
  248. arch/x86/kernel/fpu/regset.c +26 −22
  249. arch/x86/kernel/fpu/signal.c +21 −16
  250. arch/x86/kernel/fpu/xstate.c +213 −51
  251. arch/x86/kernel/irq_32.c +3 −3
  252. arch/x86/kernel/ksysfs.c +1 −1
  253. arch/x86/kernel/kvm.c +10 −3
  254. arch/x86/kernel/signal.c +3 −3
  255. arch/x86/kernel/smpboot.c +7 −6
  256. arch/x86/kernel/traps.c +1 −1
  257. arch/x86/kvm/Kconfig +1 −0
  258. arch/x86/kvm/emulate.c +10 −7
  259. arch/x86/kvm/mmu.c +1 −1
  260. arch/x86/kvm/vmx.c +124 −124
  261. arch/x86/kvm/x86.c +1 −1
  262. arch/x86/math-emu/fpu_entry.c +1 −1
  263. arch/x86/mm/extable.c +24 −0
  264. arch/x86/mm/fault.c +25 −25
  265. arch/x86/mm/mem_encrypt.c +2 −0
  266. arch/x86/mm/pkeys.c +1 −2
  267. arch/x86/mm/tlb.c +6 −7
  268. arch/x86/net/bpf_jit_comp.c +2 −2
  269. arch/x86/xen/mmu_pv.c +5 −10
  270. arch/xtensa/include/asm/processor.h +0 −5
  271. block/blk-core.c +3 −0
  272. block/blk-mq-debugfs.c +5 −1
  273. block/blk-throttle.c +2 −2
  274. block/bsg-lib.c +21 −7
  275. block/partition-generic.c +1 −1
  276. crypto/af_alg.c +2 −2
  277. crypto/drbg.c +4 −4
  278. drivers/acpi/acpi_watchdog.c +1 −1
  279. drivers/acpi/apei/ghes.c +9 −7
  280. drivers/acpi/arm64/iort.c +35 −0
  281. drivers/acpi/property.c +19 −5
  282. drivers/android/binder.c +4 −4
  283. drivers/android/binder_alloc.c +12 −6
  284. drivers/ata/ahci.c +4 −1
  285. drivers/ata/ata_piix.c +1 −0
  286. drivers/ata/libata-core.c +10 −10
  287. drivers/auxdisplay/charlcd.c +9 −2
  288. drivers/auxdisplay/panel.c +9 −2
  289. drivers/base/arch_topology.c +6 −6
  290. drivers/base/dma-coherent.c +9 −10
  291. drivers/base/platform.c +2 −1
  292. drivers/base/power/main.c +6 −3
  293. drivers/base/power/opp/core.c +7 −0
  294. drivers/base/power/qos.c +5 −5
  295. drivers/block/Kconfig +1 −1
  296. drivers/block/brd.c +1 −1
  297. drivers/block/loop.h +2 −4
  298. drivers/block/nbd.c +11 −1
  299. drivers/block/zram/zram_drv.c +12 −24
  300. drivers/char/tpm/tpm-interface.c +5 −5
  301. drivers/char/tpm/tpm.h +8 −1
  302. drivers/char/tpm/tpm2-cmd.c +1 −1
  303. drivers/char/tpm/tpm_crb.c +1 −1
  304. drivers/char/tpm/tpm_ibmvtpm.c +61 −37
  305. drivers/char/tpm/tpm_infineon.c +3 −3
  306. drivers/char/tpm/tpm_tis_core.c +4 −4
  307. drivers/clk/clk-bulk.c +1 −0
  308. drivers/clk/rockchip/clk-rk3128.c +7 −5
  309. drivers/clk/samsung/clk-exynos4.c +15 −0
  310. drivers/clocksource/numachip.c +1 −1
  311. drivers/clocksource/timer-integrator-ap.c +2 −2
  312. drivers/cpufreq/cpufreq-dt-platdev.c +16 −0
  313. drivers/cpufreq/ti-cpufreq.c +1 −1
  314. drivers/cpuidle/cpuidle-arm.c +4 −2
  315. drivers/crypto/caam/Kconfig +1 −4
  316. drivers/crypto/caam/ctrl.c +10 −9
  317. drivers/crypto/caam/regs.h +28 −31
  318. drivers/crypto/inside-secure/safexcel_cipher.c +1 −1
  319. drivers/crypto/inside-secure/safexcel_hash.c +1 −1
  320. drivers/crypto/talitos.c +5 −4
  321. drivers/fpga/altera-cvp.c +3 −3
  322. drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +188 −1
  323. drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +2 −0
  324. drivers/gpu/drm/amd/amdkfd/kfd_events.c +4 −1
  325. drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c +17 −5
  326. drivers/gpu/drm/amd/amdkfd/kfd_priv.h +1 −0
  327. drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +0 −1
  328. drivers/gpu/drm/etnaviv/etnaviv_gem.c +3 −0
  329. drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +4 −2
  330. drivers/gpu/drm/exynos/exynos5433_drm_decon.c +1 −0
  331. drivers/gpu/drm/exynos/exynos_drm_drv.c +12 −24
  332. drivers/gpu/drm/exynos/exynos_drm_drv.h +1 −0
  333. drivers/gpu/drm/exynos/exynos_drm_fbdev.c +20 −0
  334. drivers/gpu/drm/exynos/exynos_drm_fbdev.h +10 −0
  335. drivers/gpu/drm/exynos/exynos_hdmi.c +11 −3
  336. drivers/gpu/drm/i915/gvt/cfg_space.c +48 −65
  337. drivers/gpu/drm/i915/i915_irq.c +0 −3
  338. drivers/gpu/drm/i915/intel_audio.c +0 −5
  339. drivers/gpu/drm/i915/intel_bios.c +7 −0
  340. drivers/gpu/drm/i915/intel_csr.c +1 −1
  341. drivers/gpu/drm/i915/intel_ddi.c +2 −1
  342. drivers/gpu/drm/i915/intel_display.c +1 −3
  343. drivers/gpu/drm/i915/intel_dpio_phy.c +0 −20
  344. drivers/gpu/drm/i915/intel_dsi.c +0 −11
  345. drivers/gpu/drm/i915/intel_modes.c +17 −0
  346. drivers/gpu/drm/i915/intel_panel.c +4 −0
  347. drivers/gpu/drm/i915/intel_runtime_pm.c +3 −0
  348. drivers/gpu/drm/qxl/qxl_display.c +23 −18
  349. drivers/gpu/drm/radeon/radeon_device.c +1 −1
  350. drivers/gpu/drm/sun4i/Kconfig +1 −1
  351. drivers/gpu/drm/sun4i/sun4i_hdmi.h +1 −1
  352. drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c +14 −5
  353. drivers/gpu/drm/tegra/trace.h +1 −1
  354. drivers/hid/hid-ids.h +2 −0
  355. drivers/hid/hid-multitouch.c +7 −0
  356. drivers/hid/hid-rmi.c +10 −3
  357. drivers/hid/hidraw.c +1 −1
  358. drivers/hid/i2c-hid/i2c-hid.c +2 −1
  359. drivers/hid/usbhid/hid-quirks.c +1 −0
  360. drivers/hid/wacom_sys.c +6 −1
  361. drivers/hid/wacom_wac.c +89 −21
  362. drivers/hv/channel_mgmt.c +0 −4
  363. drivers/hv/hv_fcopy.c +4 −0
  364. drivers/hwmon/xgene-hwmon.c +11 −8
  365. drivers/hwtracing/intel_th/pci.c +10 −0
  366. drivers/hwtracing/stm/core.c +1 −1
  367. drivers/i2c/busses/Kconfig +1 −0
  368. drivers/i2c/busses/i2c-i801.c +4 −0
  369. drivers/i2c/busses/i2c-img-scb.c +1 −1
  370. drivers/i2c/busses/i2c-sprd.c +1 −0
  371. drivers/i2c/busses/i2c-stm32f7.c +7 −10
  372. drivers/ide/ide-probe.c +1 −0
  373. drivers/ide/ide-scan-pci.c +9 −4
  374. drivers/ide/setup-pci.c +40 −23
  375. drivers/iio/adc/ad7793.c +2 −2
  376. drivers/iio/adc/ad_sigma_delta.c +28 −0
  377. drivers/iio/adc/mcp320x.c +16 −9
  378. drivers/iio/adc/stm32-adc.c +1 −1
  379. drivers/iio/adc/ti-ads1015.c +5 −3
  380. drivers/iio/adc/twl4030-madc.c +10 −4
  381. drivers/iio/common/st_sensors/st_sensors_core.c +10 −1
  382. drivers/iio/industrialio-core.c +3 −1
  383. drivers/iio/magnetometer/st_magn_core.c +4 −0
  384. drivers/iio/pressure/bmp280-core.c +1 −1
  385. drivers/iio/trigger/stm32-timer-trigger.c +3 −1
  386. drivers/infiniband/core/iwpm_msg.c +8 −0
  387. drivers/infiniband/core/iwpm_util.c +5 −0
  388. drivers/infiniband/core/security.c +3 −1
  389. drivers/infiniband/core/uverbs_cmd.c +7 −7
  390. drivers/infiniband/core/verbs.c +2 −2
  391. drivers/infiniband/hw/bnxt_re/bnxt_re.h +9 −5
  392. drivers/infiniband/hw/bnxt_re/ib_verbs.c +64 −43
  393. drivers/infiniband/hw/bnxt_re/main.c +28 −0
  394. drivers/infiniband/hw/bnxt_re/qplib_rcfw.c +4 −0
  395. drivers/infiniband/hw/bnxt_re/qplib_rcfw.h +2 −1
  396. drivers/infiniband/hw/cxgb4/cm.c +7 −2
  397. drivers/infiniband/hw/hfi1/chip.c +78 −23
  398. drivers/infiniband/hw/hfi1/chip.h +2 −1
  399. drivers/infiniband/hw/hfi1/eprom.c +15 −5
  400. drivers/infiniband/hw/hfi1/file_ops.c +22 −19
  401. drivers/infiniband/hw/hfi1/pcie.c +21 −29
  402. drivers/infiniband/hw/hfi1/platform.c +3 −1
  403. drivers/infiniband/hw/i40iw/i40iw.h +0 −1
  404. drivers/infiniband/hw/i40iw/i40iw_cm.c +77 −77
  405. drivers/infiniband/hw/i40iw/i40iw_cm.h +5 −0
  406. drivers/infiniband/hw/i40iw/i40iw_ctrl.c +1 −1
  407. drivers/infiniband/hw/i40iw/i40iw_main.c +23 −16
  408. drivers/infiniband/hw/i40iw/i40iw_p.h +2 −0
  409. drivers/infiniband/hw/i40iw/i40iw_puda.c +4 −7
  410. drivers/infiniband/hw/i40iw/i40iw_utils.c +3 −3
  411. drivers/infiniband/hw/i40iw/i40iw_verbs.c +14 −0
  412. drivers/infiniband/hw/mlx5/main.c +10 −10
  413. drivers/infiniband/hw/mlx5/mem.c +17 −30
  414. drivers/infiniband/hw/mlx5/mr.c +17 −10
  415. drivers/infiniband/hw/nes/nes_verbs.c +2 −2
  416. drivers/infiniband/hw/ocrdma/ocrdma_hw.c +3 −0
  417. drivers/infiniband/hw/qedr/qedr.h +1 −1
  418. drivers/infiniband/hw/qedr/qedr_cm.c +9 −3
  419. drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +28 −3
  420. drivers/infiniband/ulp/ipoib/ipoib_cm.c +11 −5
  421. drivers/infiniband/ulp/ipoib/ipoib_ib.c +0 −13
  422. drivers/infiniband/ulp/ipoib/ipoib_main.c +11 −4
  423. drivers/infiniband/ulp/ipoib/ipoib_vlan.c +22 −8
  424. drivers/infiniband/ulp/iser/iser_memory.c +1 −1
  425. drivers/input/ff-core.c +10 −3
  426. drivers/input/misc/uinput.c +39 −18
  427. drivers/input/mouse/elan_i2c_i2c.c +1 −1
  428. drivers/iommu/Kconfig +3 −2
  429. drivers/iommu/amd_iommu_init.c +4 −4
  430. drivers/iommu/dmar.c +1 −1
  431. drivers/iommu/io-pgtable-arm-v7s.c +1 −1
  432. drivers/iommu/mtk_iommu.c +2 −1
  433. drivers/iommu/of_iommu.c +1 −4
  434. drivers/irqchip/irq-gic-v3.c +4 −4
  435. drivers/irqchip/irq-gic-v4.c +9 −3
  436. drivers/irqchip/irq-mips-gic.c +11 −8
  437. drivers/isdn/i4l/isdn_ppp.c +25 −12
  438. drivers/leds/leds-as3645a.c +26 −3
  439. drivers/md/bcache/closure.c +2 −2
  440. drivers/md/dm-core.h +1 −0
  441. drivers/md/dm-crypt.c +5 −0
  442. drivers/md/dm-ioctl.c +24 −13
  443. drivers/md/dm-raid.c +7 −6
  444. drivers/md/dm.c +8 −2
  445. drivers/md/md.c +43 −29
  446. drivers/md/md.h +1 −0
  447. drivers/md/raid5.c +15 −5
  448. drivers/media/rc/ir-sharp-decoder.c +1 −1
  449. drivers/misc/cxl/cxllib.c +11 −2
  450. drivers/mmc/core/block.c +0 −3
  451. drivers/mmc/core/mmc.c +19 −17
  452. drivers/mmc/core/queue.c +9 −111
  453. drivers/mmc/core/queue.h +0 −6
  454. drivers/mmc/host/Kconfig +1 −1
  455. drivers/mmc/host/cavium-thunderx.c +5 −1
  456. drivers/mmc/host/cavium.c +1 −1
  457. drivers/mmc/host/meson-gx-mmc.c +22 −4
  458. drivers/mmc/host/pxamci.c +1 −5
  459. drivers/mmc/host/sdhci-pci-core.c +15 −0
  460. drivers/mmc/host/sdhci-xenon.c +20 −4
  461. drivers/mmc/host/sdhci-xenon.h +1 −0
  462. drivers/mmc/host/tmio_mmc_core.c +0 −47
  463. drivers/mtd/mtdpart.c +8 −0
  464. drivers/mtd/nand/atmel/pmecc.c +1 −1
  465. drivers/mtd/nand/lpc32xx_mlc.c +2 −1
  466. drivers/mtd/nand/nand_base.c +1 −2
  467. drivers/mtd/spi-nor/spi-nor.c +42 −3
  468. drivers/net/dsa/mv88e6xxx/chip.c +6 −0
  469. drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +4 −0
  470. drivers/net/ethernet/aquantia/atlantic/aq_nic.c +68 −77
  471. drivers/net/ethernet/aquantia/atlantic/aq_nic.h +0 −2
  472. drivers/net/ethernet/aquantia/atlantic/aq_ring.c +45 −8
  473. drivers/net/ethernet/aquantia/atlantic/aq_ring.h +8 −2
  474. drivers/net/ethernet/aquantia/atlantic/aq_vec.c +2 −6
  475. drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h +1 −1
  476. drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +1 −2
  477. drivers/net/ethernet/broadcom/bcmsysport.c +32 −20
  478. drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c +4 −0
  479. drivers/net/ethernet/broadcom/cnic.c +1 −1
  480. drivers/net/ethernet/freescale/fec.h +2 −2
  481. drivers/net/ethernet/freescale/fec_main.c +4 −4
  482. drivers/net/ethernet/hisilicon/hns3/hnae3.c +9 −34
  483. drivers/net/ethernet/hisilicon/hns3/hnae3.h +13 −2
  484. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +9 −3
  485. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +105 −79
  486. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +2 −1
  487. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c +24 −17
  488. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h +2 −2
  489. drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c +15 −8
  490. drivers/net/ethernet/ibm/emac/mal.c +1 −2
  491. drivers/net/ethernet/marvell/mvpp2.c +35 −11
  492. drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h +2 −2
  493. drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +2 −2
  494. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +5 −8
  495. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +3 −0
  496. drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +6 −0
  497. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +83 −8
  498. drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +1 −0
  499. drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.c +2 −2
  500. drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.h +1 −1
  501. drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c +1 −2
  502. drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c +8 −0
  503. drivers/net/ethernet/mellanox/mlx5/core/fs_core.h +11 −0
  504. drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +2 −1
  505. drivers/net/ethernet/mellanox/mlx5/core/sriov.c +1 −1
  506. drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +14 −4
  507. drivers/net/ethernet/qualcomm/emac/emac-ethtool.c +30 −0
  508. drivers/net/ethernet/qualcomm/emac/emac-mac.c +24 −1
  509. drivers/net/ethernet/qualcomm/emac/emac.c +3 −0
  510. drivers/net/ethernet/qualcomm/emac/emac.h +3 −0
  511. drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +1 −4
  512. drivers/net/ethernet/realtek/8139too.c +3 −2
  513. drivers/net/ethernet/rocker/rocker_tlv.h +30 −18
  514. drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c +1 −0
  515. drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +112 −0
  516. drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +7 −0
  517. drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +1 −0
  518. drivers/net/hyperv/hyperv_net.h +2 −0
  519. drivers/net/hyperv/netvsc.c +2 −5
  520. drivers/net/hyperv/netvsc_drv.c +8 −0
  521. drivers/net/phy/Kconfig +9 −9
  522. drivers/net/phy/phy.c +2 −1
  523. drivers/net/phy/phy_device.c +1 −1
  524. drivers/net/phy/xilinx_gmii2rgmii.c +1 −1
  525. drivers/net/ppp/ppp_generic.c +1 −1
  526. drivers/net/tun.c +5 −3
  527. drivers/net/usb/cdc_ether.c +20 −1
  528. drivers/net/usb/lan78xx.c +24 −10
  529. drivers/net/usb/r8152.c +2 −0
  530. drivers/net/usb/rndis_host.c +4 −0
  531. drivers/net/wireless/ath/ath10k/pci.c +2 −5
  532. drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +19 −18
  533. drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h +5 −0
  534. drivers/net/wireless/intel/iwlwifi/mvm/d3.c +1 −1
  535. drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +59 −3
  536. drivers/net/wireless/intel/iwlwifi/mvm/rs.c +2 −1
  537. drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +4 −3
  538. drivers/net/wireless/intel/iwlwifi/mvm/scan.c +1 −1
  539. drivers/net/wireless/intel/iwlwifi/mvm/sta.c +5 −3
  540. drivers/net/wireless/intel/iwlwifi/mvm/sta.h +2 −0
  541. drivers/net/wireless/intel/iwlwifi/mvm/tt.c +1 −0
  542. drivers/net/wireless/intel/iwlwifi/mvm/tx.c +5 −5
  543. drivers/net/wireless/quantenna/qtnfmac/cfg80211.c +6 −3
  544. drivers/net/wireless/quantenna/qtnfmac/cfg80211.h +3 −0
  545. drivers/net/wireless/quantenna/qtnfmac/event.c +0 −2
  546. drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c +8 −1
  547. drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h +2 −0
  548. drivers/nvdimm/namespace_devs.c +9 −0
  549. drivers/nvme/host/core.c +5 −6
  550. drivers/nvme/host/fabrics.c +9 −9
  551. drivers/nvme/host/fc.c +11 −10
  552. drivers/nvme/host/pci.c +27 −21
  553. drivers/nvme/host/rdma.c +7 −2
  554. drivers/nvme/target/core.c +5 −4
  555. drivers/nvme/target/fabrics-cmd.c +7 −2
  556. drivers/nvme/target/fc.c +14 −10
  557. drivers/nvme/target/fcloop.c +39 −65
  558. drivers/nvme/target/nvmet.h +1 −0
  559. drivers/nvmem/core.c +2 −1
  560. drivers/pci/endpoint/functions/pci-epf-test.c +6 −7
  561. drivers/pci/pci-sysfs.c +9 −2
  562. drivers/perf/arm_pmu_acpi.c +1 −0
  563. drivers/platform/x86/fujitsu-laptop.c +6 −4
  564. drivers/rapidio/devices/tsi721.c +7 −0
  565. drivers/rapidio/rio-access.c +5 −35
  566. drivers/reset/Kconfig +5 −4
  567. drivers/reset/Makefile +1 −1
  568. drivers/reset/reset-hsdk.c +22 −22
  569. drivers/s390/block/dasd.c +9 −3
  570. drivers/s390/block/scm_blk.c +3 −3
  571. drivers/s390/cio/device.c +9 −3
  572. drivers/s390/cio/device.h +1 −0
  573. drivers/s390/cio/device_fsm.c +12 −0
  574. drivers/s390/cio/io_sch.h +2 −0
  575. drivers/scsi/aacraid/aachba.c +6 −6
  576. drivers/scsi/aacraid/aacraid.h +5 −0
  577. drivers/scsi/aacraid/linit.c +12 −8
  578. drivers/scsi/aacraid/src.c +2 −0
  579. drivers/scsi/arm/acornscsi.c +3 −3
  580. drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c +1 −1
  581. drivers/scsi/libiscsi.c +4 −4
  582. drivers/scsi/lpfc/lpfc_init.c +1 −0
  583. drivers/scsi/lpfc/lpfc_nvme.c +1 −1
  584. drivers/scsi/qla2xxx/qla_nvme.c +1 −1
  585. drivers/scsi/scsi_error.c +2 −1
  586. drivers/scsi/scsi_scan.c +3 −0
  587. drivers/scsi/scsi_transport_fc.c +4 −12
  588. drivers/scsi/scsi_transport_iscsi.c +1 −17
  589. drivers/scsi/sd.c +26 −11
  590. drivers/scsi/sg.c +36 −28
  591. drivers/staging/iio/adc/ad7192.c +1 −3
  592. drivers/staging/mt29f_spinand/mt29f_spinand.c +6 −2
  593. drivers/staging/pi433/rf69.c +3 −6
  594. drivers/staging/rtl8723bs/core/rtw_mlme.c +1 −2
  595. drivers/staging/rtl8723bs/os_dep/rtw_proc.c +2 −0
  596. drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c +2 −2
  597. drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c +7 −6
  598. drivers/staging/speakup/main.c +12 −3
  599. drivers/staging/unisys/visorbus/visorchipset.c +2 −2
  600. drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +4 −2
  601. drivers/tty/mxser.c +11 −5
  602. drivers/tty/serial/bcm63xx_uart.c +5 −0
  603. drivers/tty/serial/fsl_lpuart.c +17 −23
  604. drivers/tty/serial/sccnxp.c +11 −2
  605. drivers/usb/class/cdc-wdm.c +3 −1
  606. drivers/usb/core/config.c +12 −4
  607. drivers/usb/core/devio.c +10 −1
  608. drivers/usb/core/hub.c +1 −1
  609. drivers/usb/core/message.c +4 −0
  610. drivers/usb/dwc3/dwc3-of-simple.c +1 −0
  611. drivers/usb/dwc3/ep0.c +7 −0
  612. drivers/usb/gadget/function/f_fs.c +13 −4
  613. drivers/usb/gadget/function/f_mass_storage.c +7 −20
  614. drivers/usb/gadget/function/f_mass_storage.h +0 −14
  615. drivers/usb/gadget/function/f_printer.c +6 −1
  616. drivers/usb/gadget/function/u_fs.h +1 −0
  617. drivers/usb/gadget/legacy/inode.c +40 −6
  618. drivers/usb/gadget/legacy/mass_storage.c +3 −23
  619. drivers/usb/gadget/udc/Kconfig +1 −0
  620. drivers/usb/gadget/udc/atmel_usba_udc.c +3 −1
  621. drivers/usb/gadget/udc/core.c +1 −2
  622. drivers/usb/gadget/udc/dummy_hcd.c +54 −11
  623. drivers/usb/gadget/udc/renesas_usb3.c +15 −4
  624. drivers/usb/host/pci-quirks.c +5 −5
  625. drivers/usb/host/xhci-hub.c +10 −4
  626. drivers/usb/host/xhci-pci.c +0 −12
  627. drivers/usb/host/xhci-plat.c +10 −6
  628. drivers/usb/host/xhci.c +2 −1
  629. drivers/usb/host/xhci.h +6 −4
  630. drivers/usb/renesas_usbhs/fifo.c +18 −3
  631. drivers/usb/storage/transport.c +13 −1
  632. drivers/usb/storage/uas-detect.h +8 −7
  633. drivers/usb/storage/uas.c +5 −5
  634. drivers/usb/storage/unusual_devs.h +7 −0
  635. drivers/uwb/hwa-rc.c +2 −0
  636. drivers/uwb/uwbd.c +8 −4
  637. drivers/xen/xen-pciback/conf_space_header.c +10 −1
  638. drivers/xen/xenbus/xenbus_client.c +67 −63
  639. fs/binfmt_misc.c +26 −30
  640. fs/binfmt_script.c +9 −8
  641. fs/btrfs/compression.c +17 −1
  642. fs/btrfs/ctree.h +1 −2
  643. fs/btrfs/disk-io.c +8 −1
  644. fs/btrfs/extent_io.c +3 −7
  645. fs/btrfs/inode.c +22 −5
  646. fs/btrfs/ioctl.c +8 −4
  647. fs/btrfs/qgroup.c +2 −4
  648. fs/btrfs/relocation.c +1 −1
  649. fs/btrfs/send.c +1 −1
  650. fs/btrfs/tree-log.c +10 −2
  651. fs/btrfs/volumes.c +1 −1
  652. fs/ceph/mds_client.c +10 −8
  653. fs/ceph/mds_client.h +3 −0
  654. fs/ceph/snap.c +3 −5
  655. fs/cifs/cifs_debug.c +7 −2
  656. fs/cifs/cifsfs.c +3 −1
  657. fs/cifs/cifsfs.h +1 −1
  658. fs/cifs/cifsglob.h +6 −0
  659. fs/cifs/connect.c +25 −7
  660. fs/cifs/file.c +15 −4
  661. fs/cifs/inode.c +15 −0
  662. fs/cifs/smb2ops.c +42 −0
  663. fs/cifs/smb2pdu.c +93 −18
  664. fs/cifs/smb2pdu.h +1 −1
  665. fs/direct-io.c +43 −6
  666. fs/exec.c +1 −1
  667. fs/fcntl.c +1 −1
  668. fs/gfs2/glock.c +5 −9
  669. fs/iomap.c +23 −20
  670. fs/isofs/inode.c +2 −0
  671. fs/namespace.c +3 −1
  672. fs/overlayfs/copy_up.c +2 −4
  673. fs/overlayfs/dir.c +0 −20
  674. fs/overlayfs/namei.c +1 −0
  675. fs/overlayfs/overlayfs.h +1 −0
  676. fs/overlayfs/ovl_entry.h +3 −0
  677. fs/overlayfs/readdir.c +4 −2
  678. fs/overlayfs/super.c +19 −8
  679. fs/overlayfs/util.c +23 −1
  680. fs/proc/array.c +24 −20
  681. fs/quota/dquot.c +2 −0
  682. fs/quota/quota_v2.c +4 −0
  683. fs/read_write.c +2 −2
  684. fs/userfaultfd.c +56 −10
  685. fs/xattr.c +1 −1
  686. fs/xfs/libxfs/xfs_ag_resv.c +10 −2
  687. fs/xfs/libxfs/xfs_bmap.c +2 −15
  688. fs/xfs/xfs_aops.c +2 −1
  689. fs/xfs/xfs_bmap_util.c +35 −3
  690. fs/xfs/xfs_buf.c +0 −2
  691. fs/xfs/xfs_error.c +1 −1
  692. fs/xfs/xfs_file.c +21 −18
  693. fs/xfs/xfs_inode.c +5 −3
  694. fs/xfs/xfs_inode_item.c +1 −1
  695. fs/xfs/xfs_ioctl.c +2 −1
  696. fs/xfs/xfs_iomap.c +5 −2
  697. fs/xfs/xfs_iomap.h +1 −1
  698. fs/xfs/xfs_pnfs.c +1 −1
  699. fs/xfs/xfs_reflink.c +8 −1
  700. fs/xfs/xfs_super.c +10 −0
  701. include/acpi/acpi_bus.h +4 −14
  702. include/asm-generic/percpu.h +22 −2
  703. include/dt-bindings/reset/snps,hsdk-reset.h +17 −0
  704. include/dt-bindings/reset/snps,hsdk-v1-reset.h +0 −17
  705. include/linux/audit.h +1 −5
  706. include/linux/binfmts.h +1 −1
  707. include/linux/bitfield.h +1 −1
  708. include/linux/blkdev.h +1 −0
  709. include/linux/cpuhotplug.h +20 −1
  710. include/linux/device.h +1 −3
  711. include/linux/fs.h +1 −1
  712. include/linux/iio/adc/ad_sigma_delta.h +3 −0
  713. include/linux/input.h +1 −0
  714. include/linux/iommu.h +1 −1
  715. include/linux/irq.h +1 −4
  716. include/linux/key.h +2 −0
  717. include/linux/mlx5/device.h +2 −3
  718. include/linux/mlx5/driver.h +1 −0
  719. include/linux/mlx5/mlx5_ifc.h +2 −1
  720. include/linux/mm.h +1 −1
  721. include/linux/mmc/host.h +1 −1
  722. include/linux/mmu_notifier.h +5 −0
  723. include/linux/mmzone.h +8 −2
  724. include/linux/nmi.h +62 −59
  725. include/linux/nvme-fc-driver.h +8 −5
  726. include/linux/nvme.h +6 −13
  727. include/linux/of_platform.h +7 −0
  728. include/linux/pci.h +2 −0
  729. include/linux/sched.h +40 −24
  730. include/linux/sched/mm.h +6 −0
  731. include/linux/seccomp.h +2 −1
  732. include/linux/smpboot.h +2 −2
  733. include/linux/syscalls.h +8 −4
  734. include/linux/timer.h +14 −0
  735. include/linux/trace_events.h +1 −0
  736. include/net/dst.h +4 −18
  737. include/net/netlink.h +55 −18
  738. include/net/protocol.h +2 −2
  739. include/net/route.h +4 −2
  740. include/net/sock.h +1 −1
  741. include/net/tcp.h +1 −2
  742. include/net/udp.h +1 −1
  743. include/rdma/ib_verbs.h +3 −3
  744. include/scsi/scsi_device.h +1 −0
  745. include/scsi/scsi_devinfo.h +1 −0
  746. include/scsi/scsi_transport_iscsi.h +0 −1
  747. include/sound/hda_verbs.h +1 −0
  748. include/trace/events/sched.h +12 −7
  749. include/uapi/linux/bpf.h +1 −1
  750. include/uapi/linux/dm-ioctl.h +2 −2
  751. include/uapi/linux/ethtool.h +5 −1
  752. include/uapi/linux/kfd_ioctl.h +86 −86
  753. include/uapi/linux/seccomp.h +15 −8
  754. include/uapi/linux/usb/ch9.h +1 −0
  755. include/uapi/rdma/ib_user_verbs.h +1 −1
  756. include/xen/arm/page.h +0 −10
  757. ipc/shm.c +2 −2
  758. kernel/bpf/core.c +1 −1
  759. kernel/bpf/devmap.c +4 −2
  760. kernel/bpf/syscall.c +4 −2
  761. kernel/bpf/verifier.c +6 −1
  762. kernel/cgroup/cgroup.c +8 −0
  763. kernel/cpu.c +370 −142
  764. kernel/events/core.c +2 −1
  765. kernel/events/ring_buffer.c +15 −5
  766. kernel/exit.c +10 −13
  767. kernel/extable.c +31 −14
  768. kernel/fork.c +18 −0
  769. kernel/futex.c +22 −11
  770. kernel/irq/chip.c +1 −1
  771. kernel/irq/generic-chip.c +0 −1
  772. kernel/irq/irqdomain.c +2 −2
  773. kernel/irq/manage.c +4 −0
  774. kernel/kcmp.c +1 −1
  775. kernel/locking/rwsem-xadd.c +27 −0
  776. kernel/memremap.c +3 −1
  777. kernel/params.c +16 −19
  778. kernel/power/suspend.c +11 −7
  779. kernel/rcu/tree.c +10 −0
  780. kernel/sched/core.c +23 −1
  781. kernel/sched/debug.c +0 −2
  782. kernel/seccomp.c +326 −18
  783. kernel/smpboot.c +8 −17
  784. kernel/sysctl.c +11 −16
  785. kernel/trace/blktrace.c +12 −6
  786. kernel/trace/ftrace.c +0 −14
  787. kernel/trace/trace.c +16 −3
  788. kernel/trace/trace.h +2 −0
  789. kernel/trace/trace_mmiotrace.c +1 −0
  790. kernel/trace/trace_output.c +6 −15
  791. kernel/trace/trace_sched_wakeup.c +4 −4
  792. kernel/trace/trace_stack.c +0 −15
  793. kernel/watchdog.c +238 −405
  794. kernel/watchdog_hld.c +111 −85
  795. lib/Kconfig.debug +2 −1
  796. lib/idr.c +2 −2
  797. lib/iov_iter.c +4 −2
  798. lib/kobject_uevent.c +41 −8
  799. lib/lz4/lz4_decompress.c +2 −2
  800. lib/ratelimit.c +3 −1
  801. lib/rhashtable.c +5 −4
  802. mm/compaction.c +5 −8
  803. mm/filemap.c +16 −2
  804. mm/ksm.c +4 −1
  805. mm/list_lru.c +6 −6
  806. mm/madvise.c +10 −2
  807. mm/memcontrol.c +17 −6
  808. mm/memory.c +1 −1
  809. mm/memory_hotplug.c +4 −3
  810. mm/oom_kill.c +16 −0
  811. mm/page_alloc.c +2 −1
  812. mm/percpu-stats.c +1 −1
  813. mm/percpu.c +4 −0
  814. mm/rodata_test.c +1 −1
  815. mm/slab_common.c +15 −7
  816. mm/swap.c +2 −2
  817. mm/swap_state.c +11 −0
  818. mm/z3fold.c +5 −5
  819. net/8021q/vlan_core.c +6 −0
  820. net/bluetooth/Kconfig +0 −10
  821. net/bluetooth/hci_sock.c +0 −6
  822. net/ceph/osdmap.c +25 −10
  823. net/compat.c +7 −0
  824. net/core/dev.c +7 −2
  825. net/core/ethtool.c +2 −0
  826. net/core/filter.c +23 −13
  827. net/core/rtnetlink.c +3 −0
  828. net/core/sock.c +6 −1
  829. net/dsa/slave.c +18 −13
  830. net/ipv4/inet_connection_sock.c +4 −2
  831. net/ipv4/inetpeer.c +2 −2
  832. net/ipv4/ip_gre.c +7 −5
  833. net/ipv4/ip_input.c +15 −10
  834. net/ipv4/ip_vti.c +2 −1
  835. net/ipv4/route.c +26 −20
  836. net/ipv4/tcp_ipv4.c +5 −4
  837. net/ipv4/tcp_output.c +9 −34
  838. net/ipv4/udp.c +18 −6
  839. net/ipv6/addrconf.c +23 −9
  840. net/ipv6/ip6_gre.c +12 −10
  841. net/ipv6/ip6_tunnel.c +6 −2
  842. net/ipv6/ip6_vti.c +2 −1
  843. net/ipv6/udp.c +1 −0
  844. net/l2tp/l2tp_core.c +10 −6
  845. net/l2tp/l2tp_core.h +5 −1
  846. net/l2tp/l2tp_eth.c +2 −49
  847. net/l2tp/l2tp_ppp.c +4 −4
  848. net/netfilter/ipset/ip_set_hash_gen.h +13 −1
  849. net/netfilter/nf_nat_core.c +6 −6
  850. net/netlink/af_netlink.c +5 −2
  851. net/packet/af_packet.c +19 −9
  852. net/sched/cls_flower.c +9 −6
  853. net/sched/cls_matchall.c +1 −0
  854. net/sched/sch_generic.c +1 −0
  855. net/sched/sch_hfsc.c +19 −4
  856. net/sctp/sctp_diag.c +3 −1
  857. net/smc/af_smc.c +9 −7
  858. net/smc/smc.h +1 −1
  859. net/smc/smc_clc.c +5 −5
  860. net/smc/smc_clc.h +1 −2
  861. net/smc/smc_close.c +15 −12
  862. net/smc/smc_core.c +12 −4
  863. net/smc/smc_ib.c +1 −0
  864. net/smc/smc_pnet.c +3 −1
  865. net/smc/smc_rx.c +2 −0
  866. net/smc/smc_tx.c +8 −4
  867. net/smc/smc_wr.c +1 −1
  868. net/sunrpc/xprtrdma/frwr_ops.c +1 −1
  869. net/tipc/msg.c +1 −1
  870. net/wireless/nl80211.c +6 −0
  871. scripts/Makefile.build +2 −0
  872. scripts/checkpatch.pl +1 −1
  873. scripts/dtc/dtx_diff +9 −13
  874. scripts/mkversion +0 −6
  875. scripts/package/Makefile +0 −5
  876. scripts/package/builddeb +1 −21
  877. scripts/package/mkspec +4 −10
  878. scripts/spelling.txt +33 −0
  879. security/apparmor/.gitignore +1 −0
  880. security/apparmor/Makefile +41 −2
  881. security/apparmor/apparmorfs.c +39 −6
  882. security/apparmor/domain.c +2 −2
  883. security/apparmor/file.c +30 −0
  884. security/apparmor/include/apparmor.h +2 −0
  885. security/apparmor/include/audit.h +30 −9
  886. security/apparmor/include/domain.h +5 −0
  887. security/apparmor/include/ipc.h +6 −0
  888. security/apparmor/include/label.h +1 −0
  889. security/apparmor/include/mount.h +54 −0
  890. security/apparmor/include/net.h +114 −0
  891. security/apparmor/include/perms.h +3 −2
  892. security/apparmor/include/policy.h +13 −0
  893. security/apparmor/include/sig_names.h +98 −0
  894. security/apparmor/ipc.c +99 −0
  895. security/apparmor/label.c +19 −17
  896. security/apparmor/lib.c +3 −2
  897. security/apparmor/lsm.c +472 −0
  898. security/apparmor/mount.c +696 −0
  899. security/apparmor/net.c +184 −0
  900. security/apparmor/policy.c +87 −79
  901. security/apparmor/policy_ns.c +2 −0
  902. security/apparmor/policy_unpack.c +87 −18
  903. security/commoncap.c +3 −3
  904. security/keys/Kconfig +1 −3
  905. security/keys/big_key.c +65 −74
  906. security/keys/internal.h +1 −1
  907. security/keys/key.c +4 −2
  908. security/keys/keyctl.c +8 −5
  909. security/keys/keyring.c +19 −18
  910. security/keys/proc.c +2 −6
  911. security/keys/process_keys.c +4 −2
  912. security/keys/request_key_auth.c +33 −41
  913. security/smack/smack_lsm.c +25 −30
  914. sound/core/compress_offload.c +1 −2
  915. sound/core/pcm_compat.c +1 −0
  916. sound/pci/asihpi/hpioctl.c +8 −4
  917. sound/pci/echoaudio/echoaudio.c +3 −3
  918. sound/pci/hda/patch_hdmi.c +21 −0
  919. sound/usb/card.c +20 −0
  920. sound/usb/quirks.c +2 −0
  921. sound/usb/usx2y/usb_stream.c +4 −2
  922. tools/arch/s390/include/uapi/asm/kvm.h +6 −0
  923. tools/arch/x86/include/asm/cpufeatures.h +2 −0
  924. tools/arch/x86/include/asm/disabled-features.h +3 −1
  925. tools/include/asm-generic/hugetlb_encode.h +34 −0
  926. tools/include/uapi/asm-generic/mman-common.h +3 −11
  927. tools/include/uapi/drm/drm.h +22 −0
  928. tools/include/uapi/drm/i915_drm.h +49 −2
  929. tools/include/uapi/linux/bpf.h +20 −12
  930. tools/include/uapi/linux/kvm.h +2 −1
  931. tools/include/uapi/linux/mman.h +23 −1
  932. tools/objtool/Documentation/stack-validation.txt +3 −3
  933. tools/objtool/arch/x86/decode.c +11 −6
  934. tools/objtool/check.c +29 −14
  935. tools/objtool/elf.c +20 −13
  936. tools/perf/MANIFEST +2 −85
  937. tools/perf/arch/s390/util/Build +0 −1
  938. tools/perf/arch/s390/util/sym-handling.c +0 −29
  939. tools/perf/util/callchain.c +21 −14
  940. tools/perf/util/evsel.c +6 −1
  941. tools/perf/util/symbol-elf.c +1 −7
  942. tools/perf/util/symbol.h +0 −3
  943. tools/perf/util/syscalltbl.c +1 −1
  944. tools/testing/nvdimm/test/nfit.c +0 −3
  945. tools/testing/selftests/Makefile +11 −7
  946. tools/testing/selftests/bpf/bpf_util.h +9 −8
  947. tools/testing/selftests/breakpoints/Makefile +4 −4
  948. tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc +2 −0
  949. tools/testing/selftests/futex/Makefile +6 −3
  950. tools/testing/selftests/intel_pstate/Makefile +2 −0
  951. tools/testing/selftests/intel_pstate/run.sh +5 −6
  952. tools/testing/selftests/lib.mk +40 −8
  953. tools/testing/selftests/memfd/run_tests.sh +0 −0
  954. tools/testing/selftests/mqueue/Makefile +2 −2
  955. tools/testing/selftests/net/.gitignore +1 −0
  956. tools/testing/selftests/net/Makefile +3 −3
  957. tools/testing/selftests/net/msg_zerocopy.c +1 −1
  958. tools/testing/selftests/net/netdevice.sh +1 −1
  959. tools/testing/selftests/net/reuseaddr_conflict.c +114 −0
  960. tools/testing/selftests/seccomp/Makefile +13 −5
  961. tools/testing/selftests/seccomp/seccomp_benchmark.c +99 −0
  962. tools/testing/selftests/seccomp/seccomp_bpf.c +527 −101
  963. tools/testing/selftests/sigaltstack/sas.c +4 −0
  964. tools/testing/selftests/sync/Makefile +19 −5
  965. tools/testing/selftests/timers/set-timer-lat.c +7 −6
  966. tools/testing/selftests/watchdog/Makefile +1 −6
  967. virt/kvm/eventfd.c +0 −2
.mailmap+2−0
@@ -68,6 +68,8 @@ Jacob Shin <Jacob.Shin@amd.com> · 67 unmodified lines
68James Bottomley <jejb@mulgrave.(none)>68James Bottomley <jejb@mulgrave.(none)>
69James Bottomley <jejb@titanic.il.steeleye.com>69James Bottomley <jejb@titanic.il.steeleye.com>
70James E Wilson <wilson@specifix.com>70James E Wilson <wilson@specifix.com>
71James Hogan <jhogan@kernel.org> <james.hogan@imgtec.com>
72James Hogan <jhogan@kernel.org> <james@albanarts.com>
71James Ketrenos <jketreno@io.(none)>73James Ketrenos <jketreno@io.(none)>
72Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>74Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
73<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>75<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
Documentation/ABI/testing/sysfs-power+1−1
@@ -127,7 +127,7 @@ Description: · 126 unmodified lines
127 127
128What; /sys/power/pm_trace_dev_match128What; /sys/power/pm_trace_dev_match
129Date: October 2010129Date: October 2010
130Contact: James Hogan <james@albanarts.com>130Contact: James Hogan <jhogan@kernel.org>
131Description:131Description:
132 The /sys/power/pm_trace_dev_match file contains the name of the132 The /sys/power/pm_trace_dev_match file contains the name of the
133 device associated with the last PM event point saved in the RTC133 device associated with the last PM event point saved in the RTC
Documentation/core-api/workqueue.rst+6−6
@@ -39,8 +39,8 @@ up. · 38 unmodified lines
39Although MT wq wasted a lot of resource, the level of concurrency39Although MT wq wasted a lot of resource, the level of concurrency
40provided was unsatisfactory. The limitation was common to both ST and40provided was unsatisfactory. The limitation was common to both ST and
41MT wq albeit less severe on MT. Each wq maintained its own separate41MT wq albeit less severe on MT. Each wq maintained its own separate
42worker pool. A MT wq could provide only one execution context per CPU42worker pool. An MT wq could provide only one execution context per CPU
43while a ST wq one for the whole system. Work items had to compete for43while an ST wq one for the whole system. Work items had to compete for
44those very limited execution contexts leading to various problems44those very limited execution contexts leading to various problems
45including proneness to deadlocks around the single execution context.45including proneness to deadlocks around the single execution context.
46 46
@@ -151,7 +151,7 @@ Application Programming Interface (API) · 104 unmodified lines
151 151
152``alloc_workqueue()`` allocates a wq. The original152``alloc_workqueue()`` allocates a wq. The original
153``create_*workqueue()`` functions are deprecated and scheduled for153``create_*workqueue()`` functions are deprecated and scheduled for
154removal. ``alloc_workqueue()`` takes three arguments - @``name``,154removal. ``alloc_workqueue()`` takes three arguments - ``@name``,
155``@flags`` and ``@max_active``. ``@name`` is the name of the wq and155``@flags`` and ``@max_active``. ``@name`` is the name of the wq and
156also used as the name of the rescuer thread if there is one.156also used as the name of the rescuer thread if there is one.
157 157
@@ -197,7 +197,7 @@ resources, scheduled and executed. · 39 unmodified lines
197 served by worker threads with elevated nice level.197 served by worker threads with elevated nice level.
198 198
199 Note that normal and highpri worker-pools don't interact with199 Note that normal and highpri worker-pools don't interact with
200 each other. Each maintain its separate pool of workers and200 each other. Each maintains its separate pool of workers and
201 implements concurrency management among its workers.201 implements concurrency management among its workers.
202 202
203``WQ_CPU_INTENSIVE``203``WQ_CPU_INTENSIVE``
@@ -249,8 +249,8 @@ unbound worker-pools and only one work item could be active at any given · 45 unmodified lines
249time thus achieving the same ordering property as ST wq.249time thus achieving the same ordering property as ST wq.
250 250
251In the current implementation the above configuration only guarantees251In the current implementation the above configuration only guarantees
252ST behavior within a given NUMA node. Instead alloc_ordered_queue should252ST behavior within a given NUMA node. Instead ``alloc_ordered_queue()`` should
253be used to achieve system wide ST behavior.253be used to achieve system-wide ST behavior.
254 254
255 255
256Example Execution Scenarios256Example Execution Scenarios
Documentation/cpu-freq/index.txt+0−2
@@ -32,8 +32,6 @@ cpufreq-stats.txt - General description of sysfs cpufreq stats. · 31 unmodified lines
32 32
33index.txt - File index, Mailing list and Links (this document)33index.txt - File index, Mailing list and Links (this document)
34 34
35intel-pstate.txt - Intel pstate cpufreq driver specific file.
36
37pcc-cpufreq.txt - PCC cpufreq driver specific file.35pcc-cpufreq.txt - PCC cpufreq driver specific file.
38 36
39 37
Documentation/device-mapper/dm-raid.txt+1−0
@@ -344,3 +344,4 @@ Version History · 343 unmodified lines
344 (wrong raid10_copies/raid10_format sequence)344 (wrong raid10_copies/raid10_format sequence)
3451.11.1 Add raid4/5/6 journal write-back support via journal_mode option3451.11.1 Add raid4/5/6 journal write-back support via journal_mode option
3461.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available3461.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available
3471.13.0 Fix dev_health status at end of "recover" (was 'a', now 'A')
Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt+1−1
@@ -32,7 +32,7 @@ Example: · 31 unmodified lines
32 compatible = "st,stm32h743-rcc", "st,stm32-rcc";32 compatible = "st,stm32h743-rcc", "st,stm32-rcc";
33 reg = <0x58024400 0x400>;33 reg = <0x58024400 0x400>;
34 #reset-cells = <1>;34 #reset-cells = <1>;
35 #clock-cells = <2>;35 #clock-cells = <1>;
36 clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;36 clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
37 37
38 st,syscfg = <&pwrcfg>;38 st,syscfg = <&pwrcfg>;
Documentation/devicetree/bindings/leds/ams,as3645a.txt+18−10
@@ -15,11 +15,14 @@ Required properties · 14 unmodified lines
15 15
16compatible : Must be "ams,as3645a".16compatible : Must be "ams,as3645a".
17reg : The I2C address of the device. Typically 0x30.17reg : The I2C address of the device. Typically 0x30.
18#address-cells : 1
19#size-cells : 0
18 20
19 21
20Required properties of the "flash" child node22Required properties of the flash child node (0)
21=============================================23===============================================
22 24
25reg: 0
23flash-timeout-us: Flash timeout in microseconds. The value must be in26flash-timeout-us: Flash timeout in microseconds. The value must be in
24 the range [100000, 850000] and divisible by 50000.27 the range [100000, 850000] and divisible by 50000.
25flash-max-microamp: Maximum flash current in microamperes. Has to be28flash-max-microamp: Maximum flash current in microamperes. Has to be
@@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The · 7 unmodified lines
33 and divisible by 50000.36 and divisible by 50000.
34 37
35 38
36Optional properties of the "flash" child node39Optional properties of the flash child node
37=============================================40===========================================
38 41
39label : The label of the flash LED.42label : The label of the flash LED.
40 43
41 44
42Required properties of the "indicator" child node45Required properties of the indicator child node (1)
43=================================================46===================================================
44 47
48reg: 1
45led-max-microamp: Maximum indicator current. The allowed values are49led-max-microamp: Maximum indicator current. The allowed values are
46 2500, 5000, 7500 and 10000.50 2500, 5000, 7500 and 10000.
47 51
48Optional properties of the "indicator" child node52Optional properties of the indicator child node
49=================================================53===============================================
50 54
51label : The label of the indicator LED.55label : The label of the indicator LED.
52 56
@@ -55,16 +59,20 @@ Example · 2 unmodified lines
55=======59=======
56 60
57 as3645a@30 {61 as3645a@30 {
62 #address-cells: 1
63 #size-cells: 0
58 reg = <0x30>;64 reg = <0x30>;
59 compatible = "ams,as3645a";65 compatible = "ams,as3645a";
60 flash {66 flash@0 {
67 reg = <0x0>;
61 flash-timeout-us = <150000>;68 flash-timeout-us = <150000>;
62 flash-max-microamp = <320000>;69 flash-max-microamp = <320000>;
63 led-max-microamp = <60000>;70 led-max-microamp = <60000>;
64 ams,input-max-microamp = <1750000>;71 ams,input-max-microamp = <1750000>;
65 label = "as3645a:flash";72 label = "as3645a:flash";
66 };73 };
67 indicator {74 indicator@1 {
75 reg = <0x1>;
68 led-max-microamp = <10000>;76 led-max-microamp = <10000>;
69 label = "as3645a:indicator";77 label = "as3645a:indicator";
70 };78 };
Documentation/devicetree/bindings/mmc/marvell,xenon-sdhci.txt+7−5
@@ -16,11 +16,13 @@ Required Properties: · 15 unmodified lines
16 16
17- clocks:17- clocks:
18 Array of clocks required for SDHC.18 Array of clocks required for SDHC.
19 Require at least input clock for Xenon IP core.19 Require at least input clock for Xenon IP core. For Armada AP806 and
20 CP110, the AXI clock is also mandatory.
20 21
21- clock-names:22- clock-names:
22 Array of names corresponding to clocks property.23 Array of names corresponding to clocks property.
23 The input clock for Xenon IP core should be named as "core".24 The input clock for Xenon IP core should be named as "core".
25 The input clock for the AXI bus must be named as "axi".
24 26
25- reg:27- reg:
26 * For "marvell,armada-3700-sdhci", two register areas.28 * For "marvell,armada-3700-sdhci", two register areas.
@@ -106,8 +108,8 @@ Example: · 79 unmodified lines
106 compatible = "marvell,armada-ap806-sdhci";108 compatible = "marvell,armada-ap806-sdhci";
107 reg = <0xaa0000 0x1000>;109 reg = <0xaa0000 0x1000>;
108 interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>110 interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>
109 clocks = <&emmc_clk>;111 clocks = <&emmc_clk>,<&axi_clk>;
110 clock-names = "core";112 clock-names = "core", "axi";
111 bus-width = <4>;113 bus-width = <4>;
112 marvell,xenon-phy-slow-mode;114 marvell,xenon-phy-slow-mode;
113 marvell,xenon-tun-count = <11>;115 marvell,xenon-tun-count = <11>;
@@ -126,8 +128,8 @@ Example: · 12 unmodified lines
126 interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>128 interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>
127 vqmmc-supply = <&sd_vqmmc_regulator>;129 vqmmc-supply = <&sd_vqmmc_regulator>;
128 vmmc-supply = <&sd_vmmc_regulator>;130 vmmc-supply = <&sd_vmmc_regulator>;
129 clocks = <&sdclk>;131 clocks = <&sdclk>, <&axi_clk>;
130 clock-names = "core";132 clock-names = "core", "axi";
131 bus-width = <4>;133 bus-width = <4>;
132 marvell,xenon-tun-count = <9>;134 marvell,xenon-tun-count = <9>;
133 };135 };
Documentation/devicetree/bindings/net/marvell-pp2.txt+6−4
@@ -21,8 +21,9 @@ Required properties: · 20 unmodified lines
21 - main controller clock (for both armada-375-pp2 and armada-7k-pp2)21 - main controller clock (for both armada-375-pp2 and armada-7k-pp2)
22 - GOP clock (for both armada-375-pp2 and armada-7k-pp2)22 - GOP clock (for both armada-375-pp2 and armada-7k-pp2)
23 - MG clock (only for armada-7k-pp2)23 - MG clock (only for armada-7k-pp2)
24- clock-names: names of used clocks, must be "pp_clk", "gop_clk" and24 - AXI clock (only for armada-7k-pp2)
25 "mg_clk" (the latter only for armada-7k-pp2).25- clock-names: names of used clocks, must be "pp_clk", "gop_clk", "mg_clk"
26 and "axi_clk" (the 2 latter only for armada-7k-pp2).
26 27
27The ethernet ports are represented by subnodes. At least one port is28The ethernet ports are represented by subnodes. At least one port is
28required.29required.
@@ -78,8 +79,9 @@ Example for marvell,armada-7k-pp2: · 49 unmodified lines
78cpm_ethernet: ethernet@0 {79cpm_ethernet: ethernet@0 {
79 compatible = "marvell,armada-7k-pp22";80 compatible = "marvell,armada-7k-pp22";
80 reg = <0x0 0x100000>, <0x129000 0xb000>;81 reg = <0x0 0x100000>, <0x129000 0xb000>;
81 clocks = <&cpm_syscon0 1 3>, <&cpm_syscon0 1 9>, <&cpm_syscon0 1 5>;82 clocks = <&cpm_syscon0 1 3>, <&cpm_syscon0 1 9>,
82 clock-names = "pp_clk", "gop_clk", "gp_clk";83 <&cpm_syscon0 1 5>, <&cpm_syscon0 1 18>;
84 clock-names = "pp_clk", "gop_clk", "gp_clk", "axi_clk";
83 85
84 eth0: eth0 {86 eth0: eth0 {
85 interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,87 interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,
Documentation/devicetree/bindings/net/rockchip-dwmac.txt+1−0
@@ -4,6 +4,7 @@ The device node has following properties. · 3 unmodified lines
4 4
5Required properties:5Required properties:
6 - compatible: should be "rockchip,<name>-gamc"6 - compatible: should be "rockchip,<name>-gamc"
7 "rockchip,rk3128-gmac": found on RK312x SoCs
7 "rockchip,rk3228-gmac": found on RK322x SoCs8 "rockchip,rk3228-gmac": found on RK322x SoCs
8 "rockchip,rk3288-gmac": found on RK3288 SoCs9 "rockchip,rk3288-gmac": found on RK3288 SoCs
9 "rockchip,rk3328-gmac": found on RK3328 SoCs10 "rockchip,rk3328-gmac": found on RK3328 SoCs
Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt+28−0
@@ -0,0 +1,28 @@
1Binding for the Synopsys HSDK reset controller
2
3This binding uses the common reset binding[1].
4
5[1] Documentation/devicetree/bindings/reset/reset.txt
6
7Required properties:
8- compatible: should be "snps,hsdk-reset".
9- reg: should always contain 2 pairs address - length: first for reset
10 configuration register and second for corresponding SW reset and status bits
11 register.
12- #reset-cells: from common reset binding; Should always be set to 1.
13
14Example:
15 reset: reset@880 {
16 compatible = "snps,hsdk-reset";
17 #reset-cells = <1>;
18 reg = <0x8A0 0x4>, <0xFF0 0x4>;
19 };
20
21Specifying reset lines connected to IP modules:
22 ethernet@.... {
23 ....
24 resets = <&reset HSDK_V1_ETH_RESET>;
25 ....
26 };
27
28The index could be found in <dt-bindings/reset/snps,hsdk-reset.h>
Documentation/devicetree/bindings/security/tpm/tpm-i2c.txt+6−0
@@ -8,6 +8,12 @@ Required properties: · 7 unmodified lines
8 the firmware event log8 the firmware event log
9- linux,sml-size : size of the memory allocated for the firmware event log9- linux,sml-size : size of the memory allocated for the firmware event log
10 10
11Optional properties:
12
13- powered-while-suspended: present when the TPM is left powered on between
14 suspend and resume (makes the suspend/resume
15 callbacks do nothing).
16
11Example (for OpenPower Systems with Nuvoton TPM 2.0 on I2C)17Example (for OpenPower Systems with Nuvoton TPM 2.0 on I2C)
12----------------------------------------------------------18----------------------------------------------------------
13 19
Documentation/devicetree/bindings/serial/renesas,sci-serial.txt+2−0
@@ -41,6 +41,8 @@ Required properties: · 40 unmodified lines
41 - "renesas,hscif-r8a7795" for R8A7795 (R-Car H3) HSCIF compatible UART.41 - "renesas,hscif-r8a7795" for R8A7795 (R-Car H3) HSCIF compatible UART.
42 - "renesas,scif-r8a7796" for R8A7796 (R-Car M3-W) SCIF compatible UART.42 - "renesas,scif-r8a7796" for R8A7796 (R-Car M3-W) SCIF compatible UART.
43 - "renesas,hscif-r8a7796" for R8A7796 (R-Car M3-W) HSCIF compatible UART.43 - "renesas,hscif-r8a7796" for R8A7796 (R-Car M3-W) HSCIF compatible UART.
44 - "renesas,scif-r8a77970" for R8A77970 (R-Car V3M) SCIF compatible UART.
45 - "renesas,hscif-r8a77970" for R8A77970 (R-Car V3M) HSCIF compatible UART.
44 - "renesas,scif-r8a77995" for R8A77995 (R-Car D3) SCIF compatible UART.46 - "renesas,scif-r8a77995" for R8A77995 (R-Car D3) SCIF compatible UART.
45 - "renesas,hscif-r8a77995" for R8A77995 (R-Car D3) HSCIF compatible UART.47 - "renesas,hscif-r8a77995" for R8A77995 (R-Car D3) HSCIF compatible UART.
46 - "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART.48 - "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART.
Documentation/devicetree/bindings/vendor-prefixes.txt+1−1
@@ -3,8 +3,8 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order. · 2 unmodified lines
3This isn't an exhaustive list, but you should add new prefixes to it before3This isn't an exhaustive list, but you should add new prefixes to it before
4using them to avoid name-space collisions.4using them to avoid name-space collisions.
5 5
6abcn Abracon Corporation
7abilis Abilis Systems6abilis Abilis Systems
7abracon Abracon Corporation
8actions Actions Semiconductor Co., Ltd.8actions Actions Semiconductor Co., Ltd.
9active-semi Active-Semi International Inc9active-semi Active-Semi International Inc
10ad Avionic Design GmbH10ad Avionic Design GmbH
Documentation/driver-api/pm/devices.rst+1−1
@@ -675,7 +675,7 @@ sub-domain of the parent domain. · 674 unmodified lines
675 675
676Support for power domains is provided through the :c:member:`pm_domain` field of676Support for power domains is provided through the :c:member:`pm_domain` field of
677|struct device|. This field is a pointer to an object of type677|struct device|. This field is a pointer to an object of type
678|struct dev_pm_domain|, defined in :file:`include/linux/pm.h``, providing a set678|struct dev_pm_domain|, defined in :file:`include/linux/pm.h`, providing a set
679of power management callbacks analogous to the subsystem-level and device driver679of power management callbacks analogous to the subsystem-level and device driver
680callbacks that are executed for the given device during all power transitions,680callbacks that are executed for the given device during all power transitions,
681instead of the respective subsystem-level callbacks. Specifically, if a681instead of the respective subsystem-level callbacks. Specifically, if a
Documentation/driver-model/driver.txt+4−3
@@ -196,12 +196,13 @@ struct driver_attribute { · 195 unmodified lines
196};196};
197 197
198Device drivers can export attributes via their sysfs directories. 198Device drivers can export attributes via their sysfs directories.
199Drivers can declare attributes using a DRIVER_ATTR macro that works199Drivers can declare attributes using a DRIVER_ATTR_RW and DRIVER_ATTR_RO
200identically to the DEVICE_ATTR macro. 200macro that works identically to the DEVICE_ATTR_RW and DEVICE_ATTR_RO
201macros.
201 202
202Example:203Example:
203 204
204DRIVER_ATTR(debug,0644,show_debug,store_debug);205DRIVER_ATTR_RW(debug);
205 206
206This is equivalent to declaring:207This is equivalent to declaring:
207 208
Documentation/filesystems/cifs/AUTHORS+5−0
@@ -41,6 +41,11 @@ Igor Mammedov (DFS support) · 40 unmodified lines
41Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)41Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)
42Scott Lovenberg42Scott Lovenberg
43Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)43Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)
44Aurelien Aptel (for DFS SMB3 work and some key bug fixes)
45Ronnie Sahlberg (for SMB3 xattr work and bug fixes)
46Shirish Pargaonkar (for many ACL patches over the years)
47Sachin Prabhu (many bug fixes, including for reconnect, copy offload and security)
48
44 49
45Test case and Bug Report contributors50Test case and Bug Report contributors
46-------------------------------------51-------------------------------------
Documentation/filesystems/cifs/README+38−43
@@ -1,10 +1,14 @@
1The CIFS VFS support for Linux supports many advanced network filesystem 1This module supports the SMB3 family of advanced network protocols (as well
2features such as hierarchical dfs like namespace, hardlinks, locking and more. 2as older dialects, originally called "CIFS" or SMB1).
3
4The CIFS VFS module for Linux supports many advanced network filesystem
5features such as hierarchical DFS like namespace, hardlinks, locking and more.
3It was designed to comply with the SNIA CIFS Technical Reference (which 6It was designed to comply with the SNIA CIFS Technical Reference (which
4supersedes the 1992 X/Open SMB Standard) as well as to perform best practice 7supersedes the 1992 X/Open SMB Standard) as well as to perform best practice
5practical interoperability with Windows 2000, Windows XP, Samba and equivalent 8practical interoperability with Windows 2000, Windows XP, Samba and equivalent
6servers. This code was developed in participation with the Protocol Freedom9servers. This code was developed in participation with the Protocol Freedom
7Information Foundation.10Information Foundation. CIFS and now SMB3 has now become a defacto
11standard for interoperating between Macs and Windows and major NAS appliances.
8 12
9Please see13Please see
10 http://protocolfreedom.org/ and14 http://protocolfreedom.org/ and
@@ -15,30 +19,11 @@ for more details. · 4 unmodified lines
15For questions or bug reports please contact:19For questions or bug reports please contact:
16 sfrench@samba.org (sfrench@us.ibm.com) 20 sfrench@samba.org (sfrench@us.ibm.com)
17 21
22See the project page at: https://wiki.samba.org/index.php/LinuxCIFS_utils
23
18Build instructions:24Build instructions:
19==================25==================
20For Linux 2.4:26For Linux:
211) Get the kernel source (e.g.from http://www.kernel.org)
22and download the cifs vfs source (see the project page
23at http://us1.samba.org/samba/Linux_CIFS_client.html)
24and change directory into the top of the kernel directory
25then patch the kernel (e.g. "patch -p1 < cifs_24.patch")
26to add the cifs vfs to your kernel configure options if
27it has not already been added (e.g. current SuSE and UL
28users do not need to apply the cifs_24.patch since the cifs vfs is
29already in the kernel configure menu) and then
30mkdir linux/fs/cifs and then copy the current cifs vfs files from
31the cifs download to your kernel build directory e.g.
32
33 cp <cifs_download_dir>/fs/cifs/* to <kernel_download_dir>/fs/cifs
34
352) make menuconfig (or make xconfig)
363) select cifs from within the network filesystem choices
374) save and exit
385) make dep
396) make modules (or "make" if CIFS VFS not to be built as a module)
40
41For Linux 2.6:
421) Download the kernel (e.g. from http://www.kernel.org)271) Download the kernel (e.g. from http://www.kernel.org)
43and change directory into the top of the kernel directory tree28and change directory into the top of the kernel directory tree
44(e.g. /usr/src/linux-2.5.73)29(e.g. /usr/src/linux-2.5.73)
@@ -61,16 +46,13 @@ would simply type "make install"). · 16 unmodified lines
61If you do not have the utility mount.cifs (in the Samba 3.0 source tree and on 46If you do not have the utility mount.cifs (in the Samba 3.0 source tree and on
62the CIFS VFS web site) copy it to the same directory in which mount.smbfs and 47the CIFS VFS web site) copy it to the same directory in which mount.smbfs and
63similar files reside (usually /sbin). Although the helper software is not 48similar files reside (usually /sbin). Although the helper software is not
64required, mount.cifs is recommended. Eventually the Samba 3.0 utility program 49required, mount.cifs is recommended. Most distros include a "cifs-utils"
65"net" may also be helpful since it may someday provide easier mount syntax for50package that includes this utility so it is recommended to install this.
66users who are used to Windows e.g.51
67 net use <mount point> <UNC name or cifs URL>
68Note that running the Winbind pam/nss module (logon service) on all of your52Note that running the Winbind pam/nss module (logon service) on all of your
69Linux clients is useful in mapping Uids and Gids consistently across the53Linux clients is useful in mapping Uids and Gids consistently across the
70domain to the proper network user. The mount.cifs mount helper can be54domain to the proper network user. The mount.cifs mount helper can be
71trivially built from Samba 3.0 or later source e.g. by executing:55found at cifs-utils.git on git.samba.org
72
73 gcc samba/source/client/mount.cifs.c -o mount.cifs
74 56
75If cifs is built as a module, then the size and number of network buffers57If cifs is built as a module, then the size and number of network buffers
76and maximum number of simultaneous requests to one server can be configured.58and maximum number of simultaneous requests to one server can be configured.
@@ -79,6 +61,18 @@ Changing these from their defaults is not recommended. By executing modinfo · 2 unmodified lines
79on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made61on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made
80at module initialization time (by running insmod cifs.ko) can be seen.62at module initialization time (by running insmod cifs.ko) can be seen.
81 63
64Recommendations
65===============
66To improve security the SMB2.1 dialect or later (usually will get SMB3) is now
67the new default. To use old dialects (e.g. to mount Windows XP) use "vers=1.0"
68on mount (or vers=2.0 for Windows Vista). Note that the CIFS (vers=1.0) is
69much older and less secure than the default dialect SMB3 which includes
70many advanced security features such as downgrade attack detection
71and encrypted shares and stronger signing and authentication algorithms.
72There are additional mount options that may be helpful for SMB3 to get
73improved POSIX behavior (NB: can use vers=3.0 to force only SMB3, never 2.1):
74 "mfsymlinks" and "cifsacl" and "idsfromsid"
75
82Allowing User Mounts76Allowing User Mounts
83====================77====================
84To permit users to mount and unmount over directories they own is possible78To permit users to mount and unmount over directories they own is possible
@@ -98,9 +92,7 @@ and execution of suid programs on the remote target would be enabled · 13 unmodified lines
98by default. This can be changed, as with nfs and other filesystems, 92by default. This can be changed, as with nfs and other filesystems,
99by simply specifying "nosuid" among the mount options. For user mounts 93by simply specifying "nosuid" among the mount options. For user mounts
100though to be able to pass the suid flag to mount requires rebuilding 94though to be able to pass the suid flag to mount requires rebuilding
101mount.cifs with the following flag: 95mount.cifs with the following flag: CIFS_ALLOW_USR_SUID
102
103 gcc samba/source/client/mount.cifs.c -DCIFS_ALLOW_USR_SUID -o mount.cifs
104 96
105There is a corresponding manual page for cifs mounting in the Samba 3.0 and97There is a corresponding manual page for cifs mounting in the Samba 3.0 and
106later source tree in docs/manpages/mount.cifs.8 98later source tree in docs/manpages/mount.cifs.8
@@ -189,18 +181,18 @@ applications running on the same server as Samba. · 82 unmodified lines
189Use instructions:181Use instructions:
190================182================
191Once the CIFS VFS support is built into the kernel or installed as a module 183Once the CIFS VFS support is built into the kernel or installed as a module
192(cifs.o), you can use mount syntax like the following to access Samba or Windows 184(cifs.ko), you can use mount syntax like the following to access Samba or
193servers: 185Mac or Windows servers:
194 186
195 mount -t cifs //9.53.216.11/e$ /mnt -o user=myname,pass=mypassword187 mount -t cifs //9.53.216.11/e$ /mnt -o username=myname,password=mypassword
196 188
197Before -o the option -v may be specified to make the mount.cifs189Before -o the option -v may be specified to make the mount.cifs
198mount helper display the mount steps more verbosely. 190mount helper display the mount steps more verbosely.
199After -o the following commonly used cifs vfs specific options191After -o the following commonly used cifs vfs specific options
200are supported:192are supported:
201 193
202 user=<username>194 username=<username>
203 pass=<password>195 password=<password>
204 domain=<domain name>196 domain=<domain name>
205 197
206Other cifs mount options are described below. Use of TCP names (in addition to198Other cifs mount options are described below. Use of TCP names (in addition to
@@ -246,13 +238,16 @@ the Server's registry. Samba starting with version 3.10 will allow such · 39 unmodified lines
246filenames (ie those which contain valid Linux characters, which normally238filenames (ie those which contain valid Linux characters, which normally
247would be forbidden for Windows/CIFS semantics) as long as the server is239would be forbidden for Windows/CIFS semantics) as long as the server is
248configured for Unix Extensions (and the client has not disabled240configured for Unix Extensions (and the client has not disabled
249/proc/fs/cifs/LinuxExtensionsEnabled).241/proc/fs/cifs/LinuxExtensionsEnabled). In addition the mount option
250 242"mapposix" can be used on CIFS (vers=1.0) to force the mapping of
243illegal Windows/NTFS/SMB characters to a remap range (this mount parm
244is the default for SMB3). This remap ("mapposix") range is also
245compatible with Mac (and "Services for Mac" on some older Windows).
251 246
252CIFS VFS Mount Options247CIFS VFS Mount Options
253======================248======================
254A partial list of the supported mount options follows:249A partial list of the supported mount options follows:
255 user The user name to use when trying to establish250 username The user name to use when trying to establish
256 the CIFS session.251 the CIFS session.
257 password The user password. If the mount helper is252 password The user password. If the mount helper is
258 installed, the user will be prompted for password253 installed, the user will be prompted for password
Documentation/filesystems/cifs/TODO+34−38
@@ -1,4 +1,4 @@
1Version 2.03 August 1, 20141Version 2.04 September 13, 2017
2 2
3A Partial List of Missing Features3A Partial List of Missing Features
4==================================4==================================
@@ -8,73 +8,69 @@ for visible, important contributions to this module. Here · 3 unmodified lines
8is a partial list of the known problems and missing features:8is a partial list of the known problems and missing features:
9 9
10a) SMB3 (and SMB3.02) missing optional features:10a) SMB3 (and SMB3.02) missing optional features:
11 - RDMA11 - RDMA (started)
12 - multichannel (started)12 - multichannel (started)
13 - directory leases (improved metadata caching)13 - directory leases (improved metadata caching)
14 - T10 copy offload (copy chunk is only mechanism supported)14 - T10 copy offload (copy chunk is only mechanism supported)
15 - encrypted shares
16 15
17b) improved sparse file support16b) improved sparse file support
18 17
19c) Directory entry caching relies on a 1 second timer, rather than18c) Directory entry caching relies on a 1 second timer, rather than
20using FindNotify or equivalent. - (started)19using Directory Leases
21 20
22d) quota support (needs minor kernel change since quota calls21d) quota support (needs minor kernel change since quota calls
23to make it to network filesystems or deviceless filesystems)22to make it to network filesystems or deviceless filesystems)
24 23
25e) improve support for very old servers (OS/2 and Win9x for example)24e) Better optimize open to reduce redundant opens (using reference
26Including support for changing the time remotely (utimes command).25counts more) and to improve use of compounding in SMB3 to reduce
26number of roundtrips.
27 27
28f) hook lower into the sockets api (as NFS/SunRPC does) to avoid the28f) Finish inotify support so kde and gnome file list windows
29extra copy in/out of the socket buffers in some cases.
30
31g) Better optimize open (and pathbased setfilesize) to reduce the
32oplock breaks coming from windows srv. Piggyback identical file
33opens on top of each other by incrementing reference count rather
34than resending (helps reduce server resource utilization and avoid
35spurious oplock breaks).
36
37h) Add support for storing symlink info to Windows servers
38in the Extended Attribute format their SFU clients would recognize.
39
40i) Finish inotify support so kde and gnome file list windows
41will autorefresh (partially complete by Asser). Needs minor kernel29will autorefresh (partially complete by Asser). Needs minor kernel
42vfs change to support removing D_NOTIFY on a file. 30vfs change to support removing D_NOTIFY on a file.
43 31
44j) Add GUI tool to configure /proc/fs/cifs settings and for display of32g) Add GUI tool to configure /proc/fs/cifs settings and for display of
45the CIFS statistics (started)33the CIFS statistics (started)
46 34
47k) implement support for security and trusted categories of xattrs35h) implement support for security and trusted categories of xattrs
48(requires minor protocol extension) to enable better support for SELINUX36(requires minor protocol extension) to enable better support for SELINUX
49 37
50l) Implement O_DIRECT flag on open (already supported on mount)38i) Implement O_DIRECT flag on open (already supported on mount)
51 39
52m) Create UID mapping facility so server UIDs can be mapped on a per40j) Create UID mapping facility so server UIDs can be mapped on a per
53mount or a per server basis to client UIDs or nobody if no mapping41mount or a per server basis to client UIDs or nobody if no mapping
54exists. This is helpful when Unix extensions are negotiated to42exists. Also better integration with winbind for resolving SID owners
55allow better permission checking when UIDs differ on the server43
56and client. Add new protocol request to the CIFS protocol 44k) Add tools to take advantage of more smb3 specific ioctls and features
57standard for asking the server for the corresponding name of a45
58particular uid.46l) encrypted file support
47
48m) improved stats gathering, tools (perhaps integration with nfsometer?)
59 49
60n) DOS attrs - returned as pseudo-xattr in Samba format (check VFAT and NTFS for this too)50n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
51file attribute via chflags) and improve user space tools for managing and
52viewing them.
61 53
62o) mount check for unmatched uids54o) mount helper GUI (to simplify the various configuration options on mount)
63 55
64p) Add support for new vfs entry point for fallocate56p) autonegotiation of dialects (offering more than one dialect ie SMB3.02,
57SMB3, SMB2.1 not just SMB3).
65 58
66q) Add tools to take advantage of cifs/smb3 specific ioctls and features59q) Allow mount.cifs to be more verbose in reporting errors with dialect
67such as "CopyChunk" (fast server side file copy)60or unsupported feature errors.
68 61
69r) encrypted file support62r) updating cifs documentation, and user guid.
70 63
71s) improved stats gathering, tools (perhaps integration with nfsometer?)64s) Addressing bugs found by running a broader set of xfstests in standard
65file system xfstest suite.
72 66
73t) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed67t) split cifs and smb3 support into separate modules so legacy (and less
74file attribute via chflags)68secure) CIFS dialect can be disabled in environments that don't need it
69and simplify the code.
75 70
76u) mount helper GUI (to simplify the various configuration options on mount)71u) Finish up SMB3.1.1 dialect support
77 72
73v) POSIX Extensions for SMB3.1.1
78 74
79KNOWN BUGS75KNOWN BUGS
80====================================76====================================
Documentation/filesystems/cifs/cifs.txt+14−10
@@ -1,24 +1,28 @@
1 This is the client VFS module for the Common Internet File System1 This is the client VFS module for the SMB3 NAS protocol as well
2 (CIFS) protocol which is the successor to the Server Message Block 2 older dialects such as the Common Internet File System (CIFS)
3 protocol which was the successor to the Server Message Block
3 (SMB) protocol, the native file sharing mechanism for most early4 (SMB) protocol, the native file sharing mechanism for most early
4 PC operating systems. New and improved versions of CIFS are now5 PC operating systems. New and improved versions of CIFS are now
5 called SMB2 and SMB3. These dialects are also supported by the6 called SMB2 and SMB3. These dialects are also supported by the
6 CIFS VFS module. CIFS is fully supported by network7 CIFS VFS module. CIFS is fully supported by network
7 file servers such as Windows 2000, 2003, 2008 and 20128 file servers such as Windows 2000, 2003, 2008, 2012 and 2016
8 as well by Samba (which provides excellent CIFS9 as well by Samba (which provides excellent CIFS
9 server support for Linux and many other operating systems), so10 server support for Linux and many other operating systems), Apple
11 systems, as well as most Network Attached Storage vendors, so
10 this network filesystem client can mount to a wide variety of12 this network filesystem client can mount to a wide variety of
11 servers.13 servers.
12 14
13 The intent of this module is to provide the most advanced network15 The intent of this module is to provide the most advanced network
14 file system function for CIFS compliant servers, including better16 file system function for SMB3 compliant servers, including advanced
15 POSIX compliance, secure per-user session establishment, high17 security features, excellent parallelized high performance i/o, better
16 performance safe distributed caching (oplock), optional packet18 POSIX compliance, secure per-user session establishment, encryption,
19 high performance safe distributed caching (leases/oplocks), optional packet
17 signing, large files, Unicode support and other internationalization20 signing, large files, Unicode support and other internationalization
18 improvements. Since both Samba server and this filesystem client support21 improvements. Since both Samba server and this filesystem client support
19 the CIFS Unix extensions, the combination can provide a reasonable 22 the CIFS Unix extensions (and in the future SMB3 POSIX extensions),
20 alternative to NFSv4 for fileserving in some Linux to Linux environments,23 the combination can provide a reasonable alternative to other network and
21 not just in Linux to Windows environments.24 cluster file systems for fileserving in some Linux to Linux environments,
25 not just in Linux to Windows (or Linux to Mac) environments.
22 26
23 This filesystem has an mount utility (mount.cifs) that can be obtained from27 This filesystem has an mount utility (mount.cifs) that can be obtained from
24 28
Documentation/filesystems/overlayfs.txt+4−1
@@ -210,8 +210,11 @@ path as another overlay mount and it may use a lower layer path that is · 209 unmodified lines
210beneath or above the path of another overlay lower layer path.210beneath or above the path of another overlay lower layer path.
211 211
212Using an upper layer path and/or a workdir path that are already used by212Using an upper layer path and/or a workdir path that are already used by
213another overlay mount is not allowed and will fail with EBUSY. Using213another overlay mount is not allowed and may fail with EBUSY. Using
214partially overlapping paths is not allowed but will not fail with EBUSY.214partially overlapping paths is not allowed but will not fail with EBUSY.
215If files are accessed from two overlayfs mounts which share or overlap the
216upper layer and/or workdir path the behavior of the overlay is undefined,
217though it will not result in a crash or deadlock.
215 218
216Mounting an overlay using an upper layer path, where the upper layer path219Mounting an overlay using an upper layer path, where the upper layer path
217was previously used by another mounted overlay in combination with a220was previously used by another mounted overlay in combination with a
Documentation/filesystems/sysfs.txt+2−1
@@ -366,7 +366,8 @@ struct driver_attribute { · 365 unmodified lines
366 366
367Declaring:367Declaring:
368 368
369DRIVER_ATTR(_name, _mode, _show, _store)369DRIVER_ATTR_RO(_name)
370DRIVER_ATTR_RW(_name)
370 371
371Creation/Removal:372Creation/Removal:
372 373
Documentation/i2c/busses/i2c-i801+1−0
@@ -36,6 +36,7 @@ Supported adapters: · 35 unmodified lines
36 * Intel Gemini Lake (SOC)36 * Intel Gemini Lake (SOC)
37 * Intel Cannon Lake-H (PCH)37 * Intel Cannon Lake-H (PCH)
38 * Intel Cannon Lake-LP (PCH)38 * Intel Cannon Lake-LP (PCH)
39 * Intel Cedar Fork (PCH)
39 Datasheets: Publicly available at the Intel website40 Datasheets: Publicly available at the Intel website
40 41
41On Intel Patsburg and later chipsets, both the normal host SMBus controller42On Intel Patsburg and later chipsets, both the normal host SMBus controller
Documentation/networking/filter.txt+1−1
@@ -337,7 +337,7 @@ Examples for low-level BPF: · 336 unmodified lines
337 jeq #14, good /* __NR_rt_sigprocmask */337 jeq #14, good /* __NR_rt_sigprocmask */
338 jeq #13, good /* __NR_rt_sigaction */338 jeq #13, good /* __NR_rt_sigaction */
339 jeq #35, good /* __NR_nanosleep */339 jeq #35, good /* __NR_nanosleep */
340 bad: ret #0 /* SECCOMP_RET_KILL */340 bad: ret #0 /* SECCOMP_RET_KILL_THREAD */
341 good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */341 good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
342 342
343The above example code can be placed into a file (here called "foo"), and343The above example code can be placed into a file (here called "foo"), and
Documentation/networking/ip-sysctl.txt+14−4
@@ -1680,6 +1680,9 @@ accept_dad - INTEGER · 1679 unmodified lines
1680 2: Enable DAD, and disable IPv6 operation if MAC-based duplicate1680 2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
1681 link-local address has been found.1681 link-local address has been found.
1682 1682
1683 DAD operation and mode on a given interface will be selected according
1684 to the maximum value of conf/{all,interface}/accept_dad.
1685
1683force_tllao - BOOLEAN1686force_tllao - BOOLEAN
1684 Enable sending the target link-layer address option even when1687 Enable sending the target link-layer address option even when
1685 responding to a unicast neighbor solicitation.1688 responding to a unicast neighbor solicitation.
@@ -1727,16 +1730,23 @@ suppress_frag_ndisc - INTEGER · 41 unmodified lines
1727 1730
1728optimistic_dad - BOOLEAN1731optimistic_dad - BOOLEAN
1729 Whether to perform Optimistic Duplicate Address Detection (RFC 4429).1732 Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
1730 0: disabled (default)1733 0: disabled (default)
1731 1: enabled1734 1: enabled
1735
1736 Optimistic Duplicate Address Detection for the interface will be enabled
1737 if at least one of conf/{all,interface}/optimistic_dad is set to 1,
1738 it will be disabled otherwise.
1732 1739
1733use_optimistic - BOOLEAN1740use_optimistic - BOOLEAN
1734 If enabled, do not classify optimistic addresses as deprecated during1741 If enabled, do not classify optimistic addresses as deprecated during
1735 source address selection. Preferred addresses will still be chosen1742 source address selection. Preferred addresses will still be chosen
1736 before optimistic addresses, subject to other ranking in the source1743 before optimistic addresses, subject to other ranking in the source
1737 address selection algorithm.1744 address selection algorithm.
1738 0: disabled (default)1745 0: disabled (default)
1739 1: enabled1746 1: enabled
1747
1748 This will be enabled if at least one of
1749 conf/{all,interface}/use_optimistic is set to 1, disabled otherwise.
1740 1750
1741stable_secret - IPv6 address1751stable_secret - IPv6 address
1742 This IPv6 address will be used as a secret to generate IPv61752 This IPv6 address will be used as a secret to generate IPv6
Documentation/networking/switchdev.txt+34−34
@@ -13,42 +13,42 @@ an example setup using a data-center-class switch ASIC chip. Other setups · 12 unmodified lines
13with SR-IOV or soft switches, such as OVS, are possible.13with SR-IOV or soft switches, such as OVS, are possible.
14 14
15 15
16                             User-space tools16 User-space tools
17 17
18       user space                   |18 user space |
19      +-------------------------------------------------------------------+19 +-------------------------------------------------------------------+
20       kernel                       | Netlink20 kernel | Netlink
21                                    |21 |
22                     +--------------+-------------------------------+22 +--------------+-------------------------------+
23                     |         Network stack                        |23 | Network stack |
24                     |           (Linux)                            |24 | (Linux) |
25                     |                                              |25 | |
26                     +----------------------------------------------+26 +----------------------------------------------+
27 27
28 sw1p2 sw1p4 sw1p628 sw1p2 sw1p4 sw1p6
29                      sw1p1  + sw1p3 +  sw1p5 +         eth129 sw1p1 + sw1p3 + sw1p5 + eth1
30                        +    |    +    |    +    |            +30 + | + | + | +
31                        |    |    |    |    |    |            |31 | | | | | | |
32                     +--+----+----+----+-+--+----+---+  +-----+-----+32 +--+----+----+----+----+----+---+ +-----+-----+
33                     |         Switch driver         |  |    mgmt   |33 | Switch driver | | mgmt |
34                     |        (this document)        |  |   driver  |34 | (this document) | | driver |
35                     |                               |  |           |35 | | | |
36                     +--------------+----------------+  +-----------+36 +--------------+----------------+ +-----------+
37                                    |37 |
38       kernel                       | HW bus (eg PCI)38 kernel | HW bus (eg PCI)
39      +-------------------------------------------------------------------+39 +-------------------------------------------------------------------+
40       hardware                     |40 hardware |
41                     +--------------+---+------------+41 +--------------+----------------+
42                     |         Switch device (sw1)   |42 | Switch device (sw1) |
43                     |  +----+                       +--------+43 | +----+ +--------+
44                     |  |    v offloaded data path   | mgmt port44 | | v offloaded data path | mgmt port
45                     |  |    |                       |45 | | | |
46                     +--|----|----+----+----+----+---+46 +--|----|----+----+----+----+---+
47                        |    |    |    |    |    |47 | | | | | |
48                        +    +    +    +    +    +48 + + + + + +
49                       p1   p2   p3   p4   p5   p649 p1 p2 p3 p4 p5 p6
50 50
51                             front-panel ports51 front-panel ports
52 52
53 53
54 Fig 1.54 Fig 1.
Documentation/sysctl/kernel.txt+1−0
@@ -75,6 +75,7 @@ show up in /proc/sys/kernel: · 74 unmodified lines
75- reboot-cmd [ SPARC only ]75- reboot-cmd [ SPARC only ]
76- rtsig-max76- rtsig-max
77- rtsig-nr77- rtsig-nr
78- seccomp/ ==> Documentation/userspace-api/seccomp_filter.rst
78- sem79- sem
79- sem_next_id [ sysv ipc ]80- sem_next_id [ sysv ipc ]
80- sg-big-buff [ generic SCSI device (sg) ]81- sg-big-buff [ generic SCSI device (sg) ]
Documentation/userspace-api/seccomp_filter.rst+50−2
@@ -87,11 +87,16 @@ Return values · 86 unmodified lines
87A seccomp filter may return any of the following values. If multiple87A seccomp filter may return any of the following values. If multiple
88filters exist, the return value for the evaluation of a given system88filters exist, the return value for the evaluation of a given system
89call will always use the highest precedent value. (For example,89call will always use the highest precedent value. (For example,
90``SECCOMP_RET_KILL`` will always take precedence.)90``SECCOMP_RET_KILL_PROCESS`` will always take precedence.)
91 91
92In precedence order, they are:92In precedence order, they are:
93 93
94``SECCOMP_RET_KILL``:94``SECCOMP_RET_KILL_PROCESS``:
95 Results in the entire process exiting immediately without executing
96 the system call. The exit status of the task (``status & 0x7f``)
97 will be ``SIGSYS``, not ``SIGKILL``.
98
99``SECCOMP_RET_KILL_THREAD``:
95 Results in the task exiting immediately without executing the100 Results in the task exiting immediately without executing the
96 system call. The exit status of the task (``status & 0x7f``) will101 system call. The exit status of the task (``status & 0x7f``) will
97 be ``SIGSYS``, not ``SIGKILL``.102 be ``SIGSYS``, not ``SIGKILL``.
@@ -141,6 +146,15 @@ In precedence order, they are: · 43 unmodified lines
141 allow use of ptrace, even of other sandboxed processes, without146 allow use of ptrace, even of other sandboxed processes, without
142 extreme care; ptracers can use this mechanism to escape.)147 extreme care; ptracers can use this mechanism to escape.)
143 148
149``SECCOMP_RET_LOG``:
150 Results in the system call being executed after it is logged. This
151 should be used by application developers to learn which syscalls their
152 application needs without having to iterate through multiple test and
153 development cycles to build the list.
154
155 This action will only be logged if "log" is present in the
156 actions_logged sysctl string.
157
144``SECCOMP_RET_ALLOW``:158``SECCOMP_RET_ALLOW``:
145 Results in the system call being executed.159 Results in the system call being executed.
146 160
@@ -169,7 +183,41 @@ The ``samples/seccomp/`` directory contains both an x86-specific example · 22 unmodified lines
169and a more generic example of a higher level macro interface for BPF183and a more generic example of a higher level macro interface for BPF
170program generation.184program generation.
171 185
186Sysctls
187=======
172 188
189Seccomp's sysctl files can be found in the ``/proc/sys/kernel/seccomp/``
190directory. Here's a description of each file in that directory:
191
192``actions_avail``:
193 A read-only ordered list of seccomp return values (refer to the
194 ``SECCOMP_RET_*`` macros above) in string form. The ordering, from
195 left-to-right, is the least permissive return value to the most
196 permissive return value.
197
198 The list represents the set of seccomp return values supported
199 by the kernel. A userspace program may use this list to
200 determine if the actions found in the ``seccomp.h``, when the
201 program was built, differs from the set of actions actually
202 supported in the current running kernel.
203
204``actions_logged``:
205 A read-write ordered list of seccomp return values (refer to the
206 ``SECCOMP_RET_*`` macros above) that are allowed to be logged. Writes
207 to the file do not need to be in ordered form but reads from the file
208 will be ordered in the same way as the actions_avail sysctl.
209
210 It is important to note that the value of ``actions_logged`` does not
211 prevent certain actions from being logged when the audit subsystem is
212 configured to audit a task. If the action is not found in
213 ``actions_logged`` list, the final decision on whether to audit the
214 action for that task is ultimately left up to the audit subsystem to
215 decide for all seccomp return values other than ``SECCOMP_RET_ALLOW``.
216
217 The ``allow`` string is not accepted in the ``actions_logged`` sysctl
218 as it is not possible to log ``SECCOMP_RET_ALLOW`` actions. Attempting
219 to write ``allow`` to the sysctl will result in an EINVAL being
220 returned.
173 221
174Adding architecture support222Adding architecture support
175===========================223===========================
MAINTAINERS+35−12
@@ -352,6 +352,18 @@ L: linux-acpi@vger.kernel.org · 351 unmodified lines
352S: Maintained352S: Maintained
353F: drivers/acpi/arm64353F: drivers/acpi/arm64
354 354
355ACPI PMIC DRIVERS
356M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
357M: Len Brown <lenb@kernel.org>
358R: Andy Shevchenko <andy@infradead.org>
359R: Mika Westerberg <mika.westerberg@linux.intel.com>
360L: linux-acpi@vger.kernel.org
361Q: https://patchwork.kernel.org/project/linux-acpi/list/
362T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
363B: https://bugzilla.kernel.org
364S: Supported
365F: drivers/acpi/pmic/
366
355ACPI THERMAL DRIVER367ACPI THERMAL DRIVER
356M: Zhang Rui <rui.zhang@intel.com>368M: Zhang Rui <rui.zhang@intel.com>
357L: linux-acpi@vger.kernel.org369L: linux-acpi@vger.kernel.org
@@ -2853,7 +2865,6 @@ S: Supported · 2495 unmodified lines
2853F: drivers/scsi/bnx2i/2865F: drivers/scsi/bnx2i/
2854 2866
2855BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER2867BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
2856M: Yuval Mintz <Yuval.Mintz@cavium.com>
2857M: Ariel Elior <ariel.elior@cavium.com>2868M: Ariel Elior <ariel.elior@cavium.com>
2858M: everest-linux-l2@cavium.com2869M: everest-linux-l2@cavium.com
2859L: netdev@vger.kernel.org2870L: netdev@vger.kernel.org
@@ -5248,7 +5259,8 @@ S: Maintained · 2388 unmodified lines
5248F: drivers/iommu/exynos-iommu.c5259F: drivers/iommu/exynos-iommu.c
5249 5260
5250EZchip NPS platform support5261EZchip NPS platform support
5251M: Noam Camus <noamc@ezchip.com>5262M: Elad Kanfi <eladkan@mellanox.com>
5263M: Vineet Gupta <vgupta@synopsys.com>
5252S: Supported5264S: Supported
5253F: arch/arc/plat-eznps5265F: arch/arc/plat-eznps
5254F: arch/arc/boot/dts/eznps.dts5266F: arch/arc/boot/dts/eznps.dts
@@ -6643,8 +6655,8 @@ M: Alexander Aring <alex.aring@gmail.com> · 1388 unmodified lines
6643M: Stefan Schmidt <stefan@osg.samsung.com>6655M: Stefan Schmidt <stefan@osg.samsung.com>
6644L: linux-wpan@vger.kernel.org6656L: linux-wpan@vger.kernel.org
6645W: http://wpan.cakelab.org/6657W: http://wpan.cakelab.org/
6646T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git6658T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git
6647T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git6659T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git
6648S: Maintained6660S: Maintained
6649F: net/ieee802154/6661F: net/ieee802154/
6650F: net/mac802154/6662F: net/mac802154/
@@ -6727,7 +6739,7 @@ F: Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt · 76 unmodified lines
6727F: drivers/auxdisplay/img-ascii-lcd.c6739F: drivers/auxdisplay/img-ascii-lcd.c
6728 6740
6729IMGTEC IR DECODER DRIVER6741IMGTEC IR DECODER DRIVER
6730M: James Hogan <james.hogan@imgtec.com>6742M: James Hogan <jhogan@kernel.org>
6731S: Maintained6743S: Maintained
6732F: drivers/media/rc/img-ir/6744F: drivers/media/rc/img-ir/
6733 6745
@@ -7551,7 +7563,7 @@ F: arch/arm64/include/asm/kvm* · 817 unmodified lines
7551F: arch/arm64/kvm/7563F: arch/arm64/kvm/
7552 7564
7553KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)7565KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
7554M: James Hogan <james.hogan@imgtec.com>7566M: James Hogan <jhogan@kernel.org>
7555L: linux-mips@linux-mips.org7567L: linux-mips@linux-mips.org
7556S: Supported7568S: Supported
7557F: arch/mips/include/uapi/asm/kvm*7569F: arch/mips/include/uapi/asm/kvm*
@@ -8253,6 +8265,12 @@ L: libertas-dev@lists.infradead.org · 695 unmodified lines
8253S: Orphan8265S: Orphan
8254F: drivers/net/wireless/marvell/libertas/8266F: drivers/net/wireless/marvell/libertas/
8255 8267
8268MARVELL MACCHIATOBIN SUPPORT
8269M: Russell King <rmk@armlinux.org.uk>
8270L: linux-arm-kernel@lists.infradead.org
8271S: Maintained
8272F: arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
8273
8256MARVELL MV643XX ETHERNET DRIVER8274MARVELL MV643XX ETHERNET DRIVER
8257M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>8275M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
8258L: netdev@vger.kernel.org8276L: netdev@vger.kernel.org
@@ -8586,6 +8604,12 @@ M: Sean Wang <sean.wang@mediatek.com> · 327 unmodified lines
8586S: Maintained8604S: Maintained
8587F: drivers/media/rc/mtk-cir.c8605F: drivers/media/rc/mtk-cir.c
8588 8606
8607MEDIATEK PMIC LED DRIVER
8608M: Sean Wang <sean.wang@mediatek.com>
8609S: Maintained
8610F: drivers/leds/leds-mt6323.c
8611F: Documentation/devicetree/bindings/leds/leds-mt6323.txt
8612
8589MEDIATEK ETHERNET DRIVER8613MEDIATEK ETHERNET DRIVER
8590M: Felix Fietkau <nbd@openwrt.org>8614M: Felix Fietkau <nbd@openwrt.org>
8591M: John Crispin <john@phrozen.org>8615M: John Crispin <john@phrozen.org>
@@ -8868,7 +8892,7 @@ F: Documentation/devicetree/bindings/media/meson-ao-cec.txt · 276 unmodified lines
8868T: git git://linuxtv.org/media_tree.git8892T: git git://linuxtv.org/media_tree.git
8869 8893
8870METAG ARCHITECTURE8894METAG ARCHITECTURE
8871M: James Hogan <james.hogan@imgtec.com>8895M: James Hogan <jhogan@kernel.org>
8872L: linux-metag@vger.kernel.org8896L: linux-metag@vger.kernel.org
8873T: git git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/metag.git8897T: git git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/metag.git
8874S: Odd Fixes8898S: Odd Fixes
@@ -9337,7 +9361,7 @@ NETWORK BLOCK DEVICE (NBD) · 462 unmodified lines
9337M: Josef Bacik <jbacik@fb.com>9361M: Josef Bacik <jbacik@fb.com>
9338S: Maintained9362S: Maintained
9339L: linux-block@vger.kernel.org9363L: linux-block@vger.kernel.org
9340L: nbd-general@lists.sourceforge.net9364L: nbd@other.debian.org
9341F: Documentation/blockdev/nbd.txt9365F: Documentation/blockdev/nbd.txt
9342F: drivers/block/nbd.c9366F: drivers/block/nbd.c
9343F: include/uapi/linux/nbd.h9367F: include/uapi/linux/nbd.h
@@ -11047,7 +11071,6 @@ S: Supported · 1703 unmodified lines
11047F: drivers/scsi/qedi/11071F: drivers/scsi/qedi/
11048 11072
11049QLOGIC QL4xxx ETHERNET DRIVER11073QLOGIC QL4xxx ETHERNET DRIVER
11050M: Yuval Mintz <Yuval.Mintz@cavium.com>
11051M: Ariel Elior <Ariel.Elior@cavium.com>11074M: Ariel Elior <Ariel.Elior@cavium.com>
11052M: everest-linux-l2@cavium.com11075M: everest-linux-l2@cavium.com
11053L: netdev@vger.kernel.org11076L: netdev@vger.kernel.org
@@ -12915,9 +12938,9 @@ F: drivers/mmc/host/dw_mmc* · 1861 unmodified lines
12915SYNOPSYS HSDK RESET CONTROLLER DRIVER12938SYNOPSYS HSDK RESET CONTROLLER DRIVER
12916M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>12939M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
12917S: Supported12940S: Supported
12918F: drivers/reset/reset-hsdk-v1.c12941F: drivers/reset/reset-hsdk.c
12919F: include/dt-bindings/reset/snps,hsdk-v1-reset.h12942F: include/dt-bindings/reset/snps,hsdk-reset.h
12920F: Documentation/devicetree/bindings/reset/snps,hsdk-v1-reset.txt12943F: Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt
12921 12944
12922SYSTEM CONFIGURATION (SYSCON)12945SYSTEM CONFIGURATION (SYSCON)
12923M: Lee Jones <lee.jones@linaro.org>12946M: Lee Jones <lee.jones@linaro.org>
Makefile+3−3
@@ -1,7 +1,7 @@
1VERSION = 41VERSION = 4
2PATCHLEVEL = 142PATCHLEVEL = 14
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc14EXTRAVERSION = -rc4
5NAME = Fearless Coyote5NAME = Fearless Coyote
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
@@ -1172,11 +1172,11 @@ headers_check: headers_install · 1164 unmodified lines
1172 1172
1173PHONY += kselftest1173PHONY += kselftest
1174kselftest:1174kselftest:
1175 $(Q)$(MAKE) -C tools/testing/selftests run_tests1175 $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
1176 1176
1177PHONY += kselftest-clean1177PHONY += kselftest-clean
1178kselftest-clean:1178kselftest-clean:
1179 $(Q)$(MAKE) -C tools/testing/selftests clean1179 $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
1180 1180
1181PHONY += kselftest-merge1181PHONY += kselftest-merge
1182kselftest-merge:1182kselftest-merge:
arch/alpha/include/asm/mmu_context.h+1−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
8 */8 */
9 9
10#include <linux/mm_types.h>10#include <linux/mm_types.h>
11#include <linux/sched.h>
11 12
12#include <asm/machvec.h>13#include <asm/machvec.h>
13#include <asm/compiler.h>14#include <asm/compiler.h>
arch/arc/Kconfig+1−1
@@ -24,7 +24,7 @@ config ARC · 23 unmodified lines
24 select GENERIC_SMP_IDLE_THREAD24 select GENERIC_SMP_IDLE_THREAD
25 select HAVE_ARCH_KGDB25 select HAVE_ARCH_KGDB
26 select HAVE_ARCH_TRACEHOOK26 select HAVE_ARCH_TRACEHOOK
27 select HAVE_FUTEX_CMPXCHG27 select HAVE_FUTEX_CMPXCHG if FUTEX
28 select HAVE_IOREMAP_PROT28 select HAVE_IOREMAP_PROT
29 select HAVE_KPROBES29 select HAVE_KPROBES
30 select HAVE_KRETPROBES30 select HAVE_KRETPROBES
arch/arc/Makefile+0−2
@@ -6,8 +6,6 @@ · 5 unmodified lines
6# published by the Free Software Foundation.6# published by the Free Software Foundation.
7#7#
8 8
9UTS_MACHINE := arc
10
11ifeq ($(CROSS_COMPILE),)9ifeq ($(CROSS_COMPILE),)
12ifndef CONFIG_CPU_BIG_ENDIAN10ifndef CONFIG_CPU_BIG_ENDIAN
13CROSS_COMPILE := arc-linux-11CROSS_COMPILE := arc-linux-
arch/arc/boot/dts/axs10x_mb.dtsi+8−1
@@ -44,7 +44,14 @@ · 43 unmodified lines
44 44
45 mmcclk: mmcclk {45 mmcclk: mmcclk {
46 compatible = "fixed-clock";46 compatible = "fixed-clock";
47 clock-frequency = <50000000>;47 /*
48 * DW sdio controller has external ciu clock divider
49 * controlled via register in SDIO IP. It divides
50 * sdio_ref_clk (which comes from CGU) by 16 for
51 * default. So default mmcclk clock (which comes
52 * to sdk_in) is 25000000 Hz.
53 */
54 clock-frequency = <25000000>;
48 #clock-cells = <0>;55 #clock-cells = <0>;
49 };56 };
50 57
arch/arc/boot/dts/hsdk.dts+29−3
@@ -12,6 +12,7 @@ · 11 unmodified lines
12/dts-v1/;12/dts-v1/;
13 13
14#include <dt-bindings/net/ti-dp83867.h>14#include <dt-bindings/net/ti-dp83867.h>
15#include <dt-bindings/reset/snps,hsdk-reset.h>
15 16
16/ {17/ {
17 model = "snps,hsdk";18 model = "snps,hsdk";
@@ -57,10 +58,10 @@ · 39 unmodified lines
57 };58 };
58 };59 };
59 60
60 core_clk: core-clk {61 input_clk: input-clk {
61 #clock-cells = <0>;62 #clock-cells = <0>;
62 compatible = "fixed-clock";63 compatible = "fixed-clock";
63 clock-frequency = <500000000>;64 clock-frequency = <33333333>;
64 };65 };
65 66
66 cpu_intc: cpu-interrupt-controller {67 cpu_intc: cpu-interrupt-controller {
@@ -102,6 +103,19 @@ · 35 unmodified lines
102 103
103 ranges = <0x00000000 0xf0000000 0x10000000>;104 ranges = <0x00000000 0xf0000000 0x10000000>;
104 105
106 cgu_rst: reset-controller@8a0 {
107 compatible = "snps,hsdk-reset";
108 #reset-cells = <1>;
109 reg = <0x8A0 0x4>, <0xFF0 0x4>;
110 };
111
112 core_clk: core-clk@0 {
113 compatible = "snps,hsdk-core-pll-clock";
114 reg = <0x00 0x10>, <0x14B8 0x4>;
115 #clock-cells = <0>;
116 clocks = <&input_clk>;
117 };
118
105 serial: serial@5000 {119 serial: serial@5000 {
106 compatible = "snps,dw-apb-uart";120 compatible = "snps,dw-apb-uart";
107 reg = <0x5000 0x100>;121 reg = <0x5000 0x100>;
@@ -120,7 +134,17 @@ · 12 unmodified lines
120 134
121 mmcclk_ciu: mmcclk-ciu {135 mmcclk_ciu: mmcclk-ciu {
122 compatible = "fixed-clock";136 compatible = "fixed-clock";
123 clock-frequency = <100000000>;137 /*
138 * DW sdio controller has external ciu clock divider
139 * controlled via register in SDIO IP. Due to its
140 * unexpected default value (it should devide by 1
141 * but it devides by 8) SDIO IP uses wrong clock and
142 * works unstable (see STAR 9001204800)
143 * So add temporary fix and change clock frequency
144 * from 100000000 to 12500000 Hz until we fix dw sdio
145 * driver itself.
146 */
147 clock-frequency = <12500000>;
124 #clock-cells = <0>;148 #clock-cells = <0>;
125 };149 };
126 150
@@ -141,6 +165,8 @@ · 14 unmodified lines
141 clocks = <&gmacclk>;165 clocks = <&gmacclk>;
142 clock-names = "stmmaceth";166 clock-names = "stmmaceth";
143 phy-handle = <&phy0>;167 phy-handle = <&phy0>;
168 resets = <&cgu_rst HSDK_ETH_RESET>;
169 reset-names = "stmmaceth";
144 170
145 mdio {171 mdio {
146 #address-cells = <1>;172 #address-cells = <1>;
arch/arc/configs/axs101_defconfig+1−1
@@ -105,7 +105,7 @@ CONFIG_NLS_ISO8859_1=y · 104 unmodified lines
105# CONFIG_ENABLE_WARN_DEPRECATED is not set105# CONFIG_ENABLE_WARN_DEPRECATED is not set
106# CONFIG_ENABLE_MUST_CHECK is not set106# CONFIG_ENABLE_MUST_CHECK is not set
107CONFIG_STRIP_ASM_SYMS=y107CONFIG_STRIP_ASM_SYMS=y
108CONFIG_LOCKUP_DETECTOR=y108CONFIG_SOFTLOCKUP_DETECTOR=y
109CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10109CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
110# CONFIG_SCHED_DEBUG is not set110# CONFIG_SCHED_DEBUG is not set
111# CONFIG_DEBUG_PREEMPT is not set111# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/axs103_defconfig+1−1
@@ -104,7 +104,7 @@ CONFIG_NLS_ISO8859_1=y · 103 unmodified lines
104# CONFIG_ENABLE_WARN_DEPRECATED is not set104# CONFIG_ENABLE_WARN_DEPRECATED is not set
105# CONFIG_ENABLE_MUST_CHECK is not set105# CONFIG_ENABLE_MUST_CHECK is not set
106CONFIG_STRIP_ASM_SYMS=y106CONFIG_STRIP_ASM_SYMS=y
107CONFIG_LOCKUP_DETECTOR=y107CONFIG_SOFTLOCKUP_DETECTOR=y
108CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10108CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
109# CONFIG_SCHED_DEBUG is not set109# CONFIG_SCHED_DEBUG is not set
110# CONFIG_DEBUG_PREEMPT is not set110# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/axs103_smp_defconfig+1−1
@@ -107,7 +107,7 @@ CONFIG_NLS_ISO8859_1=y · 106 unmodified lines
107# CONFIG_ENABLE_WARN_DEPRECATED is not set107# CONFIG_ENABLE_WARN_DEPRECATED is not set
108# CONFIG_ENABLE_MUST_CHECK is not set108# CONFIG_ENABLE_MUST_CHECK is not set
109CONFIG_STRIP_ASM_SYMS=y109CONFIG_STRIP_ASM_SYMS=y
110CONFIG_LOCKUP_DETECTOR=y110CONFIG_SOFTLOCKUP_DETECTOR=y
111CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10111CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
112# CONFIG_SCHED_DEBUG is not set112# CONFIG_SCHED_DEBUG is not set
113# CONFIG_DEBUG_PREEMPT is not set113# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/haps_hs_smp_defconfig+1−1
@@ -84,5 +84,5 @@ CONFIG_TMPFS=y · 83 unmodified lines
84CONFIG_NFS_FS=y84CONFIG_NFS_FS=y
85# CONFIG_ENABLE_WARN_DEPRECATED is not set85# CONFIG_ENABLE_WARN_DEPRECATED is not set
86# CONFIG_ENABLE_MUST_CHECK is not set86# CONFIG_ENABLE_MUST_CHECK is not set
87CONFIG_LOCKUP_DETECTOR=y87CONFIG_SOFTLOCKUP_DETECTOR=y
88# CONFIG_DEBUG_PREEMPT is not set88# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/hsdk_defconfig+2−1
@@ -63,6 +63,7 @@ CONFIG_MMC_SDHCI=y · 62 unmodified lines
63CONFIG_MMC_SDHCI_PLTFM=y63CONFIG_MMC_SDHCI_PLTFM=y
64CONFIG_MMC_DW=y64CONFIG_MMC_DW=y
65# CONFIG_IOMMU_SUPPORT is not set65# CONFIG_IOMMU_SUPPORT is not set
66CONFIG_RESET_HSDK=y
66CONFIG_EXT3_FS=y67CONFIG_EXT3_FS=y
67CONFIG_VFAT_FS=y68CONFIG_VFAT_FS=y
68CONFIG_TMPFS=y69CONFIG_TMPFS=y
@@ -72,7 +73,7 @@ CONFIG_NLS_ISO8859_1=y · 3 unmodified lines
72# CONFIG_ENABLE_WARN_DEPRECATED is not set73# CONFIG_ENABLE_WARN_DEPRECATED is not set
73# CONFIG_ENABLE_MUST_CHECK is not set74# CONFIG_ENABLE_MUST_CHECK is not set
74CONFIG_STRIP_ASM_SYMS=y75CONFIG_STRIP_ASM_SYMS=y
75CONFIG_LOCKUP_DETECTOR=y76CONFIG_SOFTLOCKUP_DETECTOR=y
76CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=1077CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
77# CONFIG_SCHED_DEBUG is not set78# CONFIG_SCHED_DEBUG is not set
78# CONFIG_DEBUG_PREEMPT is not set79# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/vdk_hs38_defconfig+1−1
@@ -94,7 +94,7 @@ CONFIG_NLS_ISO8859_1=y · 93 unmodified lines
94# CONFIG_ENABLE_MUST_CHECK is not set94# CONFIG_ENABLE_MUST_CHECK is not set
95CONFIG_STRIP_ASM_SYMS=y95CONFIG_STRIP_ASM_SYMS=y
96CONFIG_DEBUG_SHIRQ=y96CONFIG_DEBUG_SHIRQ=y
97CONFIG_LOCKUP_DETECTOR=y97CONFIG_SOFTLOCKUP_DETECTOR=y
98CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=1098CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
99# CONFIG_SCHED_DEBUG is not set99# CONFIG_SCHED_DEBUG is not set
100# CONFIG_DEBUG_PREEMPT is not set100# CONFIG_DEBUG_PREEMPT is not set
arch/arc/configs/vdk_hs38_smp_defconfig+1−1
@@ -98,7 +98,7 @@ CONFIG_NLS_ISO8859_1=y · 97 unmodified lines
98# CONFIG_ENABLE_MUST_CHECK is not set98# CONFIG_ENABLE_MUST_CHECK is not set
99CONFIG_STRIP_ASM_SYMS=y99CONFIG_STRIP_ASM_SYMS=y
100CONFIG_DEBUG_SHIRQ=y100CONFIG_DEBUG_SHIRQ=y
101CONFIG_LOCKUP_DETECTOR=y101CONFIG_SOFTLOCKUP_DETECTOR=y
102CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10102CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
103# CONFIG_SCHED_DEBUG is not set103# CONFIG_SCHED_DEBUG is not set
104# CONFIG_DEBUG_PREEMPT is not set104# CONFIG_DEBUG_PREEMPT is not set
arch/arc/include/asm/arcregs.h+6−5
@@ -98,6 +98,7 @@ · 97 unmodified lines
98 98
99/* Auxiliary registers */99/* Auxiliary registers */
100#define AUX_IDENTITY 4100#define AUX_IDENTITY 4
101#define AUX_EXEC_CTRL 8
101#define AUX_INTR_VEC_BASE 0x25102#define AUX_INTR_VEC_BASE 0x25
102#define AUX_VOL 0x5e103#define AUX_VOL 0x5e
103 104
@@ -135,12 +136,12 @@ struct bcr_identity { · 31 unmodified lines
135#endif136#endif
136};137};
137 138
138struct bcr_isa {139struct bcr_isa_arcv2 {
139#ifdef CONFIG_CPU_BIG_ENDIAN140#ifdef CONFIG_CPU_BIG_ENDIAN
140 unsigned int div_rem:4, pad2:4, ldd:1, unalign:1, atomic:1, be:1,141 unsigned int div_rem:4, pad2:4, ldd:1, unalign:1, atomic:1, be:1,
141 pad1:11, atomic1:1, ver:8;142 pad1:12, ver:8;
142#else143#else
143 unsigned int ver:8, atomic1:1, pad1:11, be:1, atomic:1, unalign:1,144 unsigned int ver:8, pad1:12, be:1, atomic:1, unalign:1,
144 ldd:1, pad2:4, div_rem:4;145 ldd:1, pad2:4, div_rem:4;
145#endif146#endif
146};147};
@@ -263,13 +264,13 @@ struct cpuinfo_arc { · 116 unmodified lines
263 struct cpuinfo_arc_mmu mmu;264 struct cpuinfo_arc_mmu mmu;
264 struct cpuinfo_arc_bpu bpu;265 struct cpuinfo_arc_bpu bpu;
265 struct bcr_identity core;266 struct bcr_identity core;
266 struct bcr_isa isa;267 struct bcr_isa_arcv2 isa;
267 const char *details, *name;268 const char *details, *name;
268 unsigned int vec_base;269 unsigned int vec_base;
269 struct cpuinfo_arc_ccm iccm, dccm;270 struct cpuinfo_arc_ccm iccm, dccm;
270 struct {271 struct {
271 unsigned int swap:1, norm:1, minmax:1, barrel:1, crc:1, swape:1, pad1:2,272 unsigned int swap:1, norm:1, minmax:1, barrel:1, crc:1, swape:1, pad1:2,
272 fpu_sp:1, fpu_dp:1, pad2:6,273 fpu_sp:1, fpu_dp:1, dual_iss_enb:1, dual_iss_exist:1, pad2:4,
273 debug:1, ap:1, smart:1, rtt:1, pad3:4,274 debug:1, ap:1, smart:1, rtt:1, pad3:4,
274 timer0:1, timer1:1, rtc:1, gfrc:1, pad4:4;275 timer0:1, timer1:1, rtc:1, gfrc:1, pad4:4;
275 } extn;276 } extn;
arch/arc/include/asm/processor.h+0−3
@@ -78,9 +78,6 @@ struct task_struct; · 77 unmodified lines
78 78
79#endif79#endif
80 80
81#define copy_segments(tsk, mm) do { } while (0)
82#define release_segments(mm) do { } while (0)
83
84#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)81#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
85#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)82#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
86 83
arch/arc/kernel/setup.c+25−7
@@ -51,6 +51,7 @@ static const struct id_to_str arc_cpu_rel[] = { · 50 unmodified lines
51 { 0x51, "R2.0" },51 { 0x51, "R2.0" },
52 { 0x52, "R2.1" },52 { 0x52, "R2.1" },
53 { 0x53, "R3.0" },53 { 0x53, "R3.0" },
54 { 0x54, "R4.0" },
54#endif55#endif
55 { 0x00, NULL }56 { 0x00, NULL }
56};57};
@@ -62,6 +63,7 @@ static const struct id_to_str arc_cpu_nm[] = { · 5 unmodified lines
62#else63#else
63 { 0x40, "ARC EM" },64 { 0x40, "ARC EM" },
64 { 0x50, "ARC HS38" },65 { 0x50, "ARC HS38" },
66 { 0x54, "ARC HS48" },
65#endif67#endif
66 { 0x00, "Unknown" }68 { 0x00, "Unknown" }
67};69};
@@ -119,11 +121,11 @@ static void read_arc_build_cfg_regs(void) · 51 unmodified lines
119 struct bcr_generic bcr;121 struct bcr_generic bcr;
120 struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];122 struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];
121 const struct id_to_str *tbl;123 const struct id_to_str *tbl;
124 struct bcr_isa_arcv2 isa;
122 125
123 FIX_PTR(cpu);126 FIX_PTR(cpu);
124 127
125 READ_BCR(AUX_IDENTITY, cpu->core);128 READ_BCR(AUX_IDENTITY, cpu->core);
126 READ_BCR(ARC_REG_ISA_CFG_BCR, cpu->isa);
127 129
128 for (tbl = &arc_cpu_rel[0]; tbl->id != 0; tbl++) {130 for (tbl = &arc_cpu_rel[0]; tbl->id != 0; tbl++) {
129 if (cpu->core.family == tbl->id) {131 if (cpu->core.family == tbl->id) {
@@ -133,7 +135,7 @@ static void read_arc_build_cfg_regs(void) · 3 unmodified lines
133 }135 }
134 136
135 for (tbl = &arc_cpu_nm[0]; tbl->id != 0; tbl++) {137 for (tbl = &arc_cpu_nm[0]; tbl->id != 0; tbl++) {
136 if ((cpu->core.family & 0xF0) == tbl->id)138 if ((cpu->core.family & 0xF4) == tbl->id)
137 break;139 break;
138 }140 }
139 cpu->name = tbl->str;141 cpu->name = tbl->str;
@@ -192,6 +194,14 @@ static void read_arc_build_cfg_regs(void) · 52 unmodified lines
192 cpu->bpu.full = bpu.ft;194 cpu->bpu.full = bpu.ft;
193 cpu->bpu.num_cache = 256 << bpu.bce;195 cpu->bpu.num_cache = 256 << bpu.bce;
194 cpu->bpu.num_pred = 2048 << bpu.pte;196 cpu->bpu.num_pred = 2048 << bpu.pte;
197
198 if (cpu->core.family >= 0x54) {
199 unsigned int exec_ctrl;
200
201 READ_BCR(AUX_EXEC_CTRL, exec_ctrl);
202 cpu->extn.dual_iss_exist = 1;
203 cpu->extn.dual_iss_enb = exec_ctrl & 1;
204 }
195 }205 }
196 206
197 READ_BCR(ARC_REG_AP_BCR, bcr);207 READ_BCR(ARC_REG_AP_BCR, bcr);
@@ -205,18 +215,25 @@ static void read_arc_build_cfg_regs(void) · 7 unmodified lines
205 215
206 cpu->extn.debug = cpu->extn.ap | cpu->extn.smart | cpu->extn.rtt;216 cpu->extn.debug = cpu->extn.ap | cpu->extn.smart | cpu->extn.rtt;
207 217
218 READ_BCR(ARC_REG_ISA_CFG_BCR, isa);
219
208 /* some hacks for lack of feature BCR info in old ARC700 cores */220 /* some hacks for lack of feature BCR info in old ARC700 cores */
209 if (is_isa_arcompact()) {221 if (is_isa_arcompact()) {
210 if (!cpu->isa.ver) /* ISA BCR absent, use Kconfig info */222 if (!isa.ver) /* ISA BCR absent, use Kconfig info */
211 cpu->isa.atomic = IS_ENABLED(CONFIG_ARC_HAS_LLSC);223 cpu->isa.atomic = IS_ENABLED(CONFIG_ARC_HAS_LLSC);
212 else224 else {
213 cpu->isa.atomic = cpu->isa.atomic1;225 /* ARC700_BUILD only has 2 bits of isa info */
226 struct bcr_generic bcr = *(struct bcr_generic *)&isa;
227 cpu->isa.atomic = bcr.info & 1;
228 }
214 229
215 cpu->isa.be = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN);230 cpu->isa.be = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN);
216 231
217 /* there's no direct way to distinguish 750 vs. 770 */232 /* there's no direct way to distinguish 750 vs. 770 */
218 if (unlikely(cpu->core.family < 0x34 || cpu->mmu.ver < 3))233 if (unlikely(cpu->core.family < 0x34 || cpu->mmu.ver < 3))
219 cpu->name = "ARC750";234 cpu->name = "ARC750";
235 } else {
236 cpu->isa = isa;
220 }237 }
221}238}
222 239
@@ -232,10 +249,11 @@ static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) · 9 unmodified lines
232 "\nIDENTITY\t: ARCVER [%#02x] ARCNUM [%#02x] CHIPID [%#4x]\n",249 "\nIDENTITY\t: ARCVER [%#02x] ARCNUM [%#02x] CHIPID [%#4x]\n",
233 core->family, core->cpu_id, core->chip_id);250 core->family, core->cpu_id, core->chip_id);
234 251
235 n += scnprintf(buf + n, len - n, "processor [%d]\t: %s %s (%s ISA) %s\n",252 n += scnprintf(buf + n, len - n, "processor [%d]\t: %s %s (%s ISA) %s%s%s\n",
236 cpu_id, cpu->name, cpu->details,253 cpu_id, cpu->name, cpu->details,
237 is_isa_arcompact() ? "ARCompact" : "ARCv2",254 is_isa_arcompact() ? "ARCompact" : "ARCv2",
238 IS_AVAIL1(cpu->isa.be, "[Big-Endian]"));255 IS_AVAIL1(cpu->isa.be, "[Big-Endian]"),
256 IS_AVAIL3(cpu->extn.dual_iss_exist, cpu->extn.dual_iss_enb, " Dual-Issue"));
239 257
240 n += scnprintf(buf + n, len - n, "Timers\t\t: %s%s%s%s%s%s\nISA Extn\t: ",258 n += scnprintf(buf + n, len - n, "Timers\t\t: %s%s%s%s%s%s\nISA Extn\t: ",
241 IS_AVAIL1(cpu->extn.timer0, "Timer0 "),259 IS_AVAIL1(cpu->extn.timer0, "Timer0 "),
arch/arc/plat-axs10x/axs10x.c+7−0
@@ -111,6 +111,13 @@ static void __init axs10x_early_init(void) · 110 unmodified lines
111 111
112 axs10x_enable_gpio_intc_wire();112 axs10x_enable_gpio_intc_wire();
113 113
114 /*
115 * Reset ethernet IP core.
116 * TODO: get rid of this quirk after axs10x reset driver (or simple
117 * reset driver) will be available in upstream.
118 */
119 iowrite32((1 << 5), (void __iomem *) CREG_MB_SW_RESET);
120
114 scnprintf(mb, 32, "MainBoard v%d", mb_rev);121 scnprintf(mb, 32, "MainBoard v%d", mb_rev);
115 axs10x_print_board_ver(CREG_MB_VER, mb);122 axs10x_print_board_ver(CREG_MB_VER, mb);
116}123}
arch/arc/plat-hsdk/Kconfig+2−1
@@ -6,4 +6,5 @@ · 5 unmodified lines
6#6#
7 7
8menuconfig ARC_SOC_HSDK8menuconfig ARC_SOC_HSDK
9 bool "ARC HS Development Kit SOC"9 bool "ARC HS Development Kit SOC"
10 select CLK_HSDK
arch/arc/plat-hsdk/platform.c+42−0
@@ -38,6 +38,42 @@ static void __init hsdk_init_per_cpu(unsigned int cpu) · 37 unmodified lines
38#define CREG_PAE (CREG_BASE + 0x180)38#define CREG_PAE (CREG_BASE + 0x180)
39#define CREG_PAE_UPDATE (CREG_BASE + 0x194)39#define CREG_PAE_UPDATE (CREG_BASE + 0x194)
40 40
41#define CREG_CORE_IF_CLK_DIV (CREG_BASE + 0x4B8)
42#define CREG_CORE_IF_CLK_DIV_2 0x1
43#define CGU_BASE ARC_PERIPHERAL_BASE
44#define CGU_PLL_STATUS (ARC_PERIPHERAL_BASE + 0x4)
45#define CGU_PLL_CTRL (ARC_PERIPHERAL_BASE + 0x0)
46#define CGU_PLL_STATUS_LOCK BIT(0)
47#define CGU_PLL_STATUS_ERR BIT(1)
48#define CGU_PLL_CTRL_1GHZ 0x3A10
49#define HSDK_PLL_LOCK_TIMEOUT 500
50
51#define HSDK_PLL_LOCKED() \
52 !!(ioread32((void __iomem *) CGU_PLL_STATUS) & CGU_PLL_STATUS_LOCK)
53
54#define HSDK_PLL_ERR() \
55 !!(ioread32((void __iomem *) CGU_PLL_STATUS) & CGU_PLL_STATUS_ERR)
56
57static void __init hsdk_set_cpu_freq_1ghz(void)
58{
59 u32 timeout = HSDK_PLL_LOCK_TIMEOUT;
60
61 /*
62 * As we set cpu clock which exceeds 500MHz, the divider for the interface
63 * clock must be programmed to div-by-2.
64 */
65 iowrite32(CREG_CORE_IF_CLK_DIV_2, (void __iomem *) CREG_CORE_IF_CLK_DIV);
66
67 /* Set cpu clock to 1GHz */
68 iowrite32(CGU_PLL_CTRL_1GHZ, (void __iomem *) CGU_PLL_CTRL);
69
70 while (!HSDK_PLL_LOCKED() && timeout--)
71 cpu_relax();
72
73 if (!HSDK_PLL_LOCKED() || HSDK_PLL_ERR())
74 pr_err("Failed to setup CPU frequency to 1GHz!");
75}
76
41static void __init hsdk_init_early(void)77static void __init hsdk_init_early(void)
42{78{
43 /*79 /*
@@ -52,6 +88,12 @@ static void __init hsdk_init_early(void) · 8 unmodified lines
52 88
53 /* Really apply settings made above */89 /* Really apply settings made above */
54 writel(1, (void __iomem *) CREG_PAE_UPDATE);90 writel(1, (void __iomem *) CREG_PAE_UPDATE);
91
92 /*
93 * Setup CPU frequency to 1GHz.
94 * TODO: remove it after smart hsdk pll driver will be introduced.
95 */
96 hsdk_set_cpu_freq_1ghz();
55}97}
56 98
57static const char *hsdk_compat[] __initconst = {99static const char *hsdk_compat[] __initconst = {
arch/arm/boot/dts/am33xx.dtsi+2−0
@@ -36,6 +36,8 @@ · 35 unmodified lines
36 phy1 = &usb1_phy;36 phy1 = &usb1_phy;
37 ethernet0 = &cpsw_emac0;37 ethernet0 = &cpsw_emac0;
38 ethernet1 = &cpsw_emac1;38 ethernet1 = &cpsw_emac1;
39 spi0 = &spi0;
40 spi1 = &spi1;
39 };41 };
40 42
41 cpus {43 cpus {
arch/arm/boot/dts/am43x-epos-evm.dts+1−5
@@ -388,6 +388,7 @@ · 387 unmodified lines
388 pinctrl-0 = <&cpsw_default>;388 pinctrl-0 = <&cpsw_default>;
389 pinctrl-1 = <&cpsw_sleep>;389 pinctrl-1 = <&cpsw_sleep>;
390 status = "okay";390 status = "okay";
391 slaves = <1>;
391};392};
392 393
393&davinci_mdio {394&davinci_mdio {
@@ -402,11 +403,6 @@ · 8 unmodified lines
402 phy-mode = "rmii";403 phy-mode = "rmii";
403};404};
404 405
405&cpsw_emac1 {
406 phy_id = <&davinci_mdio>, <1>;
407 phy-mode = "rmii";
408};
409
410&phy_sel {406&phy_sel {
411 rmii-clock-ext;407 rmii-clock-ext;
412};408};
arch/arm/boot/dts/at91-sama5d27_som1_ek.dts+11−8
@@ -67,7 +67,10 @@ · 66 unmodified lines
67 67
68 usb1: ohci@00400000 {68 usb1: ohci@00400000 {
69 num-ports = <3>;69 num-ports = <3>;
70 atmel,vbus-gpio = <&pioA PIN_PA10 GPIO_ACTIVE_HIGH>;70 atmel,vbus-gpio = <0 /* &pioA PIN_PD20 GPIO_ACTIVE_HIGH */
71 &pioA PIN_PA27 GPIO_ACTIVE_HIGH
72 0
73 >;
71 pinctrl-names = "default";74 pinctrl-names = "default";
72 pinctrl-0 = <&pinctrl_usb_default>;75 pinctrl-0 = <&pinctrl_usb_default>;
73 status = "okay";76 status = "okay";
@@ -120,7 +123,7 @@ · 46 unmodified lines
120 pinctrl-names = "default";123 pinctrl-names = "default";
121 pinctrl-0 = <&pinctrl_mikrobus2_uart>;124 pinctrl-0 = <&pinctrl_mikrobus2_uart>;
122 atmel,use-dma-rx;125 atmel,use-dma-rx;
123 atmel-use-dma-tx;126 atmel,use-dma-tx;
124 status = "okay";127 status = "okay";
125 };128 };
126 129
@@ -178,7 +181,7 @@ · 51 unmodified lines
178 uart4: serial@fc00c000 {181 uart4: serial@fc00c000 {
179 atmel,use-dma-rx;182 atmel,use-dma-rx;
180 atmel,use-dma-tx;183 atmel,use-dma-tx;
181 pinctrl-name = "default";184 pinctrl-names = "default";
182 pinctrl-0 = <&pinctrl_mikrobus1_uart>;185 pinctrl-0 = <&pinctrl_mikrobus1_uart>;
183 status = "okay";186 status = "okay";
184 };187 };
@@ -330,7 +333,7 @@ · 145 unmodified lines
330 };333 };
331 334
332 pinctrl_led_gpio_default: led_gpio_default {335 pinctrl_led_gpio_default: led_gpio_default {
333 pinmux = <PIN_PA27__GPIO>,336 pinmux = <PIN_PA10__GPIO>,
334 <PIN_PB1__GPIO>,337 <PIN_PB1__GPIO>,
335 <PIN_PA31__GPIO>;338 <PIN_PA31__GPIO>;
336 bias-pull-up;339 bias-pull-up;
@@ -396,7 +399,7 @@ · 59 unmodified lines
396 };399 };
397 400
398 pinctrl_usb_default: usb_default {401 pinctrl_usb_default: usb_default {
399 pinmux = <PIN_PA10__GPIO>,402 pinmux = <PIN_PA27__GPIO>,
400 <PIN_PD19__GPIO>;403 <PIN_PD19__GPIO>;
401 bias-disable;404 bias-disable;
402 };405 };
@@ -520,17 +523,17 @@ · 117 unmodified lines
520 523
521 red {524 red {
522 label = "red";525 label = "red";
523 gpios = <&pioA PIN_PA27 GPIO_ACTIVE_LOW>;526 gpios = <&pioA PIN_PA10 GPIO_ACTIVE_HIGH>;
524 };527 };
525 528
526 green {529 green {
527 label = "green";530 label = "green";
528 gpios = <&pioA PIN_PB1 GPIO_ACTIVE_LOW>;531 gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
529 };532 };
530 533
531 blue {534 blue {
532 label = "blue";535 label = "blue";
533 gpios = <&pioA PIN_PA31 GPIO_ACTIVE_LOW>;536 gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>;
534 linux,default-trigger = "heartbeat";537 linux,default-trigger = "heartbeat";
535 };538 };
536 };539 };
arch/arm/boot/dts/da850-evm.dts+7−0
@@ -15,6 +15,13 @@ · 14 unmodified lines
15 compatible = "ti,da850-evm", "ti,da850";15 compatible = "ti,da850-evm", "ti,da850";
16 model = "DA850/AM1808/OMAP-L138 EVM";16 model = "DA850/AM1808/OMAP-L138 EVM";
17 17
18 aliases {
19 serial0 = &serial0;
20 serial1 = &serial1;
21 serial2 = &serial2;
22 ethernet0 = &eth0;
23 };
24
18 soc@1c00000 {25 soc@1c00000 {
19 pmx_core: pinmux@14120 {26 pmx_core: pinmux@14120 {
20 status = "okay";27 status = "okay";
arch/arm/boot/dts/dra7xx-clocks.dtsi+2−0
@@ -1817,6 +1817,8 @@ · 1816 unmodified lines
1817 clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atl_clkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>;1817 clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atl_clkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>;
1818 ti,bit-shift = <24>;1818 ti,bit-shift = <24>;
1819 reg = <0x1868>;1819 reg = <0x1868>;
1820 assigned-clocks = <&mcasp3_ahclkx_mux>;
1821 assigned-clock-parents = <&abe_24m_fclk>;
1820 };1822 };
1821 1823
1822 mcasp3_aux_gfclk_mux: mcasp3_aux_gfclk_mux@1868 {1824 mcasp3_aux_gfclk_mux: mcasp3_aux_gfclk_mux@1868 {
arch/arm/boot/dts/omap3-n900.dts+0−11
@@ -144,15 +144,6 @@ · 143 unmodified lines
144 io-channel-names = "temp", "bsi", "vbat";144 io-channel-names = "temp", "bsi", "vbat";
145 };145 };
146 146
147 rear_camera: camera@0 {
148 compatible = "linux,camera";
149
150 module {
151 model = "TCM8341MD";
152 sensor = <&cam1>;
153 };
154 };
155
156 pwm9: dmtimer-pwm {147 pwm9: dmtimer-pwm {
157 compatible = "ti,omap-dmtimer-pwm";148 compatible = "ti,omap-dmtimer-pwm";
158 #pwm-cells = <3>;149 #pwm-cells = <3>;
@@ -189,10 +180,8 @@ · 30 unmodified lines
189 clock-lanes = <1>;180 clock-lanes = <1>;
190 data-lanes = <0>;181 data-lanes = <0>;
191 lane-polarity = <0 0>;182 lane-polarity = <0 0>;
192 clock-inv = <0>;
193 /* Select strobe = <1> for back camera, <0> for front camera */183 /* Select strobe = <1> for back camera, <0> for front camera */
194 strobe = <1>;184 strobe = <1>;
195 crc = <0>;
196 };185 };
197 };186 };
198 };187 };
arch/arm/boot/dts/omap3-n950-n9.dtsi+7−3
@@ -267,15 +267,19 @@ · 266 unmodified lines
267 clock-frequency = <400000>;267 clock-frequency = <400000>;
268 268
269 as3645a@30 {269 as3645a@30 {
270 #address-cells = <1>;
271 #size-cells = <0>;
270 reg = <0x30>;272 reg = <0x30>;
271 compatible = "ams,as3645a";273 compatible = "ams,as3645a";
272 flash {274 flash@0 {
275 reg = <0x0>;
273 flash-timeout-us = <150000>;276 flash-timeout-us = <150000>;
274 flash-max-microamp = <320000>;277 flash-max-microamp = <320000>;
275 led-max-microamp = <60000>;278 led-max-microamp = <60000>;
276 peak-current-limit = <1750000>;279 ams,input-max-microamp = <1750000>;
277 };280 };
278 indicator {281 indicator@1 {
282 reg = <0x1>;
279 led-max-microamp = <10000>;283 led-max-microamp = <10000>;
280 };284 };
281 };285 };
arch/arm/boot/dts/stm32429i-eval.dts+2−3
@@ -47,6 +47,7 @@ · 46 unmodified lines
47 47
48/dts-v1/;48/dts-v1/;
49#include "stm32f429.dtsi"49#include "stm32f429.dtsi"
50#include "stm32f429-pinctrl.dtsi"
50#include <dt-bindings/input/input.h>51#include <dt-bindings/input/input.h>
51#include <dt-bindings/gpio/gpio.h>52#include <dt-bindings/gpio/gpio.h>
52 53
@@ -202,10 +203,8 @@ · 149 unmodified lines
202 stmpe1600: stmpe1600@42 {203 stmpe1600: stmpe1600@42 {
203 compatible = "st,stmpe1600";204 compatible = "st,stmpe1600";
204 reg = <0x42>;205 reg = <0x42>;
205 irq-gpio = <&gpioi 8 0>;
206 irq-trigger = <3>;
207 interrupts = <8 3>;206 interrupts = <8 3>;
208 interrupt-parent = <&exti>;207 interrupt-parent = <&gpioi>;
209 interrupt-controller;208 interrupt-controller;
210 wakeup-source;209 wakeup-source;
211 210
arch/arm/boot/dts/stm32f4-pinctrl.dtsi+343−0
@@ -0,0 +1,343 @@
1/*
2 * Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License, or (at your option) any later version.
13 *
14 * This file is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively,
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use,
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
44#include <dt-bindings/mfd/stm32f4-rcc.h>
45
46/ {
47 soc {
48 pinctrl: pin-controller {
49 #address-cells = <1>;
50 #size-cells = <1>;
51 ranges = <0 0x40020000 0x3000>;
52 interrupt-parent = <&exti>;
53 st,syscfg = <&syscfg 0x8>;
54 pins-are-numbered;
55
56 gpioa: gpio@40020000 {
57 gpio-controller;
58 #gpio-cells = <2>;
59 interrupt-controller;
60 #interrupt-cells = <2>;
61 reg = <0x0 0x400>;
62 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
63 st,bank-name = "GPIOA";
64 };
65
66 gpiob: gpio@40020400 {
67 gpio-controller;
68 #gpio-cells = <2>;
69 interrupt-controller;
70 #interrupt-cells = <2>;
71 reg = <0x400 0x400>;
72 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
73 st,bank-name = "GPIOB";
74 };
75
76 gpioc: gpio@40020800 {
77 gpio-controller;
78 #gpio-cells = <2>;
79 interrupt-controller;
80 #interrupt-cells = <2>;
81 reg = <0x800 0x400>;
82 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
83 st,bank-name = "GPIOC";
84 };
85
86 gpiod: gpio@40020c00 {
87 gpio-controller;
88 #gpio-cells = <2>;
89 interrupt-controller;
90 #interrupt-cells = <2>;
91 reg = <0xc00 0x400>;
92 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
93 st,bank-name = "GPIOD";
94 };
95
96 gpioe: gpio@40021000 {
97 gpio-controller;
98 #gpio-cells = <2>;
99 interrupt-controller;
100 #interrupt-cells = <2>;
101 reg = <0x1000 0x400>;
102 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
103 st,bank-name = "GPIOE";
104 };
105
106 gpiof: gpio@40021400 {
107 gpio-controller;
108 #gpio-cells = <2>;
109 interrupt-controller;
110 #interrupt-cells = <2>;
111 reg = <0x1400 0x400>;
112 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
113 st,bank-name = "GPIOF";
114 };
115
116 gpiog: gpio@40021800 {
117 gpio-controller;
118 #gpio-cells = <2>;
119 interrupt-controller;
120 #interrupt-cells = <2>;
121 reg = <0x1800 0x400>;
122 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
123 st,bank-name = "GPIOG";
124 };
125
126 gpioh: gpio@40021c00 {
127 gpio-controller;
128 #gpio-cells = <2>;
129 interrupt-controller;
130 #interrupt-cells = <2>;
131 reg = <0x1c00 0x400>;
132 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
133 st,bank-name = "GPIOH";
134 };
135
136 gpioi: gpio@40022000 {
137 gpio-controller;
138 #gpio-cells = <2>;
139 interrupt-controller;
140 #interrupt-cells = <2>;
141 reg = <0x2000 0x400>;
142 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
143 st,bank-name = "GPIOI";
144 };
145
146 gpioj: gpio@40022400 {
147 gpio-controller;
148 #gpio-cells = <2>;
149 interrupt-controller;
150 #interrupt-cells = <2>;
151 reg = <0x2400 0x400>;
152 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
153 st,bank-name = "GPIOJ";
154 };
155
156 gpiok: gpio@40022800 {
157 gpio-controller;
158 #gpio-cells = <2>;
159 interrupt-controller;
160 #interrupt-cells = <2>;
161 reg = <0x2800 0x400>;
162 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
163 st,bank-name = "GPIOK";
164 };
165
166 usart1_pins_a: usart1@0 {
167 pins1 {
168 pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
169 bias-disable;
170 drive-push-pull;
171 slew-rate = <0>;
172 };
173 pins2 {
174 pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
175 bias-disable;
176 };
177 };
178
179 usart3_pins_a: usart3@0 {
180 pins1 {
181 pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
182 bias-disable;
183 drive-push-pull;
184 slew-rate = <0>;
185 };
186 pins2 {
187 pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
188 bias-disable;
189 };
190 };
191
192 usbotg_fs_pins_a: usbotg_fs@0 {
193 pins {
194 pinmux = <STM32F429_PA10_FUNC_OTG_FS_ID>,
195 <STM32F429_PA11_FUNC_OTG_FS_DM>,
196 <STM32F429_PA12_FUNC_OTG_FS_DP>;
197 bias-disable;
198 drive-push-pull;
199 slew-rate = <2>;
200 };
201 };
202
203 usbotg_fs_pins_b: usbotg_fs@1 {
204 pins {
205 pinmux = <STM32F429_PB12_FUNC_OTG_HS_ID>,
206 <STM32F429_PB14_FUNC_OTG_HS_DM>,
207 <STM32F429_PB15_FUNC_OTG_HS_DP>;
208 bias-disable;
209 drive-push-pull;
210 slew-rate = <2>;
211 };
212 };
213
214 usbotg_hs_pins_a: usbotg_hs@0 {
215 pins {
216 pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
217 <STM32F429_PI11_FUNC_OTG_HS_ULPI_DIR>,
218 <STM32F429_PC0_FUNC_OTG_HS_ULPI_STP>,
219 <STM32F429_PA5_FUNC_OTG_HS_ULPI_CK>,
220 <STM32F429_PA3_FUNC_OTG_HS_ULPI_D0>,
221 <STM32F429_PB0_FUNC_OTG_HS_ULPI_D1>,
222 <STM32F429_PB1_FUNC_OTG_HS_ULPI_D2>,
223 <STM32F429_PB10_FUNC_OTG_HS_ULPI_D3>,
224 <STM32F429_PB11_FUNC_OTG_HS_ULPI_D4>,
225 <STM32F429_PB12_FUNC_OTG_HS_ULPI_D5>,
226 <STM32F429_PB13_FUNC_OTG_HS_ULPI_D6>,
227 <STM32F429_PB5_FUNC_OTG_HS_ULPI_D7>;
228 bias-disable;
229 drive-push-pull;
230 slew-rate = <2>;
231 };
232 };
233
234 ethernet_mii: mii@0 {
235 pins {
236 pinmux = <STM32F429_PG13_FUNC_ETH_MII_TXD0_ETH_RMII_TXD0>,
237 <STM32F429_PG14_FUNC_ETH_MII_TXD1_ETH_RMII_TXD1>,
238 <STM32F429_PC2_FUNC_ETH_MII_TXD2>,
239 <STM32F429_PB8_FUNC_ETH_MII_TXD3>,
240 <STM32F429_PC3_FUNC_ETH_MII_TX_CLK>,
241 <STM32F429_PG11_FUNC_ETH_MII_TX_EN_ETH_RMII_TX_EN>,
242 <STM32F429_PA2_FUNC_ETH_MDIO>,
243 <STM32F429_PC1_FUNC_ETH_MDC>,
244 <STM32F429_PA1_FUNC_ETH_MII_RX_CLK_ETH_RMII_REF_CLK>,
245 <STM32F429_PA7_FUNC_ETH_MII_RX_DV_ETH_RMII_CRS_DV>,
246 <STM32F429_PC4_FUNC_ETH_MII_RXD0_ETH_RMII_RXD0>,
247 <STM32F429_PC5_FUNC_ETH_MII_RXD1_ETH_RMII_RXD1>,
248 <STM32F429_PH6_FUNC_ETH_MII_RXD2>,
249 <STM32F429_PH7_FUNC_ETH_MII_RXD3>;
250 slew-rate = <2>;
251 };
252 };
253
254 adc3_in8_pin: adc@200 {
255 pins {
256 pinmux = <STM32F429_PF10_FUNC_ANALOG>;
257 };
258 };
259
260 pwm1_pins: pwm@1 {
261 pins {
262 pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
263 <STM32F429_PB13_FUNC_TIM1_CH1N>,
264 <STM32F429_PB12_FUNC_TIM1_BKIN>;
265 };
266 };
267
268 pwm3_pins: pwm@3 {
269 pins {
270 pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
271 <STM32F429_PB5_FUNC_TIM3_CH2>;
272 };
273 };
274
275 i2c1_pins: i2c1@0 {
276 pins {
277 pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
278 <STM32F429_PB6_FUNC_I2C1_SCL>;
279 bias-disable;
280 drive-open-drain;
281 slew-rate = <3>;
282 };
283 };
284
285 ltdc_pins: ltdc@0 {
286 pins {
287 pinmux = <STM32F429_PI12_FUNC_LCD_HSYNC>,
288 <STM32F429_PI13_FUNC_LCD_VSYNC>,
289 <STM32F429_PI14_FUNC_LCD_CLK>,
290 <STM32F429_PI15_FUNC_LCD_R0>,
291 <STM32F429_PJ0_FUNC_LCD_R1>,
292 <STM32F429_PJ1_FUNC_LCD_R2>,
293 <STM32F429_PJ2_FUNC_LCD_R3>,
294 <STM32F429_PJ3_FUNC_LCD_R4>,
295 <STM32F429_PJ4_FUNC_LCD_R5>,
296 <STM32F429_PJ5_FUNC_LCD_R6>,
297 <STM32F429_PJ6_FUNC_LCD_R7>,
298 <STM32F429_PJ7_FUNC_LCD_G0>,
299 <STM32F429_PJ8_FUNC_LCD_G1>,
300 <STM32F429_PJ9_FUNC_LCD_G2>,
301 <STM32F429_PJ10_FUNC_LCD_G3>,
302 <STM32F429_PJ11_FUNC_LCD_G4>,
303 <STM32F429_PJ12_FUNC_LCD_B0>,
304 <STM32F429_PJ13_FUNC_LCD_B1>,
305 <STM32F429_PJ14_FUNC_LCD_B2>,
306 <STM32F429_PJ15_FUNC_LCD_B3>,
307 <STM32F429_PK0_FUNC_LCD_G5>,
308 <STM32F429_PK1_FUNC_LCD_G6>,
309 <STM32F429_PK2_FUNC_LCD_G7>,
310 <STM32F429_PK3_FUNC_LCD_B4>,
311 <STM32F429_PK4_FUNC_LCD_B5>,
312 <STM32F429_PK5_FUNC_LCD_B6>,
313 <STM32F429_PK6_FUNC_LCD_B7>,
314 <STM32F429_PK7_FUNC_LCD_DE>;
315 slew-rate = <2>;
316 };
317 };
318
319 dcmi_pins: dcmi@0 {
320 pins {
321 pinmux = <STM32F429_PA4_FUNC_DCMI_HSYNC>,
322 <STM32F429_PB7_FUNC_DCMI_VSYNC>,
323 <STM32F429_PA6_FUNC_DCMI_PIXCLK>,
324 <STM32F429_PC6_FUNC_DCMI_D0>,
325 <STM32F429_PC7_FUNC_DCMI_D1>,
326 <STM32F429_PC8_FUNC_DCMI_D2>,
327 <STM32F429_PC9_FUNC_DCMI_D3>,
328 <STM32F429_PC11_FUNC_DCMI_D4>,
329 <STM32F429_PD3_FUNC_DCMI_D5>,
330 <STM32F429_PB8_FUNC_DCMI_D6>,
331 <STM32F429_PE6_FUNC_DCMI_D7>,
332 <STM32F429_PC10_FUNC_DCMI_D8>,
333 <STM32F429_PC12_FUNC_DCMI_D9>,
334 <STM32F429_PD6_FUNC_DCMI_D10>,
335 <STM32F429_PD2_FUNC_DCMI_D11>;
336 bias-disable;
337 drive-push-pull;
338 slew-rate = <3>;
339 };
340 };
341 };
342 };
343};
arch/arm/boot/dts/stm32f429-disco.dts+1−0
@@ -47,6 +47,7 @@ · 46 unmodified lines
47 47
48/dts-v1/;48/dts-v1/;
49#include "stm32f429.dtsi"49#include "stm32f429.dtsi"
50#include "stm32f429-pinctrl.dtsi"
50#include <dt-bindings/input/input.h>51#include <dt-bindings/input/input.h>
51 52
52/ {53/ {
arch/arm/boot/dts/stm32f429-pinctrl.dtsi+95−0
@@ -0,0 +1,95 @@
1/*
2 * Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License, or (at your option) any later version.
13 *
14 * This file is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively,
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use,
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43#include "stm32f4-pinctrl.dtsi"
44
45/ {
46 soc {
47 pinctrl: pin-controller {
48 compatible = "st,stm32f429-pinctrl";
49
50 gpioa: gpio@40020000 {
51 gpio-ranges = <&pinctrl 0 0 16>;
52 };
53
54 gpiob: gpio@40020400 {
55 gpio-ranges = <&pinctrl 0 16 16>;
56 };
57
58 gpioc: gpio@40020800 {
59 gpio-ranges = <&pinctrl 0 32 16>;
60 };
61
62 gpiod: gpio@40020c00 {
63 gpio-ranges = <&pinctrl 0 48 16>;
64 };
65
66 gpioe: gpio@40021000 {
67 gpio-ranges = <&pinctrl 0 64 16>;
68 };
69
70 gpiof: gpio@40021400 {
71 gpio-ranges = <&pinctrl 0 80 16>;
72 };
73
74 gpiog: gpio@40021800 {
75 gpio-ranges = <&pinctrl 0 96 16>;
76 };
77
78 gpioh: gpio@40021c00 {
79 gpio-ranges = <&pinctrl 0 112 16>;
80 };
81
82 gpioi: gpio@40022000 {
83 gpio-ranges = <&pinctrl 0 128 16>;
84 };
85
86 gpioj: gpio@40022400 {
87 gpio-ranges = <&pinctrl 0 144 16>;
88 };
89
90 gpiok: gpio@40022800 {
91 gpio-ranges = <&pinctrl 0 160 8>;
92 };
93 };
94 };
95};
arch/arm/boot/dts/stm32f429.dtsi+0−297
@@ -47,7 +47,6 @@ · 46 unmodified lines
47 47
48#include "skeleton.dtsi"48#include "skeleton.dtsi"
49#include "armv7-m.dtsi"49#include "armv7-m.dtsi"
50#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
51#include <dt-bindings/clock/stm32fx-clock.h>50#include <dt-bindings/clock/stm32fx-clock.h>
52#include <dt-bindings/mfd/stm32f4-rcc.h>51#include <dt-bindings/mfd/stm32f4-rcc.h>
53 52
@@ -591,302 +590,6 @@ · 537 unmodified lines
591 status = "disabled";590 status = "disabled";
592 };591 };
593 592
594 pinctrl: pin-controller {
595 #address-cells = <1>;
596 #size-cells = <1>;
597 compatible = "st,stm32f429-pinctrl";
598 ranges = <0 0x40020000 0x3000>;
599 interrupt-parent = <&exti>;
600 st,syscfg = <&syscfg 0x8>;
601 pins-are-numbered;
602
603 gpioa: gpio@40020000 {
604 gpio-controller;
605 #gpio-cells = <2>;
606 interrupt-controller;
607 #interrupt-cells = <2>;
608 reg = <0x0 0x400>;
609 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
610 st,bank-name = "GPIOA";
611 };
612
613 gpiob: gpio@40020400 {
614 gpio-controller;
615 #gpio-cells = <2>;
616 interrupt-controller;
617 #interrupt-cells = <2>;
618 reg = <0x400 0x400>;
619 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
620 st,bank-name = "GPIOB";
621 };
622
623 gpioc: gpio@40020800 {
624 gpio-controller;
625 #gpio-cells = <2>;
626 interrupt-controller;
627 #interrupt-cells = <2>;
628 reg = <0x800 0x400>;
629 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
630 st,bank-name = "GPIOC";
631 };
632
633 gpiod: gpio@40020c00 {
634 gpio-controller;
635 #gpio-cells = <2>;
636 interrupt-controller;
637 #interrupt-cells = <2>;
638 reg = <0xc00 0x400>;
639 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
640 st,bank-name = "GPIOD";
641 };
642
643 gpioe: gpio@40021000 {
644 gpio-controller;
645 #gpio-cells = <2>;
646 interrupt-controller;
647 #interrupt-cells = <2>;
648 reg = <0x1000 0x400>;
649 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
650 st,bank-name = "GPIOE";
651 };
652
653 gpiof: gpio@40021400 {
654 gpio-controller;
655 #gpio-cells = <2>;
656 interrupt-controller;
657 #interrupt-cells = <2>;
658 reg = <0x1400 0x400>;
659 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
660 st,bank-name = "GPIOF";
661 };
662
663 gpiog: gpio@40021800 {
664 gpio-controller;
665 #gpio-cells = <2>;
666 interrupt-controller;
667 #interrupt-cells = <2>;
668 reg = <0x1800 0x400>;
669 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
670 st,bank-name = "GPIOG";
671 };
672
673 gpioh: gpio@40021c00 {
674 gpio-controller;
675 #gpio-cells = <2>;
676 interrupt-controller;
677 #interrupt-cells = <2>;
678 reg = <0x1c00 0x400>;
679 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
680 st,bank-name = "GPIOH";
681 };
682
683 gpioi: gpio@40022000 {
684 gpio-controller;
685 #gpio-cells = <2>;
686 interrupt-controller;
687 #interrupt-cells = <2>;
688 reg = <0x2000 0x400>;
689 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
690 st,bank-name = "GPIOI";
691 };
692
693 gpioj: gpio@40022400 {
694 gpio-controller;
695 #gpio-cells = <2>;
696 interrupt-controller;
697 #interrupt-cells = <2>;
698 reg = <0x2400 0x400>;
699 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
700 st,bank-name = "GPIOJ";
701 };
702
703 gpiok: gpio@40022800 {
704 gpio-controller;
705 #gpio-cells = <2>;
706 interrupt-controller;
707 #interrupt-cells = <2>;
708 reg = <0x2800 0x400>;
709 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
710 st,bank-name = "GPIOK";
711 };
712
713 usart1_pins_a: usart1@0 {
714 pins1 {
715 pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
716 bias-disable;
717 drive-push-pull;
718 slew-rate = <0>;
719 };
720 pins2 {
721 pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
722 bias-disable;
723 };
724 };
725
726 usart3_pins_a: usart3@0 {
727 pins1 {
728 pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
729 bias-disable;
730 drive-push-pull;
731 slew-rate = <0>;
732 };
733 pins2 {
734 pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
735 bias-disable;
736 };
737 };
738
739 usbotg_fs_pins_a: usbotg_fs@0 {
740 pins {
741 pinmux = <STM32F429_PA10_FUNC_OTG_FS_ID>,
742 <STM32F429_PA11_FUNC_OTG_FS_DM>,
743 <STM32F429_PA12_FUNC_OTG_FS_DP>;
744 bias-disable;
745 drive-push-pull;
746 slew-rate = <2>;
747 };
748 };
749
750 usbotg_fs_pins_b: usbotg_fs@1 {
751 pins {
752 pinmux = <STM32F429_PB12_FUNC_OTG_HS_ID>,
753 <STM32F429_PB14_FUNC_OTG_HS_DM>,
754 <STM32F429_PB15_FUNC_OTG_HS_DP>;
755 bias-disable;
756 drive-push-pull;
757 slew-rate = <2>;
758 };
759 };
760
761 usbotg_hs_pins_a: usbotg_hs@0 {
762 pins {
763 pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
764 <STM32F429_PI11_FUNC_OTG_HS_ULPI_DIR>,
765 <STM32F429_PC0_FUNC_OTG_HS_ULPI_STP>,
766 <STM32F429_PA5_FUNC_OTG_HS_ULPI_CK>,
767 <STM32F429_PA3_FUNC_OTG_HS_ULPI_D0>,
768 <STM32F429_PB0_FUNC_OTG_HS_ULPI_D1>,
769 <STM32F429_PB1_FUNC_OTG_HS_ULPI_D2>,
770 <STM32F429_PB10_FUNC_OTG_HS_ULPI_D3>,
771 <STM32F429_PB11_FUNC_OTG_HS_ULPI_D4>,
772 <STM32F429_PB12_FUNC_OTG_HS_ULPI_D5>,
773 <STM32F429_PB13_FUNC_OTG_HS_ULPI_D6>,
774 <STM32F429_PB5_FUNC_OTG_HS_ULPI_D7>;
775 bias-disable;
776 drive-push-pull;
777 slew-rate = <2>;
778 };
779 };
780
781 ethernet_mii: mii@0 {
782 pins {
783 pinmux = <STM32F429_PG13_FUNC_ETH_MII_TXD0_ETH_RMII_TXD0>,
784 <STM32F429_PG14_FUNC_ETH_MII_TXD1_ETH_RMII_TXD1>,
785 <STM32F429_PC2_FUNC_ETH_MII_TXD2>,
786 <STM32F429_PB8_FUNC_ETH_MII_TXD3>,
787 <STM32F429_PC3_FUNC_ETH_MII_TX_CLK>,
788 <STM32F429_PG11_FUNC_ETH_MII_TX_EN_ETH_RMII_TX_EN>,
789 <STM32F429_PA2_FUNC_ETH_MDIO>,
790 <STM32F429_PC1_FUNC_ETH_MDC>,
791 <STM32F429_PA1_FUNC_ETH_MII_RX_CLK_ETH_RMII_REF_CLK>,
792 <STM32F429_PA7_FUNC_ETH_MII_RX_DV_ETH_RMII_CRS_DV>,
793 <STM32F429_PC4_FUNC_ETH_MII_RXD0_ETH_RMII_RXD0>,
794 <STM32F429_PC5_FUNC_ETH_MII_RXD1_ETH_RMII_RXD1>,
795 <STM32F429_PH6_FUNC_ETH_MII_RXD2>,
796 <STM32F429_PH7_FUNC_ETH_MII_RXD3>;
797 slew-rate = <2>;
798 };
799 };
800
801 adc3_in8_pin: adc@200 {
802 pins {
803 pinmux = <STM32F429_PF10_FUNC_ANALOG>;
804 };
805 };
806
807 pwm1_pins: pwm@1 {
808 pins {
809 pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
810 <STM32F429_PB13_FUNC_TIM1_CH1N>,
811 <STM32F429_PB12_FUNC_TIM1_BKIN>;
812 };
813 };
814
815 pwm3_pins: pwm@3 {
816 pins {
817 pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
818 <STM32F429_PB5_FUNC_TIM3_CH2>;
819 };
820 };
821
822 i2c1_pins: i2c1@0 {
823 pins {
824 pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
825 <STM32F429_PB6_FUNC_I2C1_SCL>;
826 bias-disable;
827 drive-open-drain;
828 slew-rate = <3>;
829 };
830 };
831
832 ltdc_pins: ltdc@0 {
833 pins {
834 pinmux = <STM32F429_PI12_FUNC_LCD_HSYNC>,
835 <STM32F429_PI13_FUNC_LCD_VSYNC>,
836 <STM32F429_PI14_FUNC_LCD_CLK>,
837 <STM32F429_PI15_FUNC_LCD_R0>,
838 <STM32F429_PJ0_FUNC_LCD_R1>,
839 <STM32F429_PJ1_FUNC_LCD_R2>,
840 <STM32F429_PJ2_FUNC_LCD_R3>,
841 <STM32F429_PJ3_FUNC_LCD_R4>,
842 <STM32F429_PJ4_FUNC_LCD_R5>,
843 <STM32F429_PJ5_FUNC_LCD_R6>,
844 <STM32F429_PJ6_FUNC_LCD_R7>,
845 <STM32F429_PJ7_FUNC_LCD_G0>,
846 <STM32F429_PJ8_FUNC_LCD_G1>,
847 <STM32F429_PJ9_FUNC_LCD_G2>,
848 <STM32F429_PJ10_FUNC_LCD_G3>,
849 <STM32F429_PJ11_FUNC_LCD_G4>,
850 <STM32F429_PJ12_FUNC_LCD_B0>,
851 <STM32F429_PJ13_FUNC_LCD_B1>,
852 <STM32F429_PJ14_FUNC_LCD_B2>,
853 <STM32F429_PJ15_FUNC_LCD_B3>,
854 <STM32F429_PK0_FUNC_LCD_G5>,
855 <STM32F429_PK1_FUNC_LCD_G6>,
856 <STM32F429_PK2_FUNC_LCD_G7>,
857 <STM32F429_PK3_FUNC_LCD_B4>,
858 <STM32F429_PK4_FUNC_LCD_B5>,
859 <STM32F429_PK5_FUNC_LCD_B6>,
860 <STM32F429_PK6_FUNC_LCD_B7>,
861 <STM32F429_PK7_FUNC_LCD_DE>;
862 slew-rate = <2>;
863 };
864 };
865
866 dcmi_pins: dcmi@0 {
867 pins {
868 pinmux = <STM32F429_PA4_FUNC_DCMI_HSYNC>,
869 <STM32F429_PB7_FUNC_DCMI_VSYNC>,
870 <STM32F429_PA6_FUNC_DCMI_PIXCLK>,
871 <STM32F429_PC6_FUNC_DCMI_D0>,
872 <STM32F429_PC7_FUNC_DCMI_D1>,
873 <STM32F429_PC8_FUNC_DCMI_D2>,
874 <STM32F429_PC9_FUNC_DCMI_D3>,
875 <STM32F429_PC11_FUNC_DCMI_D4>,
876 <STM32F429_PD3_FUNC_DCMI_D5>,
877 <STM32F429_PB8_FUNC_DCMI_D6>,
878 <STM32F429_PE6_FUNC_DCMI_D7>,
879 <STM32F429_PC10_FUNC_DCMI_D8>,
880 <STM32F429_PC12_FUNC_DCMI_D9>,
881 <STM32F429_PD6_FUNC_DCMI_D10>,
882 <STM32F429_PD2_FUNC_DCMI_D11>;
883 bias-disable;
884 drive-push-pull;
885 slew-rate = <3>;
886 };
887 };
888 };
889
890 crc: crc@40023000 {593 crc: crc@40023000 {
891 compatible = "st,stm32f4-crc";594 compatible = "st,stm32f4-crc";
892 reg = <0x40023000 0x400>;595 reg = <0x40023000 0x400>;
arch/arm/boot/dts/stm32f469-disco.dts+1−0
@@ -47,6 +47,7 @@ · 46 unmodified lines
47 47
48/dts-v1/;48/dts-v1/;
49#include "stm32f429.dtsi"49#include "stm32f429.dtsi"
50#include "stm32f469-pinctrl.dtsi"
50 51
51/ {52/ {
52 model = "STMicroelectronics STM32F469i-DISCO board";53 model = "STMicroelectronics STM32F469i-DISCO board";
arch/arm/boot/dts/stm32f469-pinctrl.dtsi+96−0
@@ -0,0 +1,96 @@
1/*
2 * Copyright 2017 - Alexandre Torgue <alexandre.torgue@st.com>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License, or (at your option) any later version.
13 *
14 * This file is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively,
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use,
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43#include "stm32f4-pinctrl.dtsi"
44
45/ {
46 soc {
47 pinctrl: pin-controller {
48 compatible = "st,stm32f469-pinctrl";
49
50 gpioa: gpio@40020000 {
51 gpio-ranges = <&pinctrl 0 0 16>;
52 };
53
54 gpiob: gpio@40020400 {
55 gpio-ranges = <&pinctrl 0 16 16>;
56 };
57
58 gpioc: gpio@40020800 {
59 gpio-ranges = <&pinctrl 0 32 16>;
60 };
61
62 gpiod: gpio@40020c00 {
63 gpio-ranges = <&pinctrl 0 48 16>;
64 };
65
66 gpioe: gpio@40021000 {
67 gpio-ranges = <&pinctrl 0 64 16>;
68 };
69
70 gpiof: gpio@40021400 {
71 gpio-ranges = <&pinctrl 0 80 16>;
72 };
73
74 gpiog: gpio@40021800 {
75 gpio-ranges = <&pinctrl 0 96 16>;
76 };
77
78 gpioh: gpio@40021c00 {
79 gpio-ranges = <&pinctrl 0 112 16>;
80 };
81
82 gpioi: gpio@40022000 {
83 gpio-ranges = <&pinctrl 0 128 16>;
84 };
85
86 gpioj: gpio@40022400 {
87 gpio-ranges = <&pinctrl 0 144 6>,
88 <&pinctrl 12 156 4>;
89 };
90
91 gpiok: gpio@40022800 {
92 gpio-ranges = <&pinctrl 3 163 5>;
93 };
94 };
95 };
96};
arch/arm/configs/gemini_defconfig+2−1
@@ -32,6 +32,7 @@ CONFIG_BLK_DEV_RAM_SIZE=16384 · 31 unmodified lines
32CONFIG_BLK_DEV_SD=y32CONFIG_BLK_DEV_SD=y
33# CONFIG_SCSI_LOWLEVEL is not set33# CONFIG_SCSI_LOWLEVEL is not set
34CONFIG_ATA=y34CONFIG_ATA=y
35CONFIG_PATA_FTIDE010=y
35CONFIG_INPUT_EVDEV=y36CONFIG_INPUT_EVDEV=y
36CONFIG_KEYBOARD_GPIO=y37CONFIG_KEYBOARD_GPIO=y
37# CONFIG_INPUT_MOUSE is not set38# CONFIG_INPUT_MOUSE is not set
@@ -55,8 +56,8 @@ CONFIG_LEDS_GPIO=y · 17 unmodified lines
55CONFIG_LEDS_TRIGGERS=y56CONFIG_LEDS_TRIGGERS=y
56CONFIG_LEDS_TRIGGER_HEARTBEAT=y57CONFIG_LEDS_TRIGGER_HEARTBEAT=y
57CONFIG_RTC_CLASS=y58CONFIG_RTC_CLASS=y
58CONFIG_RTC_DRV_GEMINI=y
59CONFIG_DMADEVICES=y59CONFIG_DMADEVICES=y
60CONFIG_AMBA_PL08X=y
60# CONFIG_DNOTIFY is not set61# CONFIG_DNOTIFY is not set
61CONFIG_TMPFS=y62CONFIG_TMPFS=y
62CONFIG_TMPFS_POSIX_ACL=y63CONFIG_TMPFS_POSIX_ACL=y
arch/arm/configs/pxa_defconfig+1−1
@@ -471,7 +471,7 @@ CONFIG_LCD_PLATFORM=m · 470 unmodified lines
471CONFIG_LCD_TOSA=m471CONFIG_LCD_TOSA=m
472CONFIG_BACKLIGHT_PWM=m472CONFIG_BACKLIGHT_PWM=m
473CONFIG_BACKLIGHT_TOSA=m473CONFIG_BACKLIGHT_TOSA=m
474CONFIG_FRAMEBUFFER_CONSOLE=m474CONFIG_FRAMEBUFFER_CONSOLE=y
475CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y475CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
476CONFIG_LOGO=y476CONFIG_LOGO=y
477CONFIG_SOUND=m477CONFIG_SOUND=m
arch/arm/configs/viper_defconfig+1−1
@@ -113,7 +113,7 @@ CONFIG_FB_PXA_PARAMETERS=y · 112 unmodified lines
113CONFIG_BACKLIGHT_LCD_SUPPORT=y113CONFIG_BACKLIGHT_LCD_SUPPORT=y
114CONFIG_BACKLIGHT_PWM=m114CONFIG_BACKLIGHT_PWM=m
115# CONFIG_VGA_CONSOLE is not set115# CONFIG_VGA_CONSOLE is not set
116CONFIG_FRAMEBUFFER_CONSOLE=m116CONFIG_FRAMEBUFFER_CONSOLE=y
117CONFIG_LOGO=y117CONFIG_LOGO=y
118CONFIG_SOUND=m118CONFIG_SOUND=m
119CONFIG_SND=m119CONFIG_SND=m
arch/arm/configs/zeus_defconfig+1−1
@@ -112,7 +112,7 @@ CONFIG_FB_PXA=m · 111 unmodified lines
112CONFIG_FB_PXA_PARAMETERS=y112CONFIG_FB_PXA_PARAMETERS=y
113CONFIG_BACKLIGHT_LCD_SUPPORT=y113CONFIG_BACKLIGHT_LCD_SUPPORT=y
114# CONFIG_VGA_CONSOLE is not set114# CONFIG_VGA_CONSOLE is not set
115CONFIG_FRAMEBUFFER_CONSOLE=m115CONFIG_FRAMEBUFFER_CONSOLE=y
116CONFIG_LOGO=y116CONFIG_LOGO=y
117CONFIG_SOUND=m117CONFIG_SOUND=m
118CONFIG_SND=m118CONFIG_SND=m
arch/arm/include/asm/thread_info.h+6−9
@@ -139,11 +139,10 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, · 138 unmodified lines
139#define TIF_NEED_RESCHED 1 /* rescheduling necessary */139#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
140#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */140#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
141#define TIF_UPROBE 3 /* breakpointed or singlestepping */141#define TIF_UPROBE 3 /* breakpointed or singlestepping */
142#define TIF_FSCHECK 4 /* Check FS is USER_DS on return */142#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
143#define TIF_SYSCALL_TRACE 5 /* syscall trace active */143#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
144#define TIF_SYSCALL_AUDIT 6 /* syscall auditing active */144#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
145#define TIF_SYSCALL_TRACEPOINT 7 /* syscall tracepoint instrumentation */145#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
146#define TIF_SECCOMP 8 /* seccomp syscall filtering active */
147 146
148#define TIF_NOHZ 12 /* in adaptive nohz mode */147#define TIF_NOHZ 12 /* in adaptive nohz mode */
149#define TIF_USING_IWMMXT 17148#define TIF_USING_IWMMXT 17
@@ -154,7 +153,6 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, · 4 unmodified lines
154#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)153#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
155#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)154#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
156#define _TIF_UPROBE (1 << TIF_UPROBE)155#define _TIF_UPROBE (1 << TIF_UPROBE)
157#define _TIF_FSCHECK (1 << TIF_FSCHECK)
158#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)156#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
159#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)157#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
160#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)158#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
@@ -168,9 +166,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, · 7 unmodified lines
168/*166/*
169 * Change these and you break ASM code in entry-common.S167 * Change these and you break ASM code in entry-common.S
170 */168 */
171#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \169#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
172 _TIF_NOTIFY_RESUME | _TIF_UPROBE | \170 _TIF_NOTIFY_RESUME | _TIF_UPROBE)
173 _TIF_FSCHECK)
174 171
175#endif /* __KERNEL__ */172#endif /* __KERNEL__ */
176#endif /* __ASM_ARM_THREAD_INFO_H */173#endif /* __ASM_ARM_THREAD_INFO_H */
arch/arm/include/asm/uaccess.h+0−2
@@ -70,8 +70,6 @@ static inline void set_fs(mm_segment_t fs) · 69 unmodified lines
70{70{
71 current_thread_info()->addr_limit = fs;71 current_thread_info()->addr_limit = fs;
72 modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);72 modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
73 /* On user-mode return, check fs is correct */
74 set_thread_flag(TIF_FSCHECK);
75}73}
76 74
77#define segment_eq(a, b) ((a) == (b))75#define segment_eq(a, b) ((a) == (b))
arch/arm/kernel/entry-common.S+13−7
@@ -12,6 +12,7 @@ · 11 unmodified lines
12#include <asm/unistd.h>12#include <asm/unistd.h>
13#include <asm/ftrace.h>13#include <asm/ftrace.h>
14#include <asm/unwind.h>14#include <asm/unwind.h>
15#include <asm/memory.h>
15#ifdef CONFIG_AEABI16#ifdef CONFIG_AEABI
16#include <asm/unistd-oabi.h>17#include <asm/unistd-oabi.h>
17#endif18#endif
@@ -48,12 +49,14 @@ ret_fast_syscall: · 30 unmodified lines
48 UNWIND(.fnstart )49 UNWIND(.fnstart )
49 UNWIND(.cantunwind )50 UNWIND(.cantunwind )
50 disable_irq_notrace @ disable interrupts51 disable_irq_notrace @ disable interrupts
52 ldr r2, [tsk, #TI_ADDR_LIMIT]
53 cmp r2, #TASK_SIZE
54 blne addr_limit_check_failed
51 ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing55 ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
52 tst r1, #_TIF_SYSCALL_WORK56 tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
53 bne fast_work_pending
54 tst r1, #_TIF_WORK_MASK
55 bne fast_work_pending57 bne fast_work_pending
56 58
59
57 /* perform architecture specific actions before user return */60 /* perform architecture specific actions before user return */
58 arch_ret_to_user r1, lr61 arch_ret_to_user r1, lr
59 62
@@ -76,16 +79,16 @@ ret_fast_syscall: · 16 unmodified lines
76 UNWIND(.cantunwind )79 UNWIND(.cantunwind )
77 str r0, [sp, #S_R0 + S_OFF]! @ save returned r080 str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
78 disable_irq_notrace @ disable interrupts81 disable_irq_notrace @ disable interrupts
82 ldr r2, [tsk, #TI_ADDR_LIMIT]
83 cmp r2, #TASK_SIZE
84 blne addr_limit_check_failed
79 ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing85 ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
80 tst r1, #_TIF_SYSCALL_WORK86 tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
81 bne fast_work_pending
82 tst r1, #_TIF_WORK_MASK
83 beq no_work_pending87 beq no_work_pending
84 UNWIND(.fnend )88 UNWIND(.fnend )
85ENDPROC(ret_fast_syscall)89ENDPROC(ret_fast_syscall)
86 90
87 /* Slower path - fall through to work_pending */91 /* Slower path - fall through to work_pending */
88fast_work_pending:
89#endif92#endif
90 93
91 tst r1, #_TIF_SYSCALL_WORK94 tst r1, #_TIF_SYSCALL_WORK
@@ -111,6 +114,9 @@ ENTRY(ret_to_user) · 19 unmodified lines
111ret_slow_syscall:114ret_slow_syscall:
112 disable_irq_notrace @ disable interrupts115 disable_irq_notrace @ disable interrupts
113ENTRY(ret_to_user_from_irq)116ENTRY(ret_to_user_from_irq)
117 ldr r2, [tsk, #TI_ADDR_LIMIT]
118 cmp r2, #TASK_SIZE
119 blne addr_limit_check_failed
114 ldr r1, [tsk, #TI_FLAGS]120 ldr r1, [tsk, #TI_FLAGS]
115 tst r1, #_TIF_WORK_MASK121 tst r1, #_TIF_WORK_MASK
116 bne slow_work_pending122 bne slow_work_pending
arch/arm/kernel/signal.c+6−4
@@ -614,10 +614,6 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) · 613 unmodified lines
614 * Update the trace code with the current status.614 * Update the trace code with the current status.
615 */615 */
616 trace_hardirqs_off();616 trace_hardirqs_off();
617
618 /* Check valid user FS if needed */
619 addr_limit_user_check();
620
621 do {617 do {
622 if (likely(thread_flags & _TIF_NEED_RESCHED)) {618 if (likely(thread_flags & _TIF_NEED_RESCHED)) {
623 schedule();619 schedule();
@@ -678,3 +674,9 @@ struct page *get_signal_page(void) · 54 unmodified lines
678 674
679 return page;675 return page;
680}676}
677
678/* Defer to generic check */
679asmlinkage void addr_limit_check_failed(void)
680{
681 addr_limit_user_check();
682}
arch/arm/mach-at91/pm.c+2−2
@@ -533,8 +533,8 @@ static void __init at91_pm_backup_init(void) · 532 unmodified lines
533 }533 }
534 534
535 pm_bu->suspended = 0;535 pm_bu->suspended = 0;
536 pm_bu->canary = virt_to_phys(&canary);536 pm_bu->canary = __pa_symbol(&canary);
537 pm_bu->resume = virt_to_phys(cpu_resume);537 pm_bu->resume = __pa_symbol(cpu_resume);
538 538
539 return;539 return;
540 540
arch/arm/mach-omap2/hsmmc.c+2−2
@@ -58,10 +58,10 @@ void omap_hsmmc_late_init(struct omap2_hsmmc_info *c) · 57 unmodified lines
58 struct platform_device *pdev;58 struct platform_device *pdev;
59 int res;59 int res;
60 60
61 if (omap_hsmmc_done != 1)61 if (omap_hsmmc_done)
62 return;62 return;
63 63
64 omap_hsmmc_done++;64 omap_hsmmc_done = 1;
65 65
66 for (; c->mmc; c++) {66 for (; c->mmc; c++) {
67 pdev = c->pdev;67 pdev = c->pdev;
arch/arm/mach-omap2/omap_hwmod_7xx_data.c+1−0
@@ -839,6 +839,7 @@ static struct omap_hwmod dra7xx_gpio1_hwmod = { · 838 unmodified lines
839 .name = "gpio1",839 .name = "gpio1",
840 .class = &dra7xx_gpio_hwmod_class,840 .class = &dra7xx_gpio_hwmod_class,
841 .clkdm_name = "wkupaon_clkdm",841 .clkdm_name = "wkupaon_clkdm",
842 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
842 .main_clk = "wkupaon_iclk_mux",843 .main_clk = "wkupaon_iclk_mux",
843 .prcm = {844 .prcm = {
844 .omap4 = {845 .omap4 = {
arch/arm64/Makefile+5−0
@@ -50,17 +50,22 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables · 49 unmodified lines
50KBUILD_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)50KBUILD_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)
51KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)51KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
52 52
53KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
54KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
55
53ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)56ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
54KBUILD_CPPFLAGS += -mbig-endian57KBUILD_CPPFLAGS += -mbig-endian
55CHECKFLAGS += -D__AARCH64EB__58CHECKFLAGS += -D__AARCH64EB__
56AS += -EB59AS += -EB
57LD += -EB60LD += -EB
61LDFLAGS += -maarch64linuxb
58UTS_MACHINE := aarch64_be62UTS_MACHINE := aarch64_be
59else63else
60KBUILD_CPPFLAGS += -mlittle-endian64KBUILD_CPPFLAGS += -mlittle-endian
61CHECKFLAGS += -D__AARCH64EL__65CHECKFLAGS += -D__AARCH64EL__
62AS += -EL66AS += -EL
63LD += -EL67LD += -EL
68LDFLAGS += -maarch64linux
64UTS_MACHINE := aarch6469UTS_MACHINE := aarch64
65endif70endif
66 71
arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi+6−4
@@ -168,7 +168,8 @@ · 167 unmodified lines
168&sd_emmc_a {168&sd_emmc_a {
169 status = "okay";169 status = "okay";
170 pinctrl-0 = <&sdio_pins>;170 pinctrl-0 = <&sdio_pins>;
171 pinctrl-names = "default";171 pinctrl-1 = <&sdio_clk_gate_pins>;
172 pinctrl-names = "default", "clk-gate";
172 #address-cells = <1>;173 #address-cells = <1>;
173 #size-cells = <0>;174 #size-cells = <0>;
174 175
@@ -194,7 +195,8 @@ · 19 unmodified lines
194&sd_emmc_b {195&sd_emmc_b {
195 status = "okay";196 status = "okay";
196 pinctrl-0 = <&sdcard_pins>;197 pinctrl-0 = <&sdcard_pins>;
197 pinctrl-names = "default";198 pinctrl-1 = <&sdcard_clk_gate_pins>;
199 pinctrl-names = "default", "clk-gate";
198 200
199 bus-width = <4>;201 bus-width = <4>;
200 cap-sd-highspeed;202 cap-sd-highspeed;
@@ -212,10 +214,10 @@ · 11 unmodified lines
212&sd_emmc_c {214&sd_emmc_c {
213 status = "okay";215 status = "okay";
214 pinctrl-0 = <&emmc_pins>;216 pinctrl-0 = <&emmc_pins>;
215 pinctrl-names = "default";217 pinctrl-1 = <&emmc_clk_gate_pins>;
218 pinctrl-names = "default", "clk-gate";
216 219
217 bus-width = <8>;220 bus-width = <8>;
218 cap-sd-highspeed;
219 cap-mmc-highspeed;221 cap-mmc-highspeed;
220 max-frequency = <200000000>;222 max-frequency = <200000000>;
221 non-removable;223 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts+14−5
@@ -107,6 +107,9 @@ · 106 unmodified lines
107 107
108 states = <3300000 0>,108 states = <3300000 0>,
109 <1800000 1>;109 <1800000 1>;
110
111 regulator-settling-time-up-us = <100>;
112 regulator-settling-time-down-us = <5000>;
110 };113 };
111 114
112 wifi_32k: wifi-32k {115 wifi_32k: wifi-32k {
@@ -250,7 +253,8 @@ · 137 unmodified lines
250&sd_emmc_a {253&sd_emmc_a {
251 status = "okay";254 status = "okay";
252 pinctrl-0 = <&sdio_pins>, <&sdio_irq_pins>;255 pinctrl-0 = <&sdio_pins>, <&sdio_irq_pins>;
253 pinctrl-names = "default";256 pinctrl-1 = <&sdio_clk_gate_pins>;
257 pinctrl-names = "default", "clk-gate";
254 #address-cells = <1>;258 #address-cells = <1>;
255 #size-cells = <0>;259 #size-cells = <0>;
256 260
@@ -276,11 +280,16 @@ · 19 unmodified lines
276&sd_emmc_b {280&sd_emmc_b {
277 status = "okay";281 status = "okay";
278 pinctrl-0 = <&sdcard_pins>;282 pinctrl-0 = <&sdcard_pins>;
279 pinctrl-names = "default";283 pinctrl-1 = <&sdcard_clk_gate_pins>;
284 pinctrl-names = "default", "clk-gate";
280 285
281 bus-width = <4>;286 bus-width = <4>;
282 cap-sd-highspeed;287 cap-sd-highspeed;
283 max-frequency = <100000000>;288 sd-uhs-sdr12;
289 sd-uhs-sdr25;
290 sd-uhs-sdr50;
291 sd-uhs-sdr104;
292 max-frequency = <200000000>;
284 disable-wp;293 disable-wp;
285 294
286 cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;295 cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
@@ -294,10 +303,10 @@ · 7 unmodified lines
294&sd_emmc_c {303&sd_emmc_c {
295 status = "disabled";304 status = "disabled";
296 pinctrl-0 = <&emmc_pins>;305 pinctrl-0 = <&emmc_pins>;
297 pinctrl-names = "default";306 pinctrl-1 = <&emmc_clk_gate_pins>;
307 pinctrl-names = "default", "clk-gate";
298 308
299 bus-width = <8>;309 bus-width = <8>;
300 cap-sd-highspeed;
301 max-frequency = <200000000>;310 max-frequency = <200000000>;
302 non-removable;311 non-removable;
303 disable-wp;312 disable-wp;
arch/arm64/boot/dts/amlogic/meson-gxbb-nexbox-a95x.dts+7−5
@@ -51,7 +51,7 @@ · 50 unmodified lines
51/ {51/ {
52 compatible = "nexbox,a95x", "amlogic,meson-gxbb";52 compatible = "nexbox,a95x", "amlogic,meson-gxbb";
53 model = "NEXBOX A95X";53 model = "NEXBOX A95X";
54 54
55 aliases {55 aliases {
56 serial0 = &uart_AO;56 serial0 = &uart_AO;
57 };57 };
@@ -232,7 +232,8 @@ · 174 unmodified lines
232&sd_emmc_a {232&sd_emmc_a {
233 status = "okay";233 status = "okay";
234 pinctrl-0 = <&sdio_pins>;234 pinctrl-0 = <&sdio_pins>;
235 pinctrl-names = "default";235 pinctrl-1 = <&sdio_clk_gate_pins>;
236 pinctrl-names = "default", "clk-gate";
236 #address-cells = <1>;237 #address-cells = <1>;
237 #size-cells = <0>;238 #size-cells = <0>;
238 239
@@ -253,7 +254,8 @@ · 14 unmodified lines
253&sd_emmc_b {254&sd_emmc_b {
254 status = "okay";255 status = "okay";
255 pinctrl-0 = <&sdcard_pins>;256 pinctrl-0 = <&sdcard_pins>;
256 pinctrl-names = "default";257 pinctrl-1 = <&sdcard_clk_gate_pins>;
258 pinctrl-names = "default", "clk-gate";
257 259
258 bus-width = <4>;260 bus-width = <4>;
259 cap-sd-highspeed;261 cap-sd-highspeed;
@@ -271,10 +273,10 @@ · 11 unmodified lines
271&sd_emmc_c {273&sd_emmc_c {
272 status = "okay";274 status = "okay";
273 pinctrl-0 = <&emmc_pins>;275 pinctrl-0 = <&emmc_pins>;
274 pinctrl-names = "default";276 pinctrl-1 = <&emmc_clk_gate_pins>;
277 pinctrl-names = "default", "clk-gate";
275 278
276 bus-width = <8>;279 bus-width = <8>;
277 cap-sd-highspeed;
278 cap-mmc-highspeed;280 cap-mmc-highspeed;
279 max-frequency = <200000000>;281 max-frequency = <200000000>;
280 non-removable;282 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts+5−4
@@ -50,7 +50,7 @@ · 49 unmodified lines
50/ {50/ {
51 compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";51 compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
52 model = "Hardkernel ODROID-C2";52 model = "Hardkernel ODROID-C2";
53 53
54 aliases {54 aliases {
55 serial0 = &uart_AO;55 serial0 = &uart_AO;
56 };56 };
@@ -253,7 +253,8 @@ · 196 unmodified lines
253&sd_emmc_b {253&sd_emmc_b {
254 status = "okay";254 status = "okay";
255 pinctrl-0 = <&sdcard_pins>;255 pinctrl-0 = <&sdcard_pins>;
256 pinctrl-names = "default";256 pinctrl-1 = <&sdcard_clk_gate_pins>;
257 pinctrl-names = "default", "clk-gate";
257 258
258 bus-width = <4>;259 bus-width = <4>;
259 cap-sd-highspeed;260 cap-sd-highspeed;
@@ -271,10 +272,10 @@ · 11 unmodified lines
271&sd_emmc_c {272&sd_emmc_c {
272 status = "okay";273 status = "okay";
273 pinctrl-0 = <&emmc_pins>;274 pinctrl-0 = <&emmc_pins>;
274 pinctrl-names = "default";275 pinctrl-1 = <&emmc_clk_gate_pins>;
276 pinctrl-names = "default", "clk-gate";
275 277
276 bus-width = <8>;278 bus-width = <8>;
277 cap-sd-highspeed;
278 max-frequency = <200000000>;279 max-frequency = <200000000>;
279 non-removable;280 non-removable;
280 disable-wp;281 disable-wp;
arch/arm64/boot/dts/amlogic/meson-gxbb-p20x.dtsi+9−4
@@ -194,7 +194,8 @@ · 193 unmodified lines
194&sd_emmc_a {194&sd_emmc_a {
195 status = "okay";195 status = "okay";
196 pinctrl-0 = <&sdio_pins>;196 pinctrl-0 = <&sdio_pins>;
197 pinctrl-names = "default";197 pinctrl-1 = <&sdio_clk_gate_pins>;
198 pinctrl-names = "default", "clk-gate";
198 #address-cells = <1>;199 #address-cells = <1>;
199 #size-cells = <0>;200 #size-cells = <0>;
200 201
@@ -220,10 +221,14 @@ · 19 unmodified lines
220&sd_emmc_b {221&sd_emmc_b {
221 status = "okay";222 status = "okay";
222 pinctrl-0 = <&sdcard_pins>;223 pinctrl-0 = <&sdcard_pins>;
223 pinctrl-names = "default";224 pinctrl-1 = <&sdcard_clk_gate_pins>;
225 pinctrl-names = "default", "clk-gate";
224 226
225 bus-width = <4>;227 bus-width = <4>;
226 cap-sd-highspeed;228 cap-sd-highspeed;
229 sd-uhs-sdr12;
230 sd-uhs-sdr25;
231 sd-uhs-sdr50;
227 max-frequency = <100000000>;232 max-frequency = <100000000>;
228 disable-wp;233 disable-wp;
229 234
@@ -238,10 +243,10 @@ · 8 unmodified lines
238&sd_emmc_c {243&sd_emmc_c {
239 status = "okay";244 status = "okay";
240 pinctrl-0 = <&emmc_pins>;245 pinctrl-0 = <&emmc_pins>;
241 pinctrl-names = "default";246 pinctrl-1 = <&emmc_clk_gate_pins>;
247 pinctrl-names = "default", "clk-gate";
242 248
243 bus-width = <8>;249 bus-width = <8>;
244 cap-sd-highspeed;
245 cap-mmc-highspeed;250 cap-mmc-highspeed;
246 max-frequency = <200000000>;251 max-frequency = <200000000>;
247 non-removable;252 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi+6−4
@@ -155,7 +155,8 @@ · 154 unmodified lines
155&sd_emmc_a {155&sd_emmc_a {
156 status = "okay";156 status = "okay";
157 pinctrl-0 = <&sdio_pins &sdio_irq_pins>;157 pinctrl-0 = <&sdio_pins &sdio_irq_pins>;
158 pinctrl-names = "default";158 pinctrl-1 = <&sdio_clk_gate_pins>;
159 pinctrl-names = "default", "clk-gate";
159 #address-cells = <1>;160 #address-cells = <1>;
160 #size-cells = <0>;161 #size-cells = <0>;
161 162
@@ -181,7 +182,8 @@ · 19 unmodified lines
181&sd_emmc_b {182&sd_emmc_b {
182 status = "okay";183 status = "okay";
183 pinctrl-0 = <&sdcard_pins>;184 pinctrl-0 = <&sdcard_pins>;
184 pinctrl-names = "default";185 pinctrl-1 = <&sdcard_clk_gate_pins>;
186 pinctrl-names = "default", "clk-gate";
185 187
186 bus-width = <4>;188 bus-width = <4>;
187 cap-sd-highspeed;189 cap-sd-highspeed;
@@ -198,10 +200,10 @@ · 10 unmodified lines
198&sd_emmc_c {200&sd_emmc_c {
199 status = "okay";201 status = "okay";
200 pinctrl-0 = <&emmc_pins>;202 pinctrl-0 = <&emmc_pins>;
201 pinctrl-names = "default";203 pinctrl-1 = <&emmc_clk_gate_pins>;
204 pinctrl-names = "default", "clk-gate";
202 205
203 bus-width = <8>;206 bus-width = <8>;
204 cap-sd-highspeed;
205 cap-mmc-highspeed;207 cap-mmc-highspeed;
206 max-frequency = <200000000>;208 max-frequency = <200000000>;
207 non-removable;209 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi+36−3
@@ -392,6 +392,17 @@ · 391 unmodified lines
392 };392 };
393 };393 };
394 394
395 emmc_clk_gate_pins: emmc_clk_gate {
396 mux {
397 groups = "BOOT_8";
398 function = "gpio_periphs";
399 };
400 cfg-pull-down {
401 pins = "BOOT_8";
402 bias-pull-down;
403 };
404 };
405
395 nor_pins: nor {406 nor_pins: nor {
396 mux {407 mux {
397 groups = "nor_d",408 groups = "nor_d",
@@ -430,6 +441,17 @@ · 32 unmodified lines
430 };441 };
431 };442 };
432 443
444 sdcard_clk_gate_pins: sdcard_clk_gate {
445 mux {
446 groups = "CARD_2";
447 function = "gpio_periphs";
448 };
449 cfg-pull-down {
450 pins = "CARD_2";
451 bias-pull-down;
452 };
453 };
454
433 sdio_pins: sdio {455 sdio_pins: sdio {
434 mux {456 mux {
435 groups = "sdio_d0",457 groups = "sdio_d0",
@@ -442,6 +464,17 @@ · 6 unmodified lines
442 };464 };
443 };465 };
444 466
467 sdio_clk_gate_pins: sdio_clk_gate {
468 mux {
469 groups = "GPIOX_4";
470 function = "gpio_periphs";
471 };
472 cfg-pull-down {
473 pins = "GPIOX_4";
474 bias-pull-down;
475 };
476 };
477
445 sdio_irq_pins: sdio_irq {478 sdio_irq_pins: sdio_irq {
446 mux {479 mux {
447 groups = "sdio_irq";480 groups = "sdio_irq";
@@ -661,21 +694,21 @@ · 213 unmodified lines
661 694
662&sd_emmc_a {695&sd_emmc_a {
663 clocks = <&clkc CLKID_SD_EMMC_A>,696 clocks = <&clkc CLKID_SD_EMMC_A>,
664 <&xtal>,697 <&clkc CLKID_SD_EMMC_A_CLK0>,
665 <&clkc CLKID_FCLK_DIV2>;698 <&clkc CLKID_FCLK_DIV2>;
666 clock-names = "core", "clkin0", "clkin1";699 clock-names = "core", "clkin0", "clkin1";
667};700};
668 701
669&sd_emmc_b {702&sd_emmc_b {
670 clocks = <&clkc CLKID_SD_EMMC_B>,703 clocks = <&clkc CLKID_SD_EMMC_B>,
671 <&xtal>,704 <&clkc CLKID_SD_EMMC_B_CLK0>,
672 <&clkc CLKID_FCLK_DIV2>;705 <&clkc CLKID_FCLK_DIV2>;
673 clock-names = "core", "clkin0", "clkin1";706 clock-names = "core", "clkin0", "clkin1";
674};707};
675 708
676&sd_emmc_c {709&sd_emmc_c {
677 clocks = <&clkc CLKID_SD_EMMC_C>,710 clocks = <&clkc CLKID_SD_EMMC_C>,
678 <&xtal>,711 <&clkc CLKID_SD_EMMC_C_CLK0>,
679 <&clkc CLKID_FCLK_DIV2>;712 <&clkc CLKID_FCLK_DIV2>;
680 clock-names = "core", "clkin0", "clkin1";713 clock-names = "core", "clkin0", "clkin1";
681};714};
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-hwacom-amazetv.dts+4−3
@@ -123,7 +123,8 @@ · 122 unmodified lines
123&sd_emmc_b {123&sd_emmc_b {
124 status = "okay";124 status = "okay";
125 pinctrl-0 = <&sdcard_pins>;125 pinctrl-0 = <&sdcard_pins>;
126 pinctrl-names = "default";126 pinctrl-1 = <&sdcard_clk_gate_pins>;
127 pinctrl-names = "default", "clk-gate";
127 128
128 bus-width = <4>;129 bus-width = <4>;
129 cap-sd-highspeed;130 cap-sd-highspeed;
@@ -141,10 +142,10 @@ · 11 unmodified lines
141&sd_emmc_c {142&sd_emmc_c {
142 status = "okay";143 status = "okay";
143 pinctrl-0 = <&emmc_pins>;144 pinctrl-0 = <&emmc_pins>;
144 pinctrl-names = "default";145 pinctrl-1 = <&emmc_clk_gate_pins>;
146 pinctrl-names = "default", "clk-gate";
145 147
146 bus-width = <8>;148 bus-width = <8>;
147 cap-sd-highspeed;
148 cap-mmc-highspeed;149 cap-mmc-highspeed;
149 max-frequency = <100000000>;150 max-frequency = <100000000>;
150 non-removable;151 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts+11−2
@@ -91,6 +91,9 @@ · 90 unmodified lines
91 91
92 states = <3300000 0>,92 states = <3300000 0>,
93 <1800000 1>;93 <1800000 1>;
94
95 regulator-settling-time-up-us = <200>;
96 regulator-settling-time-down-us = <50000>;
94 };97 };
95 98
96 vddio_boot: regulator-vddio_boot {99 vddio_boot: regulator-vddio_boot {
@@ -197,10 +200,14 @@ · 100 unmodified lines
197&sd_emmc_b {200&sd_emmc_b {
198 status = "okay";201 status = "okay";
199 pinctrl-0 = <&sdcard_pins>;202 pinctrl-0 = <&sdcard_pins>;
200 pinctrl-names = "default";203 pinctrl-1 = <&sdcard_clk_gate_pins>;
204 pinctrl-names = "default", "clk-gate";
201 205
202 bus-width = <4>;206 bus-width = <4>;
203 cap-sd-highspeed;207 cap-sd-highspeed;
208 sd-uhs-sdr12;
209 sd-uhs-sdr25;
210 sd-uhs-sdr50;
204 max-frequency = <100000000>;211 max-frequency = <100000000>;
205 disable-wp;212 disable-wp;
206 213
@@ -215,10 +222,12 @@ · 8 unmodified lines
215&sd_emmc_c {222&sd_emmc_c {
216 status = "okay";223 status = "okay";
217 pinctrl-0 = <&emmc_pins>;224 pinctrl-0 = <&emmc_pins>;
218 pinctrl-names = "default";225 pinctrl-1 = <&emmc_clk_gate_pins>;
226 pinctrl-names = "default", "clk-gate";
219 227
220 bus-width = <8>;228 bus-width = <8>;
221 cap-mmc-highspeed;229 cap-mmc-highspeed;
230 mmc-ddr-3_3v;
222 max-frequency = <50000000>;231 max-frequency = <50000000>;
223 non-removable;232 non-removable;
224 disable-wp;233 disable-wp;
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-nexbox-a95x.dts+6−4
@@ -189,7 +189,8 @@ · 188 unmodified lines
189&sd_emmc_a {189&sd_emmc_a {
190 status = "okay";190 status = "okay";
191 pinctrl-0 = <&sdio_pins>;191 pinctrl-0 = <&sdio_pins>;
192 pinctrl-names = "default";192 pinctrl-1 = <&sdio_clk_gate_pins>;
193 pinctrl-names = "default", "clk-gate";
193 #address-cells = <1>;194 #address-cells = <1>;
194 #size-cells = <0>;195 #size-cells = <0>;
195 196
@@ -210,7 +211,8 @@ · 14 unmodified lines
210&sd_emmc_b {211&sd_emmc_b {
211 status = "okay";212 status = "okay";
212 pinctrl-0 = <&sdcard_pins>;213 pinctrl-0 = <&sdcard_pins>;
213 pinctrl-names = "default";214 pinctrl-1 = <&sdcard_clk_gate_pins>;
215 pinctrl-names = "default", "clk-gate";
214 216
215 bus-width = <4>;217 bus-width = <4>;
216 cap-sd-highspeed;218 cap-sd-highspeed;
@@ -228,10 +230,10 @@ · 11 unmodified lines
228&sd_emmc_c {230&sd_emmc_c {
229 status = "okay";231 status = "okay";
230 pinctrl-0 = <&emmc_pins>;232 pinctrl-0 = <&emmc_pins>;
231 pinctrl-names = "default";233 pinctrl-1 = <&emmc_clk_gate_pins>;
234 pinctrl-names = "default", "clk-gate";
232 235
233 bus-width = <8>;236 bus-width = <8>;
234 cap-sd-highspeed;
235 cap-mmc-highspeed;237 cap-mmc-highspeed;
236 max-frequency = <200000000>;238 max-frequency = <200000000>;
237 non-removable;239 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi+6−4
@@ -95,7 +95,8 @@ · 94 unmodified lines
95&sd_emmc_a {95&sd_emmc_a {
96 status = "okay";96 status = "okay";
97 pinctrl-0 = <&sdio_pins>;97 pinctrl-0 = <&sdio_pins>;
98 pinctrl-names = "default";98 pinctrl-1 = <&sdio_clk_gate_pins>;
99 pinctrl-names = "default", "clk-gate";
99 #address-cells = <1>;100 #address-cells = <1>;
100 #size-cells = <0>;101 #size-cells = <0>;
101 102
@@ -116,7 +117,8 @@ · 14 unmodified lines
116&sd_emmc_b {117&sd_emmc_b {
117 status = "okay";118 status = "okay";
118 pinctrl-0 = <&sdcard_pins>;119 pinctrl-0 = <&sdcard_pins>;
119 pinctrl-names = "default";120 pinctrl-1 = <&sdcard_clk_gate_pins>;
121 pinctrl-names = "default", "clk-gate";
120 122
121 bus-width = <4>;123 bus-width = <4>;
122 cap-sd-highspeed;124 cap-sd-highspeed;
@@ -134,10 +136,10 @@ · 11 unmodified lines
134&sd_emmc_c {136&sd_emmc_c {
135 status = "okay";137 status = "okay";
136 pinctrl-0 = <&emmc_pins>;138 pinctrl-0 = <&emmc_pins>;
137 pinctrl-names = "default";139 pinctrl-1 = <&emmc_clk_gate_pins>;
140 pinctrl-names = "default", "clk-gate";
138 141
139 bus-width = <8>;142 bus-width = <8>;
140 cap-sd-highspeed;
141 cap-mmc-highspeed;143 cap-mmc-highspeed;
142 max-frequency = <200000000>;144 max-frequency = <200000000>;
143 non-removable;145 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi+36−3
@@ -281,6 +281,17 @@ · 280 unmodified lines
281 };281 };
282 };282 };
283 283
284 emmc_clk_gate_pins: emmc_clk_gate {
285 mux {
286 groups = "BOOT_8";
287 function = "gpio_periphs";
288 };
289 cfg-pull-down {
290 pins = "BOOT_8";
291 bias-pull-down;
292 };
293 };
294
284 nor_pins: nor {295 nor_pins: nor {
285 mux {296 mux {
286 groups = "nor_d",297 groups = "nor_d",
@@ -319,6 +330,17 @@ · 32 unmodified lines
319 };330 };
320 };331 };
321 332
333 sdcard_clk_gate_pins: sdcard_clk_gate {
334 mux {
335 groups = "CARD_2";
336 function = "gpio_periphs";
337 };
338 cfg-pull-down {
339 pins = "CARD_2";
340 bias-pull-down;
341 };
342 };
343
322 sdio_pins: sdio {344 sdio_pins: sdio {
323 mux {345 mux {
324 groups = "sdio_d0",346 groups = "sdio_d0",
@@ -331,6 +353,17 @@ · 6 unmodified lines
331 };353 };
332 };354 };
333 355
356 sdio_clk_gate_pins: sdio_clk_gate {
357 mux {
358 groups = "GPIOX_4";
359 function = "gpio_periphs";
360 };
361 cfg-pull-down {
362 pins = "GPIOX_4";
363 bias-pull-down;
364 };
365 };
366
334 sdio_irq_pins: sdio_irq {367 sdio_irq_pins: sdio_irq {
335 mux {368 mux {
336 groups = "sdio_irq";369 groups = "sdio_irq";
@@ -603,21 +636,21 @@ · 266 unmodified lines
603 636
604&sd_emmc_a {637&sd_emmc_a {
605 clocks = <&clkc CLKID_SD_EMMC_A>,638 clocks = <&clkc CLKID_SD_EMMC_A>,
606 <&xtal>,639 <&clkc CLKID_SD_EMMC_A_CLK0>,
607 <&clkc CLKID_FCLK_DIV2>;640 <&clkc CLKID_FCLK_DIV2>;
608 clock-names = "core", "clkin0", "clkin1";641 clock-names = "core", "clkin0", "clkin1";
609};642};
610 643
611&sd_emmc_b {644&sd_emmc_b {
612 clocks = <&clkc CLKID_SD_EMMC_B>,645 clocks = <&clkc CLKID_SD_EMMC_B>,
613 <&xtal>,646 <&clkc CLKID_SD_EMMC_B_CLK0>,
614 <&clkc CLKID_FCLK_DIV2>;647 <&clkc CLKID_FCLK_DIV2>;
615 clock-names = "core", "clkin0", "clkin1";648 clock-names = "core", "clkin0", "clkin1";
616};649};
617 650
618&sd_emmc_c {651&sd_emmc_c {
619 clocks = <&clkc CLKID_SD_EMMC_C>,652 clocks = <&clkc CLKID_SD_EMMC_C>,
620 <&xtal>,653 <&clkc CLKID_SD_EMMC_C_CLK0>,
621 <&clkc CLKID_FCLK_DIV2>;654 <&clkc CLKID_FCLK_DIV2>;
622 clock-names = "core", "clkin0", "clkin1";655 clock-names = "core", "clkin0", "clkin1";
623};656};
arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts+4−3
@@ -175,7 +175,8 @@ · 174 unmodified lines
175&sd_emmc_b {175&sd_emmc_b {
176 status = "okay";176 status = "okay";
177 pinctrl-0 = <&sdcard_pins>;177 pinctrl-0 = <&sdcard_pins>;
178 pinctrl-names = "default";178 pinctrl-1 = <&sdcard_clk_gate_pins>;
179 pinctrl-names = "default", "clk-gate";
179 180
180 bus-width = <4>;181 bus-width = <4>;
181 cap-sd-highspeed;182 cap-sd-highspeed;
@@ -193,10 +194,10 @@ · 11 unmodified lines
193&sd_emmc_c {194&sd_emmc_c {
194 status = "okay";195 status = "okay";
195 pinctrl-0 = <&emmc_pins>;196 pinctrl-0 = <&emmc_pins>;
196 pinctrl-names = "default";197 pinctrl-1 = <&emmc_clk_gate_pins>;
198 pinctrl-names = "default", "clk-gate";
197 199
198 bus-width = <8>;200 bus-width = <8>;
199 cap-sd-highspeed;
200 cap-mmc-highspeed;201 cap-mmc-highspeed;
201 max-frequency = <200000000>;202 max-frequency = <200000000>;
202 non-removable;203 non-removable;
arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts+0−1
@@ -220,7 +220,6 @@ · 219 unmodified lines
220 pinctrl-names = "default";220 pinctrl-names = "default";
221 221
222 bus-width = <8>;222 bus-width = <8>;
223 cap-sd-highspeed;
224 cap-mmc-highspeed;223 cap-mmc-highspeed;
225 max-frequency = <200000000>;224 max-frequency = <200000000>;
226 non-removable;225 non-removable;
arch/arm64/boot/dts/marvell/armada-ap806.dtsi+2−2
@@ -254,7 +254,7 @@ · 253 unmodified lines
254 254
255 ap_syscon: system-controller@6f4000 {255 ap_syscon: system-controller@6f4000 {
256 compatible = "syscon", "simple-mfd";256 compatible = "syscon", "simple-mfd";
257 reg = <0x6f4000 0x1000>;257 reg = <0x6f4000 0x2000>;
258 258
259 ap_clk: clock {259 ap_clk: clock {
260 compatible = "marvell,ap806-clock";260 compatible = "marvell,ap806-clock";
@@ -265,7 +265,7 @@ · 4 unmodified lines
265 compatible = "marvell,ap806-pinctrl";265 compatible = "marvell,ap806-pinctrl";
266 };266 };
267 267
268 ap_gpio: gpio {268 ap_gpio: gpio@1040 {
269 compatible = "marvell,armada-8k-gpio";269 compatible = "marvell,armada-8k-gpio";
270 offset = <0x1040>;270 offset = <0x1040>;
271 ngpios = <20>;271 ngpios = <20>;
arch/arm64/boot/dts/rockchip/rk3368.dtsi+2−70
@@ -113,8 +113,7 @@ · 112 unmodified lines
113 compatible = "arm,cortex-a53", "arm,armv8";113 compatible = "arm,cortex-a53", "arm,armv8";
114 reg = <0x0 0x0>;114 reg = <0x0 0x0>;
115 enable-method = "psci";115 enable-method = "psci";
116 clocks = <&cru ARMCLKL>;116
117 operating-points-v2 = <&cluster0_opp>;
118 #cooling-cells = <2>; /* min followed by max */117 #cooling-cells = <2>; /* min followed by max */
119 };118 };
120 119
@@ -123,8 +122,6 @@ · 2 unmodified lines
123 compatible = "arm,cortex-a53", "arm,armv8";122 compatible = "arm,cortex-a53", "arm,armv8";
124 reg = <0x0 0x1>;123 reg = <0x0 0x1>;
125 enable-method = "psci";124 enable-method = "psci";
126 clocks = <&cru ARMCLKL>;
127 operating-points-v2 = <&cluster0_opp>;
128 };125 };
129 126
130 cpu_l2: cpu@2 {127 cpu_l2: cpu@2 {
@@ -132,8 +129,6 @@ · 1 unmodified line
132 compatible = "arm,cortex-a53", "arm,armv8";129 compatible = "arm,cortex-a53", "arm,armv8";
133 reg = <0x0 0x2>;130 reg = <0x0 0x2>;
134 enable-method = "psci";131 enable-method = "psci";
135 clocks = <&cru ARMCLKL>;
136 operating-points-v2 = <&cluster0_opp>;
137 };132 };
138 133
139 cpu_l3: cpu@3 {134 cpu_l3: cpu@3 {
@@ -141,8 +136,6 @@ · 1 unmodified line
141 compatible = "arm,cortex-a53", "arm,armv8";136 compatible = "arm,cortex-a53", "arm,armv8";
142 reg = <0x0 0x3>;137 reg = <0x0 0x3>;
143 enable-method = "psci";138 enable-method = "psci";
144 clocks = <&cru ARMCLKL>;
145 operating-points-v2 = <&cluster0_opp>;
146 };139 };
147 140
148 cpu_b0: cpu@100 {141 cpu_b0: cpu@100 {
@@ -150,8 +143,7 @@ · 1 unmodified line
150 compatible = "arm,cortex-a53", "arm,armv8";143 compatible = "arm,cortex-a53", "arm,armv8";
151 reg = <0x0 0x100>;144 reg = <0x0 0x100>;
152 enable-method = "psci";145 enable-method = "psci";
153 clocks = <&cru ARMCLKB>;146
154 operating-points-v2 = <&cluster1_opp>;
155 #cooling-cells = <2>; /* min followed by max */147 #cooling-cells = <2>; /* min followed by max */
156 };148 };
157 149
@@ -160,8 +152,6 @@ · 2 unmodified lines
160 compatible = "arm,cortex-a53", "arm,armv8";152 compatible = "arm,cortex-a53", "arm,armv8";
161 reg = <0x0 0x101>;153 reg = <0x0 0x101>;
162 enable-method = "psci";154 enable-method = "psci";
163 clocks = <&cru ARMCLKB>;
164 operating-points-v2 = <&cluster1_opp>;
165 };155 };
166 156
167 cpu_b2: cpu@102 {157 cpu_b2: cpu@102 {
@@ -169,8 +159,6 @@ · 1 unmodified line
169 compatible = "arm,cortex-a53", "arm,armv8";159 compatible = "arm,cortex-a53", "arm,armv8";
170 reg = <0x0 0x102>;160 reg = <0x0 0x102>;
171 enable-method = "psci";161 enable-method = "psci";
172 clocks = <&cru ARMCLKB>;
173 operating-points-v2 = <&cluster1_opp>;
174 };162 };
175 163
176 cpu_b3: cpu@103 {164 cpu_b3: cpu@103 {
@@ -178,62 +166,6 @@ · 1 unmodified line
178 compatible = "arm,cortex-a53", "arm,armv8";166 compatible = "arm,cortex-a53", "arm,armv8";
179 reg = <0x0 0x103>;167 reg = <0x0 0x103>;
180 enable-method = "psci";168 enable-method = "psci";
181 clocks = <&cru ARMCLKB>;
182 operating-points-v2 = <&cluster1_opp>;
183 };
184 };
185
186 cluster0_opp: opp-table0 {
187 compatible = "operating-points-v2";
188 opp-shared;
189
190 opp00 {
191 opp-hz = /bits/ 64 <312000000>;
192 opp-microvolt = <950000>;
193 clock-latency-ns = <40000>;
194 };
195 opp01 {
196 opp-hz = /bits/ 64 <408000000>;
197 opp-microvolt = <950000>;
198 };
199 opp02 {
200 opp-hz = /bits/ 64 <600000000>;
201 opp-microvolt = <950000>;
202 };
203 opp03 {
204 opp-hz = /bits/ 64 <816000000>;
205 opp-microvolt = <1025000>;
206 };
207 opp04 {
208 opp-hz = /bits/ 64 <1008000000>;
209 opp-microvolt = <1125000>;
210 };
211 };
212
213 cluster1_opp: opp-table1 {
214 compatible = "operating-points-v2";
215 opp-shared;
216
217 opp00 {
218 opp-hz = /bits/ 64 <312000000>;
219 opp-microvolt = <950000>;
220 clock-latency-ns = <40000>;
221 };
222 opp01 {
223 opp-hz = /bits/ 64 <408000000>;
224 opp-microvolt = <950000>;
225 };
226 opp02 {
227 opp-hz = /bits/ 64 <600000000>;
228 opp-microvolt = <950000>;
229 };
230 opp03 {
231 opp-hz = /bits/ 64 <816000000>;
232 opp-microvolt = <975000>;
233 };
234 opp04 {
235 opp-hz = /bits/ 64 <1008000000>;
236 opp-microvolt = <1050000>;
237 };169 };
238 };170 };
239 171
arch/arm64/boot/dts/rockchip/rk3399.dtsi+3−3
@@ -1629,9 +1629,9 @@ · 1628 unmodified lines
1629 compatible = "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi";1629 compatible = "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi";
1630 reg = <0x0 0xff960000 0x0 0x8000>;1630 reg = <0x0 0xff960000 0x0 0x8000>;
1631 interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH 0>;1631 interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH 0>;
1632 clocks = <&cru SCLK_MIPIDPHY_REF>, <&cru PCLK_MIPI_DSI0>,1632 clocks = <&cru SCLK_DPHY_PLL>, <&cru PCLK_MIPI_DSI0>,
1633 <&cru SCLK_DPHY_TX0_CFG>;1633 <&cru SCLK_DPHY_TX0_CFG>, <&cru PCLK_VIO_GRF>;
1634 clock-names = "ref", "pclk", "phy_cfg";1634 clock-names = "ref", "pclk", "phy_cfg", "grf";
1635 power-domains = <&power RK3399_PD_VIO>;1635 power-domains = <&power RK3399_PD_VIO>;
1636 rockchip,grf = <&grf>;1636 rockchip,grf = <&grf>;
1637 status = "disabled";1637 status = "disabled";
arch/arm64/include/asm/linkage.h+2−2
@@ -1,7 +1,7 @@
1#ifndef __ASM_LINKAGE_H1#ifndef __ASM_LINKAGE_H
2#define __ASM_LINKAGE_H2#define __ASM_LINKAGE_H
3 3
4#define __ALIGN .align 44#define __ALIGN .align 2
5#define __ALIGN_STR ".align 4"5#define __ALIGN_STR ".align 2"
6 6
7#endif7#endif
arch/arm64/include/asm/memory.h+6−3
@@ -95,16 +95,19 @@ · 94 unmodified lines
95#define KERNEL_END _end95#define KERNEL_END _end
96 96
97/*97/*
98 * The size of the KASAN shadow region. This should be 1/8th of the98 * KASAN requires 1/8th of the kernel virtual address space for the shadow
99 * size of the entire kernel virtual address space.99 * region. KASAN can bloat the stack significantly, so double the (minimum)
100 * stack size when KASAN is in use.
100 */101 */
101#ifdef CONFIG_KASAN102#ifdef CONFIG_KASAN
102#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3))103#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3))
104#define KASAN_THREAD_SHIFT 1
103#else105#else
104#define KASAN_SHADOW_SIZE (0)106#define KASAN_SHADOW_SIZE (0)
107#define KASAN_THREAD_SHIFT 0
105#endif108#endif
106 109
107#define MIN_THREAD_SHIFT 14110#define MIN_THREAD_SHIFT (14 + KASAN_THREAD_SHIFT)
108 111
109/*112/*
110 * VMAP'd stacks are allocated at page granularity, so we must ensure that such113 * VMAP'd stacks are allocated at page granularity, so we must ensure that such
arch/arm64/include/asm/pgtable.h+1−1
@@ -401,7 +401,7 @@ static inline phys_addr_t pmd_page_paddr(pmd_t pmd) · 400 unmodified lines
401/* Find an entry in the third-level page table. */401/* Find an entry in the third-level page table. */
402#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))402#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
403 403
404#define pte_offset_phys(dir,addr) (pmd_page_paddr(*(dir)) + pte_index(addr) * sizeof(pte_t))404#define pte_offset_phys(dir,addr) (pmd_page_paddr(READ_ONCE(*(dir))) + pte_index(addr) * sizeof(pte_t))
405#define pte_offset_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))405#define pte_offset_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))
406 406
407#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))407#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
arch/arm64/kernel/armv8_deprecated.c+1−1
@@ -649,4 +649,4 @@ static int __init armv8_deprecated_init(void) · 648 unmodified lines
649 return 0;649 return 0;
650}650}
651 651
652late_initcall(armv8_deprecated_init);652core_initcall(armv8_deprecated_init);
arch/arm64/kernel/cpufeature.c+1−1
@@ -1307,4 +1307,4 @@ static int __init enable_mrs_emulation(void) · 1306 unmodified lines
1307 return 0;1307 return 0;
1308}1308}
1309 1309
1310late_initcall(enable_mrs_emulation);1310core_initcall(enable_mrs_emulation);
arch/arm64/kernel/fpsimd.c+5−1
@@ -321,6 +321,8 @@ void kernel_neon_end(void) · 320 unmodified lines
321}321}
322EXPORT_SYMBOL(kernel_neon_end);322EXPORT_SYMBOL(kernel_neon_end);
323 323
324#ifdef CONFIG_EFI
325
324static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);326static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
325static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);327static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
326 328
@@ -370,6 +372,8 @@ void __efi_fpsimd_end(void) · 43 unmodified lines
370 kernel_neon_end();372 kernel_neon_end();
371}373}
372 374
375#endif /* CONFIG_EFI */
376
373#endif /* CONFIG_KERNEL_MODE_NEON */377#endif /* CONFIG_KERNEL_MODE_NEON */
374 378
375#ifdef CONFIG_CPU_PM379#ifdef CONFIG_CPU_PM
@@ -440,4 +444,4 @@ static int __init fpsimd_init(void) · 64 unmodified lines
440 444
441 return 0;445 return 0;
442}446}
443late_initcall(fpsimd_init);447core_initcall(fpsimd_init);
arch/arm64/kernel/head.S+1−0
@@ -384,6 +384,7 @@ ENTRY(kimage_vaddr) · 383 unmodified lines
384 * booted in EL1 or EL2 respectively.384 * booted in EL1 or EL2 respectively.
385 */385 */
386ENTRY(el2_setup)386ENTRY(el2_setup)
387 msr SPsel, #1 // We want to use SP_EL{1,2}
387 mrs x0, CurrentEL388 mrs x0, CurrentEL
388 cmp x0, #CurrentEL_EL2389 cmp x0, #CurrentEL_EL2
389 b.eq 1f390 b.eq 1f
arch/arm64/kernel/signal.c+3−3
@@ -751,10 +751,10 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, · 750 unmodified lines
751 */751 */
752 trace_hardirqs_off();752 trace_hardirqs_off();
753 753
754 /* Check valid user FS if needed */
755 addr_limit_user_check();
756
757 do {754 do {
755 /* Check valid user FS if needed */
756 addr_limit_user_check();
757
758 if (thread_flags & _TIF_NEED_RESCHED) {758 if (thread_flags & _TIF_NEED_RESCHED) {
759 schedule();759 schedule();
760 } else {760 } else {
arch/arm64/mm/fault.c+2−2
@@ -97,7 +97,7 @@ static void data_abort_decode(unsigned int esr) · 96 unmodified lines
97 (esr & ESR_ELx_SF) >> ESR_ELx_SF_SHIFT,97 (esr & ESR_ELx_SF) >> ESR_ELx_SF_SHIFT,
98 (esr & ESR_ELx_AR) >> ESR_ELx_AR_SHIFT);98 (esr & ESR_ELx_AR) >> ESR_ELx_AR_SHIFT);
99 } else {99 } else {
100 pr_alert(" ISV = 0, ISS = 0x%08lu\n", esr & ESR_ELx_ISS_MASK);100 pr_alert(" ISV = 0, ISS = 0x%08lx\n", esr & ESR_ELx_ISS_MASK);
101 }101 }
102 102
103 pr_alert(" CM = %lu, WnR = %lu\n",103 pr_alert(" CM = %lu, WnR = %lu\n",
@@ -651,7 +651,7 @@ static const struct fault_info fault_info[] = { · 547 unmodified lines
651 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 0 translation fault" },651 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 0 translation fault" },
652 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },652 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
653 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },653 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
654 { do_page_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },654 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
655 { do_bad, SIGBUS, 0, "unknown 8" },655 { do_bad, SIGBUS, 0, "unknown 8" },
656 { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },656 { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
657 { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },657 { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
arch/c6x/include/asm/processor.h+0−3
@@ -92,9 +92,6 @@ static inline void release_thread(struct task_struct *dead_task) · 91 unmodified lines
92{92{
93}93}
94 94
95#define copy_segments(tsk, mm) do { } while (0)
96#define release_segments(mm) do { } while (0)
97
98/*95/*
99 * saved kernel SP and DP of a blocked thread.96 * saved kernel SP and DP of a blocked thread.
100 */97 */
arch/frv/include/asm/processor.h+0−4
@@ -92,10 +92,6 @@ static inline void release_thread(struct task_struct *dead_task) · 91 unmodified lines
92extern asmlinkage void save_user_regs(struct user_context *target);92extern asmlinkage void save_user_regs(struct user_context *target);
93extern asmlinkage void *restore_user_regs(const struct user_context *target, ...);93extern asmlinkage void *restore_user_regs(const struct user_context *target, ...);
94 94
95#define copy_segments(tsk, mm) do { } while (0)
96#define release_segments(mm) do { } while (0)
97#define forget_segments() do { } while (0)
98
99unsigned long get_wchan(struct task_struct *p);95unsigned long get_wchan(struct task_struct *p);
100 96
101#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)97#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
arch/m32r/Kconfig+4−0
@@ -194,6 +194,10 @@ config TIMER_DIVIDE · 193 unmodified lines
194 int "Timer divider (integer)"194 int "Timer divider (integer)"
195 default "128"195 default "128"
196 196
197config CPU_BIG_ENDIAN
198 bool "Generate big endian code"
199 default n
200
197config CPU_LITTLE_ENDIAN201config CPU_LITTLE_ENDIAN
198 bool "Generate little endian code"202 bool "Generate little endian code"
199 default n203 default n
arch/m32r/include/asm/processor.h+0−8
@@ -118,14 +118,6 @@ struct mm_struct; · 117 unmodified lines
118/* Free all resources held by a thread. */118/* Free all resources held by a thread. */
119extern void release_thread(struct task_struct *);119extern void release_thread(struct task_struct *);
120 120
121/* Copy and release all segment info associated with a VM */
122extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
123extern void release_segments(struct mm_struct * mm);
124
125/* Copy and release all segment info associated with a VM */
126#define copy_segments(p, mm) do { } while (0)
127#define release_segments(mm) do { } while (0)
128
129unsigned long get_wchan(struct task_struct *p);121unsigned long get_wchan(struct task_struct *p);
130#define KSTK_EIP(tsk) ((tsk)->thread.lr)122#define KSTK_EIP(tsk) ((tsk)->thread.lr)
131#define KSTK_ESP(tsk) ((tsk)->thread.sp)123#define KSTK_ESP(tsk) ((tsk)->thread.sp)
arch/m32r/kernel/traps.c+9−0
@@ -114,6 +114,15 @@ static void set_eit_vector_entries(void) · 113 unmodified lines
114 _flush_cache_copyback_all();114 _flush_cache_copyback_all();
115}115}
116 116
117void abort(void)
118{
119 BUG();
120
121 /* if that doesn't kill us, halt */
122 panic("Oops failed to kill thread");
123}
124EXPORT_SYMBOL(abort);
125
117void __init trap_init(void)126void __init trap_init(void)
118{127{
119 set_eit_vector_entries();128 set_eit_vector_entries();
arch/metag/include/asm/processor.h+0−3
@@ -131,9 +131,6 @@ static inline void release_thread(struct task_struct *dead_task) · 130 unmodified lines
131{131{
132}132}
133 133
134#define copy_segments(tsk, mm) do { } while (0)
135#define release_segments(mm) do { } while (0)
136
137/*134/*
138 * Return saved PC of a blocked thread.135 * Return saved PC of a blocked thread.
139 */136 */
arch/microblaze/Kconfig+1−1
@@ -39,7 +39,7 @@ config MICROBLAZE · 38 unmodified lines
39# Endianness selection39# Endianness selection
40choice40choice
41 prompt "Endianness selection"41 prompt "Endianness selection"
42 default CPU_BIG_ENDIAN42 default CPU_LITTLE_ENDIAN
43 help43 help
44 microblaze architectures can be configured for either little or44 microblaze architectures can be configured for either little or
45 big endian formats. Be sure to select the appropriate mode.45 big endian formats. Be sure to select the appropriate mode.
arch/microblaze/include/uapi/asm/Kbuild+1−0
@@ -7,6 +7,7 @@ generic-y += fcntl.h · 6 unmodified lines
7generic-y += ioctl.h7generic-y += ioctl.h
8generic-y += ioctls.h8generic-y += ioctls.h
9generic-y += ipcbuf.h9generic-y += ipcbuf.h
10generic-y += kvm_para.h
10generic-y += mman.h11generic-y += mman.h
11generic-y += msgbuf.h12generic-y += msgbuf.h
12generic-y += param.h13generic-y += param.h
arch/microblaze/kernel/dma.c+1−1
@@ -165,7 +165,7 @@ int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, · 164 unmodified lines
165 unsigned long attrs)165 unsigned long attrs)
166{166{
167#ifdef CONFIG_MMU167#ifdef CONFIG_MMU
168 unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;168 unsigned long user_count = vma_pages(vma);
169 unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;169 unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
170 unsigned long off = vma->vm_pgoff;170 unsigned long off = vma->vm_pgoff;
171 unsigned long pfn;171 unsigned long pfn;
arch/mips/ath79/pci.c+6−6
@@ -22,10 +22,10 @@ · 21 unmodified lines
22#include "pci.h"22#include "pci.h"
23 23
24static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);24static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
25static const struct ath79_pci_irq *ath79_pci_irq_map __initdata;25static const struct ath79_pci_irq *ath79_pci_irq_map;
26static unsigned ath79_pci_nr_irqs __initdata;26static unsigned ath79_pci_nr_irqs;
27 27
28static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {28static const struct ath79_pci_irq ar71xx_pci_irq_map[] = {
29 {29 {
30 .slot = 17,30 .slot = 17,
31 .pin = 1,31 .pin = 1,
@@ -41,7 +41,7 @@ static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = { · 9 unmodified lines
41 }41 }
42};42};
43 43
44static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {44static const struct ath79_pci_irq ar724x_pci_irq_map[] = {
45 {45 {
46 .slot = 0,46 .slot = 0,
47 .pin = 1,47 .pin = 1,
@@ -49,7 +49,7 @@ static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = { · 1 unmodified line
49 }49 }
50};50};
51 51
52static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {52static const struct ath79_pci_irq qca955x_pci_irq_map[] = {
53 {53 {
54 .bus = 0,54 .bus = 0,
55 .slot = 0,55 .slot = 0,
@@ -64,7 +64,7 @@ static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = { · 8 unmodified lines
64 },64 },
65};65};
66 66
67int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)67int pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
68{68{
69 int irq = -1;69 int irq = -1;
70 int i;70 int i;
arch/mips/include/asm/mipsregs.h+9−6
@@ -1377,29 +1377,32 @@ do { \ · 1376 unmodified lines
1377 1377
1378#define __write_64bit_c0_split(source, sel, val) \1378#define __write_64bit_c0_split(source, sel, val) \
1379do { \1379do { \
1380 unsigned long long __tmp; \
1380 unsigned long __flags; \1381 unsigned long __flags; \
1381 \1382 \
1382 local_irq_save(__flags); \1383 local_irq_save(__flags); \
1383 if (sel == 0) \1384 if (sel == 0) \
1384 __asm__ __volatile__( \1385 __asm__ __volatile__( \
1385 ".set\tmips64\n\t" \1386 ".set\tmips64\n\t" \
1386 "dsll\t%L0, %L0, 32\n\t" \1387 "dsll\t%L0, %L1, 32\n\t" \
1387 "dsrl\t%L0, %L0, 32\n\t" \1388 "dsrl\t%L0, %L0, 32\n\t" \
1388 "dsll\t%M0, %M0, 32\n\t" \1389 "dsll\t%M0, %M1, 32\n\t" \
1389 "or\t%L0, %L0, %M0\n\t" \1390 "or\t%L0, %L0, %M0\n\t" \
1390 "dmtc0\t%L0, " #source "\n\t" \1391 "dmtc0\t%L0, " #source "\n\t" \
1391 ".set\tmips0" \1392 ".set\tmips0" \
1392 : : "r" (val)); \1393 : "=&r,r" (__tmp) \
1394 : "r,0" (val)); \
1393 else \1395 else \
1394 __asm__ __volatile__( \1396 __asm__ __volatile__( \
1395 ".set\tmips64\n\t" \1397 ".set\tmips64\n\t" \
1396 "dsll\t%L0, %L0, 32\n\t" \1398 "dsll\t%L0, %L1, 32\n\t" \
1397 "dsrl\t%L0, %L0, 32\n\t" \1399 "dsrl\t%L0, %L0, 32\n\t" \
1398 "dsll\t%M0, %M0, 32\n\t" \1400 "dsll\t%M0, %M1, 32\n\t" \
1399 "or\t%L0, %L0, %M0\n\t" \1401 "or\t%L0, %L0, %M0\n\t" \
1400 "dmtc0\t%L0, " #source ", " #sel "\n\t" \1402 "dmtc0\t%L0, " #source ", " #sel "\n\t" \
1401 ".set\tmips0" \1403 ".set\tmips0" \
1402 : : "r" (val)); \1404 : "=&r,r" (__tmp) \
1405 : "r,0" (val)); \
1403 local_irq_restore(__flags); \1406 local_irq_restore(__flags); \
1404} while (0)1407} while (0)
1405 1408
arch/mips/kernel/perf_event_mipsxx.c+1−2
@@ -618,8 +618,7 @@ static int mipspmu_event_init(struct perf_event *event) · 617 unmodified lines
618 return -ENOENT;618 return -ENOENT;
619 }619 }
620 620
621 if ((unsigned int)event->cpu >= nr_cpumask_bits ||621 if (event->cpu >= 0 && !cpu_online(event->cpu))
622 (event->cpu >= 0 && !cpu_online(event->cpu)))
623 return -ENODEV;622 return -ENODEV;
624 623
625 if (!atomic_inc_not_zero(&active_events)) {624 if (!atomic_inc_not_zero(&active_events)) {
arch/mips/pci/fixup-capcella.c+2−2
@@ -32,13 +32,13 @@ · 31 unmodified lines
32#define INTC PC104PLUS_INTC_IRQ32#define INTC PC104PLUS_INTC_IRQ
33#define INTD PC104PLUS_INTD_IRQ33#define INTD PC104PLUS_INTD_IRQ
34 34
35static char irq_tab_capcella[][5] __initdata = {35static char irq_tab_capcella[][5] = {
36 [11] = { -1, INT1, INT1, INT1, INT1 },36 [11] = { -1, INT1, INT1, INT1, INT1 },
37 [12] = { -1, INT2, INT2, INT2, INT2 },37 [12] = { -1, INT2, INT2, INT2, INT2 },
38 [14] = { -1, INTA, INTB, INTC, INTD }38 [14] = { -1, INTA, INTB, INTC, INTD }
39};39};
40 40
41int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)41int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
42{42{
43 return irq_tab_capcella[slot][pin];43 return irq_tab_capcella[slot][pin];
44}44}
arch/mips/pci/fixup-cobalt.c+4−4
@@ -147,7 +147,7 @@ static void qube_raq_via_board_id_fixup(struct pci_dev *dev) · 146 unmodified lines
147DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,147DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
148 qube_raq_via_board_id_fixup);148 qube_raq_via_board_id_fixup);
149 149
150static char irq_tab_qube1[] __initdata = {150static char irq_tab_qube1[] = {
151 [COBALT_PCICONF_CPU] = 0,151 [COBALT_PCICONF_CPU] = 0,
152 [COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,152 [COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
153 [COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,153 [COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
@@ -156,7 +156,7 @@ static char irq_tab_qube1[] __initdata = { · 2 unmodified lines
156 [COBALT_PCICONF_ETH1] = 0156 [COBALT_PCICONF_ETH1] = 0
157};157};
158 158
159static char irq_tab_cobalt[] __initdata = {159static char irq_tab_cobalt[] = {
160 [COBALT_PCICONF_CPU] = 0,160 [COBALT_PCICONF_CPU] = 0,
161 [COBALT_PCICONF_ETH0] = ETH0_IRQ,161 [COBALT_PCICONF_ETH0] = ETH0_IRQ,
162 [COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,162 [COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
@@ -165,7 +165,7 @@ static char irq_tab_cobalt[] __initdata = { · 2 unmodified lines
165 [COBALT_PCICONF_ETH1] = ETH1_IRQ165 [COBALT_PCICONF_ETH1] = ETH1_IRQ
166};166};
167 167
168static char irq_tab_raq2[] __initdata = {168static char irq_tab_raq2[] = {
169 [COBALT_PCICONF_CPU] = 0,169 [COBALT_PCICONF_CPU] = 0,
170 [COBALT_PCICONF_ETH0] = ETH0_IRQ,170 [COBALT_PCICONF_ETH0] = ETH0_IRQ,
171 [COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,171 [COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
@@ -174,7 +174,7 @@ static char irq_tab_raq2[] __initdata = { · 2 unmodified lines
174 [COBALT_PCICONF_ETH1] = ETH1_IRQ174 [COBALT_PCICONF_ETH1] = ETH1_IRQ
175};175};
176 176
177int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)177int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
178{178{
179 if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)179 if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
180 return irq_tab_qube1[slot];180 return irq_tab_qube1[slot];
arch/mips/pci/fixup-emma2rh.c+2−2
@@ -43,7 +43,7 @@ · 42 unmodified lines
43 */43 */
44 44
45#define MAX_SLOT_NUM 1045#define MAX_SLOT_NUM 10
46static unsigned char irq_map[][5] __initdata = {46static unsigned char irq_map[][5] = {
47 [3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,47 [3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
48 MARKEINS_PCI_IRQ_INTD, 0,},48 MARKEINS_PCI_IRQ_INTD, 0,},
49 [4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},49 [4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},
@@ -85,7 +85,7 @@ static void emma2rh_pci_host_fixup(struct pci_dev *dev) · 35 unmodified lines
85DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,85DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
86 emma2rh_pci_host_fixup);86 emma2rh_pci_host_fixup);
87 87
88int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)88int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
89{89{
90 return irq_map[slot][pin];90 return irq_map[slot][pin];
91}91}
arch/mips/pci/fixup-fuloong2e.c+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
19/* South bridge slot number is set by the pci probe process */19/* South bridge slot number is set by the pci probe process */
20static u8 sb_slot = 5;20static u8 sb_slot = 5;
21 21
22int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)22int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
23{23{
24 int irq = 0;24 int irq = 0;
25 25
arch/mips/pci/fixup-ip32.c+2−2
@@ -21,7 +21,7 @@ · 20 unmodified lines
21#define INTB MACEPCI_SHARED0_IRQ21#define INTB MACEPCI_SHARED0_IRQ
22#define INTC MACEPCI_SHARED1_IRQ22#define INTC MACEPCI_SHARED1_IRQ
23#define INTD MACEPCI_SHARED2_IRQ23#define INTD MACEPCI_SHARED2_IRQ
24static char irq_tab_mace[][5] __initdata = {24static char irq_tab_mace[][5] = {
25 /* Dummy INT#A INT#B INT#C INT#D */25 /* Dummy INT#A INT#B INT#C INT#D */
26 {0, 0, 0, 0, 0}, /* This is placeholder row - never used */26 {0, 0, 0, 0, 0}, /* This is placeholder row - never used */
27 {0, SCSI0, SCSI0, SCSI0, SCSI0},27 {0, SCSI0, SCSI0, SCSI0, SCSI0},
@@ -39,7 +39,7 @@ static char irq_tab_mace[][5] __initdata = { · 11 unmodified lines
39 * irqs. I suppose a device without a pin A will thank us for doing it39 * irqs. I suppose a device without a pin A will thank us for doing it
40 * right if there exists such a broken piece of crap.40 * right if there exists such a broken piece of crap.
41 */41 */
42int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)42int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
43{43{
44 return irq_tab_mace[slot][pin];44 return irq_tab_mace[slot][pin];
45}45}
arch/mips/pci/fixup-jmr3927.c+1−1
@@ -31,7 +31,7 @@ · 30 unmodified lines
31#include <asm/txx9/pci.h>31#include <asm/txx9/pci.h>
32#include <asm/txx9/jmr3927.h>32#include <asm/txx9/jmr3927.h>
33 33
34int __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)34int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
35{35{
36 unsigned char irq = pin;36 unsigned char irq = pin;
37 37
arch/mips/pci/fixup-lantiq.c+1−1
@@ -23,7 +23,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev) · 22 unmodified lines
23 return 0;23 return 0;
24}24}
25 25
26int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)26int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
27{27{
28 return of_irq_parse_and_map_pci(dev, slot, pin);28 return of_irq_parse_and_map_pci(dev, slot, pin);
29}29}
arch/mips/pci/fixup-lemote2f.c+2−2
@@ -30,7 +30,7 @@ · 29 unmodified lines
30#define PCID 730#define PCID 7
31 31
32/* all the pci device has the PCIA pin, check the datasheet. */32/* all the pci device has the PCIA pin, check the datasheet. */
33static char irq_tab[][5] __initdata = {33static char irq_tab[][5] = {
34 /* INTA INTB INTC INTD */34 /* INTA INTB INTC INTD */
35 {0, 0, 0, 0, 0}, /* 11: Unused */35 {0, 0, 0, 0, 0}, /* 11: Unused */
36 {0, 0, 0, 0, 0}, /* 12: Unused */36 {0, 0, 0, 0, 0}, /* 12: Unused */
@@ -51,7 +51,7 @@ static char irq_tab[][5] __initdata = { · 14 unmodified lines
51 {0, 0, 0, 0, 0}, /* 27: Unused */51 {0, 0, 0, 0, 0}, /* 27: Unused */
52};52};
53 53
54int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)54int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
55{55{
56 int virq;56 int virq;
57 57
arch/mips/pci/fixup-loongson3.c+1−1
@@ -32,7 +32,7 @@ static void print_fixup_info(const struct pci_dev *pdev) · 31 unmodified lines
32 pdev->vendor, pdev->device, pdev->irq);32 pdev->vendor, pdev->device, pdev->irq);
33}33}
34 34
35int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)35int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
36{36{
37 print_fixup_info(dev);37 print_fixup_info(dev);
38 return dev->irq;38 return dev->irq;
arch/mips/pci/fixup-malta.c+2−2
@@ -12,7 +12,7 @@ · 11 unmodified lines
12static char pci_irq[5] = {12static char pci_irq[5] = {
13};13};
14 14
15static char irq_tab[][5] __initdata = {15static char irq_tab[][5] = {
16 /* INTA INTB INTC INTD */16 /* INTA INTB INTC INTD */
17 {0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */17 {0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */
18 {0, 0, 0, 0, 0 }, /* 1: Unused */18 {0, 0, 0, 0, 0 }, /* 1: Unused */
@@ -38,7 +38,7 @@ static char irq_tab[][5] __initdata = { · 19 unmodified lines
38 {0, PCID, PCIA, PCIB, PCIC } /* 21: PCI Slot 4 */38 {0, PCID, PCIA, PCIB, PCIC } /* 21: PCI Slot 4 */
39};39};
40 40
41int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)41int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
42{42{
43 int virq;43 int virq;
44 virq = irq_tab[slot][pin];44 virq = irq_tab[slot][pin];
arch/mips/pci/fixup-mpc30x.c+3−3
@@ -22,19 +22,19 @@ · 21 unmodified lines
22 22
23#include <asm/vr41xx/mpc30x.h>23#include <asm/vr41xx/mpc30x.h>
24 24
25static const int internal_func_irqs[] __initconst = {25static const int internal_func_irqs[] = {
26 VRC4173_CASCADE_IRQ,26 VRC4173_CASCADE_IRQ,
27 VRC4173_AC97_IRQ,27 VRC4173_AC97_IRQ,
28 VRC4173_USB_IRQ,28 VRC4173_USB_IRQ,
29};29};
30 30
31static const int irq_tab_mpc30x[] __initconst = {31static const int irq_tab_mpc30x[] = {
32 [12] = VRC4173_PCMCIA1_IRQ,32 [12] = VRC4173_PCMCIA1_IRQ,
33 [13] = VRC4173_PCMCIA2_IRQ,33 [13] = VRC4173_PCMCIA2_IRQ,
34 [29] = MQ200_IRQ,34 [29] = MQ200_IRQ,
35};35};
36 36
37int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)37int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
38{38{
39 if (slot == 30)39 if (slot == 30)
40 return internal_func_irqs[PCI_FUNC(dev->devfn)];40 return internal_func_irqs[PCI_FUNC(dev->devfn)];
arch/mips/pci/fixup-pmcmsp.c+4−4
@@ -47,7 +47,7 @@ · 46 unmodified lines
47 47
48#if defined(CONFIG_PMC_MSP7120_GW)48#if defined(CONFIG_PMC_MSP7120_GW)
49/* Garibaldi Board IRQ wiring to PCI slots */49/* Garibaldi Board IRQ wiring to PCI slots */
50static char irq_tab[][5] __initdata = {50static char irq_tab[][5] = {
51 /* INTA INTB INTC INTD */51 /* INTA INTB INTC INTD */
52 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */52 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
53 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */53 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
@@ -86,7 +86,7 @@ static char irq_tab[][5] __initdata = { · 32 unmodified lines
86#elif defined(CONFIG_PMC_MSP7120_EVAL)86#elif defined(CONFIG_PMC_MSP7120_EVAL)
87 87
88/* MSP7120 Eval Board IRQ wiring to PCI slots */88/* MSP7120 Eval Board IRQ wiring to PCI slots */
89static char irq_tab[][5] __initdata = {89static char irq_tab[][5] = {
90 /* INTA INTB INTC INTD */90 /* INTA INTB INTC INTD */
91 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */91 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
92 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */92 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
@@ -125,7 +125,7 @@ static char irq_tab[][5] __initdata = { · 32 unmodified lines
125#else125#else
126 126
127/* Unknown board -- don't assign any IRQs */127/* Unknown board -- don't assign any IRQs */
128static char irq_tab[][5] __initdata = {128static char irq_tab[][5] = {
129 /* INTA INTB INTC INTD */129 /* INTA INTB INTC INTD */
130 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */130 {0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
131 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */131 {0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
@@ -202,7 +202,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev) · 70 unmodified lines
202 * RETURNS: IRQ number202 * RETURNS: IRQ number
203 *203 *
204 ****************************************************************************/204 ****************************************************************************/
205int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)205int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
206{206{
207#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)207#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
208 printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");208 printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
arch/mips/pci/fixup-rbtx4927.c+1−1
@@ -36,7 +36,7 @@ · 35 unmodified lines
36#include <asm/txx9/pci.h>36#include <asm/txx9/pci.h>
37#include <asm/txx9/rbtx4927.h>37#include <asm/txx9/rbtx4927.h>
38 38
39int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)39int rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
40{40{
41 unsigned char irq = pin;41 unsigned char irq = pin;
42 42
arch/mips/pci/fixup-rbtx4938.c+1−1
@@ -13,7 +13,7 @@ · 12 unmodified lines
13#include <asm/txx9/pci.h>13#include <asm/txx9/pci.h>
14#include <asm/txx9/rbtx4938.h>14#include <asm/txx9/rbtx4938.h>
15 15
16int __init rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)16int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
17{17{
18 int irq = tx4938_pcic1_map_irq(dev, slot);18 int irq = tx4938_pcic1_map_irq(dev, slot);
19 19
arch/mips/pci/fixup-sni.c+6−6
@@ -40,7 +40,7 @@ · 39 unmodified lines
40 * seem to be a documentation error. At least on my RM200C the Cirrus40 * seem to be a documentation error. At least on my RM200C the Cirrus
41 * Logic CL-GD5434 VGA is device 3.41 * Logic CL-GD5434 VGA is device 3.
42 */42 */
43static char irq_tab_rm200[8][5] __initdata = {43static char irq_tab_rm200[8][5] = {
44 /* INTA INTB INTC INTD */44 /* INTA INTB INTC INTD */
45 { 0, 0, 0, 0, 0 }, /* EISA bridge */45 { 0, 0, 0, 0, 0 }, /* EISA bridge */
46 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */46 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
@@ -57,7 +57,7 @@ static char irq_tab_rm200[8][5] __initdata = { · 10 unmodified lines
57 *57 *
58 * The VGA card is optional for RM300 systems.58 * The VGA card is optional for RM300 systems.
59 */59 */
60static char irq_tab_rm300d[8][5] __initdata = {60static char irq_tab_rm300d[8][5] = {
61 /* INTA INTB INTC INTD */61 /* INTA INTB INTC INTD */
62 { 0, 0, 0, 0, 0 }, /* EISA bridge */62 { 0, 0, 0, 0, 0 }, /* EISA bridge */
63 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */63 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
@@ -69,7 +69,7 @@ static char irq_tab_rm300d[8][5] __initdata = { · 5 unmodified lines
69 { 0, INTD, INTA, INTB, INTC }, /* Slot 4 */69 { 0, INTD, INTA, INTB, INTC }, /* Slot 4 */
70};70};
71 71
72static char irq_tab_rm300e[5][5] __initdata = {72static char irq_tab_rm300e[5][5] = {
73 /* INTA INTB INTC INTD */73 /* INTA INTB INTC INTD */
74 { 0, 0, 0, 0, 0 }, /* HOST bridge */74 { 0, 0, 0, 0, 0 }, /* HOST bridge */
75 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */75 { SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
@@ -96,7 +96,7 @@ static char irq_tab_rm300e[5][5] __initdata = { · 20 unmodified lines
96#define INTC PCIT_IRQ_INTC96#define INTC PCIT_IRQ_INTC
97#define INTD PCIT_IRQ_INTD97#define INTD PCIT_IRQ_INTD
98 98
99static char irq_tab_pcit[13][5] __initdata = {99static char irq_tab_pcit[13][5] = {
100 /* INTA INTB INTC INTD */100 /* INTA INTB INTC INTD */
101 { 0, 0, 0, 0, 0 }, /* HOST bridge */101 { 0, 0, 0, 0, 0 }, /* HOST bridge */
102 { SCSI0, SCSI0, SCSI0, SCSI0, SCSI0 }, /* SCSI */102 { SCSI0, SCSI0, SCSI0, SCSI0, SCSI0 }, /* SCSI */
@@ -113,7 +113,7 @@ static char irq_tab_pcit[13][5] __initdata = { · 10 unmodified lines
113 { 0, INTA, INTB, INTC, INTD }, /* Slot 5 */113 { 0, INTA, INTB, INTC, INTD }, /* Slot 5 */
114};114};
115 115
116static char irq_tab_pcit_cplus[13][5] __initdata = {116static char irq_tab_pcit_cplus[13][5] = {
117 /* INTA INTB INTC INTD */117 /* INTA INTB INTC INTD */
118 { 0, 0, 0, 0, 0 }, /* HOST bridge */118 { 0, 0, 0, 0, 0 }, /* HOST bridge */
119 { 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */119 { 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */
@@ -130,7 +130,7 @@ static inline int is_rm300_revd(void) · 10 unmodified lines
130 return (csmsr & 0xa0) == 0x20;130 return (csmsr & 0xa0) == 0x20;
131}131}
132 132
133int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)133int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
134{134{
135 switch (sni_brd_type) {135 switch (sni_brd_type) {
136 case SNI_BRD_PCI_TOWER_CPLUS:136 case SNI_BRD_PCI_TOWER_CPLUS:
arch/mips/pci/fixup-tb0219.c+1−1
@@ -23,7 +23,7 @@ · 22 unmodified lines
23 23
24#include <asm/vr41xx/tb0219.h>24#include <asm/vr41xx/tb0219.h>
25 25
26int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)26int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
27{27{
28 int irq = -1;28 int irq = -1;
29 29
arch/mips/pci/fixup-tb0226.c+1−1
@@ -23,7 +23,7 @@ · 22 unmodified lines
23#include <asm/vr41xx/giu.h>23#include <asm/vr41xx/giu.h>
24#include <asm/vr41xx/tb0226.h>24#include <asm/vr41xx/tb0226.h>
25 25
26int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)26int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
27{27{
28 int irq = -1;28 int irq = -1;
29 29
arch/mips/pci/fixup-tb0287.c+1−1
@@ -22,7 +22,7 @@ · 21 unmodified lines
22 22
23#include <asm/vr41xx/tb0287.h>23#include <asm/vr41xx/tb0287.h>
24 24
25int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)25int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
26{26{
27 unsigned char bus;27 unsigned char bus;
28 int irq = -1;28 int irq = -1;
arch/mips/pci/pci-alchemy.c+1−1
@@ -522,7 +522,7 @@ static int __init alchemy_pci_init(void) · 521 unmodified lines
522arch_initcall(alchemy_pci_init);522arch_initcall(alchemy_pci_init);
523 523
524 524
525int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)525int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
526{526{
527 struct alchemy_pci_context *ctx = dev->sysdata;527 struct alchemy_pci_context *ctx = dev->sysdata;
528 if (ctx && ctx->board_map_irq)528 if (ctx && ctx->board_map_irq)
arch/mips/pci/pci-bcm47xx.c+1−1
@@ -28,7 +28,7 @@ · 27 unmodified lines
28#include <linux/bcma/bcma.h>28#include <linux/bcma/bcma.h>
29#include <bcm47xx.h>29#include <bcm47xx.h>
30 30
31int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)31int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
32{32{
33 return 0;33 return 0;
34}34}
arch/mips/pci/pci-lasat.c+1−1
@@ -61,7 +61,7 @@ arch_initcall(lasat_pci_setup); · 60 unmodified lines
61#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)61#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
62#define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)62#define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)
63 63
64int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)64int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
65{65{
66 switch (slot) {66 switch (slot) {
67 case 1:67 case 1:
arch/mips/pci/pci-mt7620.c+1−1
@@ -361,7 +361,7 @@ static int mt7620_pci_probe(struct platform_device *pdev) · 360 unmodified lines
361 return 0;361 return 0;
362}362}
363 363
364int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)364int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
365{365{
366 u16 cmd;366 u16 cmd;
367 u32 val;367 u32 val;
arch/mips/pci/pci-octeon.c+2−3
@@ -59,8 +59,7 @@ union octeon_pci_address { · 58 unmodified lines
59 } s;59 } s;
60};60};
61 61
62int __initconst (*octeon_pcibios_map_irq)(const struct pci_dev *dev,62int (*octeon_pcibios_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
63 u8 slot, u8 pin);
64enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;63enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
65 64
66/**65/**
@@ -74,7 +73,7 @@ enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID; · 7 unmodified lines
74 * as it goes through each bridge.73 * as it goes through each bridge.
75 * Returns Interrupt number for the device74 * Returns Interrupt number for the device
76 */75 */
77int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)76int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
78{77{
79 if (octeon_pcibios_map_irq)78 if (octeon_pcibios_map_irq)
80 return octeon_pcibios_map_irq(dev, slot, pin);79 return octeon_pcibios_map_irq(dev, slot, pin);
arch/mips/pci/pci-rt2880.c+1−1
@@ -181,7 +181,7 @@ static inline void rt2880_pci_write_u32(unsigned long reg, u32 val) · 180 unmodified lines
181 spin_unlock_irqrestore(&rt2880_pci_lock, flags);181 spin_unlock_irqrestore(&rt2880_pci_lock, flags);
182}182}
183 183
184int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)184int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
185{185{
186 u16 cmd;186 u16 cmd;
187 int irq = -1;187 int irq = -1;
arch/mips/pci/pci-rt3883.c+1−1
@@ -564,7 +564,7 @@ err_put_intc_node: · 563 unmodified lines
564 return err;564 return err;
565}565}
566 566
567int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)567int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
568{568{
569 return of_irq_parse_and_map_pci(dev, slot, pin);569 return of_irq_parse_and_map_pci(dev, slot, pin);
570}570}
arch/mips/pci/pci-tx4938.c+1−1
@@ -112,7 +112,7 @@ int __init tx4938_pciclk66_setup(void) · 111 unmodified lines
112 return pciclk;112 return pciclk;
113}113}
114 114
115int __init tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)115int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
116{116{
117 if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {117 if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {
118 switch (slot) {118 switch (slot) {
arch/mips/pci/pci-tx4939.c+2−2
@@ -48,7 +48,7 @@ void __init tx4939_report_pci1clk(void) · 47 unmodified lines
48 ((pciclk + 50000) / 100000) % 10);48 ((pciclk + 50000) / 100000) % 10);
49}49}
50 50
51int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)51int tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
52{52{
53 if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {53 if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {
54 switch (slot) {54 switch (slot) {
@@ -68,7 +68,7 @@ int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot) · 13 unmodified lines
68 return -1;68 return -1;
69}69}
70 70
71int __init tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)71int tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
72{72{
73 int irq = tx4939_pcic1_map_irq(dev, slot);73 int irq = tx4939_pcic1_map_irq(dev, slot);
74 74
arch/mips/pci/pci-xlp.c+1−1
@@ -205,7 +205,7 @@ int xlp_socdev_to_node(const struct pci_dev *lnkdev) · 204 unmodified lines
205 return PCI_SLOT(lnkdev->devfn) / 8;205 return PCI_SLOT(lnkdev->devfn) / 8;
206}206}
207 207
208int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)208int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
209{209{
210 struct pci_dev *lnkdev;210 struct pci_dev *lnkdev;
211 int lnkfunc, node;211 int lnkfunc, node;
arch/mips/pci/pci-xlr.c+1−1
@@ -315,7 +315,7 @@ static void xls_pcie_ack_b(struct irq_data *d) · 314 unmodified lines
315 }315 }
316}316}
317 317
318int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)318int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
319{319{
320 return get_irq_vector(dev);320 return get_irq_vector(dev);
321}321}
arch/mips/pci/pcie-octeon.c+1−2
@@ -1464,8 +1464,7 @@ static int cvmx_pcie_rc_initialize(int pcie_port) · 1463 unmodified lines
1464 * as it goes through each bridge.1464 * as it goes through each bridge.
1465 * Returns Interrupt number for the device1465 * Returns Interrupt number for the device
1466 */1466 */
1467int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev,1467int octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
1468 u8 slot, u8 pin)
1469{1468{
1470 /*1469 /*
1471 * The EBH5600 board with the PCI to PCIe bridge mistakenly1470 * The EBH5600 board with the PCI to PCIe bridge mistakenly
arch/mips/pmcs-msp71xx/msp_smp.c+2−0
@@ -22,6 +22,8 @@ · 21 unmodified lines
22#include <linux/smp.h>22#include <linux/smp.h>
23#include <linux/interrupt.h>23#include <linux/interrupt.h>
24 24
25#include <asm/setup.h>
26
25#ifdef CONFIG_MIPS_MT_SMP27#ifdef CONFIG_MIPS_MT_SMP
26#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */28#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
27#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */29#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */
arch/mips/txx9/generic/pci.c+6−2
@@ -386,9 +386,10 @@ int pcibios_plat_dev_init(struct pci_dev *dev) · 385 unmodified lines
386 return 0;386 return 0;
387}387}
388 388
389int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)389static int (*txx9_pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
390int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
390{391{
391 return txx9_board_vec->pci_map_irq(dev, slot, pin);392 return txx9_pci_map_irq(dev, slot, pin);
392}393}
393 394
394char * (*txx9_board_pcibios_setup)(char *str) __initdata;395char * (*txx9_board_pcibios_setup)(char *str) __initdata;
@@ -424,5 +425,8 @@ char *__init txx9_pcibios_setup(char *str) · 29 unmodified lines
424 txx9_pci_err_action = TXX9_PCI_ERR_IGNORE;425 txx9_pci_err_action = TXX9_PCI_ERR_IGNORE;
425 return NULL;426 return NULL;
426 }427 }
428
429 txx9_pci_map_irq = txx9_board_vec->pci_map_irq;
430
427 return str;431 return str;
428}432}
arch/mn10300/kernel/process.c+0−12
@@ -59,10 +59,6 @@ void arch_cpu_idle(void) · 58 unmodified lines
59}59}
60#endif60#endif
61 61
62void release_segments(struct mm_struct *mm)
63{
64}
65
66void machine_restart(char *cmd)62void machine_restart(char *cmd)
67{63{
68#ifdef CONFIG_KERNEL_DEBUGGER64#ifdef CONFIG_KERNEL_DEBUGGER
@@ -112,14 +108,6 @@ void release_thread(struct task_struct *dead_task) · 43 unmodified lines
112{108{
113}109}
114 110
115/*
116 * we do not have to muck with descriptors here, that is
117 * done in switch_mm() as needed.
118 */
119void copy_segments(struct task_struct *p, struct mm_struct *new_mm)
120{
121}
122
123/*111/*
124 * this gets called so that we can store lazy state into memory and copy the112 * this gets called so that we can store lazy state into memory and copy the
125 * current task into the new thread.113 * current task into the new thread.
arch/parisc/Kconfig+12−0
@@ -257,6 +257,18 @@ config PARISC_PAGE_SIZE_64KB · 256 unmodified lines
257 257
258endchoice258endchoice
259 259
260config PARISC_SELF_EXTRACT
261 bool "Build kernel as self-extracting executable"
262 default y
263 help
264 Say Y if you want to build the parisc kernel as a kind of
265 self-extracting executable.
266
267 If you say N here, the kernel will be compressed with gzip
268 which can be loaded by the palo bootloader directly too.
269
270 If you don't know what to do here, say Y.
271
260config SMP272config SMP
261 bool "Symmetric multi-processing support"273 bool "Symmetric multi-processing support"
262 ---help---274 ---help---
arch/parisc/Makefile+5−0
@@ -129,8 +129,13 @@ Image: vmlinux · 128 unmodified lines
129bzImage: vmlinux129bzImage: vmlinux
130 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@130 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
131 131
132ifdef CONFIG_PARISC_SELF_EXTRACT
132vmlinuz: bzImage133vmlinuz: bzImage
133 $(OBJCOPY) $(boot)/bzImage $@134 $(OBJCOPY) $(boot)/bzImage $@
135else
136vmlinuz: vmlinux
137 @gzip -cf -9 $< > $@
138endif
134 139
135install:140install:
136 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \141 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
arch/parisc/boot/compressed/Makefile+1−1
@@ -15,7 +15,7 @@ targets += misc.o piggy.o sizes.h head.o real2.o firmware.o · 14 unmodified lines
15KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER15KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER
16KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING16KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
17KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks17KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks
18KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs18KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs -Os
19ifndef CONFIG_64BIT19ifndef CONFIG_64BIT
20KBUILD_CFLAGS += -mfast-indirect-calls20KBUILD_CFLAGS += -mfast-indirect-calls
21endif21endif
arch/parisc/boot/compressed/misc.c+2−1
@@ -24,7 +24,8 @@ · 23 unmodified lines
24/* Symbols defined by linker scripts */24/* Symbols defined by linker scripts */
25extern char input_data[];25extern char input_data[];
26extern int input_len;26extern int input_len;
27extern __le32 output_len; /* at unaligned address, little-endian */27/* output_len is inserted by the linker possibly at an unaligned address */
28extern __le32 output_len __aligned(1);
28extern char _text, _end;29extern char _text, _end;
29extern char _bss, _ebss;30extern char _bss, _ebss;
30extern char _startcode_end;31extern char _startcode_end;
arch/parisc/include/asm/pdc.h+1−0
@@ -280,6 +280,7 @@ void setup_pdc(void); /* in inventory.c */ · 279 unmodified lines
280/* wrapper-functions from pdc.c */280/* wrapper-functions from pdc.c */
281 281
282int pdc_add_valid(unsigned long address);282int pdc_add_valid(unsigned long address);
283int pdc_instr(unsigned int *instr);
283int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);284int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
284int pdc_chassis_disp(unsigned long disp);285int pdc_chassis_disp(unsigned long disp);
285int pdc_chassis_warn(unsigned long *warn);286int pdc_chassis_warn(unsigned long *warn);
arch/parisc/include/asm/smp.h+1−0
@@ -1,6 +1,7 @@
1#ifndef __ASM_SMP_H1#ifndef __ASM_SMP_H
2#define __ASM_SMP_H2#define __ASM_SMP_H
3 3
4extern int init_per_cpu(int cpuid);
4 5
5#if defined(CONFIG_SMP)6#if defined(CONFIG_SMP)
6 7
arch/parisc/kernel/firmware.c+20−0
@@ -232,6 +232,26 @@ int pdc_add_valid(unsigned long address) · 231 unmodified lines
232}232}
233EXPORT_SYMBOL(pdc_add_valid);233EXPORT_SYMBOL(pdc_add_valid);
234 234
235/**
236 * pdc_instr - Get instruction that invokes PDCE_CHECK in HPMC handler.
237 * @instr: Pointer to variable which will get instruction opcode.
238 *
239 * The return value is PDC_OK (0) in case call succeeded.
240 */
241int __init pdc_instr(unsigned int *instr)
242{
243 int retval;
244 unsigned long flags;
245
246 spin_lock_irqsave(&pdc_lock, flags);
247 retval = mem_pdc_call(PDC_INSTR, 0UL, __pa(pdc_result));
248 convert_to_wide(pdc_result);
249 *instr = pdc_result[0];
250 spin_unlock_irqrestore(&pdc_lock, flags);
251
252 return retval;
253}
254
235/**255/**
236 * pdc_chassis_info - Return chassis information.256 * pdc_chassis_info - Return chassis information.
237 * @result: The return buffer.257 * @result: The return buffer.
arch/parisc/kernel/pdt.c+9−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
15#include <linux/memblock.h>15#include <linux/memblock.h>
16#include <linux/seq_file.h>16#include <linux/seq_file.h>
17#include <linux/kthread.h>17#include <linux/kthread.h>
18#include <linux/initrd.h>
18 19
19#include <asm/pdc.h>20#include <asm/pdc.h>
20#include <asm/pdcpat.h>21#include <asm/pdcpat.h>
@@ -216,8 +217,16 @@ void __init pdc_pdt_init(void) · 195 unmodified lines
216 }217 }
217 218
218 for (i = 0; i < pdt_status.pdt_entries; i++) {219 for (i = 0; i < pdt_status.pdt_entries; i++) {
220 unsigned long addr;
221
219 report_mem_err(pdt_entry[i]);222 report_mem_err(pdt_entry[i]);
220 223
224 addr = pdt_entry[i] & PDT_ADDR_PHYS_MASK;
225 if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) &&
226 addr >= initrd_start && addr < initrd_end)
227 pr_crit("CRITICAL: initrd possibly broken "
228 "due to bad memory!\n");
229
221 /* mark memory page bad */230 /* mark memory page bad */
222 memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE);231 memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE);
223 }232 }
arch/parisc/kernel/process.c+1−1
@@ -146,7 +146,7 @@ void machine_power_off(void) · 145 unmodified lines
146 146
147 /* prevent soft lockup/stalled CPU messages for endless loop. */147 /* prevent soft lockup/stalled CPU messages for endless loop. */
148 rcu_sysrq_start();148 rcu_sysrq_start();
149 lockup_detector_suspend();149 lockup_detector_soft_poweroff();
150 for (;;);150 for (;;);
151}151}
152 152
arch/parisc/kernel/processor.c+1−1
@@ -317,7 +317,7 @@ void __init collect_boot_cpu_data(void) · 316 unmodified lines
317 *317 *
318 * o Enable CPU profiling hooks.318 * o Enable CPU profiling hooks.
319 */319 */
320int init_per_cpu(int cpunum)320int __init init_per_cpu(int cpunum)
321{321{
322 int ret;322 int ret;
323 struct pdc_coproc_cfg coproc_cfg;323 struct pdc_coproc_cfg coproc_cfg;
arch/parisc/kernel/setup.c+3−3
@@ -38,6 +38,7 @@ · 37 unmodified lines
38#include <linux/export.h>38#include <linux/export.h>
39#include <linux/sched.h>39#include <linux/sched.h>
40#include <linux/sched/clock.h>40#include <linux/sched/clock.h>
41#include <linux/start_kernel.h>
41 42
42#include <asm/processor.h>43#include <asm/processor.h>
43#include <asm/sections.h>44#include <asm/sections.h>
@@ -48,6 +49,7 @@ · 4 unmodified lines
48#include <asm/io.h>49#include <asm/io.h>
49#include <asm/setup.h>50#include <asm/setup.h>
50#include <asm/unwind.h>51#include <asm/unwind.h>
52#include <asm/smp.h>
51 53
52static char __initdata command_line[COMMAND_LINE_SIZE];54static char __initdata command_line[COMMAND_LINE_SIZE];
53 55
@@ -115,7 +117,6 @@ void __init dma_ops_init(void) · 61 unmodified lines
115}117}
116#endif118#endif
117 119
118extern int init_per_cpu(int cpuid);
119extern void collect_boot_cpu_data(void);120extern void collect_boot_cpu_data(void);
120 121
121void __init setup_arch(char **cmdline_p)122void __init setup_arch(char **cmdline_p)
@@ -398,9 +399,8 @@ static int __init parisc_init(void) · 276 unmodified lines
398}399}
399arch_initcall(parisc_init);400arch_initcall(parisc_init);
400 401
401void start_parisc(void)402void __init start_parisc(void)
402{403{
403 extern void start_kernel(void);
404 extern void early_trap_init(void);404 extern void early_trap_init(void);
405 405
406 int ret, cpunum;406 int ret, cpunum;
arch/parisc/kernel/smp.c+1−2
@@ -255,12 +255,11 @@ void arch_send_call_function_single_ipi(int cpu) · 254 unmodified lines
255static void __init255static void __init
256smp_cpu_init(int cpunum)256smp_cpu_init(int cpunum)
257{257{
258 extern int init_per_cpu(int); /* arch/parisc/kernel/processor.c */
259 extern void init_IRQ(void); /* arch/parisc/kernel/irq.c */258 extern void init_IRQ(void); /* arch/parisc/kernel/irq.c */
260 extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */259 extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */
261 260
262 /* Set modes and Enable floating point coprocessor */261 /* Set modes and Enable floating point coprocessor */
263 (void) init_per_cpu(cpunum);262 init_per_cpu(cpunum);
264 263
265 disable_sr_hashing();264 disable_sr_hashing();
266 265
arch/parisc/kernel/traps.c+9−1
@@ -817,7 +817,7 @@ void __init initialize_ivt(const void *iva) · 816 unmodified lines
817 u32 check = 0;817 u32 check = 0;
818 u32 *ivap;818 u32 *ivap;
819 u32 *hpmcp;819 u32 *hpmcp;
820 u32 length;820 u32 length, instr;
821 821
822 if (strcmp((const char *)iva, "cows can fly"))822 if (strcmp((const char *)iva, "cows can fly"))
823 panic("IVT invalid");823 panic("IVT invalid");
@@ -827,6 +827,14 @@ void __init initialize_ivt(const void *iva) · 3 unmodified lines
827 for (i = 0; i < 8; i++)827 for (i = 0; i < 8; i++)
828 *ivap++ = 0;828 *ivap++ = 0;
829 829
830 /*
831 * Use PDC_INSTR firmware function to get instruction that invokes
832 * PDCE_CHECK in HPMC handler. See programming note at page 1-31 of
833 * the PA 1.1 Firmware Architecture document.
834 */
835 if (pdc_instr(&instr) == PDC_OK)
836 ivap[0] = instr;
837
830 /* Compute Checksum for HPMC handler */838 /* Compute Checksum for HPMC handler */
831 length = os_hpmc_size;839 length = os_hpmc_size;
832 ivap[7] = length;840 ivap[7] = length;
arch/parisc/kernel/unwind.c+12−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
14#include <linux/slab.h>14#include <linux/slab.h>
15#include <linux/kallsyms.h>15#include <linux/kallsyms.h>
16#include <linux/sort.h>16#include <linux/sort.h>
17#include <linux/sched.h>
17 18
18#include <linux/uaccess.h>19#include <linux/uaccess.h>
19#include <asm/assembly.h>20#include <asm/assembly.h>
@@ -279,6 +280,17 @@ static void unwind_frame_regs(struct unwind_frame_info *info) · 259 unmodified lines
279 280
280 info->prev_sp = sp - 64;281 info->prev_sp = sp - 64;
281 info->prev_ip = 0;282 info->prev_ip = 0;
283
284 /* The stack is at the end inside the thread_union
285 * struct. If we reach data, we have reached the
286 * beginning of the stack and should stop unwinding. */
287 if (info->prev_sp >= (unsigned long) task_thread_info(info->t) &&
288 info->prev_sp < ((unsigned long) task_thread_info(info->t)
289 + THREAD_SZ_ALGN)) {
290 info->prev_sp = 0;
291 break;
292 }
293
282 if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET))) 294 if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET)))
283 break;295 break;
284 info->prev_ip = tmp;296 info->prev_ip = tmp;
arch/parisc/mm/fault.c+29−4
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <linux/interrupt.h>17#include <linux/interrupt.h>
18#include <linux/extable.h>18#include <linux/extable.h>
19#include <linux/uaccess.h>19#include <linux/uaccess.h>
20#include <linux/hugetlb.h>
20 21
21#include <asm/traps.h>22#include <asm/traps.h>
22 23
@@ -261,7 +262,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, · 238 unmodified lines
261 struct task_struct *tsk;262 struct task_struct *tsk;
262 struct mm_struct *mm;263 struct mm_struct *mm;
263 unsigned long acc_type;264 unsigned long acc_type;
264 int fault;265 int fault = 0;
265 unsigned int flags;266 unsigned int flags;
266 267
267 if (faulthandler_disabled())268 if (faulthandler_disabled())
@@ -315,7 +316,8 @@ good_area: · 47 unmodified lines
315 goto out_of_memory;316 goto out_of_memory;
316 else if (fault & VM_FAULT_SIGSEGV)317 else if (fault & VM_FAULT_SIGSEGV)
317 goto bad_area;318 goto bad_area;
318 else if (fault & VM_FAULT_SIGBUS)319 else if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
320 VM_FAULT_HWPOISON_LARGE))
319 goto bad_area;321 goto bad_area;
320 BUG();322 BUG();
321 }323 }
@@ -352,8 +354,7 @@ bad_area: · 30 unmodified lines
352 354
353 if (user_mode(regs)) {355 if (user_mode(regs)) {
354 struct siginfo si;356 struct siginfo si;
355 357 unsigned int lsb = 0;
356 show_signal_msg(regs, code, address, tsk, vma);
357 358
358 switch (code) {359 switch (code) {
359 case 15: /* Data TLB miss fault/Data page fault */360 case 15: /* Data TLB miss fault/Data page fault */
@@ -386,6 +387,30 @@ bad_area: · 26 unmodified lines
386 si.si_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR;387 si.si_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR;
387 break;388 break;
388 }389 }
390
391#ifdef CONFIG_MEMORY_FAILURE
392 if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
393 printk(KERN_ERR
394 "MCE: Killing %s:%d due to hardware memory corruption fault at %08lx\n",
395 tsk->comm, tsk->pid, address);
396 si.si_signo = SIGBUS;
397 si.si_code = BUS_MCEERR_AR;
398 }
399#endif
400
401 /*
402 * Either small page or large page may be poisoned.
403 * In other words, VM_FAULT_HWPOISON_LARGE and
404 * VM_FAULT_HWPOISON are mutually exclusive.
405 */
406 if (fault & VM_FAULT_HWPOISON_LARGE)
407 lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
408 else if (fault & VM_FAULT_HWPOISON)
409 lsb = PAGE_SHIFT;
410 else
411 show_signal_msg(regs, code, address, tsk, vma);
412 si.si_addr_lsb = lsb;
413
389 si.si_errno = 0;414 si.si_errno = 0;
390 si.si_addr = (void __user *) address;415 si.si_addr = (void __user *) address;
391 force_sig_info(si.si_signo, &si, current);416 force_sig_info(si.si_signo, &si, current);
arch/powerpc/configs/g5_defconfig+3−2
@@ -138,10 +138,11 @@ CONFIG_FRAMEBUFFER_CONSOLE=y · 137 unmodified lines
138CONFIG_LOGO=y138CONFIG_LOGO=y
139CONFIG_SOUND=m139CONFIG_SOUND=m
140CONFIG_SND=m140CONFIG_SND=m
141CONFIG_SND_SEQUENCER=m141CONFIG_SND_OSSEMUL=y
142CONFIG_SND_MIXER_OSS=m142CONFIG_SND_MIXER_OSS=m
143CONFIG_SND_PCM_OSS=m143CONFIG_SND_PCM_OSS=m
144CONFIG_SND_SEQUENCER_OSS=y144CONFIG_SND_SEQUENCER=m
145CONFIG_SND_SEQUENCER_OSS=m
145CONFIG_SND_POWERMAC=m146CONFIG_SND_POWERMAC=m
146CONFIG_SND_AOA=m147CONFIG_SND_AOA=m
147CONFIG_SND_AOA_FABRIC_LAYOUT=m148CONFIG_SND_AOA_FABRIC_LAYOUT=m
arch/powerpc/configs/gamecube_defconfig+3−2
@@ -64,11 +64,12 @@ CONFIG_LOGO=y · 63 unmodified lines
64# CONFIG_LOGO_LINUX_CLUT224 is not set64# CONFIG_LOGO_LINUX_CLUT224 is not set
65CONFIG_SOUND=y65CONFIG_SOUND=y
66CONFIG_SND=y66CONFIG_SND=y
67CONFIG_SND_SEQUENCER=y67CONFIG_SND_OSSEMUL=y
68CONFIG_SND_MIXER_OSS=y68CONFIG_SND_MIXER_OSS=y
69CONFIG_SND_PCM_OSS=y69CONFIG_SND_PCM_OSS=y
70CONFIG_SND_SEQUENCER_OSS=y
71# CONFIG_SND_VERBOSE_PROCFS is not set70# CONFIG_SND_VERBOSE_PROCFS is not set
71CONFIG_SND_SEQUENCER=y
72CONFIG_SND_SEQUENCER_OSS=y
72# CONFIG_USB_SUPPORT is not set73# CONFIG_USB_SUPPORT is not set
73CONFIG_RTC_CLASS=y74CONFIG_RTC_CLASS=y
74CONFIG_RTC_DRV_GENERIC=y75CONFIG_RTC_DRV_GENERIC=y
arch/powerpc/configs/pasemi_defconfig+2−1
@@ -115,9 +115,10 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y · 114 unmodified lines
115CONFIG_LOGO=y115CONFIG_LOGO=y
116CONFIG_SOUND=y116CONFIG_SOUND=y
117CONFIG_SND=y117CONFIG_SND=y
118CONFIG_SND_SEQUENCER=y118CONFIG_SND_OSSEMUL=y
119CONFIG_SND_MIXER_OSS=y119CONFIG_SND_MIXER_OSS=y
120CONFIG_SND_PCM_OSS=y120CONFIG_SND_PCM_OSS=y
121CONFIG_SND_SEQUENCER=y
121CONFIG_SND_SEQUENCER_OSS=y122CONFIG_SND_SEQUENCER_OSS=y
122CONFIG_SND_USB_AUDIO=y123CONFIG_SND_USB_AUDIO=y
123CONFIG_SND_USB_USX2Y=y124CONFIG_SND_USB_USX2Y=y
arch/powerpc/configs/pmac32_defconfig+4−3
@@ -227,11 +227,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y · 226 unmodified lines
227CONFIG_LOGO=y227CONFIG_LOGO=y
228CONFIG_SOUND=m228CONFIG_SOUND=m
229CONFIG_SND=m229CONFIG_SND=m
230CONFIG_SND_SEQUENCER=m230CONFIG_SND_OSSEMUL=y
231CONFIG_SND_SEQ_DUMMY=m
232CONFIG_SND_MIXER_OSS=m231CONFIG_SND_MIXER_OSS=m
233CONFIG_SND_PCM_OSS=m232CONFIG_SND_PCM_OSS=m
234CONFIG_SND_SEQUENCER_OSS=y233CONFIG_SND_SEQUENCER=m
234CONFIG_SND_SEQ_DUMMY=m
235CONFIG_SND_SEQUENCER_OSS=m
235CONFIG_SND_DUMMY=m236CONFIG_SND_DUMMY=m
236CONFIG_SND_POWERMAC=m237CONFIG_SND_POWERMAC=m
237CONFIG_SND_AOA=m238CONFIG_SND_AOA=m
arch/powerpc/configs/ppc64_defconfig+4−3
@@ -222,11 +222,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y · 221 unmodified lines
222CONFIG_LOGO=y222CONFIG_LOGO=y
223CONFIG_SOUND=m223CONFIG_SOUND=m
224CONFIG_SND=m224CONFIG_SND=m
225CONFIG_SND_SEQUENCER=m225CONFIG_SND_OSSEMUL=y
226CONFIG_SND_SEQ_DUMMY=m
227CONFIG_SND_MIXER_OSS=m226CONFIG_SND_MIXER_OSS=m
228CONFIG_SND_PCM_OSS=m227CONFIG_SND_PCM_OSS=m
229CONFIG_SND_SEQUENCER_OSS=y228CONFIG_SND_SEQUENCER=m
229CONFIG_SND_SEQ_DUMMY=m
230CONFIG_SND_SEQUENCER_OSS=m
230CONFIG_SND_POWERMAC=m231CONFIG_SND_POWERMAC=m
231CONFIG_SND_AOA=m232CONFIG_SND_AOA=m
232CONFIG_SND_AOA_FABRIC_LAYOUT=m233CONFIG_SND_AOA_FABRIC_LAYOUT=m
arch/powerpc/configs/ppc64e_defconfig+4−3
@@ -141,11 +141,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y · 140 unmodified lines
141CONFIG_LOGO=y141CONFIG_LOGO=y
142CONFIG_SOUND=m142CONFIG_SOUND=m
143CONFIG_SND=m143CONFIG_SND=m
144CONFIG_SND_SEQUENCER=m144CONFIG_SND_OSSEMUL=y
145CONFIG_SND_SEQ_DUMMY=m
146CONFIG_SND_MIXER_OSS=m145CONFIG_SND_MIXER_OSS=m
147CONFIG_SND_PCM_OSS=m146CONFIG_SND_PCM_OSS=m
148CONFIG_SND_SEQUENCER_OSS=y147CONFIG_SND_SEQUENCER=m
148CONFIG_SND_SEQ_DUMMY=m
149CONFIG_SND_SEQUENCER_OSS=m
149CONFIG_HID_DRAGONRISE=y150CONFIG_HID_DRAGONRISE=y
150CONFIG_HID_GYRATION=y151CONFIG_HID_GYRATION=y
151CONFIG_HID_TWINHAN=y152CONFIG_HID_TWINHAN=y
arch/powerpc/configs/ppc6xx_defconfig+4−3
@@ -789,17 +789,18 @@ CONFIG_LOGO=y · 788 unmodified lines
789# CONFIG_LOGO_LINUX_VGA16 is not set789# CONFIG_LOGO_LINUX_VGA16 is not set
790CONFIG_SOUND=m790CONFIG_SOUND=m
791CONFIG_SND=m791CONFIG_SND=m
792CONFIG_SND_SEQUENCER=m792CONFIG_SND_OSSEMUL=y
793CONFIG_SND_SEQ_DUMMY=m
794CONFIG_SND_MIXER_OSS=m793CONFIG_SND_MIXER_OSS=m
795CONFIG_SND_PCM_OSS=m794CONFIG_SND_PCM_OSS=m
796CONFIG_SND_SEQUENCER_OSS=y
797CONFIG_SND_DYNAMIC_MINORS=y795CONFIG_SND_DYNAMIC_MINORS=y
798# CONFIG_SND_SUPPORT_OLD_API is not set796# CONFIG_SND_SUPPORT_OLD_API is not set
799CONFIG_SND_VERBOSE_PRINTK=y797CONFIG_SND_VERBOSE_PRINTK=y
800CONFIG_SND_DEBUG=y798CONFIG_SND_DEBUG=y
801CONFIG_SND_DEBUG_VERBOSE=y799CONFIG_SND_DEBUG_VERBOSE=y
802CONFIG_SND_PCM_XRUN_DEBUG=y800CONFIG_SND_PCM_XRUN_DEBUG=y
801CONFIG_SND_SEQUENCER=m
802CONFIG_SND_SEQ_DUMMY=m
803CONFIG_SND_SEQUENCER_OSS=m
803CONFIG_SND_DUMMY=m804CONFIG_SND_DUMMY=m
804CONFIG_SND_VIRMIDI=m805CONFIG_SND_VIRMIDI=m
805CONFIG_SND_MTPAV=m806CONFIG_SND_MTPAV=m
arch/powerpc/configs/wii_defconfig+3−2
@@ -79,11 +79,12 @@ CONFIG_FB=y · 78 unmodified lines
79CONFIG_FRAMEBUFFER_CONSOLE=y79CONFIG_FRAMEBUFFER_CONSOLE=y
80CONFIG_SOUND=y80CONFIG_SOUND=y
81CONFIG_SND=y81CONFIG_SND=y
82CONFIG_SND_SEQUENCER=y82CONFIG_SND_OSSEMUL=y
83CONFIG_SND_MIXER_OSS=y83CONFIG_SND_MIXER_OSS=y
84CONFIG_SND_PCM_OSS=y84CONFIG_SND_PCM_OSS=y
85CONFIG_SND_SEQUENCER_OSS=y
86# CONFIG_SND_VERBOSE_PROCFS is not set85# CONFIG_SND_VERBOSE_PROCFS is not set
86CONFIG_SND_SEQUENCER=y
87CONFIG_SND_SEQUENCER_OSS=y
87CONFIG_HID_APPLE=m88CONFIG_HID_APPLE=m
88CONFIG_HID_WACOM=m89CONFIG_HID_WACOM=m
89CONFIG_MMC=y90CONFIG_MMC=y
arch/powerpc/kernel/dt_cpu_ftrs.c+2−2
@@ -102,10 +102,10 @@ static void cpufeatures_flush_tlb(void) · 101 unmodified lines
102 case PVR_POWER8:102 case PVR_POWER8:
103 case PVR_POWER8E:103 case PVR_POWER8E:
104 case PVR_POWER8NVL:104 case PVR_POWER8NVL:
105 __flush_tlb_power8(POWER8_TLB_SETS);105 __flush_tlb_power8(TLB_INVAL_SCOPE_GLOBAL);
106 break;106 break;
107 case PVR_POWER9:107 case PVR_POWER9:
108 __flush_tlb_power9(POWER9_TLB_SETS_HASH);108 __flush_tlb_power9(TLB_INVAL_SCOPE_GLOBAL);
109 break;109 break;
110 default:110 default:
111 pr_err("unknown CPU version for boot TLB flush\n");111 pr_err("unknown CPU version for boot TLB flush\n");
arch/powerpc/kernel/eeh.c+4−0
@@ -1019,6 +1019,10 @@ int eeh_init(void) · 1018 unmodified lines
1019 } else if ((ret = eeh_ops->init()))1019 } else if ((ret = eeh_ops->init()))
1020 return ret;1020 return ret;
1021 1021
1022 /* Initialize PHB PEs */
1023 list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1024 eeh_dev_phb_init_dynamic(hose);
1025
1022 /* Initialize EEH event */1026 /* Initialize EEH event */
1023 ret = eeh_event_init();1027 ret = eeh_event_init();
1024 if (ret)1028 if (ret)
arch/powerpc/kernel/eeh_dev.c+0−18
@@ -78,21 +78,3 @@ void eeh_dev_phb_init_dynamic(struct pci_controller *phb) · 77 unmodified lines
78 /* EEH PE for PHB */78 /* EEH PE for PHB */
79 eeh_phb_pe_create(phb);79 eeh_phb_pe_create(phb);
80}80}
81
82/**
83 * eeh_dev_phb_init - Create EEH devices for devices included in existing PHBs
84 *
85 * Scan all the existing PHBs and create EEH devices for their OF
86 * nodes and their children OF nodes
87 */
88static int __init eeh_dev_phb_init(void)
89{
90 struct pci_controller *phb, *tmp;
91
92 list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
93 eeh_dev_phb_init_dynamic(phb);
94
95 return 0;
96}
97
98core_initcall(eeh_dev_phb_init);
arch/powerpc/kernel/mce_power.c+13−0
@@ -624,5 +624,18 @@ long __machine_check_early_realmode_p8(struct pt_regs *regs) · 623 unmodified lines
624 624
625long __machine_check_early_realmode_p9(struct pt_regs *regs)625long __machine_check_early_realmode_p9(struct pt_regs *regs)
626{626{
627 /*
628 * On POWER9 DD2.1 and below, it's possible to get a machine check
629 * caused by a paste instruction where only DSISR bit 25 is set. This
630 * will result in the MCE handler seeing an unknown event and the kernel
631 * crashing. An MCE that occurs like this is spurious, so we don't need
632 * to do anything in terms of servicing it. If there is something that
633 * needs to be serviced, the CPU will raise the MCE again with the
634 * correct DSISR so that it can be serviced properly. So detect this
635 * case and mark it as handled.
636 */
637 if (SRR1_MC_LOADSTORE(regs->msr) && regs->dsisr == 0x02000000)
638 return 1;
639
627 return mce_handle_error(regs, mce_p9_derror_table, mce_p9_ierror_table);640 return mce_handle_error(regs, mce_p9_derror_table, mce_p9_ierror_table);
628}641}
arch/powerpc/kernel/optprobes.c+3−1
@@ -104,8 +104,10 @@ static unsigned long can_optimize(struct kprobe *p) · 103 unmodified lines
104 * and that can be emulated.104 * and that can be emulated.
105 */105 */
106 if (!is_conditional_branch(*p->ainsn.insn) &&106 if (!is_conditional_branch(*p->ainsn.insn) &&
107 analyse_instr(&op, &regs, *p->ainsn.insn))107 analyse_instr(&op, &regs, *p->ainsn.insn) == 1) {
108 emulate_update_regs(&regs, &op);
108 nip = regs.nip;109 nip = regs.nip;
110 }
109 111
110 return nip;112 return nip;
111}113}
arch/powerpc/kernel/ptrace.c+1−1
@@ -131,7 +131,7 @@ static void flush_tmregs_to_thread(struct task_struct *tsk) · 130 unmodified lines
131 * in the appropriate thread structures from live.131 * in the appropriate thread structures from live.
132 */132 */
133 133
134 if (tsk != current)134 if ((!cpu_has_feature(CPU_FTR_TM)) || (tsk != current))
135 return;135 return;
136 136
137 if (MSR_TM_SUSPENDED(mfmsr())) {137 if (MSR_TM_SUSPENDED(mfmsr())) {
arch/powerpc/kernel/setup-common.c+0−3
@@ -904,9 +904,6 @@ void __init setup_arch(char **cmdline_p) · 903 unmodified lines
904#endif904#endif
905#endif905#endif
906 906
907#ifdef CONFIG_PPC_64K_PAGES
908 init_mm.context.pte_frag = NULL;
909#endif
910#ifdef CONFIG_SPAPR_TCE_IOMMU907#ifdef CONFIG_SPAPR_TCE_IOMMU
911 mm_iommu_init(&init_mm);908 mm_iommu_init(&init_mm);
912#endif909#endif
arch/powerpc/kernel/traps.c+10−2
@@ -437,6 +437,7 @@ static inline int check_io_access(struct pt_regs *regs) · 436 unmodified lines
437int machine_check_e500mc(struct pt_regs *regs)437int machine_check_e500mc(struct pt_regs *regs)
438{438{
439 unsigned long mcsr = mfspr(SPRN_MCSR);439 unsigned long mcsr = mfspr(SPRN_MCSR);
440 unsigned long pvr = mfspr(SPRN_PVR);
440 unsigned long reason = mcsr;441 unsigned long reason = mcsr;
441 int recoverable = 1;442 int recoverable = 1;
442 443
@@ -478,8 +479,15 @@ int machine_check_e500mc(struct pt_regs *regs) · 35 unmodified lines
478 * may still get logged and cause a machine check. We should479 * may still get logged and cause a machine check. We should
479 * only treat the non-write shadow case as non-recoverable.480 * only treat the non-write shadow case as non-recoverable.
480 */481 */
481 if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))482 /* On e6500 core, L1 DCWS (Data cache write shadow mode) bit
482 recoverable = 0;483 * is not implemented but L1 data cache always runs in write
484 * shadow mode. Hence on data cache parity errors HW will
485 * automatically invalidate the L1 Data Cache.
486 */
487 if (PVR_VER(pvr) != PVR_VER_E6500) {
488 if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
489 recoverable = 0;
490 }
483 }491 }
484 492
485 if (reason & MCSR_L2MMU_MHIT) {493 if (reason & MCSR_L2MMU_MHIT) {
arch/powerpc/kernel/watchdog.c+15−15
@@ -310,9 +310,6 @@ static int start_wd_on_cpu(unsigned int cpu) · 309 unmodified lines
310 if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED))310 if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED))
311 return 0;311 return 0;
312 312
313 if (watchdog_suspended)
314 return 0;
315
316 if (!cpumask_test_cpu(cpu, &watchdog_cpumask))313 if (!cpumask_test_cpu(cpu, &watchdog_cpumask))
317 return 0;314 return 0;
318 315
@@ -358,36 +355,39 @@ static void watchdog_calc_timeouts(void) · 39 unmodified lines
358 wd_timer_period_ms = watchdog_thresh * 1000 * 2 / 5;355 wd_timer_period_ms = watchdog_thresh * 1000 * 2 / 5;
359}356}
360 357
361void watchdog_nmi_reconfigure(void)358void watchdog_nmi_stop(void)
362{359{
363 int cpu;360 int cpu;
364 361
365 watchdog_calc_timeouts();
366
367 for_each_cpu(cpu, &wd_cpus_enabled)362 for_each_cpu(cpu, &wd_cpus_enabled)
368 stop_wd_on_cpu(cpu);363 stop_wd_on_cpu(cpu);
364}
369 365
366void watchdog_nmi_start(void)
367{
368 int cpu;
369
370 watchdog_calc_timeouts();
370 for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask)371 for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask)
371 start_wd_on_cpu(cpu);372 start_wd_on_cpu(cpu);
372}373}
373 374
374/*375/*
375 * This runs after lockup_detector_init() which sets up watchdog_cpumask.376 * Invoked from core watchdog init.
376 */377 */
377static int __init powerpc_watchdog_init(void)378int __init watchdog_nmi_probe(void)
378{379{
379 int err;380 int err;
380 381
381 watchdog_calc_timeouts();382 err = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN,
382 383 "powerpc/watchdog:online",
383 err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "powerpc/watchdog:online",384 start_wd_on_cpu, stop_wd_on_cpu);
384 start_wd_on_cpu, stop_wd_on_cpu);385 if (err < 0) {
385 if (err < 0)
386 pr_warn("Watchdog could not be initialized");386 pr_warn("Watchdog could not be initialized");
387 387 return err;
388 }
388 return 0;389 return 0;
389}390}
390arch_initcall(powerpc_watchdog_init);
391 391
392static void handle_backtrace_ipi(struct pt_regs *regs)392static void handle_backtrace_ipi(struct pt_regs *regs)
393{393{
arch/powerpc/kvm/book3s_hv_rmhandlers.S+13−1
@@ -1121,6 +1121,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) · 1120 unmodified lines
1121BEGIN_FTR_SECTION1121BEGIN_FTR_SECTION
1122 mtspr SPRN_PPR, r01122 mtspr SPRN_PPR, r0
1123END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)1123END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
1124
1125/* Move canary into DSISR to check for later */
1126BEGIN_FTR_SECTION
1127 li r0, 0x7fff
1128 mtspr SPRN_HDSISR, r0
1129END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
1130
1124 ld r0, VCPU_GPR(R0)(r4)1131 ld r0, VCPU_GPR(R0)(r4)
1125 ld r4, VCPU_GPR(R4)(r4)1132 ld r4, VCPU_GPR(R4)(r4)
1126 1133
@@ -1956,9 +1963,14 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_RADIX) · 829 unmodified lines
1956kvmppc_hdsi:1963kvmppc_hdsi:
1957 ld r3, VCPU_KVM(r9)1964 ld r3, VCPU_KVM(r9)
1958 lbz r0, KVM_RADIX(r3)1965 lbz r0, KVM_RADIX(r3)
1959 cmpwi r0, 0
1960 mfspr r4, SPRN_HDAR1966 mfspr r4, SPRN_HDAR
1961 mfspr r6, SPRN_HDSISR1967 mfspr r6, SPRN_HDSISR
1968BEGIN_FTR_SECTION
1969 /* Look for DSISR canary. If we find it, retry instruction */
1970 cmpdi r6, 0x7fff
1971 beq 6f
1972END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
1973 cmpwi r0, 0
1962 bne .Lradix_hdsi /* on radix, just save DAR/DSISR/ASDR */1974 bne .Lradix_hdsi /* on radix, just save DAR/DSISR/ASDR */
1963 /* HPTE not found fault or protection fault? */1975 /* HPTE not found fault or protection fault? */
1964 andis. r0, r6, (DSISR_NOHPTE | DSISR_PROTFAULT)@h1976 andis. r0, r6, (DSISR_NOHPTE | DSISR_PROTFAULT)@h
arch/powerpc/kvm/book3s_xive.c+2−3
@@ -622,7 +622,7 @@ int kvmppc_xive_get_xive(struct kvm *kvm, u32 irq, u32 *server, · 621 unmodified lines
622 return -EINVAL;622 return -EINVAL;
623 state = &sb->irq_state[idx];623 state = &sb->irq_state[idx];
624 arch_spin_lock(&sb->lock);624 arch_spin_lock(&sb->lock);
625 *server = state->guest_server;625 *server = state->act_server;
626 *priority = state->guest_priority;626 *priority = state->guest_priority;
627 arch_spin_unlock(&sb->lock);627 arch_spin_unlock(&sb->lock);
628 628
@@ -1331,7 +1331,7 @@ static int xive_get_source(struct kvmppc_xive *xive, long irq, u64 addr) · 702 unmodified lines
1331 xive->saved_src_count++;1331 xive->saved_src_count++;
1332 1332
1333 /* Convert saved state into something compatible with xics */1333 /* Convert saved state into something compatible with xics */
1334 val = state->guest_server;1334 val = state->act_server;
1335 prio = state->saved_scan_prio;1335 prio = state->saved_scan_prio;
1336 1336
1337 if (prio == MASKED) {1337 if (prio == MASKED) {
@@ -1507,7 +1507,6 @@ static int xive_set_source(struct kvmppc_xive *xive, long irq, u64 addr) · 169 unmodified lines
1507 /* First convert prio and mark interrupt as untargetted */1507 /* First convert prio and mark interrupt as untargetted */
1508 act_prio = xive_prio_from_guest(guest_prio);1508 act_prio = xive_prio_from_guest(guest_prio);
1509 state->act_priority = MASKED;1509 state->act_priority = MASKED;
1510 state->guest_server = server;
1511 1510
1512 /*1511 /*
1513 * We need to drop the lock due to the mutex below. Hopefully1512 * We need to drop the lock due to the mutex below. Hopefully
arch/powerpc/kvm/book3s_xive.h+0−1
@@ -35,7 +35,6 @@ struct kvmppc_xive_irq_state { · 34 unmodified lines
35 struct xive_irq_data *pt_data; /* XIVE Pass-through associated data */35 struct xive_irq_data *pt_data; /* XIVE Pass-through associated data */
36 36
37 /* Targetting as set by guest */37 /* Targetting as set by guest */
38 u32 guest_server; /* Current guest selected target */
39 u8 guest_priority; /* Guest set priority */38 u8 guest_priority; /* Guest set priority */
40 u8 saved_priority; /* Saved priority when masking */39 u8 saved_priority; /* Saved priority when masking */
41 40
arch/powerpc/lib/sstep.c+12−11
@@ -944,9 +944,9 @@ NOKPROBE_SYMBOL(emulate_dcbz); · 943 unmodified lines
944 : "r" (addr), "i" (-EFAULT), "0" (err))944 : "r" (addr), "i" (-EFAULT), "0" (err))
945 945
946static nokprobe_inline void set_cr0(const struct pt_regs *regs,946static nokprobe_inline void set_cr0(const struct pt_regs *regs,
947 struct instruction_op *op, int rd)947 struct instruction_op *op)
948{948{
949 long val = regs->gpr[rd];949 long val = op->val;
950 950
951 op->type |= SETCC;951 op->type |= SETCC;
952 op->ccval = (regs->ccr & 0x0fffffff) | ((regs->xer >> 3) & 0x10000000);952 op->ccval = (regs->ccr & 0x0fffffff) | ((regs->xer >> 3) & 0x10000000);
@@ -1326,7 +1326,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 373 unmodified lines
1326 case 13: /* addic. */1326 case 13: /* addic. */
1327 imm = (short) instr;1327 imm = (short) instr;
1328 add_with_carry(regs, op, rd, regs->gpr[ra], imm, 0);1328 add_with_carry(regs, op, rd, regs->gpr[ra], imm, 0);
1329 set_cr0(regs, op, rd);1329 set_cr0(regs, op);
1330 return 1;1330 return 1;
1331 1331
1332 case 14: /* addi */1332 case 14: /* addi */
@@ -1397,13 +1397,13 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 64 unmodified lines
1397 1397
1398 case 28: /* andi. */1398 case 28: /* andi. */
1399 op->val = regs->gpr[rd] & (unsigned short) instr;1399 op->val = regs->gpr[rd] & (unsigned short) instr;
1400 set_cr0(regs, op, ra);1400 set_cr0(regs, op);
1401 goto logical_done_nocc;1401 goto logical_done_nocc;
1402 1402
1403 case 29: /* andis. */1403 case 29: /* andis. */
1404 imm = (unsigned short) instr;1404 imm = (unsigned short) instr;
1405 op->val = regs->gpr[rd] & (imm << 16);1405 op->val = regs->gpr[rd] & (imm << 16);
1406 set_cr0(regs, op, ra);1406 set_cr0(regs, op);
1407 goto logical_done_nocc;1407 goto logical_done_nocc;
1408 1408
1409#ifdef __powerpc64__1409#ifdef __powerpc64__
@@ -1513,10 +1513,10 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 103 unmodified lines
1513 op->type = COMPUTE + SETCC;1513 op->type = COMPUTE + SETCC;
1514 imm = 0xf0000000UL;1514 imm = 0xf0000000UL;
1515 val = regs->gpr[rd];1515 val = regs->gpr[rd];
1516 op->val = regs->ccr;1516 op->ccval = regs->ccr;
1517 for (sh = 0; sh < 8; ++sh) {1517 for (sh = 0; sh < 8; ++sh) {
1518 if (instr & (0x80000 >> sh))1518 if (instr & (0x80000 >> sh))
1519 op->val = (op->val & ~imm) |1519 op->ccval = (op->ccval & ~imm) |
1520 (val & imm);1520 (val & imm);
1521 imm >>= 4;1521 imm >>= 4;
1522 }1522 }
@@ -1651,8 +1651,9 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 128 unmodified lines
1651 goto arith_done;1651 goto arith_done;
1652 1652
1653 case 235: /* mullw */1653 case 235: /* mullw */
1654 op->val = (unsigned int) regs->gpr[ra] *1654 op->val = (long)(int) regs->gpr[ra] *
1655 (unsigned int) regs->gpr[rb];1655 (int) regs->gpr[rb];
1656
1656 goto arith_done;1657 goto arith_done;
1657 1658
1658 case 266: /* add */1659 case 266: /* add */
@@ -2526,7 +2527,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 867 unmodified lines
2526 2527
2527 logical_done:2528 logical_done:
2528 if (instr & 1)2529 if (instr & 1)
2529 set_cr0(regs, op, ra);2530 set_cr0(regs, op);
2530 logical_done_nocc:2531 logical_done_nocc:
2531 op->reg = ra;2532 op->reg = ra;
2532 op->type |= SETREG;2533 op->type |= SETREG;
@@ -2534,7 +2535,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, · 1 unmodified line
2534 2535
2535 arith_done:2536 arith_done:
2536 if (instr & 1)2537 if (instr & 1)
2537 set_cr0(regs, op, rd);2538 set_cr0(regs, op);
2538 compute_done:2539 compute_done:
2539 op->reg = rd;2540 op->reg = rd;
2540 op->type |= SETREG;2541 op->type |= SETREG;
arch/powerpc/mm/pgtable_32.c+1−1
@@ -361,9 +361,9 @@ static int change_page_attr(struct page *page, int numpages, pgprot_t prot) · 360 unmodified lines
361 break;361 break;
362 }362 }
363 wmb();363 wmb();
364 local_irq_restore(flags);
364 flush_tlb_kernel_range((unsigned long)page_address(start),365 flush_tlb_kernel_range((unsigned long)page_address(start),
365 (unsigned long)page_address(page));366 (unsigned long)page_address(page));
366 local_irq_restore(flags);
367 return err;367 return err;
368}368}
369 369
arch/powerpc/perf/core-book3s.c+5−0
@@ -793,6 +793,11 @@ void perf_event_print_debug(void) · 792 unmodified lines
793 u32 pmcs[MAX_HWEVENTS];793 u32 pmcs[MAX_HWEVENTS];
794 int i;794 int i;
795 795
796 if (!ppmu) {
797 pr_info("Performance monitor hardware not registered.\n");
798 return;
799 }
800
796 if (!ppmu->n_counter)801 if (!ppmu->n_counter)
797 return;802 return;
798 803
arch/powerpc/platforms/powernv/idle.c+7−1
@@ -393,7 +393,13 @@ static void pnv_program_cpu_hotplug_lpcr(unsigned int cpu, u64 lpcr_val) · 392 unmodified lines
393 u64 pir = get_hard_smp_processor_id(cpu);393 u64 pir = get_hard_smp_processor_id(cpu);
394 394
395 mtspr(SPRN_LPCR, lpcr_val);395 mtspr(SPRN_LPCR, lpcr_val);
396 opal_slw_set_reg(pir, SPRN_LPCR, lpcr_val);396
397 /*
398 * Program the LPCR via stop-api only if the deepest stop state
399 * can lose hypervisor context.
400 */
401 if (supported_cpuidle_states & OPAL_PM_LOSE_FULL_CONTEXT)
402 opal_slw_set_reg(pir, SPRN_LPCR, lpcr_val);
397}403}
398 404
399/*405/*
arch/powerpc/platforms/powernv/setup.c+9−1
@@ -272,7 +272,15 @@ static void pnv_kexec_cpu_down(int crash_shutdown, int secondary) · 271 unmodified lines
272#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE272#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
273static unsigned long pnv_memory_block_size(void)273static unsigned long pnv_memory_block_size(void)
274{274{
275 return 256UL * 1024 * 1024;275 /*
276 * We map the kernel linear region with 1GB large pages on radix. For
277 * memory hot unplug to work our memory block size must be at least
278 * this size.
279 */
280 if (radix_enabled())
281 return 1UL * 1024 * 1024 * 1024;
282 else
283 return 256UL * 1024 * 1024;
276}284}
277#endif285#endif
278 286
arch/powerpc/platforms/pseries/dlpar.c+0−1
@@ -266,7 +266,6 @@ int dlpar_attach_node(struct device_node *dn, struct device_node *parent) · 265 unmodified lines
266 return rc;266 return rc;
267 }267 }
268 268
269 of_node_put(dn->parent);
270 return 0;269 return 0;
271}270}
272 271
arch/powerpc/platforms/pseries/hotplug-cpu.c+5−1
@@ -462,15 +462,19 @@ static ssize_t dlpar_cpu_add(u32 drc_index) · 461 unmodified lines
462 }462 }
463 463
464 dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent);464 dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent);
465 of_node_put(parent);
466 if (!dn) {465 if (!dn) {
467 pr_warn("Failed call to configure-connector, drc index: %x\n",466 pr_warn("Failed call to configure-connector, drc index: %x\n",
468 drc_index);467 drc_index);
469 dlpar_release_drc(drc_index);468 dlpar_release_drc(drc_index);
469 of_node_put(parent);
470 return -EINVAL;470 return -EINVAL;
471 }471 }
472 472
473 rc = dlpar_attach_node(dn, parent);473 rc = dlpar_attach_node(dn, parent);
474
475 /* Regardless we are done with parent now */
476 of_node_put(parent);
477
474 if (rc) {478 if (rc) {
475 saved_rc = rc;479 saved_rc = rc;
476 pr_warn("Failed to attach node %s, rc: %d, drc index: %x\n",480 pr_warn("Failed to attach node %s, rc: %d, drc index: %x\n",
arch/powerpc/platforms/pseries/mobility.c+3−1
@@ -226,8 +226,10 @@ static int add_dt_node(__be32 parent_phandle, __be32 drc_index) · 225 unmodified lines
226 return -ENOENT;226 return -ENOENT;
227 227
228 dn = dlpar_configure_connector(drc_index, parent_dn);228 dn = dlpar_configure_connector(drc_index, parent_dn);
229 if (!dn)229 if (!dn) {
230 of_node_put(parent_dn);
230 return -ENOENT;231 return -ENOENT;
232 }
231 233
232 rc = dlpar_attach_node(dn, parent_dn);234 rc = dlpar_attach_node(dn, parent_dn);
233 if (rc)235 if (rc)
arch/powerpc/sysdev/fsl_rio.c+15−2
@@ -71,6 +71,8 @@ · 70 unmodified lines
71#define RIWAR_WRTYP_ALLOC 0x0000600071#define RIWAR_WRTYP_ALLOC 0x00006000
72#define RIWAR_SIZE_MASK 0x0000003F72#define RIWAR_SIZE_MASK 0x0000003F
73 73
74static DEFINE_SPINLOCK(fsl_rio_config_lock);
75
74#define __fsl_read_rio_config(x, addr, err, op) \76#define __fsl_read_rio_config(x, addr, err, op) \
75 __asm__ __volatile__( \77 __asm__ __volatile__( \
76 "1: "op" %1,0(%2)\n" \78 "1: "op" %1,0(%2)\n" \
@@ -184,6 +186,7 @@ fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, · 107 unmodified lines
184 u8 hopcount, u32 offset, int len, u32 *val)186 u8 hopcount, u32 offset, int len, u32 *val)
185{187{
186 struct rio_priv *priv = mport->priv;188 struct rio_priv *priv = mport->priv;
189 unsigned long flags;
187 u8 *data;190 u8 *data;
188 u32 rval, err = 0;191 u32 rval, err = 0;
189 192
@@ -197,6 +200,8 @@ fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, · 7 unmodified lines
197 if (offset > (0x1000000 - len) || !IS_ALIGNED(offset, len))200 if (offset > (0x1000000 - len) || !IS_ALIGNED(offset, len))
198 return -EINVAL;201 return -EINVAL;
199 202
203 spin_lock_irqsave(&fsl_rio_config_lock, flags);
204
200 out_be32(&priv->maint_atmu_regs->rowtar,205 out_be32(&priv->maint_atmu_regs->rowtar,
201 (destid << 22) | (hopcount << 12) | (offset >> 12));206 (destid << 22) | (hopcount << 12) | (offset >> 12));
202 out_be32(&priv->maint_atmu_regs->rowtear, (destid >> 10));207 out_be32(&priv->maint_atmu_regs->rowtear, (destid >> 10));
@@ -213,6 +218,7 @@ fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, · 10 unmodified lines
213 __fsl_read_rio_config(rval, data, err, "lwz");218 __fsl_read_rio_config(rval, data, err, "lwz");
214 break;219 break;
215 default:220 default:
221 spin_unlock_irqrestore(&fsl_rio_config_lock, flags);
216 return -EINVAL;222 return -EINVAL;
217 }223 }
218 224
@@ -221,6 +227,7 @@ fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, · 2 unmodified lines
221 err, destid, hopcount, offset);227 err, destid, hopcount, offset);
222 }228 }
223 229
230 spin_unlock_irqrestore(&fsl_rio_config_lock, flags);
224 *val = rval;231 *val = rval;
225 232
226 return err;233 return err;
@@ -244,7 +251,10 @@ fsl_rio_config_write(struct rio_mport *mport, int index, u16 destid, · 17 unmodified lines
244 u8 hopcount, u32 offset, int len, u32 val)251 u8 hopcount, u32 offset, int len, u32 val)
245{252{
246 struct rio_priv *priv = mport->priv;253 struct rio_priv *priv = mport->priv;
254 unsigned long flags;
247 u8 *data;255 u8 *data;
256 int ret = 0;
257
248 pr_debug258 pr_debug
249 ("fsl_rio_config_write:"259 ("fsl_rio_config_write:"
250 " index %d destid %d hopcount %d offset %8.8x len %d val %8.8x\n",260 " index %d destid %d hopcount %d offset %8.8x len %d val %8.8x\n",
@@ -255,6 +265,8 @@ fsl_rio_config_write(struct rio_mport *mport, int index, u16 destid, · 4 unmodified lines
255 if (offset > (0x1000000 - len) || !IS_ALIGNED(offset, len))265 if (offset > (0x1000000 - len) || !IS_ALIGNED(offset, len))
256 return -EINVAL;266 return -EINVAL;
257 267
268 spin_lock_irqsave(&fsl_rio_config_lock, flags);
269
258 out_be32(&priv->maint_atmu_regs->rowtar,270 out_be32(&priv->maint_atmu_regs->rowtar,
259 (destid << 22) | (hopcount << 12) | (offset >> 12));271 (destid << 22) | (hopcount << 12) | (offset >> 12));
260 out_be32(&priv->maint_atmu_regs->rowtear, (destid >> 10));272 out_be32(&priv->maint_atmu_regs->rowtear, (destid >> 10));
@@ -271,10 +283,11 @@ fsl_rio_config_write(struct rio_mport *mport, int index, u16 destid, · 10 unmodified lines
271 out_be32((u32 *) data, val);283 out_be32((u32 *) data, val);
272 break;284 break;
273 default:285 default:
274 return -EINVAL;286 ret = -EINVAL;
275 }287 }
288 spin_unlock_irqrestore(&fsl_rio_config_lock, flags);
276 289
277 return 0;290 return ret;
278}291}
279 292
280static void fsl_rio_inbound_mem_init(struct rio_priv *priv)293static void fsl_rio_inbound_mem_init(struct rio_priv *priv)
arch/powerpc/sysdev/fsl_rmu.c+8−0
@@ -104,6 +104,8 @@ · 103 unmodified lines
104 104
105#define DOORBELL_MESSAGE_SIZE 0x08105#define DOORBELL_MESSAGE_SIZE 0x08
106 106
107static DEFINE_SPINLOCK(fsl_rio_doorbell_lock);
108
107struct rio_msg_regs {109struct rio_msg_regs {
108 u32 omr;110 u32 omr;
109 u32 osr;111 u32 osr;
@@ -626,9 +628,13 @@ err_out: · 516 unmodified lines
626int fsl_rio_doorbell_send(struct rio_mport *mport,628int fsl_rio_doorbell_send(struct rio_mport *mport,
627 int index, u16 destid, u16 data)629 int index, u16 destid, u16 data)
628{630{
631 unsigned long flags;
632
629 pr_debug("fsl_doorbell_send: index %d destid %4.4x data %4.4x\n",633 pr_debug("fsl_doorbell_send: index %d destid %4.4x data %4.4x\n",
630 index, destid, data);634 index, destid, data);
631 635
636 spin_lock_irqsave(&fsl_rio_doorbell_lock, flags);
637
632 /* In the serial version silicons, such as MPC8548, MPC8641,638 /* In the serial version silicons, such as MPC8548, MPC8641,
633 * below operations is must be.639 * below operations is must be.
634 */640 */
@@ -638,6 +644,8 @@ int fsl_rio_doorbell_send(struct rio_mport *mport, · 3 unmodified lines
638 out_be32(&dbell->dbell_regs->oddatr, (index << 20) | data);644 out_be32(&dbell->dbell_regs->oddatr, (index << 20) | data);
639 out_be32(&dbell->dbell_regs->odmr, 0x00000001);645 out_be32(&dbell->dbell_regs->odmr, 0x00000001);
640 646
647 spin_unlock_irqrestore(&fsl_rio_doorbell_lock, flags);
648
641 return 0;649 return 0;
642}650}
643 651
arch/powerpc/sysdev/xive/common.c+8−0
@@ -1402,6 +1402,14 @@ void xive_teardown_cpu(void) · 1401 unmodified lines
1402 1402
1403 if (xive_ops->teardown_cpu)1403 if (xive_ops->teardown_cpu)
1404 xive_ops->teardown_cpu(cpu, xc);1404 xive_ops->teardown_cpu(cpu, xc);
1405
1406#ifdef CONFIG_SMP
1407 /* Get rid of IPI */
1408 xive_cleanup_cpu_ipi(cpu, xc);
1409#endif
1410
1411 /* Disable and free the queues */
1412 xive_cleanup_cpu_queues(cpu, xc);
1405}1413}
1406 1414
1407void xive_kexec_teardown_cpu(int secondary)1415void xive_kexec_teardown_cpu(int secondary)
arch/powerpc/sysdev/xive/spapr.c+4−0
@@ -431,7 +431,11 @@ static int xive_spapr_get_ipi(unsigned int cpu, struct xive_cpu *xc) · 430 unmodified lines
431 431
432static void xive_spapr_put_ipi(unsigned int cpu, struct xive_cpu *xc)432static void xive_spapr_put_ipi(unsigned int cpu, struct xive_cpu *xc)
433{433{
434 if (!xc->hw_ipi)
435 return;
436
434 xive_irq_bitmap_free(xc->hw_ipi);437 xive_irq_bitmap_free(xc->hw_ipi);
438 xc->hw_ipi = 0;
435}439}
436#endif /* CONFIG_SMP */440#endif /* CONFIG_SMP */
437 441
arch/s390/include/asm/pgtable.h+3−1
@@ -1507,7 +1507,9 @@ static inline pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, · 1506 unmodified lines
1507static inline void pmdp_invalidate(struct vm_area_struct *vma,1507static inline void pmdp_invalidate(struct vm_area_struct *vma,
1508 unsigned long addr, pmd_t *pmdp)1508 unsigned long addr, pmd_t *pmdp)
1509{1509{
1510 pmdp_xchg_direct(vma->vm_mm, addr, pmdp, __pmd(_SEGMENT_ENTRY_EMPTY));1510 pmd_t pmd = __pmd(pmd_val(*pmdp) | _SEGMENT_ENTRY_INVALID);
1511
1512 pmdp_xchg_direct(vma->vm_mm, addr, pmdp, pmd);
1511}1513}
1512 1514
1513#define __HAVE_ARCH_PMDP_SET_WRPROTECT1515#define __HAVE_ARCH_PMDP_SET_WRPROTECT
arch/s390/kernel/early.c+0−12
@@ -404,18 +404,6 @@ static inline void save_vector_registers(void) · 403 unmodified lines
404#endif404#endif
405}405}
406 406
407static int __init topology_setup(char *str)
408{
409 bool enabled;
410 int rc;
411
412 rc = kstrtobool(str, &enabled);
413 if (!rc && !enabled)
414 S390_lowcore.machine_flags &= ~MACHINE_FLAG_TOPOLOGY;
415 return rc;
416}
417early_param("topology", topology_setup);
418
419static int __init disable_vector_extension(char *str)407static int __init disable_vector_extension(char *str)
420{408{
421 S390_lowcore.machine_flags &= ~MACHINE_FLAG_VX;409 S390_lowcore.machine_flags &= ~MACHINE_FLAG_VX;
arch/s390/kernel/perf_cpum_sf.c+6−3
@@ -823,9 +823,12 @@ static int cpumsf_pmu_event_init(struct perf_event *event) · 822 unmodified lines
823 }823 }
824 824
825 /* Check online status of the CPU to which the event is pinned */825 /* Check online status of the CPU to which the event is pinned */
826 if ((unsigned int)event->cpu >= nr_cpumask_bits ||826 if (event->cpu >= 0) {
827 (event->cpu >= 0 && !cpu_online(event->cpu)))827 if ((unsigned int)event->cpu >= nr_cpumask_bits)
828 return -ENODEV;828 return -ENODEV;
829 if (!cpu_online(event->cpu))
830 return -ENODEV;
831 }
829 832
830 /* Force reset of idle/hv excludes regardless of what the833 /* Force reset of idle/hv excludes regardless of what the
831 * user requested.834 * user requested.
arch/s390/kernel/topology.c+135−13
@@ -8,6 +8,8 @@ · 7 unmodified lines
8 8
9#include <linux/workqueue.h>9#include <linux/workqueue.h>
10#include <linux/bootmem.h>10#include <linux/bootmem.h>
11#include <linux/uaccess.h>
12#include <linux/sysctl.h>
11#include <linux/cpuset.h>13#include <linux/cpuset.h>
12#include <linux/device.h>14#include <linux/device.h>
13#include <linux/export.h>15#include <linux/export.h>
@@ -29,12 +31,20 @@ · 15 unmodified lines
29#define PTF_VERTICAL (1UL)31#define PTF_VERTICAL (1UL)
30#define PTF_CHECK (2UL)32#define PTF_CHECK (2UL)
31 33
34enum {
35 TOPOLOGY_MODE_HW,
36 TOPOLOGY_MODE_SINGLE,
37 TOPOLOGY_MODE_PACKAGE,
38 TOPOLOGY_MODE_UNINITIALIZED
39};
40
32struct mask_info {41struct mask_info {
33 struct mask_info *next;42 struct mask_info *next;
34 unsigned char id;43 unsigned char id;
35 cpumask_t mask;44 cpumask_t mask;
36};45};
37 46
47static int topology_mode = TOPOLOGY_MODE_UNINITIALIZED;
38static void set_topology_timer(void);48static void set_topology_timer(void);
39static void topology_work_fn(struct work_struct *work);49static void topology_work_fn(struct work_struct *work);
40static struct sysinfo_15_1_x *tl_info;50static struct sysinfo_15_1_x *tl_info;
@@ -59,11 +69,26 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) · 18 unmodified lines
59 cpumask_t mask;69 cpumask_t mask;
60 70
61 cpumask_copy(&mask, cpumask_of(cpu));71 cpumask_copy(&mask, cpumask_of(cpu));
62 if (!MACHINE_HAS_TOPOLOGY)72 switch (topology_mode) {
63 return mask;73 case TOPOLOGY_MODE_HW:
64 for (; info; info = info->next) {74 while (info) {
65 if (cpumask_test_cpu(cpu, &info->mask))75 if (cpumask_test_cpu(cpu, &info->mask)) {
66 return info->mask;76 mask = info->mask;
77 break;
78 }
79 info = info->next;
80 }
81 if (cpumask_empty(&mask))
82 cpumask_copy(&mask, cpumask_of(cpu));
83 break;
84 case TOPOLOGY_MODE_PACKAGE:
85 cpumask_copy(&mask, cpu_present_mask);
86 break;
87 default:
88 /* fallthrough */
89 case TOPOLOGY_MODE_SINGLE:
90 cpumask_copy(&mask, cpumask_of(cpu));
91 break;
67 }92 }
68 return mask;93 return mask;
69}94}
@@ -74,7 +99,7 @@ static cpumask_t cpu_thread_map(unsigned int cpu) · 4 unmodified lines
74 int i;99 int i;
75 100
76 cpumask_copy(&mask, cpumask_of(cpu));101 cpumask_copy(&mask, cpumask_of(cpu));
77 if (!MACHINE_HAS_TOPOLOGY)102 if (topology_mode != TOPOLOGY_MODE_HW)
78 return mask;103 return mask;
79 cpu -= cpu % (smp_cpu_mtid + 1);104 cpu -= cpu % (smp_cpu_mtid + 1);
80 for (i = 0; i <= smp_cpu_mtid; i++)105 for (i = 0; i <= smp_cpu_mtid; i++)
@@ -184,10 +209,8 @@ static void topology_update_polarization_simple(void) · 103 unmodified lines
184{209{
185 int cpu;210 int cpu;
186 211
187 mutex_lock(&smp_cpu_state_mutex);
188 for_each_possible_cpu(cpu)212 for_each_possible_cpu(cpu)
189 smp_cpu_set_polarization(cpu, POLARIZATION_HRZ);213 smp_cpu_set_polarization(cpu, POLARIZATION_HRZ);
190 mutex_unlock(&smp_cpu_state_mutex);
191}214}
192 215
193static int ptf(unsigned long fc)216static int ptf(unsigned long fc)
@@ -223,7 +246,7 @@ int topology_set_cpu_management(int fc) · 29 unmodified lines
223static void update_cpu_masks(void)246static void update_cpu_masks(void)
224{247{
225 struct cpu_topology_s390 *topo;248 struct cpu_topology_s390 *topo;
226 int cpu;249 int cpu, id;
227 250
228 for_each_possible_cpu(cpu) {251 for_each_possible_cpu(cpu) {
229 topo = &cpu_topology[cpu];252 topo = &cpu_topology[cpu];
@@ -231,12 +254,13 @@ static void update_cpu_masks(void) · 1 unmodified line
231 topo->core_mask = cpu_group_map(&socket_info, cpu);254 topo->core_mask = cpu_group_map(&socket_info, cpu);
232 topo->book_mask = cpu_group_map(&book_info, cpu);255 topo->book_mask = cpu_group_map(&book_info, cpu);
233 topo->drawer_mask = cpu_group_map(&drawer_info, cpu);256 topo->drawer_mask = cpu_group_map(&drawer_info, cpu);
234 if (!MACHINE_HAS_TOPOLOGY) {257 if (topology_mode != TOPOLOGY_MODE_HW) {
258 id = topology_mode == TOPOLOGY_MODE_PACKAGE ? 0 : cpu;
235 topo->thread_id = cpu;259 topo->thread_id = cpu;
236 topo->core_id = cpu;260 topo->core_id = cpu;
237 topo->socket_id = cpu;261 topo->socket_id = id;
238 topo->book_id = cpu;262 topo->book_id = id;
239 topo->drawer_id = cpu;263 topo->drawer_id = id;
240 if (cpu_present(cpu))264 if (cpu_present(cpu))
241 cpumask_set_cpu(cpu, &cpus_with_topology);265 cpumask_set_cpu(cpu, &cpus_with_topology);
242 }266 }
@@ -254,6 +278,7 @@ static int __arch_update_cpu_topology(void) · 11 unmodified lines
254 struct sysinfo_15_1_x *info = tl_info;278 struct sysinfo_15_1_x *info = tl_info;
255 int rc = 0;279 int rc = 0;
256 280
281 mutex_lock(&smp_cpu_state_mutex);
257 cpumask_clear(&cpus_with_topology);282 cpumask_clear(&cpus_with_topology);
258 if (MACHINE_HAS_TOPOLOGY) {283 if (MACHINE_HAS_TOPOLOGY) {
259 rc = 1;284 rc = 1;
@@ -263,6 +288,7 @@ static int __arch_update_cpu_topology(void) · 3 unmodified lines
263 update_cpu_masks();288 update_cpu_masks();
264 if (!MACHINE_HAS_TOPOLOGY)289 if (!MACHINE_HAS_TOPOLOGY)
265 topology_update_polarization_simple();290 topology_update_polarization_simple();
291 mutex_unlock(&smp_cpu_state_mutex);
266 return rc;292 return rc;
267}293}
268 294
@@ -289,6 +315,11 @@ void topology_schedule_update(void) · 20 unmodified lines
289 schedule_work(&topology_work);315 schedule_work(&topology_work);
290}316}
291 317
318static void topology_flush_work(void)
319{
320 flush_work(&topology_work);
321}
322
292static void topology_timer_fn(unsigned long ignored)323static void topology_timer_fn(unsigned long ignored)
293{324{
294 if (ptf(PTF_CHECK))325 if (ptf(PTF_CHECK))
@@ -459,6 +490,12 @@ void __init topology_init_early(void) · 164 unmodified lines
459 struct sysinfo_15_1_x *info;490 struct sysinfo_15_1_x *info;
460 491
461 set_sched_topology(s390_topology);492 set_sched_topology(s390_topology);
493 if (topology_mode == TOPOLOGY_MODE_UNINITIALIZED) {
494 if (MACHINE_HAS_TOPOLOGY)
495 topology_mode = TOPOLOGY_MODE_HW;
496 else
497 topology_mode = TOPOLOGY_MODE_SINGLE;
498 }
462 if (!MACHINE_HAS_TOPOLOGY)499 if (!MACHINE_HAS_TOPOLOGY)
463 goto out;500 goto out;
464 tl_info = memblock_virt_alloc(PAGE_SIZE, PAGE_SIZE);501 tl_info = memblock_virt_alloc(PAGE_SIZE, PAGE_SIZE);
@@ -474,12 +511,97 @@ out: · 9 unmodified lines
474 __arch_update_cpu_topology();511 __arch_update_cpu_topology();
475}512}
476 513
514static inline int topology_get_mode(int enabled)
515{
516 if (!enabled)
517 return TOPOLOGY_MODE_SINGLE;
518 return MACHINE_HAS_TOPOLOGY ? TOPOLOGY_MODE_HW : TOPOLOGY_MODE_PACKAGE;
519}
520
521static inline int topology_is_enabled(void)
522{
523 return topology_mode != TOPOLOGY_MODE_SINGLE;
524}
525
526static int __init topology_setup(char *str)
527{
528 bool enabled;
529 int rc;
530
531 rc = kstrtobool(str, &enabled);
532 if (rc)
533 return rc;
534 topology_mode = topology_get_mode(enabled);
535 return 0;
536}
537early_param("topology", topology_setup);
538
539static int topology_ctl_handler(struct ctl_table *ctl, int write,
540 void __user *buffer, size_t *lenp, loff_t *ppos)
541{
542 unsigned int len;
543 int new_mode;
544 char buf[2];
545
546 if (!*lenp || *ppos) {
547 *lenp = 0;
548 return 0;
549 }
550 if (!write) {
551 strncpy(buf, topology_is_enabled() ? "1\n" : "0\n",
552 ARRAY_SIZE(buf));
553 len = strnlen(buf, ARRAY_SIZE(buf));
554 if (len > *lenp)
555 len = *lenp;
556 if (copy_to_user(buffer, buf, len))
557 return -EFAULT;
558 goto out;
559 }
560 len = *lenp;
561 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len))
562 return -EFAULT;
563 if (buf[0] != '0' && buf[0] != '1')
564 return -EINVAL;
565 mutex_lock(&smp_cpu_state_mutex);
566 new_mode = topology_get_mode(buf[0] == '1');
567 if (topology_mode != new_mode) {
568 topology_mode = new_mode;
569 topology_schedule_update();
570 }
571 mutex_unlock(&smp_cpu_state_mutex);
572 topology_flush_work();
573out:
574 *lenp = len;
575 *ppos += len;
576 return 0;
577}
578
579static struct ctl_table topology_ctl_table[] = {
580 {
581 .procname = "topology",
582 .mode = 0644,
583 .proc_handler = topology_ctl_handler,
584 },
585 { },
586};
587
588static struct ctl_table topology_dir_table[] = {
589 {
590 .procname = "s390",
591 .maxlen = 0,
592 .mode = 0555,
593 .child = topology_ctl_table,
594 },
595 { },
596};
597
477static int __init topology_init(void)598static int __init topology_init(void)
478{599{
479 if (MACHINE_HAS_TOPOLOGY)600 if (MACHINE_HAS_TOPOLOGY)
480 set_topology_timer();601 set_topology_timer();
481 else602 else
482 topology_update_polarization_simple();603 topology_update_polarization_simple();
604 register_sysctl_table(topology_dir_table);
483 return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching);605 return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching);
484}606}
485device_initcall(topology_init);607device_initcall(topology_init);
arch/s390/mm/gup.c+3−4
@@ -56,13 +56,12 @@ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr, · 55 unmodified lines
56static inline int gup_huge_pmd(pmd_t *pmdp, pmd_t pmd, unsigned long addr,56static inline int gup_huge_pmd(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
57 unsigned long end, int write, struct page **pages, int *nr)57 unsigned long end, int write, struct page **pages, int *nr)
58{58{
59 unsigned long mask, result;
60 struct page *head, *page;59 struct page *head, *page;
60 unsigned long mask;
61 int refs;61 int refs;
62 62
63 result = write ? 0 : _SEGMENT_ENTRY_PROTECT;63 mask = (write ? _SEGMENT_ENTRY_PROTECT : 0) | _SEGMENT_ENTRY_INVALID;
64 mask = result | _SEGMENT_ENTRY_INVALID;64 if ((pmd_val(pmd) & mask) != 0)
65 if ((pmd_val(pmd) & mask) != result)
66 return 0;65 return 0;
67 VM_BUG_ON(!pfn_valid(pmd_val(pmd) >> PAGE_SHIFT));66 VM_BUG_ON(!pfn_valid(pmd_val(pmd) >> PAGE_SHIFT));
68 67
arch/sh/include/asm/processor_32.h+0−4
@@ -136,10 +136,6 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_pc, unsigned lo · 135 unmodified lines
136/* Free all resources held by a thread. */136/* Free all resources held by a thread. */
137extern void release_thread(struct task_struct *);137extern void release_thread(struct task_struct *);
138 138
139/* Copy and release all segment info associated with a VM */
140#define copy_segments(p, mm) do { } while(0)
141#define release_segments(mm) do { } while(0)
142
143/*139/*
144 * FPU lazy state save handling.140 * FPU lazy state save handling.
145 */141 */
arch/sh/include/asm/processor_64.h+0−4
@@ -170,10 +170,6 @@ struct mm_struct; · 169 unmodified lines
170/* Free all resources held by a thread. */170/* Free all resources held by a thread. */
171extern void release_thread(struct task_struct *);171extern void release_thread(struct task_struct *);
172 172
173/* Copy and release all segment info associated with a VM */
174#define copy_segments(p, mm) do { } while (0)
175#define release_segments(mm) do { } while (0)
176#define forget_segments() do { } while (0)
177/*173/*
178 * FPU lazy state save handling.174 * FPU lazy state save handling.
179 */175 */
arch/sh/include/cpu-sh2a/cpu/sh7264.h+1−3
@@ -43,9 +43,7 @@ enum { · 42 unmodified lines
43 GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4,43 GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4,
44 GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0,44 GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0,
45 45
46 /* Port H */46 /* Port H - Port H does not have a Data Register */
47 GPIO_PH7, GPIO_PH6, GPIO_PH5, GPIO_PH4,
48 GPIO_PH3, GPIO_PH2, GPIO_PH1, GPIO_PH0,
49 47
50 /* Port I - not on device */48 /* Port I - not on device */
51 49
arch/sh/include/cpu-sh2a/cpu/sh7269.h+1−3
@@ -45,9 +45,7 @@ enum { · 44 unmodified lines
45 GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4,45 GPIO_PG7, GPIO_PG6, GPIO_PG5, GPIO_PG4,
46 GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0,46 GPIO_PG3, GPIO_PG2, GPIO_PG1, GPIO_PG0,
47 47
48 /* Port H */48 /* Port H - Port H does not have a Data Register */
49 GPIO_PH7, GPIO_PH6, GPIO_PH5, GPIO_PH4,
50 GPIO_PH3, GPIO_PH2, GPIO_PH1, GPIO_PH0,
51 49
52 /* Port I - not on device */50 /* Port I - not on device */
53 51
arch/sh/include/cpu-sh4/cpu/sh7722.h+1−1
@@ -67,7 +67,7 @@ enum { · 66 unmodified lines
67 GPIO_PTN3, GPIO_PTN2, GPIO_PTN1, GPIO_PTN0,67 GPIO_PTN3, GPIO_PTN2, GPIO_PTN1, GPIO_PTN0,
68 68
69 /* PTQ */69 /* PTQ */
70 GPIO_PTQ7, GPIO_PTQ6, GPIO_PTQ5, GPIO_PTQ4,70 GPIO_PTQ6, GPIO_PTQ5, GPIO_PTQ4,
71 GPIO_PTQ3, GPIO_PTQ2, GPIO_PTQ1, GPIO_PTQ0,71 GPIO_PTQ3, GPIO_PTQ2, GPIO_PTQ1, GPIO_PTQ0,
72 72
73 /* PTR */73 /* PTR */
arch/sh/include/cpu-sh4/cpu/sh7757.h+4−4
@@ -40,7 +40,7 @@ enum { · 39 unmodified lines
40 40
41 /* PTJ */41 /* PTJ */
42 GPIO_PTJ0, GPIO_PTJ1, GPIO_PTJ2, GPIO_PTJ3,42 GPIO_PTJ0, GPIO_PTJ1, GPIO_PTJ2, GPIO_PTJ3,
43 GPIO_PTJ4, GPIO_PTJ5, GPIO_PTJ6, GPIO_PTJ7_RESV,43 GPIO_PTJ4, GPIO_PTJ5, GPIO_PTJ6,
44 44
45 /* PTK */45 /* PTK */
46 GPIO_PTK0, GPIO_PTK1, GPIO_PTK2, GPIO_PTK3,46 GPIO_PTK0, GPIO_PTK1, GPIO_PTK2, GPIO_PTK3,
@@ -48,7 +48,7 @@ enum { · 1 unmodified line
48 48
49 /* PTL */49 /* PTL */
50 GPIO_PTL0, GPIO_PTL1, GPIO_PTL2, GPIO_PTL3,50 GPIO_PTL0, GPIO_PTL1, GPIO_PTL2, GPIO_PTL3,
51 GPIO_PTL4, GPIO_PTL5, GPIO_PTL6, GPIO_PTL7_RESV,51 GPIO_PTL4, GPIO_PTL5, GPIO_PTL6,
52 52
53 /* PTM */53 /* PTM */
54 GPIO_PTM0, GPIO_PTM1, GPIO_PTM2, GPIO_PTM3,54 GPIO_PTM0, GPIO_PTM1, GPIO_PTM2, GPIO_PTM3,
@@ -56,7 +56,7 @@ enum { · 1 unmodified line
56 56
57 /* PTN */57 /* PTN */
58 GPIO_PTN0, GPIO_PTN1, GPIO_PTN2, GPIO_PTN3,58 GPIO_PTN0, GPIO_PTN1, GPIO_PTN2, GPIO_PTN3,
59 GPIO_PTN4, GPIO_PTN5, GPIO_PTN6, GPIO_PTN7_RESV,59 GPIO_PTN4, GPIO_PTN5, GPIO_PTN6,
60 60
61 /* PTO */61 /* PTO */
62 GPIO_PTO0, GPIO_PTO1, GPIO_PTO2, GPIO_PTO3,62 GPIO_PTO0, GPIO_PTO1, GPIO_PTO2, GPIO_PTO3,
@@ -68,7 +68,7 @@ enum { · 5 unmodified lines
68 68
69 /* PTQ */69 /* PTQ */
70 GPIO_PTQ0, GPIO_PTQ1, GPIO_PTQ2, GPIO_PTQ3,70 GPIO_PTQ0, GPIO_PTQ1, GPIO_PTQ2, GPIO_PTQ3,
71 GPIO_PTQ4, GPIO_PTQ5, GPIO_PTQ6, GPIO_PTQ7_RESV,71 GPIO_PTQ4, GPIO_PTQ5, GPIO_PTQ6,
72 72
73 /* PTR */73 /* PTR */
74 GPIO_PTR0, GPIO_PTR1, GPIO_PTR2, GPIO_PTR3,74 GPIO_PTR0, GPIO_PTR1, GPIO_PTR2, GPIO_PTR3,
arch/tile/configs/tilegx_defconfig+0−1
@@ -409,5 +409,4 @@ CONFIG_CRYPTO_SEED=m · 408 unmodified lines
409CONFIG_CRYPTO_SERPENT=m409CONFIG_CRYPTO_SERPENT=m
410CONFIG_CRYPTO_TEA=m410CONFIG_CRYPTO_TEA=m
411CONFIG_CRYPTO_TWOFISH=m411CONFIG_CRYPTO_TWOFISH=m
412CONFIG_CRYPTO_ZLIB=m
413CONFIG_CRYPTO_LZO=m412CONFIG_CRYPTO_LZO=m
arch/tile/configs/tilepro_defconfig+0−2
@@ -189,7 +189,6 @@ CONFIG_IP_NF_MATCH_ECN=m · 188 unmodified lines
189CONFIG_IP_NF_MATCH_TTL=m189CONFIG_IP_NF_MATCH_TTL=m
190CONFIG_IP_NF_FILTER=y190CONFIG_IP_NF_FILTER=y
191CONFIG_IP_NF_TARGET_REJECT=y191CONFIG_IP_NF_TARGET_REJECT=y
192CONFIG_IP_NF_TARGET_ULOG=m
193CONFIG_IP_NF_MANGLE=m192CONFIG_IP_NF_MANGLE=m
194CONFIG_IP_NF_TARGET_ECN=m193CONFIG_IP_NF_TARGET_ECN=m
195CONFIG_IP_NF_TARGET_TTL=m194CONFIG_IP_NF_TARGET_TTL=m
@@ -521,7 +520,6 @@ CONFIG_CRYPTO_SEED=m · 325 unmodified lines
521CONFIG_CRYPTO_SERPENT=m520CONFIG_CRYPTO_SERPENT=m
522CONFIG_CRYPTO_TEA=m521CONFIG_CRYPTO_TEA=m
523CONFIG_CRYPTO_TWOFISH=m522CONFIG_CRYPTO_TWOFISH=m
524CONFIG_CRYPTO_ZLIB=m
525CONFIG_CRYPTO_LZO=m523CONFIG_CRYPTO_LZO=m
526CONFIG_CRC_CCITT=m524CONFIG_CRC_CCITT=m
527CONFIG_CRC7=m525CONFIG_CRC7=m
arch/tile/kernel/setup.c+1−1
@@ -140,7 +140,7 @@ static int __init setup_maxnodemem(char *str) · 139 unmodified lines
140{140{
141 char *endp;141 char *endp;
142 unsigned long long maxnodemem;142 unsigned long long maxnodemem;
143 long node;143 unsigned long node;
144 144
145 node = str ? simple_strtoul(str, &endp, 0) : INT_MAX;145 node = str ? simple_strtoul(str, &endp, 0) : INT_MAX;
146 if (node >= MAX_NUMNODES || *endp != ':')146 if (node >= MAX_NUMNODES || *endp != ':')
arch/um/include/asm/processor-generic.h+0−5
@@ -58,11 +58,6 @@ static inline void release_thread(struct task_struct *task) · 57 unmodified lines
58{58{
59}59}
60 60
61static inline void mm_copy_segments(struct mm_struct *from_mm,
62 struct mm_struct *new_mm)
63{
64}
65
66#define init_stack (init_thread_union.stack)61#define init_stack (init_thread_union.stack)
67 62
68/*63/*
arch/um/kernel/time.c+2−2
@@ -98,7 +98,7 @@ static struct clocksource timer_clocksource = { · 97 unmodified lines
98 .flags = CLOCK_SOURCE_IS_CONTINUOUS,98 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
99};99};
100 100
101static void __init timer_setup(void)101static void __init um_timer_setup(void)
102{102{
103 int err;103 int err;
104 104
@@ -132,5 +132,5 @@ void read_persistent_clock(struct timespec *ts) · 27 unmodified lines
132void __init time_init(void)132void __init time_init(void)
133{133{
134 timer_set_signal_handler();134 timer_set_signal_handler();
135 late_time_init = timer_setup;135 late_time_init = um_timer_setup;
136}136}
arch/x86/crypto/blowfish-x86_64-asm_64.S+26−22
@@ -33,7 +33,7 @@ · 32 unmodified lines
33#define s3 ((16 + 2 + (3 * 256)) * 4)33#define s3 ((16 + 2 + (3 * 256)) * 4)
34 34
35/* register macros */35/* register macros */
36#define CTX %rdi36#define CTX %r12
37#define RIO %rsi37#define RIO %rsi
38 38
39#define RX0 %rax39#define RX0 %rax
@@ -56,12 +56,12 @@ · 16 unmodified lines
56#define RX2bh %ch56#define RX2bh %ch
57#define RX3bh %dh57#define RX3bh %dh
58 58
59#define RT0 %rbp59#define RT0 %rdi
60#define RT1 %rsi60#define RT1 %rsi
61#define RT2 %r861#define RT2 %r8
62#define RT3 %r962#define RT3 %r9
63 63
64#define RT0d %ebp64#define RT0d %edi
65#define RT1d %esi65#define RT1d %esi
66#define RT2d %r8d66#define RT2d %r8d
67#define RT3d %r9d67#define RT3d %r9d
@@ -120,13 +120,14 @@ · 52 unmodified lines
120 120
121ENTRY(__blowfish_enc_blk)121ENTRY(__blowfish_enc_blk)
122 /* input:122 /* input:
123 * %rdi: ctx, CTX123 * %rdi: ctx
124 * %rsi: dst124 * %rsi: dst
125 * %rdx: src125 * %rdx: src
126 * %rcx: bool, if true: xor output126 * %rcx: bool, if true: xor output
127 */127 */
128 movq %rbp, %r11;128 movq %r12, %r11;
129 129
130 movq %rdi, CTX;
130 movq %rsi, %r10;131 movq %rsi, %r10;
131 movq %rdx, RIO;132 movq %rdx, RIO;
132 133
@@ -142,7 +143,7 @@ ENTRY(__blowfish_enc_blk) · 9 unmodified lines
142 round_enc(14);143 round_enc(14);
143 add_roundkey_enc(16);144 add_roundkey_enc(16);
144 145
145 movq %r11, %rbp;146 movq %r11, %r12;
146 147
147 movq %r10, RIO;148 movq %r10, RIO;
148 test %cl, %cl;149 test %cl, %cl;
@@ -157,12 +158,13 @@ ENDPROC(__blowfish_enc_blk) · 8 unmodified lines
157 158
158ENTRY(blowfish_dec_blk)159ENTRY(blowfish_dec_blk)
159 /* input:160 /* input:
160 * %rdi: ctx, CTX161 * %rdi: ctx
161 * %rsi: dst162 * %rsi: dst
162 * %rdx: src163 * %rdx: src
163 */164 */
164 movq %rbp, %r11;165 movq %r12, %r11;
165 166
167 movq %rdi, CTX;
166 movq %rsi, %r10;168 movq %rsi, %r10;
167 movq %rdx, RIO;169 movq %rdx, RIO;
168 170
@@ -181,7 +183,7 @@ ENTRY(blowfish_dec_blk) · 12 unmodified lines
181 movq %r10, RIO;183 movq %r10, RIO;
182 write_block();184 write_block();
183 185
184 movq %r11, %rbp;186 movq %r11, %r12;
185 187
186 ret;188 ret;
187ENDPROC(blowfish_dec_blk)189ENDPROC(blowfish_dec_blk)
@@ -298,20 +300,21 @@ ENDPROC(blowfish_dec_blk) · 110 unmodified lines
298 300
299ENTRY(__blowfish_enc_blk_4way)301ENTRY(__blowfish_enc_blk_4way)
300 /* input:302 /* input:
301 * %rdi: ctx, CTX303 * %rdi: ctx
302 * %rsi: dst304 * %rsi: dst
303 * %rdx: src305 * %rdx: src
304 * %rcx: bool, if true: xor output306 * %rcx: bool, if true: xor output
305 */307 */
306 pushq %rbp;308 pushq %r12;
307 pushq %rbx;309 pushq %rbx;
308 pushq %rcx;310 pushq %rcx;
309 311
310 preload_roundkey_enc(0);312 movq %rdi, CTX
311
312 movq %rsi, %r11;313 movq %rsi, %r11;
313 movq %rdx, RIO;314 movq %rdx, RIO;
314 315
316 preload_roundkey_enc(0);
317
315 read_block4();318 read_block4();
316 319
317 round_enc4(0);320 round_enc4(0);
@@ -324,39 +327,40 @@ ENTRY(__blowfish_enc_blk_4way) · 6 unmodified lines
324 round_enc4(14);327 round_enc4(14);
325 add_preloaded_roundkey4();328 add_preloaded_roundkey4();
326 329
327 popq %rbp;330 popq %r12;
328 movq %r11, RIO;331 movq %r11, RIO;
329 332
330 test %bpl, %bpl;333 test %r12b, %r12b;
331 jnz .L__enc_xor4;334 jnz .L__enc_xor4;
332 335
333 write_block4();336 write_block4();
334 337
335 popq %rbx;338 popq %rbx;
336 popq %rbp;339 popq %r12;
337 ret;340 ret;
338 341
339.L__enc_xor4:342.L__enc_xor4:
340 xor_block4();343 xor_block4();
341 344
342 popq %rbx;345 popq %rbx;
343 popq %rbp;346 popq %r12;
344 ret;347 ret;
345ENDPROC(__blowfish_enc_blk_4way)348ENDPROC(__blowfish_enc_blk_4way)
346 349
347ENTRY(blowfish_dec_blk_4way)350ENTRY(blowfish_dec_blk_4way)
348 /* input:351 /* input:
349 * %rdi: ctx, CTX352 * %rdi: ctx
350 * %rsi: dst353 * %rsi: dst
351 * %rdx: src354 * %rdx: src
352 */355 */
353 pushq %rbp;356 pushq %r12;
354 pushq %rbx;357 pushq %rbx;
355 preload_roundkey_dec(17);
356 358
357 movq %rsi, %r11;359 movq %rdi, CTX;
360 movq %rsi, %r11
358 movq %rdx, RIO;361 movq %rdx, RIO;
359 362
363 preload_roundkey_dec(17);
360 read_block4();364 read_block4();
361 365
362 round_dec4(17);366 round_dec4(17);
@@ -373,7 +377,7 @@ ENTRY(blowfish_dec_blk_4way) · 10 unmodified lines
373 write_block4();377 write_block4();
374 378
375 popq %rbx;379 popq %rbx;
376 popq %rbp;380 popq %r12;
377 381
378 ret;382 ret;
379ENDPROC(blowfish_dec_blk_4way)383ENDPROC(blowfish_dec_blk_4way)
arch/x86/crypto/camellia-x86_64-asm_64.S+13−13
@@ -75,17 +75,17 @@ · 74 unmodified lines
75#define RCD1bh %dh75#define RCD1bh %dh
76 76
77#define RT0 %rsi77#define RT0 %rsi
78#define RT1 %rbp78#define RT1 %r12
79#define RT2 %r879#define RT2 %r8
80 80
81#define RT0d %esi81#define RT0d %esi
82#define RT1d %ebp82#define RT1d %r12d
83#define RT2d %r8d83#define RT2d %r8d
84 84
85#define RT2bl %r8b85#define RT2bl %r8b
86 86
87#define RXOR %r987#define RXOR %r9
88#define RRBP %r1088#define RR12 %r10
89#define RDST %r1189#define RDST %r11
90 90
91#define RXORd %r9d91#define RXORd %r9d
@@ -197,7 +197,7 @@ ENTRY(__camellia_enc_blk) · 105 unmodified lines
197 * %rdx: src197 * %rdx: src
198 * %rcx: bool xor198 * %rcx: bool xor
199 */199 */
200 movq %rbp, RRBP;200 movq %r12, RR12;
201 201
202 movq %rcx, RXOR;202 movq %rcx, RXOR;
203 movq %rsi, RDST;203 movq %rsi, RDST;
@@ -227,13 +227,13 @@ ENTRY(__camellia_enc_blk) · 23 unmodified lines
227 227
228 enc_outunpack(mov, RT1);228 enc_outunpack(mov, RT1);
229 229
230 movq RRBP, %rbp;230 movq RR12, %r12;
231 ret;231 ret;
232 232
233.L__enc_xor:233.L__enc_xor:
234 enc_outunpack(xor, RT1);234 enc_outunpack(xor, RT1);
235 235
236 movq RRBP, %rbp;236 movq RR12, %r12;
237 ret;237 ret;
238ENDPROC(__camellia_enc_blk)238ENDPROC(__camellia_enc_blk)
239 239
@@ -248,7 +248,7 @@ ENTRY(camellia_dec_blk) · 8 unmodified lines
248 movl $24, RXORd;248 movl $24, RXORd;
249 cmovel RXORd, RT2d; /* max */249 cmovel RXORd, RT2d; /* max */
250 250
251 movq %rbp, RRBP;251 movq %r12, RR12;
252 movq %rsi, RDST;252 movq %rsi, RDST;
253 movq %rdx, RIO;253 movq %rdx, RIO;
254 254
@@ -271,7 +271,7 @@ ENTRY(camellia_dec_blk) · 16 unmodified lines
271 271
272 dec_outunpack();272 dec_outunpack();
273 273
274 movq RRBP, %rbp;274 movq RR12, %r12;
275 ret;275 ret;
276ENDPROC(camellia_dec_blk)276ENDPROC(camellia_dec_blk)
277 277
@@ -433,7 +433,7 @@ ENTRY(__camellia_enc_blk_2way) · 155 unmodified lines
433 */433 */
434 pushq %rbx;434 pushq %rbx;
435 435
436 movq %rbp, RRBP;436 movq %r12, RR12;
437 movq %rcx, RXOR;437 movq %rcx, RXOR;
438 movq %rsi, RDST;438 movq %rsi, RDST;
439 movq %rdx, RIO;439 movq %rdx, RIO;
@@ -461,14 +461,14 @@ ENTRY(__camellia_enc_blk_2way) · 21 unmodified lines
461 461
462 enc_outunpack2(mov, RT2);462 enc_outunpack2(mov, RT2);
463 463
464 movq RRBP, %rbp;464 movq RR12, %r12;
465 popq %rbx;465 popq %rbx;
466 ret;466 ret;
467 467
468.L__enc2_xor:468.L__enc2_xor:
469 enc_outunpack2(xor, RT2);469 enc_outunpack2(xor, RT2);
470 470
471 movq RRBP, %rbp;471 movq RR12, %r12;
472 popq %rbx;472 popq %rbx;
473 ret;473 ret;
474ENDPROC(__camellia_enc_blk_2way)474ENDPROC(__camellia_enc_blk_2way)
@@ -485,7 +485,7 @@ ENTRY(camellia_dec_blk_2way) · 10 unmodified lines
485 cmovel RXORd, RT2d; /* max */485 cmovel RXORd, RT2d; /* max */
486 486
487 movq %rbx, RXOR;487 movq %rbx, RXOR;
488 movq %rbp, RRBP;488 movq %r12, RR12;
489 movq %rsi, RDST;489 movq %rsi, RDST;
490 movq %rdx, RIO;490 movq %rdx, RIO;
491 491
@@ -508,7 +508,7 @@ ENTRY(camellia_dec_blk_2way) · 16 unmodified lines
508 508
509 dec_outunpack2();509 dec_outunpack2();
510 510
511 movq RRBP, %rbp;511 movq RR12, %r12;
512 movq RXOR, %rbx;512 movq RXOR, %rbx;
513 ret;513 ret;
514ENDPROC(camellia_dec_blk_2way)514ENDPROC(camellia_dec_blk_2way)
arch/x86/crypto/cast5-avx-x86_64-asm_64.S+30−17
@@ -47,7 +47,7 @@ · 46 unmodified lines
47/**********************************************************************47/**********************************************************************
48 16-way AVX cast548 16-way AVX cast5
49 **********************************************************************/49 **********************************************************************/
50#define CTX %rdi50#define CTX %r15
51 51
52#define RL1 %xmm052#define RL1 %xmm0
53#define RR1 %xmm153#define RR1 %xmm1
@@ -70,8 +70,8 @@ · 16 unmodified lines
70 70
71#define RTMP %xmm1571#define RTMP %xmm15
72 72
73#define RID1 %rbp73#define RID1 %rdi
74#define RID1d %ebp74#define RID1d %edi
75#define RID2 %rsi75#define RID2 %rsi
76#define RID2d %esi76#define RID2d %esi
77 77
@@ -226,7 +226,7 @@ · 148 unmodified lines
226.align 16226.align 16
227__cast5_enc_blk16:227__cast5_enc_blk16:
228 /* input:228 /* input:
229 * %rdi: ctx, CTX229 * %rdi: ctx
230 * RL1: blocks 1 and 2230 * RL1: blocks 1 and 2
231 * RR1: blocks 3 and 4231 * RR1: blocks 3 and 4
232 * RL2: blocks 5 and 6232 * RL2: blocks 5 and 6
@@ -246,9 +246,11 @@ __cast5_enc_blk16: · 13 unmodified lines
246 * RR4: encrypted blocks 15 and 16246 * RR4: encrypted blocks 15 and 16
247 */247 */
248 248
249 pushq %rbp;249 pushq %r15;
250 pushq %rbx;250 pushq %rbx;
251 251
252 movq %rdi, CTX;
253
252 vmovdqa .Lbswap_mask, RKM;254 vmovdqa .Lbswap_mask, RKM;
253 vmovd .Lfirst_mask, R1ST;255 vmovd .Lfirst_mask, R1ST;
254 vmovd .L32_mask, R32;256 vmovd .L32_mask, R32;
@@ -283,7 +285,7 @@ __cast5_enc_blk16: · 28 unmodified lines
283 285
284.L__skip_enc:286.L__skip_enc:
285 popq %rbx;287 popq %rbx;
286 popq %rbp;288 popq %r15;
287 289
288 vmovdqa .Lbswap_mask, RKM;290 vmovdqa .Lbswap_mask, RKM;
289 291
@@ -298,7 +300,7 @@ ENDPROC(__cast5_enc_blk16) · 8 unmodified lines
298.align 16300.align 16
299__cast5_dec_blk16:301__cast5_dec_blk16:
300 /* input:302 /* input:
301 * %rdi: ctx, CTX303 * %rdi: ctx
302 * RL1: encrypted blocks 1 and 2304 * RL1: encrypted blocks 1 and 2
303 * RR1: encrypted blocks 3 and 4305 * RR1: encrypted blocks 3 and 4
304 * RL2: encrypted blocks 5 and 6306 * RL2: encrypted blocks 5 and 6
@@ -318,9 +320,11 @@ __cast5_dec_blk16: · 13 unmodified lines
318 * RR4: decrypted blocks 15 and 16320 * RR4: decrypted blocks 15 and 16
319 */321 */
320 322
321 pushq %rbp;323 pushq %r15;
322 pushq %rbx;324 pushq %rbx;
323 325
326 movq %rdi, CTX;
327
324 vmovdqa .Lbswap_mask, RKM;328 vmovdqa .Lbswap_mask, RKM;
325 vmovd .Lfirst_mask, R1ST;329 vmovd .Lfirst_mask, R1ST;
326 vmovd .L32_mask, R32;330 vmovd .L32_mask, R32;
@@ -356,7 +360,7 @@ __cast5_dec_blk16: · 29 unmodified lines
356 360
357 vmovdqa .Lbswap_mask, RKM;361 vmovdqa .Lbswap_mask, RKM;
358 popq %rbx;362 popq %rbx;
359 popq %rbp;363 popq %r15;
360 364
361 outunpack_blocks(RR1, RL1, RTMP, RX, RKM);365 outunpack_blocks(RR1, RL1, RTMP, RX, RKM);
362 outunpack_blocks(RR2, RL2, RTMP, RX, RKM);366 outunpack_blocks(RR2, RL2, RTMP, RX, RKM);
@@ -372,12 +376,14 @@ ENDPROC(__cast5_dec_blk16) · 9 unmodified lines
372 376
373ENTRY(cast5_ecb_enc_16way)377ENTRY(cast5_ecb_enc_16way)
374 /* input:378 /* input:
375 * %rdi: ctx, CTX379 * %rdi: ctx
376 * %rsi: dst380 * %rsi: dst
377 * %rdx: src381 * %rdx: src
378 */382 */
379 FRAME_BEGIN383 FRAME_BEGIN
384 pushq %r15;
380 385
386 movq %rdi, CTX;
381 movq %rsi, %r11;387 movq %rsi, %r11;
382 388
383 vmovdqu (0*4*4)(%rdx), RL1;389 vmovdqu (0*4*4)(%rdx), RL1;
@@ -400,18 +406,22 @@ ENTRY(cast5_ecb_enc_16way) · 16 unmodified lines
400 vmovdqu RR4, (6*4*4)(%r11);406 vmovdqu RR4, (6*4*4)(%r11);
401 vmovdqu RL4, (7*4*4)(%r11);407 vmovdqu RL4, (7*4*4)(%r11);
402 408
409 popq %r15;
403 FRAME_END410 FRAME_END
404 ret;411 ret;
405ENDPROC(cast5_ecb_enc_16way)412ENDPROC(cast5_ecb_enc_16way)
406 413
407ENTRY(cast5_ecb_dec_16way)414ENTRY(cast5_ecb_dec_16way)
408 /* input:415 /* input:
409 * %rdi: ctx, CTX416 * %rdi: ctx
410 * %rsi: dst417 * %rsi: dst
411 * %rdx: src418 * %rdx: src
412 */419 */
413 420
414 FRAME_BEGIN421 FRAME_BEGIN
422 pushq %r15;
423
424 movq %rdi, CTX;
415 movq %rsi, %r11;425 movq %rsi, %r11;
416 426
417 vmovdqu (0*4*4)(%rdx), RL1;427 vmovdqu (0*4*4)(%rdx), RL1;
@@ -434,20 +444,22 @@ ENTRY(cast5_ecb_dec_16way) · 16 unmodified lines
434 vmovdqu RR4, (6*4*4)(%r11);444 vmovdqu RR4, (6*4*4)(%r11);
435 vmovdqu RL4, (7*4*4)(%r11);445 vmovdqu RL4, (7*4*4)(%r11);
436 446
447 popq %r15;
437 FRAME_END448 FRAME_END
438 ret;449 ret;
439ENDPROC(cast5_ecb_dec_16way)450ENDPROC(cast5_ecb_dec_16way)
440 451
441ENTRY(cast5_cbc_dec_16way)452ENTRY(cast5_cbc_dec_16way)
442 /* input:453 /* input:
443 * %rdi: ctx, CTX454 * %rdi: ctx
444 * %rsi: dst455 * %rsi: dst
445 * %rdx: src456 * %rdx: src
446 */457 */
447 FRAME_BEGIN458 FRAME_BEGIN
448
449 pushq %r12;459 pushq %r12;
460 pushq %r15;
450 461
462 movq %rdi, CTX;
451 movq %rsi, %r11;463 movq %rsi, %r11;
452 movq %rdx, %r12;464 movq %rdx, %r12;
453 465
@@ -483,23 +495,24 @@ ENTRY(cast5_cbc_dec_16way) · 29 unmodified lines
483 vmovdqu RR4, (6*16)(%r11);495 vmovdqu RR4, (6*16)(%r11);
484 vmovdqu RL4, (7*16)(%r11);496 vmovdqu RL4, (7*16)(%r11);
485 497
498 popq %r15;
486 popq %r12;499 popq %r12;
487
488 FRAME_END500 FRAME_END
489 ret;501 ret;
490ENDPROC(cast5_cbc_dec_16way)502ENDPROC(cast5_cbc_dec_16way)
491 503
492ENTRY(cast5_ctr_16way)504ENTRY(cast5_ctr_16way)
493 /* input:505 /* input:
494 * %rdi: ctx, CTX506 * %rdi: ctx
495 * %rsi: dst507 * %rsi: dst
496 * %rdx: src508 * %rdx: src
497 * %rcx: iv (big endian, 64bit)509 * %rcx: iv (big endian, 64bit)
498 */510 */
499 FRAME_BEGIN511 FRAME_BEGIN
500
501 pushq %r12;512 pushq %r12;
513 pushq %r15;
502 514
515 movq %rdi, CTX;
503 movq %rsi, %r11;516 movq %rsi, %r11;
504 movq %rdx, %r12;517 movq %rdx, %r12;
505 518
@@ -558,8 +571,8 @@ ENTRY(cast5_ctr_16way) · 52 unmodified lines
558 vmovdqu RR4, (6*16)(%r11);571 vmovdqu RR4, (6*16)(%r11);
559 vmovdqu RL4, (7*16)(%r11);572 vmovdqu RL4, (7*16)(%r11);
560 573
574 popq %r15;
561 popq %r12;575 popq %r12;
562
563 FRAME_END576 FRAME_END
564 ret;577 ret;
565ENDPROC(cast5_ctr_16way)578ENDPROC(cast5_ctr_16way)
arch/x86/crypto/cast6-avx-x86_64-asm_64.S+34−16
@@ -47,7 +47,7 @@ · 46 unmodified lines
47/**********************************************************************47/**********************************************************************
48 8-way AVX cast648 8-way AVX cast6
49 **********************************************************************/49 **********************************************************************/
50#define CTX %rdi50#define CTX %r15
51 51
52#define RA1 %xmm052#define RA1 %xmm0
53#define RB1 %xmm153#define RB1 %xmm1
@@ -70,8 +70,8 @@ · 16 unmodified lines
70 70
71#define RTMP %xmm1571#define RTMP %xmm15
72 72
73#define RID1 %rbp73#define RID1 %rdi
74#define RID1d %ebp74#define RID1d %edi
75#define RID2 %rsi75#define RID2 %rsi
76#define RID2d %esi76#define RID2d %esi
77 77
@@ -264,15 +264,17 @@ · 186 unmodified lines
264.align 8264.align 8
265__cast6_enc_blk8:265__cast6_enc_blk8:
266 /* input:266 /* input:
267 * %rdi: ctx, CTX267 * %rdi: ctx
268 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: blocks268 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: blocks
269 * output:269 * output:
270 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: encrypted blocks270 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: encrypted blocks
271 */271 */
272 272
273 pushq %rbp;273 pushq %r15;
274 pushq %rbx;274 pushq %rbx;
275 275
276 movq %rdi, CTX;
277
276 vmovdqa .Lbswap_mask, RKM;278 vmovdqa .Lbswap_mask, RKM;
277 vmovd .Lfirst_mask, R1ST;279 vmovd .Lfirst_mask, R1ST;
278 vmovd .L32_mask, R32;280 vmovd .L32_mask, R32;
@@ -297,7 +299,7 @@ __cast6_enc_blk8: · 18 unmodified lines
297 QBAR(11);299 QBAR(11);
298 300
299 popq %rbx;301 popq %rbx;
300 popq %rbp;302 popq %r15;
301 303
302 vmovdqa .Lbswap_mask, RKM;304 vmovdqa .Lbswap_mask, RKM;
303 305
@@ -310,15 +312,17 @@ ENDPROC(__cast6_enc_blk8) · 6 unmodified lines
310.align 8312.align 8
311__cast6_dec_blk8:313__cast6_dec_blk8:
312 /* input:314 /* input:
313 * %rdi: ctx, CTX315 * %rdi: ctx
314 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: encrypted blocks316 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: encrypted blocks
315 * output:317 * output:
316 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: decrypted blocks318 * RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2: decrypted blocks
317 */319 */
318 320
319 pushq %rbp;321 pushq %r15;
320 pushq %rbx;322 pushq %rbx;
321 323
324 movq %rdi, CTX;
325
322 vmovdqa .Lbswap_mask, RKM;326 vmovdqa .Lbswap_mask, RKM;
323 vmovd .Lfirst_mask, R1ST;327 vmovd .Lfirst_mask, R1ST;
324 vmovd .L32_mask, R32;328 vmovd .L32_mask, R32;
@@ -343,7 +347,7 @@ __cast6_dec_blk8: · 18 unmodified lines
343 QBAR(0);347 QBAR(0);
344 348
345 popq %rbx;349 popq %rbx;
346 popq %rbp;350 popq %r15;
347 351
348 vmovdqa .Lbswap_mask, RKM;352 vmovdqa .Lbswap_mask, RKM;
349 outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);353 outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
@@ -354,12 +358,14 @@ ENDPROC(__cast6_dec_blk8) · 4 unmodified lines
354 358
355ENTRY(cast6_ecb_enc_8way)359ENTRY(cast6_ecb_enc_8way)
356 /* input:360 /* input:
357 * %rdi: ctx, CTX361 * %rdi: ctx
358 * %rsi: dst362 * %rsi: dst
359 * %rdx: src363 * %rdx: src
360 */364 */
361 FRAME_BEGIN365 FRAME_BEGIN
366 pushq %r15;
362 367
368 movq %rdi, CTX;
363 movq %rsi, %r11;369 movq %rsi, %r11;
364 370
365 load_8way(%rdx, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);371 load_8way(%rdx, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -368,18 +374,21 @@ ENTRY(cast6_ecb_enc_8way) · 2 unmodified lines
368 374
369 store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);375 store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
370 376
377 popq %r15;
371 FRAME_END378 FRAME_END
372 ret;379 ret;
373ENDPROC(cast6_ecb_enc_8way)380ENDPROC(cast6_ecb_enc_8way)
374 381
375ENTRY(cast6_ecb_dec_8way)382ENTRY(cast6_ecb_dec_8way)
376 /* input:383 /* input:
377 * %rdi: ctx, CTX384 * %rdi: ctx
378 * %rsi: dst385 * %rsi: dst
379 * %rdx: src386 * %rdx: src
380 */387 */
381 FRAME_BEGIN388 FRAME_BEGIN
389 pushq %r15;
382 390
391 movq %rdi, CTX;
383 movq %rsi, %r11;392 movq %rsi, %r11;
384 393
385 load_8way(%rdx, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);394 load_8way(%rdx, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -388,20 +397,22 @@ ENTRY(cast6_ecb_dec_8way) · 2 unmodified lines
388 397
389 store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);398 store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
390 399
400 popq %r15;
391 FRAME_END401 FRAME_END
392 ret;402 ret;
393ENDPROC(cast6_ecb_dec_8way)403ENDPROC(cast6_ecb_dec_8way)
394 404
395ENTRY(cast6_cbc_dec_8way)405ENTRY(cast6_cbc_dec_8way)
396 /* input:406 /* input:
397 * %rdi: ctx, CTX407 * %rdi: ctx
398 * %rsi: dst408 * %rsi: dst
399 * %rdx: src409 * %rdx: src
400 */410 */
401 FRAME_BEGIN411 FRAME_BEGIN
402
403 pushq %r12;412 pushq %r12;
413 pushq %r15;
404 414
415 movq %rdi, CTX;
405 movq %rsi, %r11;416 movq %rsi, %r11;
406 movq %rdx, %r12;417 movq %rdx, %r12;
407 418
@@ -411,8 +422,8 @@ ENTRY(cast6_cbc_dec_8way) · 3 unmodified lines
411 422
412 store_cbc_8way(%r12, %r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);423 store_cbc_8way(%r12, %r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
413 424
425 popq %r15;
414 popq %r12;426 popq %r12;
415
416 FRAME_END427 FRAME_END
417 ret;428 ret;
418ENDPROC(cast6_cbc_dec_8way)429ENDPROC(cast6_cbc_dec_8way)
@@ -425,9 +436,10 @@ ENTRY(cast6_ctr_8way) · 6 unmodified lines
425 * %rcx: iv (little endian, 128bit)436 * %rcx: iv (little endian, 128bit)
426 */437 */
427 FRAME_BEGIN438 FRAME_BEGIN
428
429 pushq %r12;439 pushq %r12;
440 pushq %r15
430 441
442 movq %rdi, CTX;
431 movq %rsi, %r11;443 movq %rsi, %r11;
432 movq %rdx, %r12;444 movq %rdx, %r12;
433 445
@@ -438,8 +450,8 @@ ENTRY(cast6_ctr_8way) · 4 unmodified lines
438 450
439 store_ctr_8way(%r12, %r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);451 store_ctr_8way(%r12, %r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
440 452
453 popq %r15;
441 popq %r12;454 popq %r12;
442
443 FRAME_END455 FRAME_END
444 ret;456 ret;
445ENDPROC(cast6_ctr_8way)457ENDPROC(cast6_ctr_8way)
@@ -452,7 +464,9 @@ ENTRY(cast6_xts_enc_8way) · 6 unmodified lines
452 * %rcx: iv (t ⊕ αⁿ ∈ GF(2¹²⁸))464 * %rcx: iv (t ⊕ αⁿ ∈ GF(2¹²⁸))
453 */465 */
454 FRAME_BEGIN466 FRAME_BEGIN
467 pushq %r15;
455 468
469 movq %rdi, CTX
456 movq %rsi, %r11;470 movq %rsi, %r11;
457 471
458 /* regs <= src, dst <= IVs, regs <= regs xor IVs */472 /* regs <= src, dst <= IVs, regs <= regs xor IVs */
@@ -464,6 +478,7 @@ ENTRY(cast6_xts_enc_8way) · 5 unmodified lines
464 /* dst <= regs xor IVs(in dst) */478 /* dst <= regs xor IVs(in dst) */
465 store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);479 store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
466 480
481 popq %r15;
467 FRAME_END482 FRAME_END
468 ret;483 ret;
469ENDPROC(cast6_xts_enc_8way)484ENDPROC(cast6_xts_enc_8way)
@@ -476,7 +491,9 @@ ENTRY(cast6_xts_dec_8way) · 6 unmodified lines
476 * %rcx: iv (t ⊕ αⁿ ∈ GF(2¹²⁸))491 * %rcx: iv (t ⊕ αⁿ ∈ GF(2¹²⁸))
477 */492 */
478 FRAME_BEGIN493 FRAME_BEGIN
494 pushq %r15;
479 495
496 movq %rdi, CTX
480 movq %rsi, %r11;497 movq %rsi, %r11;
481 498
482 /* regs <= src, dst <= IVs, regs <= regs xor IVs */499 /* regs <= src, dst <= IVs, regs <= regs xor IVs */
@@ -488,6 +505,7 @@ ENTRY(cast6_xts_dec_8way) · 5 unmodified lines
488 /* dst <= regs xor IVs(in dst) */505 /* dst <= regs xor IVs(in dst) */
489 store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);506 store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
490 507
508 popq %r15;
491 FRAME_END509 FRAME_END
492 ret;510 ret;
493ENDPROC(cast6_xts_dec_8way)511ENDPROC(cast6_xts_dec_8way)
arch/x86/crypto/des3_ede-asm_64.S+9−6
@@ -64,12 +64,12 @@ · 63 unmodified lines
64#define RW2bh %ch64#define RW2bh %ch
65 65
66#define RT0 %r1566#define RT0 %r15
67#define RT1 %rbp67#define RT1 %rsi
68#define RT2 %r1468#define RT2 %r14
69#define RT3 %rdx69#define RT3 %rdx
70 70
71#define RT0d %r15d71#define RT0d %r15d
72#define RT1d %ebp72#define RT1d %esi
73#define RT2d %r14d73#define RT2d %r14d
74#define RT3d %edx74#define RT3d %edx
75 75
@@ -177,13 +177,14 @@ ENTRY(des3_ede_x86_64_crypt_blk) · 101 unmodified lines
177 * %rsi: dst177 * %rsi: dst
178 * %rdx: src178 * %rdx: src
179 */179 */
180 pushq %rbp;
181 pushq %rbx;180 pushq %rbx;
182 pushq %r12;181 pushq %r12;
183 pushq %r13;182 pushq %r13;
184 pushq %r14;183 pushq %r14;
185 pushq %r15;184 pushq %r15;
186 185
186 pushq %rsi; /* dst */
187
187 read_block(%rdx, RL0, RR0);188 read_block(%rdx, RL0, RR0);
188 initial_permutation(RL0, RR0);189 initial_permutation(RL0, RR0);
189 190
@@ -241,6 +242,8 @@ ENTRY(des3_ede_x86_64_crypt_blk) · 51 unmodified lines
241 round1(32+15, RL0, RR0, dummy2);242 round1(32+15, RL0, RR0, dummy2);
242 243
243 final_permutation(RR0, RL0);244 final_permutation(RR0, RL0);
245
246 popq %rsi /* dst */
244 write_block(%rsi, RR0, RL0);247 write_block(%rsi, RR0, RL0);
245 248
246 popq %r15;249 popq %r15;
@@ -248,7 +251,6 @@ ENTRY(des3_ede_x86_64_crypt_blk) · 1 unmodified line
248 popq %r13;251 popq %r13;
249 popq %r12;252 popq %r12;
250 popq %rbx;253 popq %rbx;
251 popq %rbp;
252 254
253 ret;255 ret;
254ENDPROC(des3_ede_x86_64_crypt_blk)256ENDPROC(des3_ede_x86_64_crypt_blk)
@@ -432,13 +434,14 @@ ENTRY(des3_ede_x86_64_crypt_blk_3way) · 177 unmodified lines
432 * %rdx: src (3 blocks)434 * %rdx: src (3 blocks)
433 */435 */
434 436
435 pushq %rbp;
436 pushq %rbx;437 pushq %rbx;
437 pushq %r12;438 pushq %r12;
438 pushq %r13;439 pushq %r13;
439 pushq %r14;440 pushq %r14;
440 pushq %r15;441 pushq %r15;
441 442
443 pushq %rsi /* dst */
444
442 /* load input */445 /* load input */
443 movl 0 * 4(%rdx), RL0d;446 movl 0 * 4(%rdx), RL0d;
444 movl 1 * 4(%rdx), RR0d;447 movl 1 * 4(%rdx), RR0d;
@@ -520,6 +523,7 @@ ENTRY(des3_ede_x86_64_crypt_blk_3way) · 75 unmodified lines
520 bswapl RR2d;523 bswapl RR2d;
521 bswapl RL2d;524 bswapl RL2d;
522 525
526 popq %rsi /* dst */
523 movl RR0d, 0 * 4(%rsi);527 movl RR0d, 0 * 4(%rsi);
524 movl RL0d, 1 * 4(%rsi);528 movl RL0d, 1 * 4(%rsi);
525 movl RR1d, 2 * 4(%rsi);529 movl RR1d, 2 * 4(%rsi);
@@ -532,7 +536,6 @@ ENTRY(des3_ede_x86_64_crypt_blk_3way) · 6 unmodified lines
532 popq %r13;536 popq %r13;
533 popq %r12;537 popq %r12;
534 popq %rbx;538 popq %rbx;
535 popq %rbp;
536 539
537 ret;540 ret;
538ENDPROC(des3_ede_x86_64_crypt_blk_3way)541ENDPROC(des3_ede_x86_64_crypt_blk_3way)
arch/x86/crypto/sha1_avx2_x86_64_asm.S+1−3
@@ -89,7 +89,7 @@ · 88 unmodified lines
89#define REG_RE %rdx89#define REG_RE %rdx
90#define REG_RTA %r1290#define REG_RTA %r12
91#define REG_RTB %rbx91#define REG_RTB %rbx
92#define REG_T1 %ebp92#define REG_T1 %r11d
93#define xmm_mov vmovups93#define xmm_mov vmovups
94#define avx2_zeroupper vzeroupper94#define avx2_zeroupper vzeroupper
95#define RND_F1 195#define RND_F1 1
@@ -637,7 +637,6 @@ _loop3: · 541 unmodified lines
637 ENTRY(\name)637 ENTRY(\name)
638 638
639 push %rbx639 push %rbx
640 push %rbp
641 push %r12640 push %r12
642 push %r13641 push %r13
643 push %r14642 push %r14
@@ -673,7 +672,6 @@ _loop3: · 29 unmodified lines
673 pop %r14672 pop %r14
674 pop %r13673 pop %r13
675 pop %r12674 pop %r12
676 pop %rbp
677 pop %rbx675 pop %rbx
678 676
679 ret677 ret
arch/x86/crypto/sha1_ssse3_asm.S+5−6
@@ -37,7 +37,7 @@ · 36 unmodified lines
37#define REG_A %ecx37#define REG_A %ecx
38#define REG_B %esi38#define REG_B %esi
39#define REG_C %edi39#define REG_C %edi
40#define REG_D %ebp40#define REG_D %r12d
41#define REG_E %edx41#define REG_E %edx
42 42
43#define REG_T1 %eax43#define REG_T1 %eax
@@ -74,10 +74,10 @@ · 30 unmodified lines
74 ENTRY(\name)74 ENTRY(\name)
75 75
76 push %rbx76 push %rbx
77 push %rbp
78 push %r1277 push %r12
78 push %rbp
79 mov %rsp, %rbp
79 80
80 mov %rsp, %r12
81 sub $64, %rsp # allocate workspace81 sub $64, %rsp # allocate workspace
82 and $~15, %rsp # align stack82 and $~15, %rsp # align stack
83 83
@@ -99,10 +99,9 @@ · 15 unmodified lines
99 xor %rax, %rax99 xor %rax, %rax
100 rep stosq100 rep stosq
101 101
102 mov %r12, %rsp # deallocate workspace102 mov %rbp, %rsp # deallocate workspace
103
104 pop %r12
105 pop %rbp103 pop %rbp
104 pop %r12
106 pop %rbx105 pop %rbx
107 ret106 ret
108 107
arch/x86/crypto/sha256-avx-asm.S+7−8
@@ -103,7 +103,7 @@ SRND = %rsi # clobbers INP · 102 unmodified lines
103c = %ecx103c = %ecx
104d = %r8d104d = %r8d
105e = %edx105e = %edx
106TBL = %rbp106TBL = %r12
107a = %eax107a = %eax
108b = %ebx108b = %ebx
109 109
@@ -350,13 +350,13 @@ a = TMP_ · 240 unmodified lines
350ENTRY(sha256_transform_avx)350ENTRY(sha256_transform_avx)
351.align 32351.align 32
352 pushq %rbx352 pushq %rbx
353 pushq %rbp353 pushq %r12
354 pushq %r13354 pushq %r13
355 pushq %r14355 pushq %r14
356 pushq %r15356 pushq %r15
357 pushq %r12357 pushq %rbp
358 movq %rsp, %rbp
358 359
359 mov %rsp, %r12
360 subq $STACK_SIZE, %rsp # allocate stack space360 subq $STACK_SIZE, %rsp # allocate stack space
361 and $~15, %rsp # align stack pointer361 and $~15, %rsp # align stack pointer
362 362
@@ -452,13 +452,12 @@ loop2: · 89 unmodified lines
452 452
453done_hash:453done_hash:
454 454
455 mov %r12, %rsp455 mov %rbp, %rsp
456 456 popq %rbp
457 popq %r12
458 popq %r15457 popq %r15
459 popq %r14458 popq %r14
460 popq %r13459 popq %r13
461 popq %rbp460 popq %r12
462 popq %rbx461 popq %rbx
463 ret462 ret
464ENDPROC(sha256_transform_avx)463ENDPROC(sha256_transform_avx)
arch/x86/crypto/sha256-avx2-asm.S+7−15
@@ -98,8 +98,6 @@ d = %r8d · 97 unmodified lines
98e = %edx # clobbers NUM_BLKS98e = %edx # clobbers NUM_BLKS
99y3 = %esi # clobbers INP99y3 = %esi # clobbers INP
100 100
101
102TBL = %rbp
103SRND = CTX # SRND is same register as CTX101SRND = CTX # SRND is same register as CTX
104 102
105a = %eax103a = %eax
@@ -531,7 +529,6 @@ STACK_SIZE = _RSP + _RSP_SIZE · 425 unmodified lines
531ENTRY(sha256_transform_rorx)529ENTRY(sha256_transform_rorx)
532.align 32530.align 32
533 pushq %rbx531 pushq %rbx
534 pushq %rbp
535 pushq %r12532 pushq %r12
536 pushq %r13533 pushq %r13
537 pushq %r14534 pushq %r14
@@ -568,8 +565,6 @@ ENTRY(sha256_transform_rorx) · 30 unmodified lines
568 mov CTX, _CTX(%rsp)565 mov CTX, _CTX(%rsp)
569 566
570loop0:567loop0:
571 lea K256(%rip), TBL
572
573 ## Load first 16 dwords from two blocks568 ## Load first 16 dwords from two blocks
574 VMOVDQ 0*32(INP),XTMP0569 VMOVDQ 0*32(INP),XTMP0
575 VMOVDQ 1*32(INP),XTMP1570 VMOVDQ 1*32(INP),XTMP1
@@ -597,19 +592,19 @@ last_block_enter: · 21 unmodified lines
597 592
598.align 16593.align 16
599loop1:594loop1:
600 vpaddd 0*32(TBL, SRND), X0, XFER595 vpaddd K256+0*32(SRND), X0, XFER
601 vmovdqa XFER, 0*32+_XFER(%rsp, SRND)596 vmovdqa XFER, 0*32+_XFER(%rsp, SRND)
602 FOUR_ROUNDS_AND_SCHED _XFER + 0*32597 FOUR_ROUNDS_AND_SCHED _XFER + 0*32
603 598
604 vpaddd 1*32(TBL, SRND), X0, XFER599 vpaddd K256+1*32(SRND), X0, XFER
605 vmovdqa XFER, 1*32+_XFER(%rsp, SRND)600 vmovdqa XFER, 1*32+_XFER(%rsp, SRND)
606 FOUR_ROUNDS_AND_SCHED _XFER + 1*32601 FOUR_ROUNDS_AND_SCHED _XFER + 1*32
607 602
608 vpaddd 2*32(TBL, SRND), X0, XFER603 vpaddd K256+2*32(SRND), X0, XFER
609 vmovdqa XFER, 2*32+_XFER(%rsp, SRND)604 vmovdqa XFER, 2*32+_XFER(%rsp, SRND)
610 FOUR_ROUNDS_AND_SCHED _XFER + 2*32605 FOUR_ROUNDS_AND_SCHED _XFER + 2*32
611 606
612 vpaddd 3*32(TBL, SRND), X0, XFER607 vpaddd K256+3*32(SRND), X0, XFER
613 vmovdqa XFER, 3*32+_XFER(%rsp, SRND)608 vmovdqa XFER, 3*32+_XFER(%rsp, SRND)
614 FOUR_ROUNDS_AND_SCHED _XFER + 3*32609 FOUR_ROUNDS_AND_SCHED _XFER + 3*32
615 610
@@ -619,10 +614,11 @@ loop1: · 3 unmodified lines
619 614
620loop2:615loop2:
621 ## Do last 16 rounds with no scheduling616 ## Do last 16 rounds with no scheduling
622 vpaddd 0*32(TBL, SRND), X0, XFER617 vpaddd K256+0*32(SRND), X0, XFER
623 vmovdqa XFER, 0*32+_XFER(%rsp, SRND)618 vmovdqa XFER, 0*32+_XFER(%rsp, SRND)
624 DO_4ROUNDS _XFER + 0*32619 DO_4ROUNDS _XFER + 0*32
625 vpaddd 1*32(TBL, SRND), X1, XFER620
621 vpaddd K256+1*32(SRND), X1, XFER
626 vmovdqa XFER, 1*32+_XFER(%rsp, SRND)622 vmovdqa XFER, 1*32+_XFER(%rsp, SRND)
627 DO_4ROUNDS _XFER + 1*32623 DO_4ROUNDS _XFER + 1*32
628 add $2*32, SRND624 add $2*32, SRND
@@ -676,9 +672,6 @@ loop3: · 47 unmodified lines
676 ja done_hash672 ja done_hash
677 673
678do_last_block:674do_last_block:
679 #### do last block
680 lea K256(%rip), TBL
681
682 VMOVDQ 0*16(INP),XWORD0675 VMOVDQ 0*16(INP),XWORD0
683 VMOVDQ 1*16(INP),XWORD1676 VMOVDQ 1*16(INP),XWORD1
684 VMOVDQ 2*16(INP),XWORD2677 VMOVDQ 2*16(INP),XWORD2
@@ -718,7 +711,6 @@ done_hash: · 33 unmodified lines
718 popq %r14711 popq %r14
719 popq %r13712 popq %r13
720 popq %r12713 popq %r12
721 popq %rbp
722 popq %rbx714 popq %rbx
723 ret715 ret
724ENDPROC(sha256_transform_rorx)716ENDPROC(sha256_transform_rorx)
arch/x86/crypto/sha256-ssse3-asm.S+7−8
@@ -95,7 +95,7 @@ SRND = %rsi # clobbers INP · 94 unmodified lines
95c = %ecx95c = %ecx
96d = %r8d96d = %r8d
97e = %edx97e = %edx
98TBL = %rbp98TBL = %r12
99a = %eax99a = %eax
100b = %ebx100b = %ebx
101 101
@@ -356,13 +356,13 @@ a = TMP_ · 254 unmodified lines
356ENTRY(sha256_transform_ssse3)356ENTRY(sha256_transform_ssse3)
357.align 32357.align 32
358 pushq %rbx358 pushq %rbx
359 pushq %rbp359 pushq %r12
360 pushq %r13360 pushq %r13
361 pushq %r14361 pushq %r14
362 pushq %r15362 pushq %r15
363 pushq %r12363 pushq %rbp
364 mov %rsp, %rbp
364 365
365 mov %rsp, %r12
366 subq $STACK_SIZE, %rsp366 subq $STACK_SIZE, %rsp
367 and $~15, %rsp367 and $~15, %rsp
368 368
@@ -462,13 +462,12 @@ loop2: · 93 unmodified lines
462 462
463done_hash:463done_hash:
464 464
465 mov %r12, %rsp465 mov %rbp, %rsp
466 466 popq %rbp
467 popq %r12
468 popq %r15467 popq %r15
469 popq %r14468 popq %r14
470 popq %r13469 popq %r13
471 popq %rbp470 popq %r12
472 popq %rbx471 popq %rbx
473 472
474 ret473 ret
arch/x86/crypto/sha512-avx2-asm.S+39−36
@@ -69,8 +69,9 @@ XFER = YTMP0 · 68 unmodified lines
69 69
70BYTE_FLIP_MASK = %ymm970BYTE_FLIP_MASK = %ymm9
71 71
72# 1st arg72# 1st arg is %rdi, which is saved to the stack and accessed later via %r12
73CTX = %rdi73CTX1 = %rdi
74CTX2 = %r12
74# 2nd arg75# 2nd arg
75INP = %rsi76INP = %rsi
76# 3rd arg77# 3rd arg
@@ -81,7 +82,7 @@ d = %r8 · 4 unmodified lines
81e = %rdx82e = %rdx
82y3 = %rsi83y3 = %rsi
83 84
84TBL = %rbp85TBL = %rdi # clobbers CTX1
85 86
86a = %rax87a = %rax
87b = %rbx88b = %rbx
@@ -91,26 +92,26 @@ g = %r10 · 3 unmodified lines
91h = %r1192h = %r11
92old_h = %r1193old_h = %r11
93 94
94T1 = %r1295T1 = %r12 # clobbers CTX2
95y0 = %r1396y0 = %r13
96y1 = %r1497y1 = %r14
97y2 = %r1598y2 = %r15
98 99
99y4 = %r12
100
101# Local variables (stack frame)100# Local variables (stack frame)
102XFER_SIZE = 4*8101XFER_SIZE = 4*8
103SRND_SIZE = 1*8102SRND_SIZE = 1*8
104INP_SIZE = 1*8103INP_SIZE = 1*8
105INPEND_SIZE = 1*8104INPEND_SIZE = 1*8
105CTX_SIZE = 1*8
106RSPSAVE_SIZE = 1*8106RSPSAVE_SIZE = 1*8
107GPRSAVE_SIZE = 6*8107GPRSAVE_SIZE = 5*8
108 108
109frame_XFER = 0109frame_XFER = 0
110frame_SRND = frame_XFER + XFER_SIZE110frame_SRND = frame_XFER + XFER_SIZE
111frame_INP = frame_SRND + SRND_SIZE111frame_INP = frame_SRND + SRND_SIZE
112frame_INPEND = frame_INP + INP_SIZE112frame_INPEND = frame_INP + INP_SIZE
113frame_RSPSAVE = frame_INPEND + INPEND_SIZE113frame_CTX = frame_INPEND + INPEND_SIZE
114frame_RSPSAVE = frame_CTX + CTX_SIZE
114frame_GPRSAVE = frame_RSPSAVE + RSPSAVE_SIZE115frame_GPRSAVE = frame_RSPSAVE + RSPSAVE_SIZE
115frame_size = frame_GPRSAVE + GPRSAVE_SIZE116frame_size = frame_GPRSAVE + GPRSAVE_SIZE
116 117
@@ -576,12 +577,11 @@ ENTRY(sha512_transform_rorx) · 459 unmodified lines
576 mov %rax, frame_RSPSAVE(%rsp)577 mov %rax, frame_RSPSAVE(%rsp)
577 578
578 # Save GPRs579 # Save GPRs
579 mov %rbp, frame_GPRSAVE(%rsp)580 mov %rbx, 8*0+frame_GPRSAVE(%rsp)
580 mov %rbx, 8*1+frame_GPRSAVE(%rsp)581 mov %r12, 8*1+frame_GPRSAVE(%rsp)
581 mov %r12, 8*2+frame_GPRSAVE(%rsp)582 mov %r13, 8*2+frame_GPRSAVE(%rsp)
582 mov %r13, 8*3+frame_GPRSAVE(%rsp)583 mov %r14, 8*3+frame_GPRSAVE(%rsp)
583 mov %r14, 8*4+frame_GPRSAVE(%rsp)584 mov %r15, 8*4+frame_GPRSAVE(%rsp)
584 mov %r15, 8*5+frame_GPRSAVE(%rsp)
585 585
586 shl $7, NUM_BLKS # convert to bytes586 shl $7, NUM_BLKS # convert to bytes
587 jz done_hash587 jz done_hash
@@ -589,14 +589,17 @@ ENTRY(sha512_transform_rorx) · 1 unmodified line
589 mov NUM_BLKS, frame_INPEND(%rsp)589 mov NUM_BLKS, frame_INPEND(%rsp)
590 590
591 ## load initial digest591 ## load initial digest
592 mov 8*0(CTX),a592 mov 8*0(CTX1), a
593 mov 8*1(CTX),b593 mov 8*1(CTX1), b
594 mov 8*2(CTX),c594 mov 8*2(CTX1), c
595 mov 8*3(CTX),d595 mov 8*3(CTX1), d
596 mov 8*4(CTX),e596 mov 8*4(CTX1), e
597 mov 8*5(CTX),f597 mov 8*5(CTX1), f
598 mov 8*6(CTX),g598 mov 8*6(CTX1), g
599 mov 8*7(CTX),h599 mov 8*7(CTX1), h
600
601 # save %rdi (CTX) before it gets clobbered
602 mov %rdi, frame_CTX(%rsp)
600 603
601 vmovdqa PSHUFFLE_BYTE_FLIP_MASK(%rip), BYTE_FLIP_MASK604 vmovdqa PSHUFFLE_BYTE_FLIP_MASK(%rip), BYTE_FLIP_MASK
602 605
@@ -652,14 +655,15 @@ loop2: · 49 unmodified lines
652 subq $1, frame_SRND(%rsp)655 subq $1, frame_SRND(%rsp)
653 jne loop2656 jne loop2
654 657
655 addm 8*0(CTX),a658 mov frame_CTX(%rsp), CTX2
656 addm 8*1(CTX),b659 addm 8*0(CTX2), a
657 addm 8*2(CTX),c660 addm 8*1(CTX2), b
658 addm 8*3(CTX),d661 addm 8*2(CTX2), c
659 addm 8*4(CTX),e662 addm 8*3(CTX2), d
660 addm 8*5(CTX),f663 addm 8*4(CTX2), e
661 addm 8*6(CTX),g664 addm 8*5(CTX2), f
662 addm 8*7(CTX),h665 addm 8*6(CTX2), g
666 addm 8*7(CTX2), h
663 667
664 mov frame_INP(%rsp), INP668 mov frame_INP(%rsp), INP
665 add $128, INP669 add $128, INP
@@ -669,12 +673,11 @@ loop2: · 3 unmodified lines
669done_hash:673done_hash:
670 674
671# Restore GPRs675# Restore GPRs
672 mov frame_GPRSAVE(%rsp) ,%rbp676 mov 8*0+frame_GPRSAVE(%rsp), %rbx
673 mov 8*1+frame_GPRSAVE(%rsp) ,%rbx677 mov 8*1+frame_GPRSAVE(%rsp), %r12
674 mov 8*2+frame_GPRSAVE(%rsp) ,%r12678 mov 8*2+frame_GPRSAVE(%rsp), %r13
675 mov 8*3+frame_GPRSAVE(%rsp) ,%r13679 mov 8*3+frame_GPRSAVE(%rsp), %r14
676 mov 8*4+frame_GPRSAVE(%rsp) ,%r14680 mov 8*4+frame_GPRSAVE(%rsp), %r15
677 mov 8*5+frame_GPRSAVE(%rsp) ,%r15
678 681
679 # Restore Stack Pointer682 # Restore Stack Pointer
680 mov frame_RSPSAVE(%rsp), %rsp683 mov frame_RSPSAVE(%rsp), %rsp
arch/x86/crypto/twofish-avx-x86_64-asm_64.S+6−6
@@ -76,8 +76,8 @@ · 75 unmodified lines
76#define RT %xmm1476#define RT %xmm14
77#define RR %xmm1577#define RR %xmm15
78 78
79#define RID1 %rbp79#define RID1 %r13
80#define RID1d %ebp80#define RID1d %r13d
81#define RID2 %rsi81#define RID2 %rsi
82#define RID2d %esi82#define RID2d %esi
83 83
@@ -259,7 +259,7 @@ __twofish_enc_blk8: · 175 unmodified lines
259 259
260 vmovdqu w(CTX), RK1;260 vmovdqu w(CTX), RK1;
261 261
262 pushq %rbp;262 pushq %r13;
263 pushq %rbx;263 pushq %rbx;
264 pushq %rcx;264 pushq %rcx;
265 265
@@ -282,7 +282,7 @@ __twofish_enc_blk8: · 16 unmodified lines
282 282
283 popq %rcx;283 popq %rcx;
284 popq %rbx;284 popq %rbx;
285 popq %rbp;285 popq %r13;
286 286
287 outunpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);287 outunpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
288 outunpack_blocks(RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);288 outunpack_blocks(RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2);
@@ -301,7 +301,7 @@ __twofish_dec_blk8: · 12 unmodified lines
301 301
302 vmovdqu (w+4*4)(CTX), RK1;302 vmovdqu (w+4*4)(CTX), RK1;
303 303
304 pushq %rbp;304 pushq %r13;
305 pushq %rbx;305 pushq %rbx;
306 306
307 inpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);307 inpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2);
@@ -322,7 +322,7 @@ __twofish_dec_blk8: · 14 unmodified lines
322 vmovdqu (w)(CTX), RK1;322 vmovdqu (w)(CTX), RK1;
323 323
324 popq %rbx;324 popq %rbx;
325 popq %rbp;325 popq %r13;
326 326
327 outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);327 outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);
328 outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);328 outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);
arch/x86/events/intel/core.c+4−7
@@ -4409,10 +4409,9 @@ static __init int fixup_ht_bug(void) · 4408 unmodified lines
4409 return 0;4409 return 0;
4410 }4410 }
4411 4411
4412 if (lockup_detector_suspend() != 0) {4412 cpus_read_lock();
4413 pr_debug("failed to disable PMU erratum BJ122, BV98, HSD29 workaround\n");4413
4414 return 0;4414 hardlockup_detector_perf_stop();
4415 }
4416 4415
4417 x86_pmu.flags &= ~(PMU_FL_EXCL_CNTRS | PMU_FL_EXCL_ENABLED);4416 x86_pmu.flags &= ~(PMU_FL_EXCL_CNTRS | PMU_FL_EXCL_ENABLED);
4418 4417
@@ -4420,9 +4419,7 @@ static __init int fixup_ht_bug(void) · 1 unmodified line
4420 x86_pmu.commit_scheduling = NULL;4419 x86_pmu.commit_scheduling = NULL;
4421 x86_pmu.stop_scheduling = NULL;4420 x86_pmu.stop_scheduling = NULL;
4422 4421
4423 lockup_detector_resume();4422 hardlockup_detector_perf_restart();
4424
4425 cpus_read_lock();
4426 4423
4427 for_each_online_cpu(c)4424 for_each_online_cpu(c)
4428 free_excl_cntrs(c);4425 free_excl_cntrs(c);
arch/x86/events/intel/cstate.c+4−0
@@ -552,6 +552,7 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = { · 551 unmodified lines
552 552
553 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_MOBILE, snb_cstates),553 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_MOBILE, snb_cstates),
554 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_DESKTOP, snb_cstates),554 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_DESKTOP, snb_cstates),
555 X86_CSTATES_MODEL(INTEL_FAM6_SKYLAKE_X, snb_cstates),
555 556
556 X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE_MOBILE, snb_cstates),557 X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE_MOBILE, snb_cstates),
557 X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE_DESKTOP, snb_cstates),558 X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE_DESKTOP, snb_cstates),
@@ -560,6 +561,9 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = { · 2 unmodified lines
560 X86_CSTATES_MODEL(INTEL_FAM6_XEON_PHI_KNM, knl_cstates),561 X86_CSTATES_MODEL(INTEL_FAM6_XEON_PHI_KNM, knl_cstates),
561 562
562 X86_CSTATES_MODEL(INTEL_FAM6_ATOM_GOLDMONT, glm_cstates),563 X86_CSTATES_MODEL(INTEL_FAM6_ATOM_GOLDMONT, glm_cstates),
564 X86_CSTATES_MODEL(INTEL_FAM6_ATOM_DENVERTON, glm_cstates),
565
566 X86_CSTATES_MODEL(INTEL_FAM6_ATOM_GEMINI_LAKE, glm_cstates),
563 { },567 { },
564};568};
565MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match);569MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match);
arch/x86/events/intel/rapl.c+3−0
@@ -775,6 +775,9 @@ static const struct x86_cpu_id rapl_cpu_match[] __initconst = { · 774 unmodified lines
775 X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_DESKTOP, skl_rapl_init),775 X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_DESKTOP, skl_rapl_init),
776 776
777 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, hsw_rapl_init),777 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, hsw_rapl_init),
778 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_DENVERTON, hsw_rapl_init),
779
780 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GEMINI_LAKE, hsw_rapl_init),
778 {},781 {},
779};782};
780 783
arch/x86/events/intel/uncore_snbep.c+2−2
@@ -3462,7 +3462,7 @@ static struct intel_uncore_ops skx_uncore_iio_ops = { · 3461 unmodified lines
3462static struct intel_uncore_type skx_uncore_iio = {3462static struct intel_uncore_type skx_uncore_iio = {
3463 .name = "iio",3463 .name = "iio",
3464 .num_counters = 4,3464 .num_counters = 4,
3465 .num_boxes = 5,3465 .num_boxes = 6,
3466 .perf_ctr_bits = 48,3466 .perf_ctr_bits = 48,
3467 .event_ctl = SKX_IIO0_MSR_PMON_CTL0,3467 .event_ctl = SKX_IIO0_MSR_PMON_CTL0,
3468 .perf_ctr = SKX_IIO0_MSR_PMON_CTR0,3468 .perf_ctr = SKX_IIO0_MSR_PMON_CTR0,
@@ -3492,7 +3492,7 @@ static const struct attribute_group skx_uncore_format_group = { · 23 unmodified lines
3492static struct intel_uncore_type skx_uncore_irp = {3492static struct intel_uncore_type skx_uncore_irp = {
3493 .name = "irp",3493 .name = "irp",
3494 .num_counters = 2,3494 .num_counters = 2,
3495 .num_boxes = 5,3495 .num_boxes = 6,
3496 .perf_ctr_bits = 48,3496 .perf_ctr_bits = 48,
3497 .event_ctl = SKX_IRP0_MSR_PMON_CTL0,3497 .event_ctl = SKX_IRP0_MSR_PMON_CTL0,
3498 .perf_ctr = SKX_IRP0_MSR_PMON_CTR0,3498 .perf_ctr = SKX_IRP0_MSR_PMON_CTR0,
arch/x86/events/msr.c+8−0
@@ -63,6 +63,14 @@ static bool test_intel(int idx) · 62 unmodified lines
63 case INTEL_FAM6_ATOM_SILVERMONT1:63 case INTEL_FAM6_ATOM_SILVERMONT1:
64 case INTEL_FAM6_ATOM_SILVERMONT2:64 case INTEL_FAM6_ATOM_SILVERMONT2:
65 case INTEL_FAM6_ATOM_AIRMONT:65 case INTEL_FAM6_ATOM_AIRMONT:
66
67 case INTEL_FAM6_ATOM_GOLDMONT:
68 case INTEL_FAM6_ATOM_DENVERTON:
69
70 case INTEL_FAM6_ATOM_GEMINI_LAKE:
71
72 case INTEL_FAM6_XEON_PHI_KNL:
73 case INTEL_FAM6_XEON_PHI_KNM:
66 if (idx == PERF_MSR_SMI)74 if (idx == PERF_MSR_SMI)
67 return true;75 return true;
68 break;76 break;
arch/x86/ia32/ia32_signal.c+1−1
@@ -231,7 +231,7 @@ static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, · 230 unmodified lines
231 ksig->ka.sa.sa_restorer)231 ksig->ka.sa.sa_restorer)
232 sp = (unsigned long) ksig->ka.sa.sa_restorer;232 sp = (unsigned long) ksig->ka.sa.sa_restorer;
233 233
234 if (fpu->fpstate_active) {234 if (fpu->initialized) {
235 unsigned long fx_aligned, math_size;235 unsigned long fx_aligned, math_size;
236 236
237 sp = fpu__alloc_mathframe(sp, 1, &fx_aligned, &math_size);237 sp = fpu__alloc_mathframe(sp, 1, &fx_aligned, &math_size);
arch/x86/include/asm/alternative.h+1−2
@@ -218,10 +218,9 @@ static inline int alternatives_text_reserved(void *start, void *end) · 217 unmodified lines
218#define alternative_call_2(oldfunc, newfunc1, feature1, newfunc2, feature2, \218#define alternative_call_2(oldfunc, newfunc1, feature1, newfunc2, feature2, \
219 output, input...) \219 output, input...) \
220{ \220{ \
221 register void *__sp asm(_ASM_SP); \
222 asm volatile (ALTERNATIVE_2("call %P[old]", "call %P[new1]", feature1,\221 asm volatile (ALTERNATIVE_2("call %P[old]", "call %P[new1]", feature1,\
223 "call %P[new2]", feature2) \222 "call %P[new2]", feature2) \
224 : output, "+r" (__sp) \223 : output, ASM_CALL_CONSTRAINT \
225 : [old] "i" (oldfunc), [new1] "i" (newfunc1), \224 : [old] "i" (oldfunc), [new1] "i" (newfunc1), \
226 [new2] "i" (newfunc2), ## input); \225 [new2] "i" (newfunc2), ## input); \
227}226}
arch/x86/include/asm/asm.h+14−1
@@ -11,10 +11,12 @@ · 10 unmodified lines
11# define __ASM_FORM_COMMA(x) " " #x ","11# define __ASM_FORM_COMMA(x) " " #x ","
12#endif12#endif
13 13
14#ifdef CONFIG_X86_3214#ifndef __x86_64__
15/* 32 bit */
15# define __ASM_SEL(a,b) __ASM_FORM(a)16# define __ASM_SEL(a,b) __ASM_FORM(a)
16# define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(a)17# define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(a)
17#else18#else
19/* 64 bit */
18# define __ASM_SEL(a,b) __ASM_FORM(b)20# define __ASM_SEL(a,b) __ASM_FORM(b)
19# define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(b)21# define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(b)
20#endif22#endif
@@ -132,4 +134,15 @@ · 111 unmodified lines
132/* For C file, we already have NOKPROBE_SYMBOL macro */134/* For C file, we already have NOKPROBE_SYMBOL macro */
133#endif135#endif
134 136
137#ifndef __ASSEMBLY__
138/*
139 * This output constraint should be used for any inline asm which has a "call"
140 * instruction. Otherwise the asm may be inserted before the frame pointer
141 * gets set up by the containing function. If you forget to do this, objtool
142 * may print a "call without frame pointer save/setup" warning.
143 */
144register unsigned long current_stack_pointer asm(_ASM_SP);
145#define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer)
146#endif
147
135#endif /* _ASM_X86_ASM_H */148#endif /* _ASM_X86_ASM_H */
arch/x86/include/asm/fpu/internal.h+22−68
@@ -23,11 +23,9 @@ · 22 unmodified lines
23/*23/*
24 * High level FPU state handling functions:24 * High level FPU state handling functions:
25 */25 */
26extern void fpu__activate_curr(struct fpu *fpu);26extern void fpu__initialize(struct fpu *fpu);
27extern void fpu__activate_fpstate_read(struct fpu *fpu);27extern void fpu__prepare_read(struct fpu *fpu);
28extern void fpu__activate_fpstate_write(struct fpu *fpu);28extern void fpu__prepare_write(struct fpu *fpu);
29extern void fpu__current_fpstate_write_begin(void);
30extern void fpu__current_fpstate_write_end(void);
31extern void fpu__save(struct fpu *fpu);29extern void fpu__save(struct fpu *fpu);
32extern void fpu__restore(struct fpu *fpu);30extern void fpu__restore(struct fpu *fpu);
33extern int fpu__restore_sig(void __user *buf, int ia32_frame);31extern int fpu__restore_sig(void __user *buf, int ia32_frame);
@@ -120,20 +118,11 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); · 86 unmodified lines
120 err; \118 err; \
121})119})
122 120
123#define check_insn(insn, output, input...) \121#define kernel_insn(insn, output, input...) \
124({ \
125 int err; \
126 asm volatile("1:" #insn "\n\t" \122 asm volatile("1:" #insn "\n\t" \
127 "2:\n" \123 "2:\n" \
128 ".section .fixup,\"ax\"\n" \124 _ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_fprestore) \
129 "3: movl $-1,%[err]\n" \125 : output : input)
130 " jmp 2b\n" \
131 ".previous\n" \
132 _ASM_EXTABLE(1b, 3b) \
133 : [err] "=r" (err), output \
134 : "0"(0), input); \
135 err; \
136})
137 126
138static inline int copy_fregs_to_user(struct fregs_state __user *fx)127static inline int copy_fregs_to_user(struct fregs_state __user *fx)
139{128{
@@ -153,20 +142,16 @@ static inline int copy_fxregs_to_user(struct fxregs_state __user *fx) · 13 unmodified lines
153 142
154static inline void copy_kernel_to_fxregs(struct fxregs_state *fx)143static inline void copy_kernel_to_fxregs(struct fxregs_state *fx)
155{144{
156 int err;
157
158 if (IS_ENABLED(CONFIG_X86_32)) {145 if (IS_ENABLED(CONFIG_X86_32)) {
159 err = check_insn(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx));146 kernel_insn(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx));
160 } else {147 } else {
161 if (IS_ENABLED(CONFIG_AS_FXSAVEQ)) {148 if (IS_ENABLED(CONFIG_AS_FXSAVEQ)) {
162 err = check_insn(fxrstorq %[fx], "=m" (*fx), [fx] "m" (*fx));149 kernel_insn(fxrstorq %[fx], "=m" (*fx), [fx] "m" (*fx));
163 } else {150 } else {
164 /* See comment in copy_fxregs_to_kernel() below. */151 /* See comment in copy_fxregs_to_kernel() below. */
165 err = check_insn(rex64/fxrstor (%[fx]), "=m" (*fx), [fx] "R" (fx), "m" (*fx));152 kernel_insn(rex64/fxrstor (%[fx]), "=m" (*fx), [fx] "R" (fx), "m" (*fx));
166 }153 }
167 }154 }
168 /* Copying from a kernel buffer to FPU registers should never fail: */
169 WARN_ON_FPU(err);
170}155}
171 156
172static inline int copy_user_to_fxregs(struct fxregs_state __user *fx)157static inline int copy_user_to_fxregs(struct fxregs_state __user *fx)
@@ -183,9 +168,7 @@ static inline int copy_user_to_fxregs(struct fxregs_state __user *fx) · 10 unmodified lines
183 168
184static inline void copy_kernel_to_fregs(struct fregs_state *fx)169static inline void copy_kernel_to_fregs(struct fregs_state *fx)
185{170{
186 int err = check_insn(frstor %[fx], "=m" (*fx), [fx] "m" (*fx));171 kernel_insn(frstor %[fx], "=m" (*fx), [fx] "m" (*fx));
187
188 WARN_ON_FPU(err);
189}172}
190 173
191static inline int copy_user_to_fregs(struct fregs_state __user *fx)174static inline int copy_user_to_fregs(struct fregs_state __user *fx)
@@ -281,18 +264,13 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu) · 89 unmodified lines
281 * Use XRSTORS to restore context if it is enabled. XRSTORS supports compact264 * Use XRSTORS to restore context if it is enabled. XRSTORS supports compact
282 * XSAVE area format.265 * XSAVE area format.
283 */266 */
284#define XSTATE_XRESTORE(st, lmask, hmask, err) \267#define XSTATE_XRESTORE(st, lmask, hmask) \
285 asm volatile(ALTERNATIVE(XRSTOR, \268 asm volatile(ALTERNATIVE(XRSTOR, \
286 XRSTORS, X86_FEATURE_XSAVES) \269 XRSTORS, X86_FEATURE_XSAVES) \
287 "\n" \270 "\n" \
288 "xor %[err], %[err]\n" \
289 "3:\n" \271 "3:\n" \
290 ".pushsection .fixup,\"ax\"\n" \272 _ASM_EXTABLE_HANDLE(661b, 3b, ex_handler_fprestore)\
291 "4: movl $-2, %[err]\n" \273 : \
292 "jmp 3b\n" \
293 ".popsection\n" \
294 _ASM_EXTABLE(661b, 4b) \
295 : [err] "=r" (err) \
296 : "D" (st), "m" (*st), "a" (lmask), "d" (hmask) \274 : "D" (st), "m" (*st), "a" (lmask), "d" (hmask) \
297 : "memory")275 : "memory")
298 276
@@ -336,7 +314,10 @@ static inline void copy_kernel_to_xregs_booting(struct xregs_state *xstate) · 37 unmodified lines
336 else314 else
337 XSTATE_OP(XRSTOR, xstate, lmask, hmask, err);315 XSTATE_OP(XRSTOR, xstate, lmask, hmask, err);
338 316
339 /* We should never fault when copying from a kernel buffer: */317 /*
318 * We should never fault when copying from a kernel buffer, and the FPU
319 * state we set at boot time should be valid.
320 */
340 WARN_ON_FPU(err);321 WARN_ON_FPU(err);
341}322}
342 323
@@ -350,7 +331,7 @@ static inline void copy_xregs_to_kernel(struct xregs_state *xstate) · 7 unmodified lines
350 u32 hmask = mask >> 32;331 u32 hmask = mask >> 32;
351 int err;332 int err;
352 333
353 WARN_ON(!alternatives_patched);334 WARN_ON_FPU(!alternatives_patched);
354 335
355 XSTATE_XSAVE(xstate, lmask, hmask, err);336 XSTATE_XSAVE(xstate, lmask, hmask, err);
356 337
@@ -365,12 +346,8 @@ static inline void copy_kernel_to_xregs(struct xregs_state *xstate, u64 mask) · 8 unmodified lines
365{346{
366 u32 lmask = mask;347 u32 lmask = mask;
367 u32 hmask = mask >> 32;348 u32 hmask = mask >> 32;
368 int err;
369
370 XSTATE_XRESTORE(xstate, lmask, hmask, err);
371 349
372 /* We should never fault when copying from a kernel buffer: */350 XSTATE_XRESTORE(xstate, lmask, hmask);
373 WARN_ON_FPU(err);
374}351}
375 352
376/*353/*
@@ -526,37 +503,16 @@ static inline int fpregs_state_valid(struct fpu *fpu, unsigned int cpu) · 149 unmodified lines
526 */503 */
527static inline void fpregs_deactivate(struct fpu *fpu)504static inline void fpregs_deactivate(struct fpu *fpu)
528{505{
529 WARN_ON_FPU(!fpu->fpregs_active);
530
531 fpu->fpregs_active = 0;
532 this_cpu_write(fpu_fpregs_owner_ctx, NULL);506 this_cpu_write(fpu_fpregs_owner_ctx, NULL);
533 trace_x86_fpu_regs_deactivated(fpu);507 trace_x86_fpu_regs_deactivated(fpu);
534}508}
535 509
536static inline void fpregs_activate(struct fpu *fpu)510static inline void fpregs_activate(struct fpu *fpu)
537{511{
538 WARN_ON_FPU(fpu->fpregs_active);
539
540 fpu->fpregs_active = 1;
541 this_cpu_write(fpu_fpregs_owner_ctx, fpu);512 this_cpu_write(fpu_fpregs_owner_ctx, fpu);
542 trace_x86_fpu_regs_activated(fpu);513 trace_x86_fpu_regs_activated(fpu);
543}514}
544 515
545/*
546 * The question "does this thread have fpu access?"
547 * is slightly racy, since preemption could come in
548 * and revoke it immediately after the test.
549 *
550 * However, even in that very unlikely scenario,
551 * we can just assume we have FPU access - typically
552 * to save the FP state - we'll just take a #NM
553 * fault and get the FPU access back.
554 */
555static inline int fpregs_active(void)
556{
557 return current->thread.fpu.fpregs_active;
558}
559
560/*516/*
561 * FPU state switching for scheduling.517 * FPU state switching for scheduling.
562 *518 *
@@ -571,14 +527,13 @@ static inline int fpregs_active(void) · 8 unmodified lines
571static inline void527static inline void
572switch_fpu_prepare(struct fpu *old_fpu, int cpu)528switch_fpu_prepare(struct fpu *old_fpu, int cpu)
573{529{
574 if (old_fpu->fpregs_active) {530 if (old_fpu->initialized) {
575 if (!copy_fpregs_to_fpstate(old_fpu))531 if (!copy_fpregs_to_fpstate(old_fpu))
576 old_fpu->last_cpu = -1;532 old_fpu->last_cpu = -1;
577 else533 else
578 old_fpu->last_cpu = cpu;534 old_fpu->last_cpu = cpu;
579 535
580 /* But leave fpu_fpregs_owner_ctx! */536 /* But leave fpu_fpregs_owner_ctx! */
581 old_fpu->fpregs_active = 0;
582 trace_x86_fpu_regs_deactivated(old_fpu);537 trace_x86_fpu_regs_deactivated(old_fpu);
583 } else538 } else
584 old_fpu->last_cpu = -1;539 old_fpu->last_cpu = -1;
@@ -595,7 +550,7 @@ switch_fpu_prepare(struct fpu *old_fpu, int cpu) · 10 unmodified lines
595static inline void switch_fpu_finish(struct fpu *new_fpu, int cpu)550static inline void switch_fpu_finish(struct fpu *new_fpu, int cpu)
596{551{
597 bool preload = static_cpu_has(X86_FEATURE_FPU) &&552 bool preload = static_cpu_has(X86_FEATURE_FPU) &&
598 new_fpu->fpstate_active;553 new_fpu->initialized;
599 554
600 if (preload) {555 if (preload) {
601 if (!fpregs_state_valid(new_fpu, cpu))556 if (!fpregs_state_valid(new_fpu, cpu))
@@ -617,8 +572,7 @@ static inline void user_fpu_begin(void) · 15 unmodified lines
617 struct fpu *fpu = &current->thread.fpu;572 struct fpu *fpu = &current->thread.fpu;
618 573
619 preempt_disable();574 preempt_disable();
620 if (!fpregs_active())575 fpregs_activate(fpu);
621 fpregs_activate(fpu);
622 preempt_enable();576 preempt_enable();
623}577}
624 578
arch/x86/include/asm/fpu/types.h+6−26
@@ -68,6 +68,9 @@ struct fxregs_state { · 67 unmodified lines
68/* Default value for fxregs_state.mxcsr: */68/* Default value for fxregs_state.mxcsr: */
69#define MXCSR_DEFAULT 0x1f8069#define MXCSR_DEFAULT 0x1f80
70 70
71/* Copy both mxcsr & mxcsr_flags with a single u64 memcpy: */
72#define MXCSR_AND_FLAGS_SIZE sizeof(u64)
73
71/*74/*
72 * Software based FPU emulation state. This is arbitrary really,75 * Software based FPU emulation state. This is arbitrary really,
73 * it matches the x87 format to make it easier to understand:76 * it matches the x87 format to make it easier to understand:
@@ -290,36 +293,13 @@ struct fpu { · 216 unmodified lines
290 unsigned int last_cpu;293 unsigned int last_cpu;
291 294
292 /*295 /*
293 * @fpstate_active:296 * @initialized:
294 *297 *
295 * This flag indicates whether this context is active: if the task298 * This flag indicates whether this context is initialized: if the task
296 * is not running then we can restore from this context, if the task299 * is not running then we can restore from this context, if the task
297 * is running then we should save into this context.300 * is running then we should save into this context.
298 */301 */
299 unsigned char fpstate_active;302 unsigned char initialized;
300
301 /*
302 * @fpregs_active:
303 *
304 * This flag determines whether a given context is actively
305 * loaded into the FPU's registers and that those registers
306 * represent the task's current FPU state.
307 *
308 * Note the interaction with fpstate_active:
309 *
310 * # task does not use the FPU:
311 * fpstate_active == 0
312 *
313 * # task uses the FPU and regs are active:
314 * fpstate_active == 1 && fpregs_active == 1
315 *
316 * # the regs are inactive but still match fpstate:
317 * fpstate_active == 1 && fpregs_active == 0 && fpregs_owner == fpu
318 *
319 * The third state is what we use for the lazy restore optimization
320 * on lazy-switching CPUs.
321 */
322 unsigned char fpregs_active;
323 303
324 /*304 /*
325 * @state:305 * @state:
arch/x86/include/asm/fpu/xstate.h+8−4
@@ -48,8 +48,12 @@ void fpu__xstate_clear_all_cpu_caps(void); · 47 unmodified lines
48void *get_xsave_addr(struct xregs_state *xsave, int xstate);48void *get_xsave_addr(struct xregs_state *xsave, int xstate);
49const void *get_xsave_field_ptr(int xstate_field);49const void *get_xsave_field_ptr(int xstate_field);
50int using_compacted_format(void);50int using_compacted_format(void);
51int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf,51int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int offset, unsigned int size);
52 void __user *ubuf, struct xregs_state *xsave);52int copy_xstate_to_user(void __user *ubuf, struct xregs_state *xsave, unsigned int offset, unsigned int size);
53int copyin_to_xsaves(const void *kbuf, const void __user *ubuf,53int copy_kernel_to_xstate(struct xregs_state *xsave, const void *kbuf);
54 struct xregs_state *xsave);54int copy_user_to_xstate(struct xregs_state *xsave, const void __user *ubuf);
55
56/* Validate an xstate header supplied by userspace (ptrace or sigreturn) */
57extern int validate_xstate_header(const struct xstate_header *hdr);
58
55#endif59#endif
arch/x86/include/asm/kvm_para.h+2−2
@@ -88,7 +88,7 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, · 87 unmodified lines
88bool kvm_para_available(void);88bool kvm_para_available(void);
89unsigned int kvm_arch_para_features(void);89unsigned int kvm_arch_para_features(void);
90void __init kvm_guest_init(void);90void __init kvm_guest_init(void);
91void kvm_async_pf_task_wait(u32 token);91void kvm_async_pf_task_wait(u32 token, int interrupt_kernel);
92void kvm_async_pf_task_wake(u32 token);92void kvm_async_pf_task_wake(u32 token);
93u32 kvm_read_and_reset_pf_reason(void);93u32 kvm_read_and_reset_pf_reason(void);
94extern void kvm_disable_steal_time(void);94extern void kvm_disable_steal_time(void);
@@ -103,7 +103,7 @@ static inline void kvm_spinlock_init(void) · 8 unmodified lines
103 103
104#else /* CONFIG_KVM_GUEST */104#else /* CONFIG_KVM_GUEST */
105#define kvm_guest_init() do {} while (0)105#define kvm_guest_init() do {} while (0)
106#define kvm_async_pf_task_wait(T) do {} while(0)106#define kvm_async_pf_task_wait(T, I) do {} while(0)
107#define kvm_async_pf_task_wake(T) do {} while(0)107#define kvm_async_pf_task_wake(T) do {} while(0)
108 108
109static inline bool kvm_para_available(void)109static inline bool kvm_para_available(void)
arch/x86/include/asm/mmu_context.h+28−4
@@ -286,6 +286,32 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma, · 285 unmodified lines
286 return __pkru_allows_pkey(vma_pkey(vma), write);286 return __pkru_allows_pkey(vma_pkey(vma), write);
287}287}
288 288
289/*
290 * If PCID is on, ASID-aware code paths put the ASID+1 into the PCID
291 * bits. This serves two purposes. It prevents a nasty situation in
292 * which PCID-unaware code saves CR3, loads some other value (with PCID
293 * == 0), and then restores CR3, thus corrupting the TLB for ASID 0 if
294 * the saved ASID was nonzero. It also means that any bugs involving
295 * loading a PCID-enabled CR3 with CR4.PCIDE off will trigger
296 * deterministically.
297 */
298
299static inline unsigned long build_cr3(struct mm_struct *mm, u16 asid)
300{
301 if (static_cpu_has(X86_FEATURE_PCID)) {
302 VM_WARN_ON_ONCE(asid > 4094);
303 return __sme_pa(mm->pgd) | (asid + 1);
304 } else {
305 VM_WARN_ON_ONCE(asid != 0);
306 return __sme_pa(mm->pgd);
307 }
308}
309
310static inline unsigned long build_cr3_noflush(struct mm_struct *mm, u16 asid)
311{
312 VM_WARN_ON_ONCE(asid > 4094);
313 return __sme_pa(mm->pgd) | (asid + 1) | CR3_NOFLUSH;
314}
289 315
290/*316/*
291 * This can be used from process context to figure out what the value of317 * This can be used from process context to figure out what the value of
@@ -296,10 +322,8 @@ static inline bool arch_vma_access_permitted(struct vm_area_struct *vma, · 4 unmodified lines
296 */322 */
297static inline unsigned long __get_current_cr3_fast(void)323static inline unsigned long __get_current_cr3_fast(void)
298{324{
299 unsigned long cr3 = __pa(this_cpu_read(cpu_tlbstate.loaded_mm)->pgd);325 unsigned long cr3 = build_cr3(this_cpu_read(cpu_tlbstate.loaded_mm),
300 326 this_cpu_read(cpu_tlbstate.loaded_mm_asid));
301 if (static_cpu_has(X86_FEATURE_PCID))
302 cr3 |= this_cpu_read(cpu_tlbstate.loaded_mm_asid);
303 327
304 /* For now, be very restrictive about when this can be called. */328 /* For now, be very restrictive about when this can be called. */
305 VM_WARN_ON(in_nmi() || preemptible());329 VM_WARN_ON(in_nmi() || preemptible());
arch/x86/include/asm/mshyperv.h+4−6
@@ -179,7 +179,6 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) · 178 unmodified lines
179 u64 input_address = input ? virt_to_phys(input) : 0;179 u64 input_address = input ? virt_to_phys(input) : 0;
180 u64 output_address = output ? virt_to_phys(output) : 0;180 u64 output_address = output ? virt_to_phys(output) : 0;
181 u64 hv_status;181 u64 hv_status;
182 register void *__sp asm(_ASM_SP);
183 182
184#ifdef CONFIG_X86_64183#ifdef CONFIG_X86_64
185 if (!hv_hypercall_pg)184 if (!hv_hypercall_pg)
@@ -187,7 +186,7 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) · 1 unmodified line
187 186
188 __asm__ __volatile__("mov %4, %%r8\n"187 __asm__ __volatile__("mov %4, %%r8\n"
189 "call *%5"188 "call *%5"
190 : "=a" (hv_status), "+r" (__sp),189 : "=a" (hv_status), ASM_CALL_CONSTRAINT,
191 "+c" (control), "+d" (input_address)190 "+c" (control), "+d" (input_address)
192 : "r" (output_address), "m" (hv_hypercall_pg)191 : "r" (output_address), "m" (hv_hypercall_pg)
193 : "cc", "memory", "r8", "r9", "r10", "r11");192 : "cc", "memory", "r8", "r9", "r10", "r11");
@@ -202,7 +201,7 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) · 8 unmodified lines
202 201
203 __asm__ __volatile__("call *%7"202 __asm__ __volatile__("call *%7"
204 : "=A" (hv_status),203 : "=A" (hv_status),
205 "+c" (input_address_lo), "+r" (__sp)204 "+c" (input_address_lo), ASM_CALL_CONSTRAINT
206 : "A" (control),205 : "A" (control),
207 "b" (input_address_hi),206 "b" (input_address_hi),
208 "D"(output_address_hi), "S"(output_address_lo),207 "D"(output_address_hi), "S"(output_address_lo),
@@ -224,12 +223,11 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) · 15 unmodified lines
224static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1)223static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1)
225{224{
226 u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT;225 u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT;
227 register void *__sp asm(_ASM_SP);
228 226
229#ifdef CONFIG_X86_64227#ifdef CONFIG_X86_64
230 {228 {
231 __asm__ __volatile__("call *%4"229 __asm__ __volatile__("call *%4"
232 : "=a" (hv_status), "+r" (__sp),230 : "=a" (hv_status), ASM_CALL_CONSTRAINT,
233 "+c" (control), "+d" (input1)231 "+c" (control), "+d" (input1)
234 : "m" (hv_hypercall_pg)232 : "m" (hv_hypercall_pg)
235 : "cc", "r8", "r9", "r10", "r11");233 : "cc", "r8", "r9", "r10", "r11");
@@ -242,7 +240,7 @@ static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1) · 6 unmodified lines
242 __asm__ __volatile__ ("call *%5"240 __asm__ __volatile__ ("call *%5"
243 : "=A"(hv_status),241 : "=A"(hv_status),
244 "+c"(input1_lo),242 "+c"(input1_lo),
245 "+r"(__sp)243 ASM_CALL_CONSTRAINT
246 : "A" (control),244 : "A" (control),
247 "b" (input1_hi),245 "b" (input1_hi),
248 "m" (hv_hypercall_pg)246 "m" (hv_hypercall_pg)
arch/x86/include/asm/paravirt_types.h+7−7
@@ -459,8 +459,8 @@ int paravirt_disable_iospace(void); · 458 unmodified lines
459 */459 */
460#ifdef CONFIG_X86_32460#ifdef CONFIG_X86_32
461#define PVOP_VCALL_ARGS \461#define PVOP_VCALL_ARGS \
462 unsigned long __eax = __eax, __edx = __edx, __ecx = __ecx; \462 unsigned long __eax = __eax, __edx = __edx, __ecx = __ecx;
463 register void *__sp asm("esp")463
464#define PVOP_CALL_ARGS PVOP_VCALL_ARGS464#define PVOP_CALL_ARGS PVOP_VCALL_ARGS
465 465
466#define PVOP_CALL_ARG1(x) "a" ((unsigned long)(x))466#define PVOP_CALL_ARG1(x) "a" ((unsigned long)(x))
@@ -480,8 +480,8 @@ int paravirt_disable_iospace(void); · 13 unmodified lines
480/* [re]ax isn't an arg, but the return val */480/* [re]ax isn't an arg, but the return val */
481#define PVOP_VCALL_ARGS \481#define PVOP_VCALL_ARGS \
482 unsigned long __edi = __edi, __esi = __esi, \482 unsigned long __edi = __edi, __esi = __esi, \
483 __edx = __edx, __ecx = __ecx, __eax = __eax; \483 __edx = __edx, __ecx = __ecx, __eax = __eax;
484 register void *__sp asm("rsp")484
485#define PVOP_CALL_ARGS PVOP_VCALL_ARGS485#define PVOP_CALL_ARGS PVOP_VCALL_ARGS
486 486
487#define PVOP_CALL_ARG1(x) "D" ((unsigned long)(x))487#define PVOP_CALL_ARG1(x) "D" ((unsigned long)(x))
@@ -532,7 +532,7 @@ int paravirt_disable_iospace(void); · 44 unmodified lines
532 asm volatile(pre \532 asm volatile(pre \
533 paravirt_alt(PARAVIRT_CALL) \533 paravirt_alt(PARAVIRT_CALL) \
534 post \534 post \
535 : call_clbr, "+r" (__sp) \535 : call_clbr, ASM_CALL_CONSTRAINT \
536 : paravirt_type(op), \536 : paravirt_type(op), \
537 paravirt_clobber(clbr), \537 paravirt_clobber(clbr), \
538 ##__VA_ARGS__ \538 ##__VA_ARGS__ \
@@ -542,7 +542,7 @@ int paravirt_disable_iospace(void); · 3 unmodified lines
542 asm volatile(pre \542 asm volatile(pre \
543 paravirt_alt(PARAVIRT_CALL) \543 paravirt_alt(PARAVIRT_CALL) \
544 post \544 post \
545 : call_clbr, "+r" (__sp) \545 : call_clbr, ASM_CALL_CONSTRAINT \
546 : paravirt_type(op), \546 : paravirt_type(op), \
547 paravirt_clobber(clbr), \547 paravirt_clobber(clbr), \
548 ##__VA_ARGS__ \548 ##__VA_ARGS__ \
@@ -569,7 +569,7 @@ int paravirt_disable_iospace(void); · 20 unmodified lines
569 asm volatile(pre \569 asm volatile(pre \
570 paravirt_alt(PARAVIRT_CALL) \570 paravirt_alt(PARAVIRT_CALL) \
571 post \571 post \
572 : call_clbr, "+r" (__sp) \572 : call_clbr, ASM_CALL_CONSTRAINT \
573 : paravirt_type(op), \573 : paravirt_type(op), \
574 paravirt_clobber(clbr), \574 paravirt_clobber(clbr), \
575 ##__VA_ARGS__ \575 ##__VA_ARGS__ \
arch/x86/include/asm/preempt.h+5−10
@@ -100,19 +100,14 @@ static __always_inline bool should_resched(int preempt_offset) · 99 unmodified lines
100 100
101#ifdef CONFIG_PREEMPT101#ifdef CONFIG_PREEMPT
102 extern asmlinkage void ___preempt_schedule(void);102 extern asmlinkage void ___preempt_schedule(void);
103# define __preempt_schedule() \103# define __preempt_schedule() \
104({ \104 asm volatile ("call ___preempt_schedule" : ASM_CALL_CONSTRAINT)
105 register void *__sp asm(_ASM_SP); \
106 asm volatile ("call ___preempt_schedule" : "+r"(__sp)); \
107})
108 105
109 extern asmlinkage void preempt_schedule(void);106 extern asmlinkage void preempt_schedule(void);
110 extern asmlinkage void ___preempt_schedule_notrace(void);107 extern asmlinkage void ___preempt_schedule_notrace(void);
111# define __preempt_schedule_notrace() \108# define __preempt_schedule_notrace() \
112({ \109 asm volatile ("call ___preempt_schedule_notrace" : ASM_CALL_CONSTRAINT)
113 register void *__sp asm(_ASM_SP); \110
114 asm volatile ("call ___preempt_schedule_notrace" : "+r"(__sp)); \
115})
116 extern asmlinkage void preempt_schedule_notrace(void);111 extern asmlinkage void preempt_schedule_notrace(void);
117#endif112#endif
118 113
arch/x86/include/asm/processor.h+2−4
@@ -677,8 +677,6 @@ static inline void sync_core(void) · 676 unmodified lines
677 * Like all of Linux's memory ordering operations, this is a677 * Like all of Linux's memory ordering operations, this is a
678 * compiler barrier as well.678 * compiler barrier as well.
679 */679 */
680 register void *__sp asm(_ASM_SP);
681
682#ifdef CONFIG_X86_32680#ifdef CONFIG_X86_32
683 asm volatile (681 asm volatile (
684 "pushfl\n\t"682 "pushfl\n\t"
@@ -686,7 +684,7 @@ static inline void sync_core(void) · 1 unmodified line
686 "pushl $1f\n\t"684 "pushl $1f\n\t"
687 "iret\n\t"685 "iret\n\t"
688 "1:"686 "1:"
689 : "+r" (__sp) : : "memory");687 : ASM_CALL_CONSTRAINT : : "memory");
690#else688#else
691 unsigned int tmp;689 unsigned int tmp;
692 690
@@ -703,7 +701,7 @@ static inline void sync_core(void) · 10 unmodified lines
703 "iretq\n\t"701 "iretq\n\t"
704 UNWIND_HINT_RESTORE702 UNWIND_HINT_RESTORE
705 "1:"703 "1:"
706 : "=&r" (tmp), "+r" (__sp) : : "cc", "memory");704 : "=&r" (tmp), ASM_CALL_CONSTRAINT : : "cc", "memory");
707#endif705#endif
708}706}
709 707
arch/x86/include/asm/rwsem.h+2−2
@@ -103,7 +103,6 @@ static inline bool __down_read_trylock(struct rw_semaphore *sem) · 102 unmodified lines
103({ \103({ \
104 long tmp; \104 long tmp; \
105 struct rw_semaphore* ret; \105 struct rw_semaphore* ret; \
106 register void *__sp asm(_ASM_SP); \
107 \106 \
108 asm volatile("# beginning down_write\n\t" \107 asm volatile("# beginning down_write\n\t" \
109 LOCK_PREFIX " xadd %1,(%4)\n\t" \108 LOCK_PREFIX " xadd %1,(%4)\n\t" \
@@ -114,7 +113,8 @@ static inline bool __down_read_trylock(struct rw_semaphore *sem) · 4 unmodified lines
114 " call " slow_path "\n" \113 " call " slow_path "\n" \
115 "1:\n" \114 "1:\n" \
116 "# ending down_write" \115 "# ending down_write" \
117 : "+m" (sem->count), "=d" (tmp), "=a" (ret), "+r" (__sp) \116 : "+m" (sem->count), "=d" (tmp), \
117 "=a" (ret), ASM_CALL_CONSTRAINT \
118 : "a" (sem), "1" (RWSEM_ACTIVE_WRITE_BIAS) \118 : "a" (sem), "1" (RWSEM_ACTIVE_WRITE_BIAS) \
119 : "memory", "cc"); \119 : "memory", "cc"); \
120 ret; \120 ret; \
arch/x86/include/asm/thread_info.h+0−11
@@ -158,17 +158,6 @@ struct thread_info { · 157 unmodified lines
158 */158 */
159#ifndef __ASSEMBLY__159#ifndef __ASSEMBLY__
160 160
161static inline unsigned long current_stack_pointer(void)
162{
163 unsigned long sp;
164#ifdef CONFIG_X86_64
165 asm("mov %%rsp,%0" : "=g" (sp));
166#else
167 asm("mov %%esp,%0" : "=g" (sp));
168#endif
169 return sp;
170}
171
172/*161/*
173 * Walks up the stack frames to make sure that the specified object is162 * Walks up the stack frames to make sure that the specified object is
174 * entirely contained by a single stack frame.163 * entirely contained by a single stack frame.
arch/x86/include/asm/trace/fpu.h+4−7
@@ -12,25 +12,22 @@ DECLARE_EVENT_CLASS(x86_fpu, · 11 unmodified lines
12 12
13 TP_STRUCT__entry(13 TP_STRUCT__entry(
14 __field(struct fpu *, fpu)14 __field(struct fpu *, fpu)
15 __field(bool, fpregs_active)15 __field(bool, initialized)
16 __field(bool, fpstate_active)
17 __field(u64, xfeatures)16 __field(u64, xfeatures)
18 __field(u64, xcomp_bv)17 __field(u64, xcomp_bv)
19 ),18 ),
20 19
21 TP_fast_assign(20 TP_fast_assign(
22 __entry->fpu = fpu;21 __entry->fpu = fpu;
23 __entry->fpregs_active = fpu->fpregs_active;22 __entry->initialized = fpu->initialized;
24 __entry->fpstate_active = fpu->fpstate_active;
25 if (boot_cpu_has(X86_FEATURE_OSXSAVE)) {23 if (boot_cpu_has(X86_FEATURE_OSXSAVE)) {
26 __entry->xfeatures = fpu->state.xsave.header.xfeatures;24 __entry->xfeatures = fpu->state.xsave.header.xfeatures;
27 __entry->xcomp_bv = fpu->state.xsave.header.xcomp_bv;25 __entry->xcomp_bv = fpu->state.xsave.header.xcomp_bv;
28 }26 }
29 ),27 ),
30 TP_printk("x86/fpu: %p fpregs_active: %d fpstate_active: %d xfeatures: %llx xcomp_bv: %llx",28 TP_printk("x86/fpu: %p initialized: %d xfeatures: %llx xcomp_bv: %llx",
31 __entry->fpu,29 __entry->fpu,
32 __entry->fpregs_active,30 __entry->initialized,
33 __entry->fpstate_active,
34 __entry->xfeatures,31 __entry->xfeatures,
35 __entry->xcomp_bv32 __entry->xcomp_bv
36 )33 )
arch/x86/include/asm/uaccess.h+3−3
@@ -166,11 +166,11 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) · 165 unmodified lines
166({ \166({ \
167 int __ret_gu; \167 int __ret_gu; \
168 register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \168 register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \
169 register void *__sp asm(_ASM_SP); \
170 __chk_user_ptr(ptr); \169 __chk_user_ptr(ptr); \
171 might_fault(); \170 might_fault(); \
172 asm volatile("call __get_user_%P4" \171 asm volatile("call __get_user_%P4" \
173 : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) \172 : "=a" (__ret_gu), "=r" (__val_gu), \
173 ASM_CALL_CONSTRAINT \
174 : "0" (ptr), "i" (sizeof(*(ptr)))); \174 : "0" (ptr), "i" (sizeof(*(ptr)))); \
175 (x) = (__force __typeof__(*(ptr))) __val_gu; \175 (x) = (__force __typeof__(*(ptr))) __val_gu; \
176 __builtin_expect(__ret_gu, 0); \176 __builtin_expect(__ret_gu, 0); \
@@ -337,7 +337,7 @@ do { \ · 160 unmodified lines
337 _ASM_EXTABLE(1b, 4b) \337 _ASM_EXTABLE(1b, 4b) \
338 _ASM_EXTABLE(2b, 4b) \338 _ASM_EXTABLE(2b, 4b) \
339 : "=r" (retval), "=&A"(x) \339 : "=r" (retval), "=&A"(x) \
340 : "m" (__m(__ptr)), "m" __m(((u32 *)(__ptr)) + 1), \340 : "m" (__m(__ptr)), "m" __m(((u32 __user *)(__ptr)) + 1), \
341 "i" (errret), "0" (retval)); \341 "i" (errret), "0" (retval)); \
342})342})
343 343
arch/x86/include/asm/xen/hypercall.h+4−5
@@ -113,10 +113,9 @@ extern struct { char _entry[32]; } hypercall_page[]; · 112 unmodified lines
113 register unsigned long __arg2 asm(__HYPERCALL_ARG2REG) = __arg2; \113 register unsigned long __arg2 asm(__HYPERCALL_ARG2REG) = __arg2; \
114 register unsigned long __arg3 asm(__HYPERCALL_ARG3REG) = __arg3; \114 register unsigned long __arg3 asm(__HYPERCALL_ARG3REG) = __arg3; \
115 register unsigned long __arg4 asm(__HYPERCALL_ARG4REG) = __arg4; \115 register unsigned long __arg4 asm(__HYPERCALL_ARG4REG) = __arg4; \
116 register unsigned long __arg5 asm(__HYPERCALL_ARG5REG) = __arg5; \116 register unsigned long __arg5 asm(__HYPERCALL_ARG5REG) = __arg5;
117 register void *__sp asm(_ASM_SP);
118 117
119#define __HYPERCALL_0PARAM "=r" (__res), "+r" (__sp)118#define __HYPERCALL_0PARAM "=r" (__res), ASM_CALL_CONSTRAINT
120#define __HYPERCALL_1PARAM __HYPERCALL_0PARAM, "+r" (__arg1)119#define __HYPERCALL_1PARAM __HYPERCALL_0PARAM, "+r" (__arg1)
121#define __HYPERCALL_2PARAM __HYPERCALL_1PARAM, "+r" (__arg2)120#define __HYPERCALL_2PARAM __HYPERCALL_1PARAM, "+r" (__arg2)
122#define __HYPERCALL_3PARAM __HYPERCALL_2PARAM, "+r" (__arg3)121#define __HYPERCALL_3PARAM __HYPERCALL_2PARAM, "+r" (__arg3)
@@ -552,13 +551,13 @@ static inline void · 429 unmodified lines
552MULTI_update_descriptor(struct multicall_entry *mcl, u64 maddr,551MULTI_update_descriptor(struct multicall_entry *mcl, u64 maddr,
553 struct desc_struct desc)552 struct desc_struct desc)
554{553{
555 u32 *p = (u32 *) &desc;
556
557 mcl->op = __HYPERVISOR_update_descriptor;554 mcl->op = __HYPERVISOR_update_descriptor;
558 if (sizeof(maddr) == sizeof(long)) {555 if (sizeof(maddr) == sizeof(long)) {
559 mcl->args[0] = maddr;556 mcl->args[0] = maddr;
560 mcl->args[1] = *(unsigned long *)&desc;557 mcl->args[1] = *(unsigned long *)&desc;
561 } else {558 } else {
559 u32 *p = (u32 *)&desc;
560
562 mcl->args[0] = maddr;561 mcl->args[0] = maddr;
563 mcl->args[1] = maddr >> 32;562 mcl->args[1] = maddr >> 32;
564 mcl->args[2] = *p++;563 mcl->args[2] = *p++;
arch/x86/kernel/cpu/amd.c+11−0
@@ -763,6 +763,16 @@ static void init_amd_bd(struct cpuinfo_x86 *c) · 762 unmodified lines
763 }763 }
764}764}
765 765
766static void init_amd_zn(struct cpuinfo_x86 *c)
767{
768 /*
769 * Fix erratum 1076: CPB feature bit not being set in CPUID. It affects
770 * all up to and including B1.
771 */
772 if (c->x86_model <= 1 && c->x86_mask <= 1)
773 set_cpu_cap(c, X86_FEATURE_CPB);
774}
775
766static void init_amd(struct cpuinfo_x86 *c)776static void init_amd(struct cpuinfo_x86 *c)
767{777{
768 early_init_amd(c);778 early_init_amd(c);
@@ -791,6 +801,7 @@ static void init_amd(struct cpuinfo_x86 *c) · 22 unmodified lines
791 case 0x10: init_amd_gh(c); break;801 case 0x10: init_amd_gh(c); break;
792 case 0x12: init_amd_ln(c); break;802 case 0x12: init_amd_ln(c); break;
793 case 0x15: init_amd_bd(c); break;803 case 0x15: init_amd_bd(c); break;
804 case 0x17: init_amd_zn(c); break;
794 }805 }
795 806
796 /* Enable workaround for FXSAVE leak */807 /* Enable workaround for FXSAVE leak */
arch/x86/kernel/cpu/bugs.c+0−8
@@ -21,14 +21,6 @@ · 20 unmodified lines
21 21
22void __init check_bugs(void)22void __init check_bugs(void)
23{23{
24#ifdef CONFIG_X86_32
25 /*
26 * Regardless of whether PCID is enumerated, the SDM says
27 * that it can't be enabled in 32-bit mode.
28 */
29 setup_clear_cpu_cap(X86_FEATURE_PCID);
30#endif
31
32 identify_boot_cpu();24 identify_boot_cpu();
33 25
34 if (!IS_ENABLED(CONFIG_SMP)) {26 if (!IS_ENABLED(CONFIG_SMP)) {
arch/x86/kernel/cpu/common.c+8−0
@@ -904,6 +904,14 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) · 903 unmodified lines
904 904
905 setup_force_cpu_cap(X86_FEATURE_ALWAYS);905 setup_force_cpu_cap(X86_FEATURE_ALWAYS);
906 fpu__init_system(c);906 fpu__init_system(c);
907
908#ifdef CONFIG_X86_32
909 /*
910 * Regardless of whether PCID is enumerated, the SDM says
911 * that it can't be enabled in 32-bit mode.
912 */
913 setup_clear_cpu_cap(X86_FEATURE_PCID);
914#endif
907}915}
908 916
909void __init early_cpu_init(void)917void __init early_cpu_init(void)
arch/x86/kernel/fpu/core.c+43−112
@@ -100,7 +100,7 @@ void __kernel_fpu_begin(void) · 99 unmodified lines
100 100
101 kernel_fpu_disable();101 kernel_fpu_disable();
102 102
103 if (fpu->fpregs_active) {103 if (fpu->initialized) {
104 /*104 /*
105 * Ignore return value -- we don't care if reg state105 * Ignore return value -- we don't care if reg state
106 * is clobbered.106 * is clobbered.
@@ -116,7 +116,7 @@ void __kernel_fpu_end(void) · 9 unmodified lines
116{116{
117 struct fpu *fpu = &current->thread.fpu;117 struct fpu *fpu = &current->thread.fpu;
118 118
119 if (fpu->fpregs_active)119 if (fpu->initialized)
120 copy_kernel_to_fpregs(&fpu->state);120 copy_kernel_to_fpregs(&fpu->state);
121 121
122 kernel_fpu_enable();122 kernel_fpu_enable();
@@ -148,7 +148,7 @@ void fpu__save(struct fpu *fpu) · 25 unmodified lines
148 148
149 preempt_disable();149 preempt_disable();
150 trace_x86_fpu_before_save(fpu);150 trace_x86_fpu_before_save(fpu);
151 if (fpu->fpregs_active) {151 if (fpu->initialized) {
152 if (!copy_fpregs_to_fpstate(fpu)) {152 if (!copy_fpregs_to_fpstate(fpu)) {
153 copy_kernel_to_fpregs(&fpu->state);153 copy_kernel_to_fpregs(&fpu->state);
154 }154 }
@@ -189,10 +189,9 @@ EXPORT_SYMBOL_GPL(fpstate_init); · 34 unmodified lines
189 189
190int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu)190int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu)
191{191{
192 dst_fpu->fpregs_active = 0;
193 dst_fpu->last_cpu = -1;192 dst_fpu->last_cpu = -1;
194 193
195 if (!src_fpu->fpstate_active || !static_cpu_has(X86_FEATURE_FPU))194 if (!src_fpu->initialized || !static_cpu_has(X86_FEATURE_FPU))
196 return 0;195 return 0;
197 196
198 WARN_ON_FPU(src_fpu != &current->thread.fpu);197 WARN_ON_FPU(src_fpu != &current->thread.fpu);
@@ -206,26 +205,14 @@ int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu) · 7 unmodified lines
206 /*205 /*
207 * Save current FPU registers directly into the child206 * Save current FPU registers directly into the child
208 * FPU context, without any memory-to-memory copying.207 * FPU context, without any memory-to-memory copying.
209 * In lazy mode, if the FPU context isn't loaded into
210 * fpregs, CR0.TS will be set and do_device_not_available
211 * will load the FPU context.
212 *208 *
213 * We have to do all this with preemption disabled,209 * ( The function 'fails' in the FNSAVE case, which destroys
214 * mostly because of the FNSAVE case, because in that210 * register contents so we have to copy them back. )
215 * case we must not allow preemption in the window
216 * between the FNSAVE and us marking the context lazy.
217 *
218 * It shouldn't be an issue as even FNSAVE is plenty
219 * fast in terms of critical section length.
220 */211 */
221 preempt_disable();
222 if (!copy_fpregs_to_fpstate(dst_fpu)) {212 if (!copy_fpregs_to_fpstate(dst_fpu)) {
223 memcpy(&src_fpu->state, &dst_fpu->state,213 memcpy(&src_fpu->state, &dst_fpu->state, fpu_kernel_xstate_size);
224 fpu_kernel_xstate_size);
225
226 copy_kernel_to_fpregs(&src_fpu->state);214 copy_kernel_to_fpregs(&src_fpu->state);
227 }215 }
228 preempt_enable();
229 216
230 trace_x86_fpu_copy_src(src_fpu);217 trace_x86_fpu_copy_src(src_fpu);
231 trace_x86_fpu_copy_dst(dst_fpu);218 trace_x86_fpu_copy_dst(dst_fpu);
@@ -237,45 +224,48 @@ int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu) · 5 unmodified lines
237 * Activate the current task's in-memory FPU context,224 * Activate the current task's in-memory FPU context,
238 * if it has not been used before:225 * if it has not been used before:
239 */226 */
240void fpu__activate_curr(struct fpu *fpu)227void fpu__initialize(struct fpu *fpu)
241{228{
242 WARN_ON_FPU(fpu != &current->thread.fpu);229 WARN_ON_FPU(fpu != &current->thread.fpu);
243 230
244 if (!fpu->fpstate_active) {231 if (!fpu->initialized) {
245 fpstate_init(&fpu->state);232 fpstate_init(&fpu->state);
246 trace_x86_fpu_init_state(fpu);233 trace_x86_fpu_init_state(fpu);
247 234
248 trace_x86_fpu_activate_state(fpu);235 trace_x86_fpu_activate_state(fpu);
249 /* Safe to do for the current task: */236 /* Safe to do for the current task: */
250 fpu->fpstate_active = 1;237 fpu->initialized = 1;
251 }238 }
252}239}
253EXPORT_SYMBOL_GPL(fpu__activate_curr);240EXPORT_SYMBOL_GPL(fpu__initialize);
254 241
255/*242/*
256 * This function must be called before we read a task's fpstate.243 * This function must be called before we read a task's fpstate.
257 *244 *
258 * If the task has not used the FPU before then initialize its245 * There's two cases where this gets called:
259 * fpstate.246 *
247 * - for the current task (when coredumping), in which case we have
248 * to save the latest FPU registers into the fpstate,
249 *
250 * - or it's called for stopped tasks (ptrace), in which case the
251 * registers were already saved by the context-switch code when
252 * the task scheduled out - we only have to initialize the registers
253 * if they've never been initialized.
260 *254 *
261 * If the task has used the FPU before then save it.255 * If the task has used the FPU before then save it.
262 */256 */
263void fpu__activate_fpstate_read(struct fpu *fpu)257void fpu__prepare_read(struct fpu *fpu)
264{258{
265 /*259 if (fpu == &current->thread.fpu) {
266 * If fpregs are active (in the current CPU), then
267 * copy them to the fpstate:
268 */
269 if (fpu->fpregs_active) {
270 fpu__save(fpu);260 fpu__save(fpu);
271 } else {261 } else {
272 if (!fpu->fpstate_active) {262 if (!fpu->initialized) {
273 fpstate_init(&fpu->state);263 fpstate_init(&fpu->state);
274 trace_x86_fpu_init_state(fpu);264 trace_x86_fpu_init_state(fpu);
275 265
276 trace_x86_fpu_activate_state(fpu);266 trace_x86_fpu_activate_state(fpu);
277 /* Safe to do for current and for stopped child tasks: */267 /* Safe to do for current and for stopped child tasks: */
278 fpu->fpstate_active = 1;268 fpu->initialized = 1;
279 }269 }
280 }270 }
281}271}
@@ -283,17 +273,17 @@ void fpu__activate_fpstate_read(struct fpu *fpu) · 1 unmodified line
283/*273/*
284 * This function must be called before we write a task's fpstate.274 * This function must be called before we write a task's fpstate.
285 *275 *
286 * If the task has used the FPU before then unlazy it.276 * If the task has used the FPU before then invalidate any cached FPU registers.
287 * If the task has not used the FPU before then initialize its fpstate.277 * If the task has not used the FPU before then initialize its fpstate.
288 *278 *
289 * After this function call, after registers in the fpstate are279 * After this function call, after registers in the fpstate are
290 * modified and the child task has woken up, the child task will280 * modified and the child task has woken up, the child task will
291 * restore the modified FPU state from the modified context. If we281 * restore the modified FPU state from the modified context. If we
292 * didn't clear its lazy status here then the lazy in-registers282 * didn't clear its cached status here then the cached in-registers
293 * state pending on its former CPU could be restored, corrupting283 * state pending on its former CPU could be restored, corrupting
294 * the modifications.284 * the modifications.
295 */285 */
296void fpu__activate_fpstate_write(struct fpu *fpu)286void fpu__prepare_write(struct fpu *fpu)
297{287{
298 /*288 /*
299 * Only stopped child tasks can be used to modify the FPU289 * Only stopped child tasks can be used to modify the FPU
@@ -301,8 +291,8 @@ void fpu__activate_fpstate_write(struct fpu *fpu) · 1 unmodified line
301 */291 */
302 WARN_ON_FPU(fpu == &current->thread.fpu);292 WARN_ON_FPU(fpu == &current->thread.fpu);
303 293
304 if (fpu->fpstate_active) {294 if (fpu->initialized) {
305 /* Invalidate any lazy state: */295 /* Invalidate any cached state: */
306 __fpu_invalidate_fpregs_state(fpu);296 __fpu_invalidate_fpregs_state(fpu);
307 } else {297 } else {
308 fpstate_init(&fpu->state);298 fpstate_init(&fpu->state);
@@ -310,73 +300,10 @@ void fpu__activate_fpstate_write(struct fpu *fpu) · 1 unmodified line
310 300
311 trace_x86_fpu_activate_state(fpu);301 trace_x86_fpu_activate_state(fpu);
312 /* Safe to do for stopped child tasks: */302 /* Safe to do for stopped child tasks: */
313 fpu->fpstate_active = 1;303 fpu->initialized = 1;
314 }304 }
315}305}
316 306
317/*
318 * This function must be called before we write the current
319 * task's fpstate.
320 *
321 * This call gets the current FPU register state and moves
322 * it in to the 'fpstate'. Preemption is disabled so that
323 * no writes to the 'fpstate' can occur from context
324 * swiches.
325 *
326 * Must be followed by a fpu__current_fpstate_write_end().
327 */
328void fpu__current_fpstate_write_begin(void)
329{
330 struct fpu *fpu = &current->thread.fpu;
331
332 /*
333 * Ensure that the context-switching code does not write
334 * over the fpstate while we are doing our update.
335 */
336 preempt_disable();
337
338 /*
339 * Move the fpregs in to the fpu's 'fpstate'.
340 */
341 fpu__activate_fpstate_read(fpu);
342
343 /*
344 * The caller is about to write to 'fpu'. Ensure that no
345 * CPU thinks that its fpregs match the fpstate. This
346 * ensures we will not be lazy and skip a XRSTOR in the
347 * future.
348 */
349 __fpu_invalidate_fpregs_state(fpu);
350}
351
352/*
353 * This function must be paired with fpu__current_fpstate_write_begin()
354 *
355 * This will ensure that the modified fpstate gets placed back in
356 * the fpregs if necessary.
357 *
358 * Note: This function may be called whether or not an _actual_
359 * write to the fpstate occurred.
360 */
361void fpu__current_fpstate_write_end(void)
362{
363 struct fpu *fpu = &current->thread.fpu;
364
365 /*
366 * 'fpu' now has an updated copy of the state, but the
367 * registers may still be out of date. Update them with
368 * an XRSTOR if they are active.
369 */
370 if (fpregs_active())
371 copy_kernel_to_fpregs(&fpu->state);
372
373 /*
374 * Our update is done and the fpregs/fpstate are in sync
375 * if necessary. Context switches can happen again.
376 */
377 preempt_enable();
378}
379
380/*307/*
381 * 'fpu__restore()' is called to copy FPU registers from308 * 'fpu__restore()' is called to copy FPU registers from
382 * the FPU fpstate to the live hw registers and to activate309 * the FPU fpstate to the live hw registers and to activate
@@ -389,7 +316,7 @@ void fpu__current_fpstate_write_end(void) · 6 unmodified lines
389 */316 */
390void fpu__restore(struct fpu *fpu)317void fpu__restore(struct fpu *fpu)
391{318{
392 fpu__activate_curr(fpu);319 fpu__initialize(fpu);
393 320
394 /* Avoid __kernel_fpu_begin() right after fpregs_activate() */321 /* Avoid __kernel_fpu_begin() right after fpregs_activate() */
395 kernel_fpu_disable();322 kernel_fpu_disable();
@@ -414,15 +341,17 @@ void fpu__drop(struct fpu *fpu) · 18 unmodified lines
414{341{
415 preempt_disable();342 preempt_disable();
416 343
417 if (fpu->fpregs_active) {344 if (fpu == &current->thread.fpu) {
418 /* Ignore delayed exceptions from user space */345 if (fpu->initialized) {
419 asm volatile("1: fwait\n"346 /* Ignore delayed exceptions from user space */
420 "2:\n"347 asm volatile("1: fwait\n"
421 _ASM_EXTABLE(1b, 2b));348 "2:\n"
422 fpregs_deactivate(fpu);349 _ASM_EXTABLE(1b, 2b));
350 fpregs_deactivate(fpu);
351 }
423 }352 }
424 353
425 fpu->fpstate_active = 0;354 fpu->initialized = 0;
426 355
427 trace_x86_fpu_dropped(fpu);356 trace_x86_fpu_dropped(fpu);
428 357
@@ -462,9 +391,11 @@ void fpu__clear(struct fpu *fpu) · 33 unmodified lines
462 * Make sure fpstate is cleared and initialized.391 * Make sure fpstate is cleared and initialized.
463 */392 */
464 if (static_cpu_has(X86_FEATURE_FPU)) {393 if (static_cpu_has(X86_FEATURE_FPU)) {
465 fpu__activate_curr(fpu);394 preempt_disable();
395 fpu__initialize(fpu);
466 user_fpu_begin();396 user_fpu_begin();
467 copy_init_fpstate_to_fpregs();397 copy_init_fpstate_to_fpregs();
398 preempt_enable();
468 }399 }
469}400}
470 401
arch/x86/kernel/fpu/init.c+1−1
@@ -240,7 +240,7 @@ static void __init fpu__init_system_ctx_switch(void) · 239 unmodified lines
240 WARN_ON_FPU(!on_boot_cpu);240 WARN_ON_FPU(!on_boot_cpu);
241 on_boot_cpu = 0;241 on_boot_cpu = 0;
242 242
243 WARN_ON_FPU(current->thread.fpu.fpstate_active);243 WARN_ON_FPU(current->thread.fpu.initialized);
244}244}
245 245
246/*246/*
arch/x86/kernel/fpu/regset.c+26−22
@@ -16,14 +16,14 @@ int regset_fpregs_active(struct task_struct *target, const struct user_regset *r · 15 unmodified lines
16{16{
17 struct fpu *target_fpu = &target->thread.fpu;17 struct fpu *target_fpu = &target->thread.fpu;
18 18
19 return target_fpu->fpstate_active ? regset->n : 0;19 return target_fpu->initialized ? regset->n : 0;
20}20}
21 21
22int regset_xregset_fpregs_active(struct task_struct *target, const struct user_regset *regset)22int regset_xregset_fpregs_active(struct task_struct *target, const struct user_regset *regset)
23{23{
24 struct fpu *target_fpu = &target->thread.fpu;24 struct fpu *target_fpu = &target->thread.fpu;
25 25
26 if (boot_cpu_has(X86_FEATURE_FXSR) && target_fpu->fpstate_active)26 if (boot_cpu_has(X86_FEATURE_FXSR) && target_fpu->initialized)
27 return regset->n;27 return regset->n;
28 else28 else
29 return 0;29 return 0;
@@ -38,7 +38,7 @@ int xfpregs_get(struct task_struct *target, const struct user_regset *regset, · 8 unmodified lines
38 if (!boot_cpu_has(X86_FEATURE_FXSR))38 if (!boot_cpu_has(X86_FEATURE_FXSR))
39 return -ENODEV;39 return -ENODEV;
40 40
41 fpu__activate_fpstate_read(fpu);41 fpu__prepare_read(fpu);
42 fpstate_sanitize_xstate(fpu);42 fpstate_sanitize_xstate(fpu);
43 43
44 return user_regset_copyout(&pos, &count, &kbuf, &ubuf,44 return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
@@ -55,7 +55,7 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset, · 10 unmodified lines
55 if (!boot_cpu_has(X86_FEATURE_FXSR))55 if (!boot_cpu_has(X86_FEATURE_FXSR))
56 return -ENODEV;56 return -ENODEV;
57 57
58 fpu__activate_fpstate_write(fpu);58 fpu__prepare_write(fpu);
59 fpstate_sanitize_xstate(fpu);59 fpstate_sanitize_xstate(fpu);
60 60
61 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,61 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
@@ -89,10 +89,13 @@ int xstateregs_get(struct task_struct *target, const struct user_regset *regset, · 27 unmodified lines
89 89
90 xsave = &fpu->state.xsave;90 xsave = &fpu->state.xsave;
91 91
92 fpu__activate_fpstate_read(fpu);92 fpu__prepare_read(fpu);
93 93
94 if (using_compacted_format()) {94 if (using_compacted_format()) {
95 ret = copyout_from_xsaves(pos, count, kbuf, ubuf, xsave);95 if (kbuf)
96 ret = copy_xstate_to_kernel(kbuf, xsave, pos, count);
97 else
98 ret = copy_xstate_to_user(ubuf, xsave, pos, count);
96 } else {99 } else {
97 fpstate_sanitize_xstate(fpu);100 fpstate_sanitize_xstate(fpu);
98 /*101 /*
@@ -129,28 +132,29 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset, · 30 unmodified lines
129 132
130 xsave = &fpu->state.xsave;133 xsave = &fpu->state.xsave;
131 134
132 fpu__activate_fpstate_write(fpu);135 fpu__prepare_write(fpu);
133 136
134 if (boot_cpu_has(X86_FEATURE_XSAVES))137 if (using_compacted_format()) {
135 ret = copyin_to_xsaves(kbuf, ubuf, xsave);138 if (kbuf)
136 else139 ret = copy_kernel_to_xstate(xsave, kbuf);
140 else
141 ret = copy_user_to_xstate(xsave, ubuf);
142 } else {
137 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, xsave, 0, -1);143 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, xsave, 0, -1);
138 144 if (!ret)
139 /*145 ret = validate_xstate_header(&xsave->header);
140 * In case of failure, mark all states as init:146 }
141 */
142 if (ret)
143 fpstate_init(&fpu->state);
144 147
145 /*148 /*
146 * mxcsr reserved bits must be masked to zero for security reasons.149 * mxcsr reserved bits must be masked to zero for security reasons.
147 */150 */
148 xsave->i387.mxcsr &= mxcsr_feature_mask;151 xsave->i387.mxcsr &= mxcsr_feature_mask;
149 xsave->header.xfeatures &= xfeatures_mask;152
150 /*153 /*
151 * These bits must be zero.154 * In case of failure, mark all states as init:
152 */155 */
153 memset(&xsave->header.reserved, 0, 48);156 if (ret)
157 fpstate_init(&fpu->state);
154 158
155 return ret;159 return ret;
156}160}
@@ -299,7 +303,7 @@ int fpregs_get(struct task_struct *target, const struct user_regset *regset, · 142 unmodified lines
299 struct fpu *fpu = &target->thread.fpu;303 struct fpu *fpu = &target->thread.fpu;
300 struct user_i387_ia32_struct env;304 struct user_i387_ia32_struct env;
301 305
302 fpu__activate_fpstate_read(fpu);306 fpu__prepare_read(fpu);
303 307
304 if (!boot_cpu_has(X86_FEATURE_FPU))308 if (!boot_cpu_has(X86_FEATURE_FPU))
305 return fpregs_soft_get(target, regset, pos, count, kbuf, ubuf);309 return fpregs_soft_get(target, regset, pos, count, kbuf, ubuf);
@@ -329,7 +333,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset, · 23 unmodified lines
329 struct user_i387_ia32_struct env;333 struct user_i387_ia32_struct env;
330 int ret;334 int ret;
331 335
332 fpu__activate_fpstate_write(fpu);336 fpu__prepare_write(fpu);
333 fpstate_sanitize_xstate(fpu);337 fpstate_sanitize_xstate(fpu);
334 338
335 if (!boot_cpu_has(X86_FEATURE_FPU))339 if (!boot_cpu_has(X86_FEATURE_FPU))
@@ -369,7 +373,7 @@ int dump_fpu(struct pt_regs *regs, struct user_i387_struct *ufpu) · 33 unmodified lines
369 struct fpu *fpu = &tsk->thread.fpu;373 struct fpu *fpu = &tsk->thread.fpu;
370 int fpvalid;374 int fpvalid;
371 375
372 fpvalid = fpu->fpstate_active;376 fpvalid = fpu->initialized;
373 if (fpvalid)377 if (fpvalid)
374 fpvalid = !fpregs_get(tsk, NULL,378 fpvalid = !fpregs_get(tsk, NULL,
375 0, sizeof(struct user_i387_ia32_struct),379 0, sizeof(struct user_i387_ia32_struct),
arch/x86/kernel/fpu/signal.c+21−16
@@ -155,7 +155,8 @@ static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf) · 154 unmodified lines
155 */155 */
156int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)156int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
157{157{
158 struct xregs_state *xsave = &current->thread.fpu.state.xsave;158 struct fpu *fpu = &current->thread.fpu;
159 struct xregs_state *xsave = &fpu->state.xsave;
159 struct task_struct *tsk = current;160 struct task_struct *tsk = current;
160 int ia32_fxstate = (buf != buf_fx);161 int ia32_fxstate = (buf != buf_fx);
161 162
@@ -170,13 +171,13 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size) · 8 unmodified lines
170 sizeof(struct user_i387_ia32_struct), NULL,171 sizeof(struct user_i387_ia32_struct), NULL,
171 (struct _fpstate_32 __user *) buf) ? -1 : 1;172 (struct _fpstate_32 __user *) buf) ? -1 : 1;
172 173
173 if (fpregs_active() || using_compacted_format()) {174 if (fpu->initialized || using_compacted_format()) {
174 /* Save the live register state to the user directly. */175 /* Save the live register state to the user directly. */
175 if (copy_fpregs_to_sigframe(buf_fx))176 if (copy_fpregs_to_sigframe(buf_fx))
176 return -1;177 return -1;
177 /* Update the thread's fxstate to save the fsave header. */178 /* Update the thread's fxstate to save the fsave header. */
178 if (ia32_fxstate)179 if (ia32_fxstate)
179 copy_fxregs_to_kernel(&tsk->thread.fpu);180 copy_fxregs_to_kernel(fpu);
180 } else {181 } else {
181 /*182 /*
182 * It is a *bug* if kernel uses compacted-format for xsave183 * It is a *bug* if kernel uses compacted-format for xsave
@@ -189,7 +190,7 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size) · 6 unmodified lines
189 return -1;190 return -1;
190 }191 }
191 192
192 fpstate_sanitize_xstate(&tsk->thread.fpu);193 fpstate_sanitize_xstate(fpu);
193 if (__copy_to_user(buf_fx, xsave, fpu_user_xstate_size))194 if (__copy_to_user(buf_fx, xsave, fpu_user_xstate_size))
194 return -1;195 return -1;
195 }196 }
@@ -213,8 +214,11 @@ sanitize_restored_xstate(struct task_struct *tsk, · 17 unmodified lines
213 struct xstate_header *header = &xsave->header;214 struct xstate_header *header = &xsave->header;
214 215
215 if (use_xsave()) {216 if (use_xsave()) {
216 /* These bits must be zero. */217 /*
217 memset(header->reserved, 0, 48);218 * Note: we don't need to zero the reserved bits in the
219 * xstate_header here because we either didn't copy them at all,
220 * or we checked earlier that they aren't set.
221 */
218 222
219 /*223 /*
220 * Init the state that is not present in the memory224 * Init the state that is not present in the memory
@@ -223,7 +227,7 @@ sanitize_restored_xstate(struct task_struct *tsk, · 2 unmodified lines
223 if (fx_only)227 if (fx_only)
224 header->xfeatures = XFEATURE_MASK_FPSSE;228 header->xfeatures = XFEATURE_MASK_FPSSE;
225 else229 else
226 header->xfeatures &= (xfeatures_mask & xfeatures);230 header->xfeatures &= xfeatures;
227 }231 }
228 232
229 if (use_fxsr()) {233 if (use_fxsr()) {
@@ -279,7 +283,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) · 49 unmodified lines
279 if (!access_ok(VERIFY_READ, buf, size))283 if (!access_ok(VERIFY_READ, buf, size))
280 return -EACCES;284 return -EACCES;
281 285
282 fpu__activate_curr(fpu);286 fpu__initialize(fpu);
283 287
284 if (!static_cpu_has(X86_FEATURE_FPU))288 if (!static_cpu_has(X86_FEATURE_FPU))
285 return fpregs_soft_set(current, NULL,289 return fpregs_soft_set(current, NULL,
@@ -307,28 +311,29 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) · 21 unmodified lines
307 /*311 /*
308 * For 32-bit frames with fxstate, copy the user state to the312 * For 32-bit frames with fxstate, copy the user state to the
309 * thread's fpu state, reconstruct fxstate from the fsave313 * thread's fpu state, reconstruct fxstate from the fsave
310 * header. Sanitize the copied state etc.314 * header. Validate and sanitize the copied state.
311 */315 */
312 struct fpu *fpu = &tsk->thread.fpu;316 struct fpu *fpu = &tsk->thread.fpu;
313 struct user_i387_ia32_struct env;317 struct user_i387_ia32_struct env;
314 int err = 0;318 int err = 0;
315 319
316 /*320 /*
317 * Drop the current fpu which clears fpu->fpstate_active. This ensures321 * Drop the current fpu which clears fpu->initialized. This ensures
318 * that any context-switch during the copy of the new state,322 * that any context-switch during the copy of the new state,
319 * avoids the intermediate state from getting restored/saved.323 * avoids the intermediate state from getting restored/saved.
320 * Thus avoiding the new restored state from getting corrupted.324 * Thus avoiding the new restored state from getting corrupted.
321 * We will be ready to restore/save the state only after325 * We will be ready to restore/save the state only after
322 * fpu->fpstate_active is again set.326 * fpu->initialized is again set.
323 */327 */
324 fpu__drop(fpu);328 fpu__drop(fpu);
325 329
326 if (using_compacted_format()) {330 if (using_compacted_format()) {
327 err = copyin_to_xsaves(NULL, buf_fx,331 err = copy_user_to_xstate(&fpu->state.xsave, buf_fx);
328 &fpu->state.xsave);
329 } else {332 } else {
330 err = __copy_from_user(&fpu->state.xsave,333 err = __copy_from_user(&fpu->state.xsave, buf_fx, state_size);
331 buf_fx, state_size);334
335 if (!err && state_size > offsetof(struct xregs_state, header))
336 err = validate_xstate_header(&fpu->state.xsave.header);
332 }337 }
333 338
334 if (err || __copy_from_user(&env, buf, sizeof(env))) {339 if (err || __copy_from_user(&env, buf, sizeof(env))) {
@@ -339,7 +344,7 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) · 4 unmodified lines
339 sanitize_restored_xstate(tsk, &env, xfeatures, fx_only);344 sanitize_restored_xstate(tsk, &env, xfeatures, fx_only);
340 }345 }
341 346
342 fpu->fpstate_active = 1;347 fpu->initialized = 1;
343 preempt_disable();348 preempt_disable();
344 fpu__restore(fpu);349 fpu__restore(fpu);
345 preempt_enable();350 preempt_enable();
arch/x86/kernel/fpu/xstate.c+213−51
@@ -483,6 +483,30 @@ int using_compacted_format(void) · 482 unmodified lines
483 return boot_cpu_has(X86_FEATURE_XSAVES);483 return boot_cpu_has(X86_FEATURE_XSAVES);
484}484}
485 485
486/* Validate an xstate header supplied by userspace (ptrace or sigreturn) */
487int validate_xstate_header(const struct xstate_header *hdr)
488{
489 /* No unknown or supervisor features may be set */
490 if (hdr->xfeatures & (~xfeatures_mask | XFEATURE_MASK_SUPERVISOR))
491 return -EINVAL;
492
493 /* Userspace must use the uncompacted format */
494 if (hdr->xcomp_bv)
495 return -EINVAL;
496
497 /*
498 * If 'reserved' is shrunken to add a new field, make sure to validate
499 * that new field here!
500 */
501 BUILD_BUG_ON(sizeof(hdr->reserved) != 48);
502
503 /* No reserved bits may be set */
504 if (memchr_inv(hdr->reserved, 0, sizeof(hdr->reserved)))
505 return -EINVAL;
506
507 return 0;
508}
509
486static void __xstate_dump_leaves(void)510static void __xstate_dump_leaves(void)
487{511{
488 int i;512 int i;
@@ -867,7 +891,7 @@ const void *get_xsave_field_ptr(int xsave_state) · 378 unmodified lines
867{891{
868 struct fpu *fpu = &current->thread.fpu;892 struct fpu *fpu = &current->thread.fpu;
869 893
870 if (!fpu->fpstate_active)894 if (!fpu->initialized)
871 return NULL;895 return NULL;
872 /*896 /*
873 * fpu__save() takes the CPU's xstate registers897 * fpu__save() takes the CPU's xstate registers
@@ -920,39 +944,130 @@ int arch_set_user_pkey_access(struct task_struct *tsk, int pkey, · 46 unmodified lines
920}944}
921#endif /* ! CONFIG_ARCH_HAS_PKEYS */945#endif /* ! CONFIG_ARCH_HAS_PKEYS */
922 946
947/*
948 * Weird legacy quirk: SSE and YMM states store information in the
949 * MXCSR and MXCSR_FLAGS fields of the FP area. That means if the FP
950 * area is marked as unused in the xfeatures header, we need to copy
951 * MXCSR and MXCSR_FLAGS if either SSE or YMM are in use.
952 */
953static inline bool xfeatures_mxcsr_quirk(u64 xfeatures)
954{
955 if (!(xfeatures & (XFEATURE_MASK_SSE|XFEATURE_MASK_YMM)))
956 return false;
957
958 if (xfeatures & XFEATURE_MASK_FP)
959 return false;
960
961 return true;
962}
963
923/*964/*
924 * This is similar to user_regset_copyout(), but will not add offset to965 * This is similar to user_regset_copyout(), but will not add offset to
925 * the source data pointer or increment pos, count, kbuf, and ubuf.966 * the source data pointer or increment pos, count, kbuf, and ubuf.
926 */967 */
927static inline int xstate_copyout(unsigned int pos, unsigned int count,968static inline void
928 void *kbuf, void __user *ubuf,969__copy_xstate_to_kernel(void *kbuf, const void *data,
929 const void *data, const int start_pos,970 unsigned int offset, unsigned int size, unsigned int size_total)
930 const int end_pos)
931{971{
932 if ((count == 0) || (pos < start_pos))972 if (offset < size_total) {
933 return 0;973 unsigned int copy = min(size, size_total - offset);
934 974
935 if (end_pos < 0 || pos < end_pos) {975 memcpy(kbuf + offset, data, copy);
936 unsigned int copy = (end_pos < 0 ? count : min(count, end_pos - pos));976 }
977}
937 978
938 if (kbuf) {979/*
939 memcpy(kbuf + pos, data, copy);980 * Convert from kernel XSAVES compacted format to standard format and copy
940 } else {981 * to a kernel-space ptrace buffer.
941 if (__copy_to_user(ubuf + pos, data, copy))982 *
942 return -EFAULT;983 * It supports partial copy but pos always starts from zero. This is called
984 * from xstateregs_get() and there we check the CPU has XSAVES.
985 */
986int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int offset_start, unsigned int size_total)
987{
988 unsigned int offset, size;
989 struct xstate_header header;
990 int i;
991
992 /*
993 * Currently copy_regset_to_user() starts from pos 0:
994 */
995 if (unlikely(offset_start != 0))
996 return -EFAULT;
997
998 /*
999 * The destination is a ptrace buffer; we put in only user xstates:
1000 */
1001 memset(&header, 0, sizeof(header));
1002 header.xfeatures = xsave->header.xfeatures;
1003 header.xfeatures &= ~XFEATURE_MASK_SUPERVISOR;
1004
1005 /*
1006 * Copy xregs_state->header:
1007 */
1008 offset = offsetof(struct xregs_state, header);
1009 size = sizeof(header);
1010
1011 __copy_xstate_to_kernel(kbuf, &header, offset, size, size_total);
1012
1013 for (i = 0; i < XFEATURE_MAX; i++) {
1014 /*
1015 * Copy only in-use xstates:
1016 */
1017 if ((header.xfeatures >> i) & 1) {
1018 void *src = __raw_xsave_addr(xsave, 1 << i);
1019
1020 offset = xstate_offsets[i];
1021 size = xstate_sizes[i];
1022
1023 /* The next component has to fit fully into the output buffer: */
1024 if (offset + size > size_total)
1025 break;
1026
1027 __copy_xstate_to_kernel(kbuf, src, offset, size, size_total);
943 }1028 }
1029
1030 }
1031
1032 if (xfeatures_mxcsr_quirk(header.xfeatures)) {
1033 offset = offsetof(struct fxregs_state, mxcsr);
1034 size = MXCSR_AND_FLAGS_SIZE;
1035 __copy_xstate_to_kernel(kbuf, &xsave->i387.mxcsr, offset, size, size_total);
1036 }
1037
1038 /*
1039 * Fill xsave->i387.sw_reserved value for ptrace frame:
1040 */
1041 offset = offsetof(struct fxregs_state, sw_reserved);
1042 size = sizeof(xstate_fx_sw_bytes);
1043
1044 __copy_xstate_to_kernel(kbuf, xstate_fx_sw_bytes, offset, size, size_total);
1045
1046 return 0;
1047}
1048
1049static inline int
1050__copy_xstate_to_user(void __user *ubuf, const void *data, unsigned int offset, unsigned int size, unsigned int size_total)
1051{
1052 if (!size)
1053 return 0;
1054
1055 if (offset < size_total) {
1056 unsigned int copy = min(size, size_total - offset);
1057
1058 if (__copy_to_user(ubuf + offset, data, copy))
1059 return -EFAULT;
944 }1060 }
945 return 0;1061 return 0;
946}1062}
947 1063
948/*1064/*
949 * Convert from kernel XSAVES compacted format to standard format and copy1065 * Convert from kernel XSAVES compacted format to standard format and copy
950 * to a ptrace buffer. It supports partial copy but pos always starts from1066 * to a user-space buffer. It supports partial copy but pos always starts from
951 * zero. This is called from xstateregs_get() and there we check the CPU1067 * zero. This is called from xstateregs_get() and there we check the CPU
952 * has XSAVES.1068 * has XSAVES.
953 */1069 */
954int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf,1070int copy_xstate_to_user(void __user *ubuf, struct xregs_state *xsave, unsigned int offset_start, unsigned int size_total)
955 void __user *ubuf, struct xregs_state *xsave)
956{1071{
957 unsigned int offset, size;1072 unsigned int offset, size;
958 int ret, i;1073 int ret, i;
@@ -961,7 +1076,7 @@ int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf, · 2 unmodified lines
961 /*1076 /*
962 * Currently copy_regset_to_user() starts from pos 0:1077 * Currently copy_regset_to_user() starts from pos 0:
963 */1078 */
964 if (unlikely(pos != 0))1079 if (unlikely(offset_start != 0))
965 return -EFAULT;1080 return -EFAULT;
966 1081
967 /*1082 /*
@@ -977,8 +1092,7 @@ int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf, · 9 unmodified lines
977 offset = offsetof(struct xregs_state, header);1092 offset = offsetof(struct xregs_state, header);
978 size = sizeof(header);1093 size = sizeof(header);
979 1094
980 ret = xstate_copyout(offset, size, kbuf, ubuf, &header, 0, count);1095 ret = __copy_xstate_to_user(ubuf, &header, offset, size, size_total);
981
982 if (ret)1096 if (ret)
983 return ret;1097 return ret;
984 1098
@@ -992,25 +1106,30 @@ int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf, · 7 unmodified lines
992 offset = xstate_offsets[i];1106 offset = xstate_offsets[i];
993 size = xstate_sizes[i];1107 size = xstate_sizes[i];
994 1108
995 ret = xstate_copyout(offset, size, kbuf, ubuf, src, 0, count);1109 /* The next component has to fit fully into the output buffer: */
1110 if (offset + size > size_total)
1111 break;
996 1112
1113 ret = __copy_xstate_to_user(ubuf, src, offset, size, size_total);
997 if (ret)1114 if (ret)
998 return ret;1115 return ret;
999
1000 if (offset + size >= count)
1001 break;
1002 }1116 }
1003 1117
1004 }1118 }
1005 1119
1120 if (xfeatures_mxcsr_quirk(header.xfeatures)) {
1121 offset = offsetof(struct fxregs_state, mxcsr);
1122 size = MXCSR_AND_FLAGS_SIZE;
1123 __copy_xstate_to_user(ubuf, &xsave->i387.mxcsr, offset, size, size_total);
1124 }
1125
1006 /*1126 /*
1007 * Fill xsave->i387.sw_reserved value for ptrace frame:1127 * Fill xsave->i387.sw_reserved value for ptrace frame:
1008 */1128 */
1009 offset = offsetof(struct fxregs_state, sw_reserved);1129 offset = offsetof(struct fxregs_state, sw_reserved);
1010 size = sizeof(xstate_fx_sw_bytes);1130 size = sizeof(xstate_fx_sw_bytes);
1011 1131
1012 ret = xstate_copyout(offset, size, kbuf, ubuf, xstate_fx_sw_bytes, 0, count);1132 ret = __copy_xstate_to_user(ubuf, xstate_fx_sw_bytes, offset, size, size_total);
1013
1014 if (ret)1133 if (ret)
1015 return ret;1134 return ret;
1016 1135
@@ -1018,55 +1137,98 @@ int copyout_from_xsaves(unsigned int pos, unsigned int count, void *kbuf, · 1 unmodified line
1018}1137}
1019 1138
1020/*1139/*
1021 * Convert from a ptrace standard-format buffer to kernel XSAVES format1140 * Convert from a ptrace standard-format kernel buffer to kernel XSAVES format
1022 * and copy to the target thread. This is called from xstateregs_set() and1141 * and copy to the target thread. This is called from xstateregs_set().
1023 * there we check the CPU has XSAVES and a whole standard-sized buffer
1024 * exists.
1025 */1142 */
1026int copyin_to_xsaves(const void *kbuf, const void __user *ubuf,1143int copy_kernel_to_xstate(struct xregs_state *xsave, const void *kbuf)
1027 struct xregs_state *xsave)
1028{1144{
1029 unsigned int offset, size;1145 unsigned int offset, size;
1030 int i;1146 int i;
1031 u64 xfeatures;1147 struct xstate_header hdr;
1032 u64 allowed_features;
1033 1148
1034 offset = offsetof(struct xregs_state, header);1149 offset = offsetof(struct xregs_state, header);
1035 size = sizeof(xfeatures);1150 size = sizeof(hdr);
1036 1151
1037 if (kbuf) {1152 memcpy(&hdr, kbuf + offset, size);
1038 memcpy(&xfeatures, kbuf + offset, size);1153
1039 } else {1154 if (validate_xstate_header(&hdr))
1040 if (__copy_from_user(&xfeatures, ubuf + offset, size))1155 return -EINVAL;
1041 return -EFAULT;1156
1157 for (i = 0; i < XFEATURE_MAX; i++) {
1158 u64 mask = ((u64)1 << i);
1159
1160 if (hdr.xfeatures & mask) {
1161 void *dst = __raw_xsave_addr(xsave, 1 << i);
1162
1163 offset = xstate_offsets[i];
1164 size = xstate_sizes[i];
1165
1166 memcpy(dst, kbuf + offset, size);
1167 }
1168 }
1169
1170 if (xfeatures_mxcsr_quirk(hdr.xfeatures)) {
1171 offset = offsetof(struct fxregs_state, mxcsr);
1172 size = MXCSR_AND_FLAGS_SIZE;
1173 memcpy(&xsave->i387.mxcsr, kbuf + offset, size);
1042 }1174 }
1043 1175
1044 /*1176 /*
1045 * Reject if the user sets any disabled or supervisor features:1177 * The state that came in from userspace was user-state only.
1178 * Mask all the user states out of 'xfeatures':
1179 */
1180 xsave->header.xfeatures &= XFEATURE_MASK_SUPERVISOR;
1181
1182 /*
1183 * Add back in the features that came in from userspace:
1046 */1184 */
1047 allowed_features = xfeatures_mask & ~XFEATURE_MASK_SUPERVISOR;1185 xsave->header.xfeatures |= hdr.xfeatures;
1048 1186
1049 if (xfeatures & ~allowed_features)1187 return 0;
1188}
1189
1190/*
1191 * Convert from a ptrace or sigreturn standard-format user-space buffer to
1192 * kernel XSAVES format and copy to the target thread. This is called from
1193 * xstateregs_set(), as well as potentially from the sigreturn() and
1194 * rt_sigreturn() system calls.
1195 */
1196int copy_user_to_xstate(struct xregs_state *xsave, const void __user *ubuf)
1197{
1198 unsigned int offset, size;
1199 int i;
1200 struct xstate_header hdr;
1201
1202 offset = offsetof(struct xregs_state, header);
1203 size = sizeof(hdr);
1204
1205 if (__copy_from_user(&hdr, ubuf + offset, size))
1206 return -EFAULT;
1207
1208 if (validate_xstate_header(&hdr))
1050 return -EINVAL;1209 return -EINVAL;
1051 1210
1052 for (i = 0; i < XFEATURE_MAX; i++) {1211 for (i = 0; i < XFEATURE_MAX; i++) {
1053 u64 mask = ((u64)1 << i);1212 u64 mask = ((u64)1 << i);
1054 1213
1055 if (xfeatures & mask) {1214 if (hdr.xfeatures & mask) {
1056 void *dst = __raw_xsave_addr(xsave, 1 << i);1215 void *dst = __raw_xsave_addr(xsave, 1 << i);
1057 1216
1058 offset = xstate_offsets[i];1217 offset = xstate_offsets[i];
1059 size = xstate_sizes[i];1218 size = xstate_sizes[i];
1060 1219
1061 if (kbuf) {1220 if (__copy_from_user(dst, ubuf + offset, size))
1062 memcpy(dst, kbuf + offset, size);1221 return -EFAULT;
1063 } else {
1064 if (__copy_from_user(dst, ubuf + offset, size))
1065 return -EFAULT;
1066 }
1067 }1222 }
1068 }1223 }
1069 1224
1225 if (xfeatures_mxcsr_quirk(hdr.xfeatures)) {
1226 offset = offsetof(struct fxregs_state, mxcsr);
1227 size = MXCSR_AND_FLAGS_SIZE;
1228 if (__copy_from_user(&xsave->i387.mxcsr, ubuf + offset, size))
1229 return -EFAULT;
1230 }
1231
1070 /*1232 /*
1071 * The state that came in from userspace was user-state only.1233 * The state that came in from userspace was user-state only.
1072 * Mask all the user states out of 'xfeatures':1234 * Mask all the user states out of 'xfeatures':
@@ -1076,7 +1238,7 @@ int copyin_to_xsaves(const void *kbuf, const void __user *ubuf, · 3 unmodified lines
1076 /*1238 /*
1077 * Add back in the features that came in from userspace:1239 * Add back in the features that came in from userspace:
1078 */1240 */
1079 xsave->header.xfeatures |= xfeatures;1241 xsave->header.xfeatures |= hdr.xfeatures;
1080 1242
1081 return 0;1243 return 0;
1082}1244}
arch/x86/kernel/irq_32.c+3−3
@@ -64,7 +64,7 @@ static void call_on_stack(void *func, void *stack) · 63 unmodified lines
64 64
65static inline void *current_stack(void)65static inline void *current_stack(void)
66{66{
67 return (void *)(current_stack_pointer() & ~(THREAD_SIZE - 1));67 return (void *)(current_stack_pointer & ~(THREAD_SIZE - 1));
68}68}
69 69
70static inline int execute_on_irq_stack(int overflow, struct irq_desc *desc)70static inline int execute_on_irq_stack(int overflow, struct irq_desc *desc)
@@ -88,7 +88,7 @@ static inline int execute_on_irq_stack(int overflow, struct irq_desc *desc) · 17 unmodified lines
88 88
89 /* Save the next esp at the bottom of the stack */89 /* Save the next esp at the bottom of the stack */
90 prev_esp = (u32 *)irqstk;90 prev_esp = (u32 *)irqstk;
91 *prev_esp = current_stack_pointer();91 *prev_esp = current_stack_pointer;
92 92
93 if (unlikely(overflow))93 if (unlikely(overflow))
94 call_on_stack(print_stack_overflow, isp);94 call_on_stack(print_stack_overflow, isp);
@@ -139,7 +139,7 @@ void do_softirq_own_stack(void) · 44 unmodified lines
139 139
140 /* Push the previous esp onto the stack */140 /* Push the previous esp onto the stack */
141 prev_esp = (u32 *)irqstk;141 prev_esp = (u32 *)irqstk;
142 *prev_esp = current_stack_pointer();142 *prev_esp = current_stack_pointer;
143 143
144 call_on_stack(__do_softirq, isp);144 call_on_stack(__do_softirq, isp);
145}145}
arch/x86/kernel/ksysfs.c+1−1
@@ -299,7 +299,7 @@ static int __init create_setup_data_nodes(struct kobject *parent) · 298 unmodified lines
299 return 0;299 return 0;
300 300
301out_clean_nodes:301out_clean_nodes:
302 for (j = i - 1; j > 0; j--)302 for (j = i - 1; j >= 0; j--)
303 cleanup_setup_data_node(*(kobjp + j));303 cleanup_setup_data_node(*(kobjp + j));
304 kfree(kobjp);304 kfree(kobjp);
305out_setup_data_kobj:305out_setup_data_kobj:
arch/x86/kernel/kvm.c+10−3
@@ -117,7 +117,11 @@ static struct kvm_task_sleep_node *_find_apf_task(struct kvm_task_sleep_head *b, · 116 unmodified lines
117 return NULL;117 return NULL;
118}118}
119 119
120void kvm_async_pf_task_wait(u32 token)120/*
121 * @interrupt_kernel: Is this called from a routine which interrupts the kernel
122 * (other than user space)?
123 */
124void kvm_async_pf_task_wait(u32 token, int interrupt_kernel)
121{125{
122 u32 key = hash_32(token, KVM_TASK_SLEEP_HASHBITS);126 u32 key = hash_32(token, KVM_TASK_SLEEP_HASHBITS);
123 struct kvm_task_sleep_head *b = &async_pf_sleepers[key];127 struct kvm_task_sleep_head *b = &async_pf_sleepers[key];
@@ -140,7 +144,10 @@ void kvm_async_pf_task_wait(u32 token) · 16 unmodified lines
140 144
141 n.token = token;145 n.token = token;
142 n.cpu = smp_processor_id();146 n.cpu = smp_processor_id();
143 n.halted = is_idle_task(current) || preempt_count() > 1;147 n.halted = is_idle_task(current) ||
148 (IS_ENABLED(CONFIG_PREEMPT_COUNT)
149 ? preempt_count() > 1 || rcu_preempt_depth()
150 : interrupt_kernel);
144 init_swait_queue_head(&n.wq);151 init_swait_queue_head(&n.wq);
145 hlist_add_head(&n.link, &b->list);152 hlist_add_head(&n.link, &b->list);
146 raw_spin_unlock(&b->lock);153 raw_spin_unlock(&b->lock);
@@ -268,7 +275,7 @@ do_async_page_fault(struct pt_regs *regs, unsigned long error_code) · 121 unmodified lines
268 case KVM_PV_REASON_PAGE_NOT_PRESENT:275 case KVM_PV_REASON_PAGE_NOT_PRESENT:
269 /* page is swapped out by the host. */276 /* page is swapped out by the host. */
270 prev_state = exception_enter();277 prev_state = exception_enter();
271 kvm_async_pf_task_wait((u32)read_cr2());278 kvm_async_pf_task_wait((u32)read_cr2(), !user_mode(regs));
272 exception_exit(prev_state);279 exception_exit(prev_state);
273 break;280 break;
274 case KVM_PV_REASON_PAGE_READY:281 case KVM_PV_REASON_PAGE_READY:
arch/x86/kernel/signal.c+3−3
@@ -263,7 +263,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, · 262 unmodified lines
263 sp = (unsigned long) ka->sa.sa_restorer;263 sp = (unsigned long) ka->sa.sa_restorer;
264 }264 }
265 265
266 if (fpu->fpstate_active) {266 if (fpu->initialized) {
267 sp = fpu__alloc_mathframe(sp, IS_ENABLED(CONFIG_X86_32),267 sp = fpu__alloc_mathframe(sp, IS_ENABLED(CONFIG_X86_32),
268 &buf_fx, &math_size);268 &buf_fx, &math_size);
269 *fpstate = (void __user *)sp;269 *fpstate = (void __user *)sp;
@@ -279,7 +279,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, · 9 unmodified lines
279 return (void __user *)-1L;279 return (void __user *)-1L;
280 280
281 /* save i387 and extended state */281 /* save i387 and extended state */
282 if (fpu->fpstate_active &&282 if (fpu->initialized &&
283 copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size) < 0)283 copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size) < 0)
284 return (void __user *)-1L;284 return (void __user *)-1L;
285 285
@@ -755,7 +755,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 469 unmodified lines
755 /*755 /*
756 * Ensure the signal handler starts with the new fpu state.756 * Ensure the signal handler starts with the new fpu state.
757 */757 */
758 if (fpu->fpstate_active)758 if (fpu->initialized)
759 fpu__clear(fpu);759 fpu__clear(fpu);
760 }760 }
761 signal_setup_done(failed, ksig, stepping);761 signal_setup_done(failed, ksig, stepping);
arch/x86/kernel/smpboot.c+7−6
@@ -232,12 +232,6 @@ static void notrace start_secondary(void *unused) · 231 unmodified lines
232 */232 */
233 if (boot_cpu_has(X86_FEATURE_PCID))233 if (boot_cpu_has(X86_FEATURE_PCID))
234 __write_cr4(__read_cr4() | X86_CR4_PCIDE);234 __write_cr4(__read_cr4() | X86_CR4_PCIDE);
235 cpu_init();
236 x86_cpuinit.early_percpu_clock_init();
237 preempt_disable();
238 smp_callin();
239
240 enable_start_cpu0 = 0;
241 235
242#ifdef CONFIG_X86_32236#ifdef CONFIG_X86_32
243 /* switch away from the initial page table */237 /* switch away from the initial page table */
@@ -245,6 +239,13 @@ static void notrace start_secondary(void *unused) · 1 unmodified line
245 __flush_tlb_all();239 __flush_tlb_all();
246#endif240#endif
247 241
242 cpu_init();
243 x86_cpuinit.early_percpu_clock_init();
244 preempt_disable();
245 smp_callin();
246
247 enable_start_cpu0 = 0;
248
248 /* otherwise gcc will move up smp_processor_id before the cpu_init */249 /* otherwise gcc will move up smp_processor_id before the cpu_init */
249 barrier();250 barrier();
250 /*251 /*
arch/x86/kernel/traps.c+1−1
@@ -142,7 +142,7 @@ void ist_begin_non_atomic(struct pt_regs *regs) · 141 unmodified lines
142 * from double_fault.142 * from double_fault.
143 */143 */
144 BUG_ON((unsigned long)(current_top_of_stack() -144 BUG_ON((unsigned long)(current_top_of_stack() -
145 current_stack_pointer()) >= THREAD_SIZE);145 current_stack_pointer) >= THREAD_SIZE);
146 146
147 preempt_enable_no_resched();147 preempt_enable_no_resched();
148}148}
arch/x86/kvm/Kconfig+1−0
@@ -23,6 +23,7 @@ config KVM · 22 unmodified lines
23 depends on HIGH_RES_TIMERS23 depends on HIGH_RES_TIMERS
24 # for TASKSTATS/TASK_DELAY_ACCT:24 # for TASKSTATS/TASK_DELAY_ACCT:
25 depends on NET && MULTIUSER25 depends on NET && MULTIUSER
26 depends on X86_LOCAL_APIC
26 select PREEMPT_NOTIFIERS27 select PREEMPT_NOTIFIERS
27 select MMU_NOTIFIER28 select MMU_NOTIFIER
28 select ANON_INODES29 select ANON_INODES
arch/x86/kvm/emulate.c+10−7
@@ -425,8 +425,10 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); · 424 unmodified lines
425 #op " %al \n\t" \425 #op " %al \n\t" \
426 FOP_RET426 FOP_RET
427 427
428asm(".global kvm_fastop_exception \n"428asm(".pushsection .fixup, \"ax\"\n"
429 "kvm_fastop_exception: xor %esi, %esi; ret");429 ".global kvm_fastop_exception \n"
430 "kvm_fastop_exception: xor %esi, %esi; ret\n"
431 ".popsection");
430 432
431FOP_START(setcc)433FOP_START(setcc)
432FOP_SETCC(seto)434FOP_SETCC(seto)
@@ -4102,10 +4104,12 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt) · 3669 unmodified lines
4102 ctxt->ops->get_msr(ctxt, MSR_EFER, &efer);4104 ctxt->ops->get_msr(ctxt, MSR_EFER, &efer);
4103 if (efer & EFER_LMA) {4105 if (efer & EFER_LMA) {
4104 u64 maxphyaddr;4106 u64 maxphyaddr;
4105 u32 eax = 0x80000008;4107 u32 eax, ebx, ecx, edx;
4106 4108
4107 if (ctxt->ops->get_cpuid(ctxt, &eax, NULL, NULL,4109 eax = 0x80000008;
4108 NULL, false))4110 ecx = 0;
4111 if (ctxt->ops->get_cpuid(ctxt, &eax, &ebx, &ecx,
4112 &edx, false))
4109 maxphyaddr = eax & 0xff;4113 maxphyaddr = eax & 0xff;
4110 else4114 else
4111 maxphyaddr = 36;4115 maxphyaddr = 36;
@@ -5296,7 +5300,6 @@ static void fetch_possible_mmx_operand(struct x86_emulate_ctxt *ctxt, · 1184 unmodified lines
5296 5300
5297static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *))5301static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *))
5298{5302{
5299 register void *__sp asm(_ASM_SP);
5300 ulong flags = (ctxt->eflags & EFLAGS_MASK) | X86_EFLAGS_IF;5303 ulong flags = (ctxt->eflags & EFLAGS_MASK) | X86_EFLAGS_IF;
5301 5304
5302 if (!(ctxt->d & ByteOp))5305 if (!(ctxt->d & ByteOp))
@@ -5304,7 +5307,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)) · 1 unmodified line
5304 5307
5305 asm("push %[flags]; popf; call *%[fastop]; pushf; pop %[flags]\n"5308 asm("push %[flags]; popf; call *%[fastop]; pushf; pop %[flags]\n"
5306 : "+a"(ctxt->dst.val), "+d"(ctxt->src.val), [flags]"+D"(flags),5309 : "+a"(ctxt->dst.val), "+d"(ctxt->src.val), [flags]"+D"(flags),
5307 [fastop]"+S"(fop), "+r"(__sp)5310 [fastop]"+S"(fop), ASM_CALL_CONSTRAINT
5308 : "c"(ctxt->src2.val));5311 : "c"(ctxt->src2.val));
5309 5312
5310 ctxt->eflags = (ctxt->eflags & ~EFLAGS_MASK) | (flags & EFLAGS_MASK);5313 ctxt->eflags = (ctxt->eflags & ~EFLAGS_MASK) | (flags & EFLAGS_MASK);
arch/x86/kvm/mmu.c+1−1
@@ -3837,7 +3837,7 @@ int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code, · 3836 unmodified lines
3837 case KVM_PV_REASON_PAGE_NOT_PRESENT:3837 case KVM_PV_REASON_PAGE_NOT_PRESENT:
3838 vcpu->arch.apf.host_apf_reason = 0;3838 vcpu->arch.apf.host_apf_reason = 0;
3839 local_irq_disable();3839 local_irq_disable();
3840 kvm_async_pf_task_wait(fault_address);3840 kvm_async_pf_task_wait(fault_address, 0);
3841 local_irq_enable();3841 local_irq_enable();
3842 break;3842 break;
3843 case KVM_PV_REASON_PAGE_READY:3843 case KVM_PV_REASON_PAGE_READY:
arch/x86/kvm/vmx.c+124−124
@@ -200,6 +200,8 @@ struct loaded_vmcs { · 199 unmodified lines
200 int cpu;200 int cpu;
201 bool launched;201 bool launched;
202 bool nmi_known_unmasked;202 bool nmi_known_unmasked;
203 unsigned long vmcs_host_cr3; /* May not match real cr3 */
204 unsigned long vmcs_host_cr4; /* May not match real cr4 */
203 struct list_head loaded_vmcss_on_cpu_link;205 struct list_head loaded_vmcss_on_cpu_link;
204};206};
205 207
@@ -600,8 +602,6 @@ struct vcpu_vmx { · 394 unmodified lines
600 int gs_ldt_reload_needed;602 int gs_ldt_reload_needed;
601 int fs_reload_needed;603 int fs_reload_needed;
602 u64 msr_host_bndcfgs;604 u64 msr_host_bndcfgs;
603 unsigned long vmcs_host_cr3; /* May not match real cr3 */
604 unsigned long vmcs_host_cr4; /* May not match real cr4 */
605 } host_state;605 } host_state;
606 struct {606 struct {
607 int vm86_active;607 int vm86_active;
@@ -2202,46 +2202,44 @@ static void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu) · 1594 unmodified lines
2202 struct pi_desc old, new;2202 struct pi_desc old, new;
2203 unsigned int dest;2203 unsigned int dest;
2204 2204
2205 if (!kvm_arch_has_assigned_device(vcpu->kvm) ||2205 /*
2206 !irq_remapping_cap(IRQ_POSTING_CAP) ||2206 * In case of hot-plug or hot-unplug, we may have to undo
2207 !kvm_vcpu_apicv_active(vcpu))2207 * vmx_vcpu_pi_put even if there is no assigned device. And we
2208 * always keep PI.NDST up to date for simplicity: it makes the
2209 * code easier, and CPU migration is not a fast path.
2210 */
2211 if (!pi_test_sn(pi_desc) && vcpu->cpu == cpu)
2212 return;
2213
2214 /*
2215 * First handle the simple case where no cmpxchg is necessary; just
2216 * allow posting non-urgent interrupts.
2217 *
2218 * If the 'nv' field is POSTED_INTR_WAKEUP_VECTOR, do not change
2219 * PI.NDST: pi_post_block will do it for us and the wakeup_handler
2220 * expects the VCPU to be on the blocked_vcpu_list that matches
2221 * PI.NDST.
2222 */
2223 if (pi_desc->nv == POSTED_INTR_WAKEUP_VECTOR ||
2224 vcpu->cpu == cpu) {
2225 pi_clear_sn(pi_desc);
2208 return;2226 return;
2227 }
2209 2228
2229 /* The full case. */
2210 do {2230 do {
2211 old.control = new.control = pi_desc->control;2231 old.control = new.control = pi_desc->control;
2212 2232
2213 /*2233 dest = cpu_physical_id(cpu);
2214 * If 'nv' field is POSTED_INTR_WAKEUP_VECTOR, there
2215 * are two possible cases:
2216 * 1. After running 'pre_block', context switch
2217 * happened. For this case, 'sn' was set in
2218 * vmx_vcpu_put(), so we need to clear it here.
2219 * 2. After running 'pre_block', we were blocked,
2220 * and woken up by some other guy. For this case,
2221 * we don't need to do anything, 'pi_post_block'
2222 * will do everything for us. However, we cannot
2223 * check whether it is case #1 or case #2 here
2224 * (maybe, not needed), so we also clear sn here,
2225 * I think it is not a big deal.
2226 */
2227 if (pi_desc->nv != POSTED_INTR_WAKEUP_VECTOR) {
2228 if (vcpu->cpu != cpu) {
2229 dest = cpu_physical_id(cpu);
2230
2231 if (x2apic_enabled())
2232 new.ndst = dest;
2233 else
2234 new.ndst = (dest << 8) & 0xFF00;
2235 }
2236 2234
2237 /* set 'NV' to 'notification vector' */2235 if (x2apic_enabled())
2238 new.nv = POSTED_INTR_VECTOR;2236 new.ndst = dest;
2239 }2237 else
2238 new.ndst = (dest << 8) & 0xFF00;
2240 2239
2241 /* Allow posting non-urgent interrupts */
2242 new.sn = 0;2240 new.sn = 0;
2243 } while (cmpxchg(&pi_desc->control, old.control,2241 } while (cmpxchg64(&pi_desc->control, old.control,
2244 new.control) != old.control);2242 new.control) != old.control);
2245}2243}
2246 2244
2247static void decache_tsc_multiplier(struct vcpu_vmx *vmx)2245static void decache_tsc_multiplier(struct vcpu_vmx *vmx)
@@ -5077,21 +5075,30 @@ static inline bool kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu, · 2829 unmodified lines
5077 int pi_vec = nested ? POSTED_INTR_NESTED_VECTOR : POSTED_INTR_VECTOR;5075 int pi_vec = nested ? POSTED_INTR_NESTED_VECTOR : POSTED_INTR_VECTOR;
5078 5076
5079 if (vcpu->mode == IN_GUEST_MODE) {5077 if (vcpu->mode == IN_GUEST_MODE) {
5080 struct vcpu_vmx *vmx = to_vmx(vcpu);
5081
5082 /*5078 /*
5083 * Currently, we don't support urgent interrupt,5079 * The vector of interrupt to be delivered to vcpu had
5084 * all interrupts are recognized as non-urgent5080 * been set in PIR before this function.
5085 * interrupt, so we cannot post interrupts when5081 *
5086 * 'SN' is set.5082 * Following cases will be reached in this block, and
5083 * we always send a notification event in all cases as
5084 * explained below.
5085 *
5086 * Case 1: vcpu keeps in non-root mode. Sending a
5087 * notification event posts the interrupt to vcpu.
5087 *5088 *
5088 * If the vcpu is in guest mode, it means it is5089 * Case 2: vcpu exits to root mode and is still
5089 * running instead of being scheduled out and5090 * runnable. PIR will be synced to vIRR before the
5090 * waiting in the run queue, and that's the only5091 * next vcpu entry. Sending a notification event in
5091 * case when 'SN' is set currently, warning if5092 * this case has no effect, as vcpu is not in root
5092 * 'SN' is set.5093 * mode.
5094 *
5095 * Case 3: vcpu exits to root mode and is blocked.
5096 * vcpu_block() has already synced PIR to vIRR and
5097 * never blocks vcpu if vIRR is not cleared. Therefore,
5098 * a blocked vcpu here does not wait for any requested
5099 * interrupts in PIR, and sending a notification event
5100 * which has no effect is safe here.
5093 */5101 */
5094 WARN_ON_ONCE(pi_test_sn(&vmx->pi_desc));
5095 5102
5096 apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), pi_vec);5103 apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), pi_vec);
5097 return true;5104 return true;
@@ -5169,12 +5176,12 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) · 71 unmodified lines
5169 */5176 */
5170 cr3 = __read_cr3();5177 cr3 = __read_cr3();
5171 vmcs_writel(HOST_CR3, cr3); /* 22.2.3 FIXME: shadow tables */5178 vmcs_writel(HOST_CR3, cr3); /* 22.2.3 FIXME: shadow tables */
5172 vmx->host_state.vmcs_host_cr3 = cr3;5179 vmx->loaded_vmcs->vmcs_host_cr3 = cr3;
5173 5180
5174 /* Save the most likely value for this task's CR4 in the VMCS. */5181 /* Save the most likely value for this task's CR4 in the VMCS. */
5175 cr4 = cr4_read_shadow();5182 cr4 = cr4_read_shadow();
5176 vmcs_writel(HOST_CR4, cr4); /* 22.2.3, 22.2.5 */5183 vmcs_writel(HOST_CR4, cr4); /* 22.2.3, 22.2.5 */
5177 vmx->host_state.vmcs_host_cr4 = cr4;5184 vmx->loaded_vmcs->vmcs_host_cr4 = cr4;
5178 5185
5179 vmcs_write16(HOST_CS_SELECTOR, __KERNEL_CS); /* 22.2.4 */5186 vmcs_write16(HOST_CS_SELECTOR, __KERNEL_CS); /* 22.2.4 */
5180#ifdef CONFIG_X86_645187#ifdef CONFIG_X86_64
@@ -9036,7 +9043,6 @@ static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx) · 3855 unmodified lines
9036static void vmx_handle_external_intr(struct kvm_vcpu *vcpu)9043static void vmx_handle_external_intr(struct kvm_vcpu *vcpu)
9037{9044{
9038 u32 exit_intr_info = vmcs_read32(VM_EXIT_INTR_INFO);9045 u32 exit_intr_info = vmcs_read32(VM_EXIT_INTR_INFO);
9039 register void *__sp asm(_ASM_SP);
9040 9046
9041 if ((exit_intr_info & (INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK))9047 if ((exit_intr_info & (INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK))
9042 == (INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR)) {9048 == (INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR)) {
@@ -9065,7 +9071,7 @@ static void vmx_handle_external_intr(struct kvm_vcpu *vcpu) · 22 unmodified lines
9065#ifdef CONFIG_X86_649071#ifdef CONFIG_X86_64
9066 [sp]"=&r"(tmp),9072 [sp]"=&r"(tmp),
9067#endif9073#endif
9068 "+r"(__sp)9074 ASM_CALL_CONSTRAINT
9069 :9075 :
9070 [entry]"r"(entry),9076 [entry]"r"(entry),
9071 [ss]"i"(__KERNEL_DS),9077 [ss]"i"(__KERNEL_DS),
@@ -9265,15 +9271,15 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) · 193 unmodified lines
9265 vmcs_writel(GUEST_RIP, vcpu->arch.regs[VCPU_REGS_RIP]);9271 vmcs_writel(GUEST_RIP, vcpu->arch.regs[VCPU_REGS_RIP]);
9266 9272
9267 cr3 = __get_current_cr3_fast();9273 cr3 = __get_current_cr3_fast();
9268 if (unlikely(cr3 != vmx->host_state.vmcs_host_cr3)) {9274 if (unlikely(cr3 != vmx->loaded_vmcs->vmcs_host_cr3)) {
9269 vmcs_writel(HOST_CR3, cr3);9275 vmcs_writel(HOST_CR3, cr3);
9270 vmx->host_state.vmcs_host_cr3 = cr3;9276 vmx->loaded_vmcs->vmcs_host_cr3 = cr3;
9271 }9277 }
9272 9278
9273 cr4 = cr4_read_shadow();9279 cr4 = cr4_read_shadow();
9274 if (unlikely(cr4 != vmx->host_state.vmcs_host_cr4)) {9280 if (unlikely(cr4 != vmx->loaded_vmcs->vmcs_host_cr4)) {
9275 vmcs_writel(HOST_CR4, cr4);9281 vmcs_writel(HOST_CR4, cr4);
9276 vmx->host_state.vmcs_host_cr4 = cr4;9282 vmx->loaded_vmcs->vmcs_host_cr4 = cr4;
9277 }9283 }
9278 9284
9279 /* When single-stepping over STI and MOV SS, we must clear the9285 /* When single-stepping over STI and MOV SS, we must clear the
@@ -9583,6 +9589,13 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id) · 303 unmodified lines
9583 9589
9584 vmx->msr_ia32_feature_control_valid_bits = FEATURE_CONTROL_LOCKED;9590 vmx->msr_ia32_feature_control_valid_bits = FEATURE_CONTROL_LOCKED;
9585 9591
9592 /*
9593 * Enforce invariant: pi_desc.nv is always either POSTED_INTR_VECTOR
9594 * or POSTED_INTR_WAKEUP_VECTOR.
9595 */
9596 vmx->pi_desc.nv = POSTED_INTR_VECTOR;
9597 vmx->pi_desc.sn = 1;
9598
9586 return &vmx->vcpu;9599 return &vmx->vcpu;
9587 9600
9588free_vmcs:9601free_vmcs:
@@ -9831,7 +9844,8 @@ static void vmx_inject_page_fault_nested(struct kvm_vcpu *vcpu, · 242 unmodified lines
9831 9844
9832 WARN_ON(!is_guest_mode(vcpu));9845 WARN_ON(!is_guest_mode(vcpu));
9833 9846
9834 if (nested_vmx_is_page_fault_vmexit(vmcs12, fault->error_code)) {9847 if (nested_vmx_is_page_fault_vmexit(vmcs12, fault->error_code) &&
9848 !to_vmx(vcpu)->nested.nested_run_pending) {
9835 vmcs12->vm_exit_intr_error_code = fault->error_code;9849 vmcs12->vm_exit_intr_error_code = fault->error_code;
9836 nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,9850 nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,
9837 PF_VECTOR | INTR_TYPE_HARD_EXCEPTION |9851 PF_VECTOR | INTR_TYPE_HARD_EXCEPTION |
@@ -11696,6 +11710,37 @@ static void vmx_enable_log_dirty_pt_masked(struct kvm *kvm, · 1858 unmodified lines
11696 kvm_mmu_clear_dirty_pt_masked(kvm, memslot, offset, mask);11710 kvm_mmu_clear_dirty_pt_masked(kvm, memslot, offset, mask);
11697}11711}
11698 11712
11713static void __pi_post_block(struct kvm_vcpu *vcpu)
11714{
11715 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
11716 struct pi_desc old, new;
11717 unsigned int dest;
11718
11719 do {
11720 old.control = new.control = pi_desc->control;
11721 WARN(old.nv != POSTED_INTR_WAKEUP_VECTOR,
11722 "Wakeup handler not enabled while the VCPU is blocked\n");
11723
11724 dest = cpu_physical_id(vcpu->cpu);
11725
11726 if (x2apic_enabled())
11727 new.ndst = dest;
11728 else
11729 new.ndst = (dest << 8) & 0xFF00;
11730
11731 /* set 'NV' to 'notification vector' */
11732 new.nv = POSTED_INTR_VECTOR;
11733 } while (cmpxchg64(&pi_desc->control, old.control,
11734 new.control) != old.control);
11735
11736 if (!WARN_ON_ONCE(vcpu->pre_pcpu == -1)) {
11737 spin_lock(&per_cpu(blocked_vcpu_on_cpu_lock, vcpu->pre_pcpu));
11738 list_del(&vcpu->blocked_vcpu_list);
11739 spin_unlock(&per_cpu(blocked_vcpu_on_cpu_lock, vcpu->pre_pcpu));
11740 vcpu->pre_pcpu = -1;
11741 }
11742}
11743
11699/*11744/*
11700 * This routine does the following things for vCPU which is going11745 * This routine does the following things for vCPU which is going
11701 * to be blocked if VT-d PI is enabled.11746 * to be blocked if VT-d PI is enabled.
@@ -11711,7 +11756,6 @@ static void vmx_enable_log_dirty_pt_masked(struct kvm *kvm, · 9 unmodified lines
11711 */11756 */
11712static int pi_pre_block(struct kvm_vcpu *vcpu)11757static int pi_pre_block(struct kvm_vcpu *vcpu)
11713{11758{
11714 unsigned long flags;
11715 unsigned int dest;11759 unsigned int dest;
11716 struct pi_desc old, new;11760 struct pi_desc old, new;
11717 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);11761 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
@@ -11721,34 +11765,20 @@ static int pi_pre_block(struct kvm_vcpu *vcpu) · 3 unmodified lines
11721 !kvm_vcpu_apicv_active(vcpu))11765 !kvm_vcpu_apicv_active(vcpu))
11722 return 0;11766 return 0;
11723 11767
11724 vcpu->pre_pcpu = vcpu->cpu;11768 WARN_ON(irqs_disabled());
11725 spin_lock_irqsave(&per_cpu(blocked_vcpu_on_cpu_lock,11769 local_irq_disable();
11726 vcpu->pre_pcpu), flags);11770 if (!WARN_ON_ONCE(vcpu->pre_pcpu != -1)) {
11727 list_add_tail(&vcpu->blocked_vcpu_list,11771 vcpu->pre_pcpu = vcpu->cpu;
11728 &per_cpu(blocked_vcpu_on_cpu,11772 spin_lock(&per_cpu(blocked_vcpu_on_cpu_lock, vcpu->pre_pcpu));
11729 vcpu->pre_pcpu));11773 list_add_tail(&vcpu->blocked_vcpu_list,
11730 spin_unlock_irqrestore(&per_cpu(blocked_vcpu_on_cpu_lock,11774 &per_cpu(blocked_vcpu_on_cpu,
11731 vcpu->pre_pcpu), flags);11775 vcpu->pre_pcpu));
11776 spin_unlock(&per_cpu(blocked_vcpu_on_cpu_lock, vcpu->pre_pcpu));
11777 }
11732 11778
11733 do {11779 do {
11734 old.control = new.control = pi_desc->control;11780 old.control = new.control = pi_desc->control;
11735 11781
11736 /*
11737 * We should not block the vCPU if
11738 * an interrupt is posted for it.
11739 */
11740 if (pi_test_on(pi_desc) == 1) {
11741 spin_lock_irqsave(&per_cpu(blocked_vcpu_on_cpu_lock,
11742 vcpu->pre_pcpu), flags);
11743 list_del(&vcpu->blocked_vcpu_list);
11744 spin_unlock_irqrestore(
11745 &per_cpu(blocked_vcpu_on_cpu_lock,
11746 vcpu->pre_pcpu), flags);
11747 vcpu->pre_pcpu = -1;
11748
11749 return 1;
11750 }
11751
11752 WARN((pi_desc->sn == 1),11782 WARN((pi_desc->sn == 1),
11753 "Warning: SN field of posted-interrupts "11783 "Warning: SN field of posted-interrupts "
11754 "is set before blocking\n");11784 "is set before blocking\n");
@@ -11770,10 +11800,15 @@ static int pi_pre_block(struct kvm_vcpu *vcpu) · 15 unmodified lines
11770 11800
11771 /* set 'NV' to 'wakeup vector' */11801 /* set 'NV' to 'wakeup vector' */
11772 new.nv = POSTED_INTR_WAKEUP_VECTOR;11802 new.nv = POSTED_INTR_WAKEUP_VECTOR;
11773 } while (cmpxchg(&pi_desc->control, old.control,11803 } while (cmpxchg64(&pi_desc->control, old.control,
11774 new.control) != old.control);11804 new.control) != old.control);
11775 11805
11776 return 0;11806 /* We should not block the vCPU if an interrupt is posted for it. */
11807 if (pi_test_on(pi_desc) == 1)
11808 __pi_post_block(vcpu);
11809
11810 local_irq_enable();
11811 return (vcpu->pre_pcpu == -1);
11777}11812}
11778 11813
11779static int vmx_pre_block(struct kvm_vcpu *vcpu)11814static int vmx_pre_block(struct kvm_vcpu *vcpu)
@@ -11789,44 +11824,13 @@ static int vmx_pre_block(struct kvm_vcpu *vcpu) · 9 unmodified lines
11789 11824
11790static void pi_post_block(struct kvm_vcpu *vcpu)11825static void pi_post_block(struct kvm_vcpu *vcpu)
11791{11826{
11792 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);11827 if (vcpu->pre_pcpu == -1)
11793 struct pi_desc old, new;
11794 unsigned int dest;
11795 unsigned long flags;
11796
11797 if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
11798 !irq_remapping_cap(IRQ_POSTING_CAP) ||
11799 !kvm_vcpu_apicv_active(vcpu))
11800 return;11828 return;
11801 11829
11802 do {11830 WARN_ON(irqs_disabled());
11803 old.control = new.control = pi_desc->control;11831 local_irq_disable();
11804 11832 __pi_post_block(vcpu);
11805 dest = cpu_physical_id(vcpu->cpu);11833 local_irq_enable();
11806
11807 if (x2apic_enabled())
11808 new.ndst = dest;
11809 else
11810 new.ndst = (dest << 8) & 0xFF00;
11811
11812 /* Allow posting non-urgent interrupts */
11813 new.sn = 0;
11814
11815 /* set 'NV' to 'notification vector' */
11816 new.nv = POSTED_INTR_VECTOR;
11817 } while (cmpxchg(&pi_desc->control, old.control,
11818 new.control) != old.control);
11819
11820 if(vcpu->pre_pcpu != -1) {
11821 spin_lock_irqsave(
11822 &per_cpu(blocked_vcpu_on_cpu_lock,
11823 vcpu->pre_pcpu), flags);
11824 list_del(&vcpu->blocked_vcpu_list);
11825 spin_unlock_irqrestore(
11826 &per_cpu(blocked_vcpu_on_cpu_lock,
11827 vcpu->pre_pcpu), flags);
11828 vcpu->pre_pcpu = -1;
11829 }
11830}11834}
11831 11835
11832static void vmx_post_block(struct kvm_vcpu *vcpu)11836static void vmx_post_block(struct kvm_vcpu *vcpu)
@@ -11911,12 +11915,8 @@ static int vmx_update_pi_irte(struct kvm *kvm, unsigned int host_irq, · 78 unmodified lines
11911 11915
11912 if (set)11916 if (set)
11913 ret = irq_set_vcpu_affinity(host_irq, &vcpu_info);11917 ret = irq_set_vcpu_affinity(host_irq, &vcpu_info);
11914 else {11918 else
11915 /* suppress notification event before unposting */
11916 pi_set_sn(vcpu_to_pi_desc(vcpu));
11917 ret = irq_set_vcpu_affinity(host_irq, NULL);11919 ret = irq_set_vcpu_affinity(host_irq, NULL);
11918 pi_clear_sn(vcpu_to_pi_desc(vcpu));
11919 }
11920 11920
11921 if (ret < 0) {11921 if (ret < 0) {
11922 printk(KERN_INFO "%s: failed to update PI IRTE\n",11922 printk(KERN_INFO "%s: failed to update PI IRTE\n",
arch/x86/kvm/x86.c+1−1
@@ -7225,7 +7225,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) · 7224 unmodified lines
7225 int r;7225 int r;
7226 sigset_t sigsaved;7226 sigset_t sigsaved;
7227 7227
7228 fpu__activate_curr(fpu);7228 fpu__initialize(fpu);
7229 7229
7230 if (vcpu->sigset_active)7230 if (vcpu->sigset_active)
7231 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);7231 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
arch/x86/math-emu/fpu_entry.c+1−1
@@ -114,7 +114,7 @@ void math_emulate(struct math_emu_info *info) · 113 unmodified lines
114 struct desc_struct code_descriptor;114 struct desc_struct code_descriptor;
115 struct fpu *fpu = &current->thread.fpu;115 struct fpu *fpu = &current->thread.fpu;
116 116
117 fpu__activate_curr(fpu);117 fpu__initialize(fpu);
118 118
119#ifdef RE_ENTRANT_CHECKING119#ifdef RE_ENTRANT_CHECKING
120 if (emulating) {120 if (emulating) {
arch/x86/mm/extable.c+24−0
@@ -2,6 +2,7 @@ · 1 unmodified line
2#include <linux/uaccess.h>2#include <linux/uaccess.h>
3#include <linux/sched/debug.h>3#include <linux/sched/debug.h>
4 4
5#include <asm/fpu/internal.h>
5#include <asm/traps.h>6#include <asm/traps.h>
6#include <asm/kdebug.h>7#include <asm/kdebug.h>
7 8
@@ -78,6 +79,29 @@ bool ex_handler_refcount(const struct exception_table_entry *fixup, · 70 unmodified lines
78}79}
79EXPORT_SYMBOL_GPL(ex_handler_refcount);80EXPORT_SYMBOL_GPL(ex_handler_refcount);
80 81
82/*
83 * Handler for when we fail to restore a task's FPU state. We should never get
84 * here because the FPU state of a task using the FPU (task->thread.fpu.state)
85 * should always be valid. However, past bugs have allowed userspace to set
86 * reserved bits in the XSAVE area using PTRACE_SETREGSET or sys_rt_sigreturn().
87 * These caused XRSTOR to fail when switching to the task, leaking the FPU
88 * registers of the task previously executing on the CPU. Mitigate this class
89 * of vulnerability by restoring from the initial state (essentially, zeroing
90 * out all the FPU registers) if we can't restore from the task's FPU state.
91 */
92bool ex_handler_fprestore(const struct exception_table_entry *fixup,
93 struct pt_regs *regs, int trapnr)
94{
95 regs->ip = ex_fixup_addr(fixup);
96
97 WARN_ONCE(1, "Bad FPU state detected at %pB, reinitializing FPU registers.",
98 (void *)instruction_pointer(regs));
99
100 __copy_kernel_to_fpregs(&init_fpstate, -1);
101 return true;
102}
103EXPORT_SYMBOL_GPL(ex_handler_fprestore);
104
81bool ex_handler_ext(const struct exception_table_entry *fixup,105bool ex_handler_ext(const struct exception_table_entry *fixup,
82 struct pt_regs *regs, int trapnr)106 struct pt_regs *regs, int trapnr)
83{107{
arch/x86/mm/fault.c+25−25
@@ -192,8 +192,7 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) · 191 unmodified lines
192 * 6. T1 : reaches here, sees vma_pkey(vma)=5, when we really192 * 6. T1 : reaches here, sees vma_pkey(vma)=5, when we really
193 * faulted on a pte with its pkey=4.193 * faulted on a pte with its pkey=4.
194 */194 */
195static void fill_sig_info_pkey(int si_code, siginfo_t *info,195static void fill_sig_info_pkey(int si_code, siginfo_t *info, u32 *pkey)
196 struct vm_area_struct *vma)
197{196{
198 /* This is effectively an #ifdef */197 /* This is effectively an #ifdef */
199 if (!boot_cpu_has(X86_FEATURE_OSPKE))198 if (!boot_cpu_has(X86_FEATURE_OSPKE))
@@ -209,7 +208,7 @@ static void fill_sig_info_pkey(int si_code, siginfo_t *info, · 9 unmodified lines
209 * valid VMA, so we should never reach this without a208 * valid VMA, so we should never reach this without a
210 * valid VMA.209 * valid VMA.
211 */210 */
212 if (!vma) {211 if (!pkey) {
213 WARN_ONCE(1, "PKU fault with no VMA passed in");212 WARN_ONCE(1, "PKU fault with no VMA passed in");
214 info->si_pkey = 0;213 info->si_pkey = 0;
215 return;214 return;
@@ -219,13 +218,12 @@ static void fill_sig_info_pkey(int si_code, siginfo_t *info, · 3 unmodified lines
219 * absolutely guranteed to be 100% accurate because of218 * absolutely guranteed to be 100% accurate because of
220 * the race explained above.219 * the race explained above.
221 */220 */
222 info->si_pkey = vma_pkey(vma);221 info->si_pkey = *pkey;
223}222}
224 223
225static void224static void
226force_sig_info_fault(int si_signo, int si_code, unsigned long address,225force_sig_info_fault(int si_signo, int si_code, unsigned long address,
227 struct task_struct *tsk, struct vm_area_struct *vma,226 struct task_struct *tsk, u32 *pkey, int fault)
228 int fault)
229{227{
230 unsigned lsb = 0;228 unsigned lsb = 0;
231 siginfo_t info;229 siginfo_t info;
@@ -240,7 +238,7 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, · 8 unmodified lines
240 lsb = PAGE_SHIFT;238 lsb = PAGE_SHIFT;
241 info.si_addr_lsb = lsb;239 info.si_addr_lsb = lsb;
242 240
243 fill_sig_info_pkey(si_code, &info, vma);241 fill_sig_info_pkey(si_code, &info, pkey);
244 242
245 force_sig_info(si_signo, &info, tsk);243 force_sig_info(si_signo, &info, tsk);
246}244}
@@ -762,8 +760,6 @@ no_context(struct pt_regs *regs, unsigned long error_code, · 515 unmodified lines
762 struct task_struct *tsk = current;760 struct task_struct *tsk = current;
763 unsigned long flags;761 unsigned long flags;
764 int sig;762 int sig;
765 /* No context means no VMA to pass down */
766 struct vm_area_struct *vma = NULL;
767 763
768 /* Are we prepared to handle this kernel fault? */764 /* Are we prepared to handle this kernel fault? */
769 if (fixup_exception(regs, X86_TRAP_PF)) {765 if (fixup_exception(regs, X86_TRAP_PF)) {
@@ -788,7 +784,7 @@ no_context(struct pt_regs *regs, unsigned long error_code, · 18 unmodified lines
788 784
789 /* XXX: hwpoison faults will set the wrong code. */785 /* XXX: hwpoison faults will set the wrong code. */
790 force_sig_info_fault(signal, si_code, address,786 force_sig_info_fault(signal, si_code, address,
791 tsk, vma, 0);787 tsk, NULL, 0);
792 }788 }
793 789
794 /*790 /*
@@ -806,7 +802,6 @@ no_context(struct pt_regs *regs, unsigned long error_code, · 11 unmodified lines
806 if (is_vmalloc_addr((void *)address) &&802 if (is_vmalloc_addr((void *)address) &&
807 (((unsigned long)tsk->stack - 1 - address < PAGE_SIZE) ||803 (((unsigned long)tsk->stack - 1 - address < PAGE_SIZE) ||
808 address - ((unsigned long)tsk->stack + THREAD_SIZE) < PAGE_SIZE)) {804 address - ((unsigned long)tsk->stack + THREAD_SIZE) < PAGE_SIZE)) {
809 register void *__sp asm("rsp");
810 unsigned long stack = this_cpu_read(orig_ist.ist[DOUBLEFAULT_STACK]) - sizeof(void *);805 unsigned long stack = this_cpu_read(orig_ist.ist[DOUBLEFAULT_STACK]) - sizeof(void *);
811 /*806 /*
812 * We're likely to be running with very little stack space807 * We're likely to be running with very little stack space
@@ -821,7 +816,7 @@ no_context(struct pt_regs *regs, unsigned long error_code, · 8 unmodified lines
821 asm volatile ("movq %[stack], %%rsp\n\t"816 asm volatile ("movq %[stack], %%rsp\n\t"
822 "call handle_stack_overflow\n\t"817 "call handle_stack_overflow\n\t"
823 "1: jmp 1b"818 "1: jmp 1b"
824 : "+r" (__sp)819 : ASM_CALL_CONSTRAINT
825 : "D" ("kernel stack overflow (page fault)"),820 : "D" ("kernel stack overflow (page fault)"),
826 "S" (regs), "d" (address),821 "S" (regs), "d" (address),
827 [stack] "rm" (stack));822 [stack] "rm" (stack));
@@ -897,8 +892,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code, · 69 unmodified lines
897 892
898static void893static void
899__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,894__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
900 unsigned long address, struct vm_area_struct *vma,895 unsigned long address, u32 *pkey, int si_code)
901 int si_code)
902{896{
903 struct task_struct *tsk = current;897 struct task_struct *tsk = current;
904 898
@@ -946,7 +940,7 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, · 41 unmodified lines
946 tsk->thread.error_code = error_code;940 tsk->thread.error_code = error_code;
947 tsk->thread.trap_nr = X86_TRAP_PF;941 tsk->thread.trap_nr = X86_TRAP_PF;
948 942
949 force_sig_info_fault(SIGSEGV, si_code, address, tsk, vma, 0);943 force_sig_info_fault(SIGSEGV, si_code, address, tsk, pkey, 0);
950 944
951 return;945 return;
952 }946 }
@@ -959,9 +953,9 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, · 6 unmodified lines
959 953
960static noinline void954static noinline void
961bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,955bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
962 unsigned long address, struct vm_area_struct *vma)956 unsigned long address, u32 *pkey)
963{957{
964 __bad_area_nosemaphore(regs, error_code, address, vma, SEGV_MAPERR);958 __bad_area_nosemaphore(regs, error_code, address, pkey, SEGV_MAPERR);
965}959}
966 960
967static void961static void
@@ -969,6 +963,10 @@ __bad_area(struct pt_regs *regs, unsigned long error_code, · 1 unmodified line
969 unsigned long address, struct vm_area_struct *vma, int si_code)963 unsigned long address, struct vm_area_struct *vma, int si_code)
970{964{
971 struct mm_struct *mm = current->mm;965 struct mm_struct *mm = current->mm;
966 u32 pkey;
967
968 if (vma)
969 pkey = vma_pkey(vma);
972 970
973 /*971 /*
974 * Something tried to access memory that isn't in our memory map..972 * Something tried to access memory that isn't in our memory map..
@@ -976,7 +974,8 @@ __bad_area(struct pt_regs *regs, unsigned long error_code, · 1 unmodified line
976 */974 */
977 up_read(&mm->mmap_sem);975 up_read(&mm->mmap_sem);
978 976
979 __bad_area_nosemaphore(regs, error_code, address, vma, si_code);977 __bad_area_nosemaphore(regs, error_code, address,
978 (vma) ? &pkey : NULL, si_code);
980}979}
981 980
982static noinline void981static noinline void
@@ -1019,7 +1018,7 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code, · 36 unmodified lines
1019 1018
1020static void1019static void
1021do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,1020do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
1022 struct vm_area_struct *vma, unsigned int fault)1021 u32 *pkey, unsigned int fault)
1023{1022{
1024 struct task_struct *tsk = current;1023 struct task_struct *tsk = current;
1025 int code = BUS_ADRERR;1024 int code = BUS_ADRERR;
@@ -1046,13 +1045,12 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, · 20 unmodified lines
1046 code = BUS_MCEERR_AR;1045 code = BUS_MCEERR_AR;
1047 }1046 }
1048#endif1047#endif
1049 force_sig_info_fault(SIGBUS, code, address, tsk, vma, fault);1048 force_sig_info_fault(SIGBUS, code, address, tsk, pkey, fault);
1050}1049}
1051 1050
1052static noinline void1051static noinline void
1053mm_fault_error(struct pt_regs *regs, unsigned long error_code,1052mm_fault_error(struct pt_regs *regs, unsigned long error_code,
1054 unsigned long address, struct vm_area_struct *vma,1053 unsigned long address, u32 *pkey, unsigned int fault)
1055 unsigned int fault)
1056{1054{
1057 if (fatal_signal_pending(current) && !(error_code & PF_USER)) {1055 if (fatal_signal_pending(current) && !(error_code & PF_USER)) {
1058 no_context(regs, error_code, address, 0, 0);1056 no_context(regs, error_code, address, 0, 0);
@@ -1076,9 +1074,9 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, · 17 unmodified lines
1076 } else {1074 } else {
1077 if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|1075 if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
1078 VM_FAULT_HWPOISON_LARGE))1076 VM_FAULT_HWPOISON_LARGE))
1079 do_sigbus(regs, error_code, address, vma, fault);1077 do_sigbus(regs, error_code, address, pkey, fault);
1080 else if (fault & VM_FAULT_SIGSEGV)1078 else if (fault & VM_FAULT_SIGSEGV)
1081 bad_area_nosemaphore(regs, error_code, address, vma);1079 bad_area_nosemaphore(regs, error_code, address, pkey);
1082 else1080 else
1083 BUG();1081 BUG();
1084 }1082 }
@@ -1268,6 +1266,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, · 183 unmodified lines
1268 struct mm_struct *mm;1266 struct mm_struct *mm;
1269 int fault, major = 0;1267 int fault, major = 0;
1270 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;1268 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
1269 u32 pkey;
1271 1270
1272 tsk = current;1271 tsk = current;
1273 mm = tsk->mm;1272 mm = tsk->mm;
@@ -1468,9 +1467,10 @@ good_area: · 194 unmodified lines
1468 return;1467 return;
1469 }1468 }
1470 1469
1470 pkey = vma_pkey(vma);
1471 up_read(&mm->mmap_sem);1471 up_read(&mm->mmap_sem);
1472 if (unlikely(fault & VM_FAULT_ERROR)) {1472 if (unlikely(fault & VM_FAULT_ERROR)) {
1473 mm_fault_error(regs, error_code, address, vma, fault);1473 mm_fault_error(regs, error_code, address, &pkey, fault);
1474 return;1474 return;
1475 }1475 }
1476 1476
arch/x86/mm/mem_encrypt.c+2−0
@@ -10,6 +10,8 @@ · 9 unmodified lines
10 * published by the Free Software Foundation.10 * published by the Free Software Foundation.
11 */11 */
12 12
13#define DISABLE_BRANCH_PROFILING
14
13#include <linux/linkage.h>15#include <linux/linkage.h>
14#include <linux/init.h>16#include <linux/init.h>
15#include <linux/mm.h>17#include <linux/mm.h>
arch/x86/mm/pkeys.c+1−2
@@ -18,7 +18,6 @@ · 17 unmodified lines
18 18
19#include <asm/cpufeature.h> /* boot_cpu_has, ... */19#include <asm/cpufeature.h> /* boot_cpu_has, ... */
20#include <asm/mmu_context.h> /* vma_pkey() */20#include <asm/mmu_context.h> /* vma_pkey() */
21#include <asm/fpu/internal.h> /* fpregs_active() */
22 21
23int __execute_only_pkey(struct mm_struct *mm)22int __execute_only_pkey(struct mm_struct *mm)
24{23{
@@ -45,7 +44,7 @@ int __execute_only_pkey(struct mm_struct *mm) · 20 unmodified lines
45 */44 */
46 preempt_disable();45 preempt_disable();
47 if (!need_to_set_mm_pkey &&46 if (!need_to_set_mm_pkey &&
48 fpregs_active() &&47 current->thread.fpu.initialized &&
49 !__pkru_allows_read(read_pkru(), execute_only_pkey)) {48 !__pkru_allows_read(read_pkru(), execute_only_pkey)) {
50 preempt_enable();49 preempt_enable();
51 return execute_only_pkey;50 return execute_only_pkey;
arch/x86/mm/tlb.c+6−7
@@ -126,8 +126,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, · 125 unmodified lines
126 * isn't free.126 * isn't free.
127 */127 */
128#ifdef CONFIG_DEBUG_VM128#ifdef CONFIG_DEBUG_VM
129 if (WARN_ON_ONCE(__read_cr3() !=129 if (WARN_ON_ONCE(__read_cr3() != build_cr3(real_prev, prev_asid))) {
130 (__sme_pa(real_prev->pgd) | prev_asid))) {
131 /*130 /*
132 * If we were to BUG here, we'd be very likely to kill131 * If we were to BUG here, we'd be very likely to kill
133 * the system so hard that we don't see the call trace.132 * the system so hard that we don't see the call trace.
@@ -172,7 +171,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, · 38 unmodified lines
172 */171 */
173 this_cpu_write(cpu_tlbstate.ctxs[prev_asid].tlb_gen,172 this_cpu_write(cpu_tlbstate.ctxs[prev_asid].tlb_gen,
174 next_tlb_gen);173 next_tlb_gen);
175 write_cr3(__sme_pa(next->pgd) | prev_asid);174 write_cr3(build_cr3(next, prev_asid));
176 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH,175 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH,
177 TLB_FLUSH_ALL);176 TLB_FLUSH_ALL);
178 }177 }
@@ -192,7 +191,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, · 13 unmodified lines
192 * mapped in the new pgd, we'll double-fault. Forcibly191 * mapped in the new pgd, we'll double-fault. Forcibly
193 * map it.192 * map it.
194 */193 */
195 unsigned int index = pgd_index(current_stack_pointer());194 unsigned int index = pgd_index(current_stack_pointer);
196 pgd_t *pgd = next->pgd + index;195 pgd_t *pgd = next->pgd + index;
197 196
198 if (unlikely(pgd_none(*pgd)))197 if (unlikely(pgd_none(*pgd)))
@@ -216,12 +215,12 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, · 17 unmodified lines
216 if (need_flush) {215 if (need_flush) {
217 this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);216 this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);
218 this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);217 this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);
219 write_cr3(__sme_pa(next->pgd) | new_asid);218 write_cr3(build_cr3(next, new_asid));
220 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH,219 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH,
221 TLB_FLUSH_ALL);220 TLB_FLUSH_ALL);
222 } else {221 } else {
223 /* The new ASID is already up to date. */222 /* The new ASID is already up to date. */
224 write_cr3(__sme_pa(next->pgd) | new_asid | CR3_NOFLUSH);223 write_cr3(build_cr3_noflush(next, new_asid));
225 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, 0);224 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, 0);
226 }225 }
227 226
@@ -265,7 +264,7 @@ void initialize_tlbstate_and_flush(void) · 37 unmodified lines
265 !(cr4_read_shadow() & X86_CR4_PCIDE));264 !(cr4_read_shadow() & X86_CR4_PCIDE));
266 265
267 /* Force ASID 0 and force a TLB flush. */266 /* Force ASID 0 and force a TLB flush. */
268 write_cr3(cr3 & ~CR3_PCID_MASK);267 write_cr3(build_cr3(mm, 0));
269 268
270 /* Reinitialize tlbstate. */269 /* Reinitialize tlbstate. */
271 this_cpu_write(cpu_tlbstate.loaded_mm_asid, 0);270 this_cpu_write(cpu_tlbstate.loaded_mm_asid, 0);
arch/x86/net/bpf_jit_comp.c+2−2
@@ -284,9 +284,9 @@ static void emit_bpf_tail_call(u8 **pprog) · 283 unmodified lines
284 /* if (index >= array->map.max_entries)284 /* if (index >= array->map.max_entries)
285 * goto out;285 * goto out;
286 */286 */
287 EMIT4(0x48, 0x8B, 0x46, /* mov rax, qword ptr [rsi + 16] */287 EMIT2(0x89, 0xD2); /* mov edx, edx */
288 EMIT3(0x39, 0x56, /* cmp dword ptr [rsi + 16], edx */
288 offsetof(struct bpf_array, map.max_entries));289 offsetof(struct bpf_array, map.max_entries));
289 EMIT3(0x48, 0x39, 0xD0); /* cmp rax, rdx */
290#define OFFSET1 43 /* number of bytes to jump */290#define OFFSET1 43 /* number of bytes to jump */
291 EMIT2(X86_JBE, OFFSET1); /* jbe out */291 EMIT2(X86_JBE, OFFSET1); /* jbe out */
292 label1 = cnt;292 label1 = cnt;
arch/x86/xen/mmu_pv.c+5−10
@@ -1238,21 +1238,16 @@ static void __init xen_pagetable_cleanhighmap(void) · 1237 unmodified lines
1238 * from _brk_limit way up to the max_pfn_mapped (which is the end of1238 * from _brk_limit way up to the max_pfn_mapped (which is the end of
1239 * the ramdisk). We continue on, erasing PMD entries that point to page1239 * the ramdisk). We continue on, erasing PMD entries that point to page
1240 * tables - do note that they are accessible at this stage via __va.1240 * tables - do note that they are accessible at this stage via __va.
1241 * For good measure we also round up to the PMD - which means that if1241 * As Xen is aligning the memory end to a 4MB boundary, for good
1242 * measure we also round up to PMD_SIZE * 2 - which means that if
1242 * anybody is using __ka address to the initial boot-stack - and try1243 * anybody is using __ka address to the initial boot-stack - and try
1243 * to use it - they are going to crash. The xen_start_info has been1244 * to use it - they are going to crash. The xen_start_info has been
1244 * taken care of already in xen_setup_kernel_pagetable. */1245 * taken care of already in xen_setup_kernel_pagetable. */
1245 addr = xen_start_info->pt_base;1246 addr = xen_start_info->pt_base;
1246 size = roundup(xen_start_info->nr_pt_frames * PAGE_SIZE, PMD_SIZE);1247 size = xen_start_info->nr_pt_frames * PAGE_SIZE;
1247 1248
1248 xen_cleanhighmap(addr, addr + size);1249 xen_cleanhighmap(addr, roundup(addr + size, PMD_SIZE * 2));
1249 xen_start_info->pt_base = (unsigned long)__va(__pa(xen_start_info->pt_base));1250 xen_start_info->pt_base = (unsigned long)__va(__pa(xen_start_info->pt_base));
1250#ifdef DEBUG
1251 /* This is superfluous and is not necessary, but you know what
1252 * lets do it. The MODULES_VADDR -> MODULES_END should be clear of
1253 * anything at this stage. */
1254 xen_cleanhighmap(MODULES_VADDR, roundup(MODULES_VADDR, PUD_SIZE) - 1);
1255#endif
1256}1251}
1257#endif1252#endif
1258 1253
@@ -2220,7 +2215,7 @@ static void __init xen_write_cr3_init(unsigned long cr3) · 961 unmodified lines
2220 * not the first page table in the page table pool.2215 * not the first page table in the page table pool.
2221 * Iterate through the initial page tables to find the real page table base.2216 * Iterate through the initial page tables to find the real page table base.
2222 */2217 */
2223static phys_addr_t xen_find_pt_base(pmd_t *pmd)2218static phys_addr_t __init xen_find_pt_base(pmd_t *pmd)
2224{2219{
2225 phys_addr_t pt_base, paddr;2220 phys_addr_t pt_base, paddr;
2226 unsigned pmdidx;2221 unsigned pmdidx;
arch/xtensa/include/asm/processor.h+0−5
@@ -208,11 +208,6 @@ struct mm_struct; · 207 unmodified lines
208/* Free all resources held by a thread. */208/* Free all resources held by a thread. */
209#define release_thread(thread) do { } while(0)209#define release_thread(thread) do { } while(0)
210 210
211/* Copy and release all segment info associated with a VM */
212#define copy_segments(p, mm) do { } while(0)
213#define release_segments(mm) do { } while(0)
214#define forget_segments() do { } while (0)
215
216extern unsigned long get_wchan(struct task_struct *p);211extern unsigned long get_wchan(struct task_struct *p);
217 212
218#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)213#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
block/blk-core.c+3−0
@@ -854,6 +854,9 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) · 853 unmodified lines
854 854
855 kobject_init(&q->kobj, &blk_queue_ktype);855 kobject_init(&q->kobj, &blk_queue_ktype);
856 856
857#ifdef CONFIG_BLK_DEV_IO_TRACE
858 mutex_init(&q->blk_trace_mutex);
859#endif
857 mutex_init(&q->sysfs_lock);860 mutex_init(&q->sysfs_lock);
858 spin_lock_init(&q->__queue_lock);861 spin_lock_init(&q->__queue_lock);
859 862
block/blk-mq-debugfs.c+5−1
@@ -815,10 +815,14 @@ int blk_mq_debugfs_register(struct request_queue *q) · 814 unmodified lines
815 goto err;815 goto err;
816 816
817 /*817 /*
818 * blk_mq_init_hctx() attempted to do this already, but q->debugfs_dir818 * blk_mq_init_sched() attempted to do this already, but q->debugfs_dir
819 * didn't exist yet (because we don't know what to name the directory819 * didn't exist yet (because we don't know what to name the directory
820 * until the queue is registered to a gendisk).820 * until the queue is registered to a gendisk).
821 */821 */
822 if (q->elevator && !q->sched_debugfs_dir)
823 blk_mq_debugfs_register_sched(q);
824
825 /* Similarly, blk_mq_init_hctx() couldn't do this previously. */
822 queue_for_each_hw_ctx(q, hctx, i) {826 queue_for_each_hw_ctx(q, hctx, i) {
823 if (!hctx->debugfs_dir && blk_mq_debugfs_register_hctx(q, hctx))827 if (!hctx->debugfs_dir && blk_mq_debugfs_register_hctx(q, hctx))
824 goto err;828 goto err;
block/blk-throttle.c+2−2
@@ -1911,11 +1911,11 @@ static void throtl_upgrade_state(struct throtl_data *td) · 1910 unmodified lines
1911 1911
1912 tg->disptime = jiffies - 1;1912 tg->disptime = jiffies - 1;
1913 throtl_select_dispatch(sq);1913 throtl_select_dispatch(sq);
1914 throtl_schedule_next_dispatch(sq, false);1914 throtl_schedule_next_dispatch(sq, true);
1915 }1915 }
1916 rcu_read_unlock();1916 rcu_read_unlock();
1917 throtl_select_dispatch(&td->service_queue);1917 throtl_select_dispatch(&td->service_queue);
1918 throtl_schedule_next_dispatch(&td->service_queue, false);1918 throtl_schedule_next_dispatch(&td->service_queue, true);
1919 queue_work(kthrotld_workqueue, &td->dispatch_work);1919 queue_work(kthrotld_workqueue, &td->dispatch_work);
1920}1920}
1921 1921
block/bsg-lib.c+21−7
@@ -154,7 +154,6 @@ static int bsg_prepare_job(struct device *dev, struct request *req) · 153 unmodified lines
154failjob_rls_rqst_payload:154failjob_rls_rqst_payload:
155 kfree(job->request_payload.sg_list);155 kfree(job->request_payload.sg_list);
156failjob_rls_job:156failjob_rls_job:
157 kfree(job);
158 return -ENOMEM;157 return -ENOMEM;
159}158}
160 159
@@ -208,20 +207,34 @@ static int bsg_init_rq(struct request_queue *q, struct request *req, gfp_t gfp) · 47 unmodified lines
208 struct bsg_job *job = blk_mq_rq_to_pdu(req);207 struct bsg_job *job = blk_mq_rq_to_pdu(req);
209 struct scsi_request *sreq = &job->sreq;208 struct scsi_request *sreq = &job->sreq;
210 209
210 /* called right after the request is allocated for the request_queue */
211
212 sreq->sense = kzalloc(SCSI_SENSE_BUFFERSIZE, gfp);
213 if (!sreq->sense)
214 return -ENOMEM;
215
216 return 0;
217}
218
219static void bsg_initialize_rq(struct request *req)
220{
221 struct bsg_job *job = blk_mq_rq_to_pdu(req);
222 struct scsi_request *sreq = &job->sreq;
223 void *sense = sreq->sense;
224
225 /* called right before the request is given to the request_queue user */
226
211 memset(job, 0, sizeof(*job));227 memset(job, 0, sizeof(*job));
212 228
213 scsi_req_init(sreq);229 scsi_req_init(sreq);
230
231 sreq->sense = sense;
214 sreq->sense_len = SCSI_SENSE_BUFFERSIZE;232 sreq->sense_len = SCSI_SENSE_BUFFERSIZE;
215 sreq->sense = kzalloc(sreq->sense_len, gfp);
216 if (!sreq->sense)
217 return -ENOMEM;
218 233
219 job->req = req;234 job->req = req;
220 job->reply = sreq->sense;235 job->reply = sense;
221 job->reply_len = sreq->sense_len;236 job->reply_len = sreq->sense_len;
222 job->dd_data = job + 1;237 job->dd_data = job + 1;
223
224 return 0;
225}238}
226 239
227static void bsg_exit_rq(struct request_queue *q, struct request *req)240static void bsg_exit_rq(struct request_queue *q, struct request *req)
@@ -252,6 +265,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name, · 24 unmodified lines
252 q->cmd_size = sizeof(struct bsg_job) + dd_job_size;265 q->cmd_size = sizeof(struct bsg_job) + dd_job_size;
253 q->init_rq_fn = bsg_init_rq;266 q->init_rq_fn = bsg_init_rq;
254 q->exit_rq_fn = bsg_exit_rq;267 q->exit_rq_fn = bsg_exit_rq;
268 q->initialize_rq_fn = bsg_initialize_rq;
255 q->request_fn = bsg_request_fn;269 q->request_fn = bsg_request_fn;
256 270
257 ret = blk_init_allocated_queue(q);271 ret = blk_init_allocated_queue(q);
block/partition-generic.c+1−1
@@ -112,7 +112,7 @@ ssize_t part_stat_show(struct device *dev, · 111 unmodified lines
112 struct device_attribute *attr, char *buf)112 struct device_attribute *attr, char *buf)
113{113{
114 struct hd_struct *p = dev_to_part(dev);114 struct hd_struct *p = dev_to_part(dev);
115 struct request_queue *q = dev_to_disk(dev)->queue;115 struct request_queue *q = part_to_disk(p)->queue;
116 unsigned int inflight[2];116 unsigned int inflight[2];
117 int cpu;117 int cpu;
118 118
crypto/af_alg.c+2−2
@@ -619,14 +619,14 @@ void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst, · 618 unmodified lines
619 struct af_alg_ctx *ctx = ask->private;619 struct af_alg_ctx *ctx = ask->private;
620 struct af_alg_tsgl *sgl;620 struct af_alg_tsgl *sgl;
621 struct scatterlist *sg;621 struct scatterlist *sg;
622 unsigned int i, j;622 unsigned int i, j = 0;
623 623
624 while (!list_empty(&ctx->tsgl_list)) {624 while (!list_empty(&ctx->tsgl_list)) {
625 sgl = list_first_entry(&ctx->tsgl_list, struct af_alg_tsgl,625 sgl = list_first_entry(&ctx->tsgl_list, struct af_alg_tsgl,
626 list);626 list);
627 sg = sgl->sg;627 sg = sgl->sg;
628 628
629 for (i = 0, j = 0; i < sgl->cur; i++) {629 for (i = 0; i < sgl->cur; i++) {
630 size_t plen = min_t(size_t, used, sg[i].length);630 size_t plen = min_t(size_t, used, sg[i].length);
631 struct page *page = sg_page(sg + i);631 struct page *page = sg_page(sg + i);
632 632
crypto/drbg.c+4−4
@@ -1133,10 +1133,10 @@ static inline void drbg_dealloc_state(struct drbg_state *drbg) · 1132 unmodified lines
1133{1133{
1134 if (!drbg)1134 if (!drbg)
1135 return;1135 return;
1136 kzfree(drbg->V);1136 kzfree(drbg->Vbuf);
1137 drbg->Vbuf = NULL;1137 drbg->V = NULL;
1138 kzfree(drbg->C);1138 kzfree(drbg->Cbuf);
1139 drbg->Cbuf = NULL;1139 drbg->C = NULL;
1140 kzfree(drbg->scratchpadbuf);1140 kzfree(drbg->scratchpadbuf);
1141 drbg->scratchpadbuf = NULL;1141 drbg->scratchpadbuf = NULL;
1142 drbg->reseed_ctr = 0;1142 drbg->reseed_ctr = 0;
drivers/acpi/acpi_watchdog.c+1−1
@@ -66,7 +66,7 @@ void __init acpi_watchdog_init(void) · 65 unmodified lines
66 for (i = 0; i < wdat->entries; i++) {66 for (i = 0; i < wdat->entries; i++) {
67 const struct acpi_generic_address *gas;67 const struct acpi_generic_address *gas;
68 struct resource_entry *rentry;68 struct resource_entry *rentry;
69 struct resource res;69 struct resource res = {};
70 bool found;70 bool found;
71 71
72 gas = &entries[i].register_region;72 gas = &entries[i].register_region;
drivers/acpi/apei/ghes.c+9−7
@@ -743,17 +743,19 @@ static int ghes_proc(struct ghes *ghes) · 742 unmodified lines
743 }743 }
744 ghes_do_proc(ghes, ghes->estatus);744 ghes_do_proc(ghes, ghes->estatus);
745 745
746out:
747 ghes_clear_estatus(ghes);
748
749 if (rc == -ENOENT)
750 return rc;
751
746 /*752 /*
747 * GHESv2 type HEST entries introduce support for error acknowledgment,753 * GHESv2 type HEST entries introduce support for error acknowledgment,
748 * so only acknowledge the error if this support is present.754 * so only acknowledge the error if this support is present.
749 */755 */
750 if (is_hest_type_generic_v2(ghes)) {756 if (is_hest_type_generic_v2(ghes))
751 rc = ghes_ack_error(ghes->generic_v2);757 return ghes_ack_error(ghes->generic_v2);
752 if (rc)758
753 return rc;
754 }
755out:
756 ghes_clear_estatus(ghes);
757 return rc;759 return rc;
758}760}
759 761
drivers/acpi/arm64/iort.c+35−0
@@ -1178,12 +1178,44 @@ dev_put: · 1177 unmodified lines
1178 return ret;1178 return ret;
1179}1179}
1180 1180
1181static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
1182{
1183 if (iort_node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
1184 struct acpi_iort_node *parent;
1185 struct acpi_iort_id_mapping *map;
1186 int i;
1187
1188 map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, iort_node,
1189 iort_node->mapping_offset);
1190
1191 for (i = 0; i < iort_node->mapping_count; i++, map++) {
1192 if (!map->output_reference)
1193 continue;
1194
1195 parent = ACPI_ADD_PTR(struct acpi_iort_node,
1196 iort_table, map->output_reference);
1197 /*
1198 * If we detect a RC->SMMU mapping, make sure
1199 * we enable ACS on the system.
1200 */
1201 if ((parent->type == ACPI_IORT_NODE_SMMU) ||
1202 (parent->type == ACPI_IORT_NODE_SMMU_V3)) {
1203 pci_request_acs();
1204 return true;
1205 }
1206 }
1207 }
1208
1209 return false;
1210}
1211
1181static void __init iort_init_platform_devices(void)1212static void __init iort_init_platform_devices(void)
1182{1213{
1183 struct acpi_iort_node *iort_node, *iort_end;1214 struct acpi_iort_node *iort_node, *iort_end;
1184 struct acpi_table_iort *iort;1215 struct acpi_table_iort *iort;
1185 struct fwnode_handle *fwnode;1216 struct fwnode_handle *fwnode;
1186 int i, ret;1217 int i, ret;
1218 bool acs_enabled = false;
1187 1219
1188 /*1220 /*
1189 * iort_table and iort both point to the start of IORT table, but1221 * iort_table and iort both point to the start of IORT table, but
@@ -1203,6 +1235,9 @@ static void __init iort_init_platform_devices(void) · 13 unmodified lines
1203 return;1235 return;
1204 }1236 }
1205 1237
1238 if (!acs_enabled)
1239 acs_enabled = iort_enable_acs(iort_node);
1240
1206 if ((iort_node->type == ACPI_IORT_NODE_SMMU) ||1241 if ((iort_node->type == ACPI_IORT_NODE_SMMU) ||
1207 (iort_node->type == ACPI_IORT_NODE_SMMU_V3)) {1242 (iort_node->type == ACPI_IORT_NODE_SMMU_V3)) {
1208 1243
drivers/acpi/property.c+19−5
@@ -908,11 +908,12 @@ struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode, · 907 unmodified lines
908 struct fwnode_handle *child)908 struct fwnode_handle *child)
909{909{
910 const struct acpi_device *adev = to_acpi_device_node(fwnode);910 const struct acpi_device *adev = to_acpi_device_node(fwnode);
911 struct acpi_device *child_adev = NULL;
912 const struct list_head *head;911 const struct list_head *head;
913 struct list_head *next;912 struct list_head *next;
914 913
915 if (!child || is_acpi_device_node(child)) {914 if (!child || is_acpi_device_node(child)) {
915 struct acpi_device *child_adev;
916
916 if (adev)917 if (adev)
917 head = &adev->children;918 head = &adev->children;
918 else919 else
@@ -922,8 +923,8 @@ struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode, · 3 unmodified lines
922 goto nondev;923 goto nondev;
923 924
924 if (child) {925 if (child) {
925 child_adev = to_acpi_device_node(child);926 adev = to_acpi_device_node(child);
926 next = child_adev->node.next;927 next = adev->node.next;
927 if (next == head) {928 if (next == head) {
928 child = NULL;929 child = NULL;
929 goto nondev;930 goto nondev;
@@ -941,8 +942,8 @@ struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode, · 11 unmodified lines
941 const struct acpi_data_node *data = to_acpi_data_node(fwnode);942 const struct acpi_data_node *data = to_acpi_data_node(fwnode);
942 struct acpi_data_node *dn;943 struct acpi_data_node *dn;
943 944
944 if (child_adev)945 if (adev)
945 head = &child_adev->data.subnodes;946 head = &adev->data.subnodes;
946 else if (data)947 else if (data)
947 head = &data->data.subnodes;948 head = &data->data.subnodes;
948 else949 else
@@ -1293,3 +1294,16 @@ static int acpi_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode, · 344 unmodified lines
1293DECLARE_ACPI_FWNODE_OPS(acpi_device_fwnode_ops);1294DECLARE_ACPI_FWNODE_OPS(acpi_device_fwnode_ops);
1294DECLARE_ACPI_FWNODE_OPS(acpi_data_fwnode_ops);1295DECLARE_ACPI_FWNODE_OPS(acpi_data_fwnode_ops);
1295const struct fwnode_operations acpi_static_fwnode_ops;1296const struct fwnode_operations acpi_static_fwnode_ops;
1297
1298bool is_acpi_device_node(const struct fwnode_handle *fwnode)
1299{
1300 return !IS_ERR_OR_NULL(fwnode) &&
1301 fwnode->ops == &acpi_device_fwnode_ops;
1302}
1303EXPORT_SYMBOL(is_acpi_device_node);
1304
1305bool is_acpi_data_node(const struct fwnode_handle *fwnode)
1306{
1307 return !IS_ERR_OR_NULL(fwnode) && fwnode->ops == &acpi_data_fwnode_ops;
1308}
1309EXPORT_SYMBOL(is_acpi_data_node);
drivers/android/binder.c+4−4
@@ -2217,7 +2217,7 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, · 2216 unmodified lines
2217 debug_id, (u64)fda->num_fds);2217 debug_id, (u64)fda->num_fds);
2218 continue;2218 continue;
2219 }2219 }
2220 fd_array = (u32 *)(parent_buffer + fda->parent_offset);2220 fd_array = (u32 *)(parent_buffer + (uintptr_t)fda->parent_offset);
2221 for (fd_index = 0; fd_index < fda->num_fds; fd_index++)2221 for (fd_index = 0; fd_index < fda->num_fds; fd_index++)
2222 task_close_fd(proc, fd_array[fd_index]);2222 task_close_fd(proc, fd_array[fd_index]);
2223 } break;2223 } break;
@@ -2326,7 +2326,6 @@ static int binder_translate_handle(struct flat_binder_object *fp, · 102 unmodified lines
2326 (u64)node->ptr);2326 (u64)node->ptr);
2327 binder_node_unlock(node);2327 binder_node_unlock(node);
2328 } else {2328 } else {
2329 int ret;
2330 struct binder_ref_data dest_rdata;2329 struct binder_ref_data dest_rdata;
2331 2330
2332 binder_node_unlock(node);2331 binder_node_unlock(node);
@@ -2442,7 +2441,7 @@ static int binder_translate_fd_array(struct binder_fd_array_object *fda, · 109 unmodified lines
2442 */2441 */
2443 parent_buffer = parent->buffer -2442 parent_buffer = parent->buffer -
2444 binder_alloc_get_user_buffer_offset(&target_proc->alloc);2443 binder_alloc_get_user_buffer_offset(&target_proc->alloc);
2445 fd_array = (u32 *)(parent_buffer + fda->parent_offset);2444 fd_array = (u32 *)(parent_buffer + (uintptr_t)fda->parent_offset);
2446 if (!IS_ALIGNED((unsigned long)fd_array, sizeof(u32))) {2445 if (!IS_ALIGNED((unsigned long)fd_array, sizeof(u32))) {
2447 binder_user_error("%d:%d parent offset not aligned correctly.\n",2446 binder_user_error("%d:%d parent offset not aligned correctly.\n",
2448 proc->pid, thread->pid);2447 proc->pid, thread->pid);
@@ -2508,7 +2507,7 @@ static int binder_fixup_parent(struct binder_transaction *t, · 59 unmodified lines
2508 proc->pid, thread->pid);2507 proc->pid, thread->pid);
2509 return -EINVAL;2508 return -EINVAL;
2510 }2509 }
2511 parent_buffer = (u8 *)(parent->buffer -2510 parent_buffer = (u8 *)((uintptr_t)parent->buffer -
2512 binder_alloc_get_user_buffer_offset(2511 binder_alloc_get_user_buffer_offset(
2513 &target_proc->alloc));2512 &target_proc->alloc));
2514 *(binder_uintptr_t *)(parent_buffer + bp->parent_offset) = bp->buffer;2513 *(binder_uintptr_t *)(parent_buffer + bp->parent_offset) = bp->buffer;
@@ -3083,6 +3082,7 @@ static void binder_transaction(struct binder_proc *proc, · 568 unmodified lines
3083err_dead_proc_or_thread:3082err_dead_proc_or_thread:
3084 return_error = BR_DEAD_REPLY;3083 return_error = BR_DEAD_REPLY;
3085 return_error_line = __LINE__;3084 return_error_line = __LINE__;
3085 binder_dequeue_work(proc, tcomplete);
3086err_translate_failed:3086err_translate_failed:
3087err_bad_object_type:3087err_bad_object_type:
3088err_bad_offset:3088err_bad_offset:
drivers/android/binder_alloc.c+12−6
@@ -913,6 +913,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item, · 912 unmodified lines
913 struct binder_alloc *alloc;913 struct binder_alloc *alloc;
914 uintptr_t page_addr;914 uintptr_t page_addr;
915 size_t index;915 size_t index;
916 struct vm_area_struct *vma;
916 917
917 alloc = page->alloc;918 alloc = page->alloc;
918 if (!mutex_trylock(&alloc->mutex))919 if (!mutex_trylock(&alloc->mutex))
@@ -923,16 +924,22 @@ enum lru_status binder_alloc_free_page(struct list_head *item, · 4 unmodified lines
923 924
924 index = page - alloc->pages;925 index = page - alloc->pages;
925 page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE;926 page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE;
926 if (alloc->vma) {927 vma = alloc->vma;
928 if (vma) {
927 mm = get_task_mm(alloc->tsk);929 mm = get_task_mm(alloc->tsk);
928 if (!mm)930 if (!mm)
929 goto err_get_task_mm_failed;931 goto err_get_task_mm_failed;
930 if (!down_write_trylock(&mm->mmap_sem))932 if (!down_write_trylock(&mm->mmap_sem))
931 goto err_down_write_mmap_sem_failed;933 goto err_down_write_mmap_sem_failed;
934 }
935
936 list_lru_isolate(lru, item);
937 spin_unlock(lock);
932 938
939 if (vma) {
933 trace_binder_unmap_user_start(alloc, index);940 trace_binder_unmap_user_start(alloc, index);
934 941
935 zap_page_range(alloc->vma,942 zap_page_range(vma,
936 page_addr + alloc->user_buffer_offset,943 page_addr + alloc->user_buffer_offset,
937 PAGE_SIZE);944 PAGE_SIZE);
938 945
@@ -950,13 +957,12 @@ enum lru_status binder_alloc_free_page(struct list_head *item, · 11 unmodified lines
950 957
951 trace_binder_unmap_kernel_end(alloc, index);958 trace_binder_unmap_kernel_end(alloc, index);
952 959
953 list_lru_isolate(lru, item);960 spin_lock(lock);
954
955 mutex_unlock(&alloc->mutex);961 mutex_unlock(&alloc->mutex);
956 return LRU_REMOVED;962 return LRU_REMOVED_RETRY;
957 963
958err_down_write_mmap_sem_failed:964err_down_write_mmap_sem_failed:
959 mmput(mm);965 mmput_async(mm);
960err_get_task_mm_failed:966err_get_task_mm_failed:
961err_page_already_freed:967err_page_already_freed:
962 mutex_unlock(&alloc->mutex);968 mutex_unlock(&alloc->mutex);
drivers/ata/ahci.c+4−1
@@ -621,8 +621,11 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev, · 620 unmodified lines
621static int ahci_pci_reset_controller(struct ata_host *host)621static int ahci_pci_reset_controller(struct ata_host *host)
622{622{
623 struct pci_dev *pdev = to_pci_dev(host->dev);623 struct pci_dev *pdev = to_pci_dev(host->dev);
624 int rc;
624 625
625 ahci_reset_controller(host);626 rc = ahci_reset_controller(host);
627 if (rc)
628 return rc;
626 629
627 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {630 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
628 struct ahci_host_priv *hpriv = host->private_data;631 struct ahci_host_priv *hpriv = host->private_data;
drivers/ata/ata_piix.c+1−0
@@ -492,6 +492,7 @@ static const struct ich_laptop ich_laptop[] = { · 491 unmodified lines
492 { 0x27DF, 0x152D, 0x0778 }, /* ICH7 on unknown Intel */492 { 0x27DF, 0x152D, 0x0778 }, /* ICH7 on unknown Intel */
493 { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */493 { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */
494 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */494 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */
495 { 0x24CA, 0x10CF, 0x11AB }, /* ICH4M on Fujitsu-Siemens Lifebook S6120 */
495 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */496 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */
496 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */497 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */
497 { 0x27df, 0x104d, 0x900e }, /* ICH7 on Sony TZ-90 */498 { 0x27df, 0x104d, 0x900e }, /* ICH7 on Sony TZ-90 */
drivers/ata/libata-core.c+10−10
@@ -3234,19 +3234,19 @@ static const struct ata_timing ata_timing[] = { · 3233 unmodified lines
3234};3234};
3235 3235
3236#define ENOUGH(v, unit) (((v)-1)/(unit)+1)3236#define ENOUGH(v, unit) (((v)-1)/(unit)+1)
3237#define EZ(v, unit) ((v)?ENOUGH(v, unit):0)3237#define EZ(v, unit) ((v)?ENOUGH(((v) * 1000), unit):0)
3238 3238
3239static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT)3239static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT)
3240{3240{
3241 q->setup = EZ(t->setup * 1000, T);3241 q->setup = EZ(t->setup, T);
3242 q->act8b = EZ(t->act8b * 1000, T);3242 q->act8b = EZ(t->act8b, T);
3243 q->rec8b = EZ(t->rec8b * 1000, T);3243 q->rec8b = EZ(t->rec8b, T);
3244 q->cyc8b = EZ(t->cyc8b * 1000, T);3244 q->cyc8b = EZ(t->cyc8b, T);
3245 q->active = EZ(t->active * 1000, T);3245 q->active = EZ(t->active, T);
3246 q->recover = EZ(t->recover * 1000, T);3246 q->recover = EZ(t->recover, T);
3247 q->dmack_hold = EZ(t->dmack_hold * 1000, T);3247 q->dmack_hold = EZ(t->dmack_hold, T);
3248 q->cycle = EZ(t->cycle * 1000, T);3248 q->cycle = EZ(t->cycle, T);
3249 q->udma = EZ(t->udma * 1000, UT);3249 q->udma = EZ(t->udma, UT);
3250}3250}
3251 3251
3252void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b,3252void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b,
drivers/auxdisplay/charlcd.c+9−2
@@ -647,18 +647,25 @@ static ssize_t charlcd_write(struct file *file, const char __user *buf, · 646 unmodified lines
647static int charlcd_open(struct inode *inode, struct file *file)647static int charlcd_open(struct inode *inode, struct file *file)
648{648{
649 struct charlcd_priv *priv = to_priv(the_charlcd);649 struct charlcd_priv *priv = to_priv(the_charlcd);
650 int ret;
650 651
652 ret = -EBUSY;
651 if (!atomic_dec_and_test(&charlcd_available))653 if (!atomic_dec_and_test(&charlcd_available))
652 return -EBUSY; /* open only once at a time */654 goto fail; /* open only once at a time */
653 655
656 ret = -EPERM;
654 if (file->f_mode & FMODE_READ) /* device is write-only */657 if (file->f_mode & FMODE_READ) /* device is write-only */
655 return -EPERM;658 goto fail;
656 659
657 if (priv->must_clear) {660 if (priv->must_clear) {
658 charlcd_clear_display(&priv->lcd);661 charlcd_clear_display(&priv->lcd);
659 priv->must_clear = false;662 priv->must_clear = false;
660 }663 }
661 return nonseekable_open(inode, file);664 return nonseekable_open(inode, file);
665
666 fail:
667 atomic_inc(&charlcd_available);
668 return ret;
662}669}
663 670
664static int charlcd_release(struct inode *inode, struct file *file)671static int charlcd_release(struct inode *inode, struct file *file)
drivers/auxdisplay/panel.c+9−2
@@ -1105,14 +1105,21 @@ static ssize_t keypad_read(struct file *file, · 1104 unmodified lines
1105 1105
1106static int keypad_open(struct inode *inode, struct file *file)1106static int keypad_open(struct inode *inode, struct file *file)
1107{1107{
1108 int ret;
1109
1110 ret = -EBUSY;
1108 if (!atomic_dec_and_test(&keypad_available))1111 if (!atomic_dec_and_test(&keypad_available))
1109 return -EBUSY; /* open only once at a time */1112 goto fail; /* open only once at a time */
1110 1113
1114 ret = -EPERM;
1111 if (file->f_mode & FMODE_WRITE) /* device is read-only */1115 if (file->f_mode & FMODE_WRITE) /* device is read-only */
1112 return -EPERM;1116 goto fail;
1113 1117
1114 keypad_buflen = 0; /* flush the buffer on opening */1118 keypad_buflen = 0; /* flush the buffer on opening */
1115 return 0;1119 return 0;
1120 fail:
1121 atomic_inc(&keypad_available);
1122 return ret;
1116}1123}
1117 1124
1118static int keypad_release(struct inode *inode, struct file *file)1125static int keypad_release(struct inode *inode, struct file *file)
drivers/base/arch_topology.c+6−6
@@ -166,11 +166,11 @@ bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) · 165 unmodified lines
166}166}
167 167
168#ifdef CONFIG_CPU_FREQ168#ifdef CONFIG_CPU_FREQ
169static cpumask_var_t cpus_to_visit;169static cpumask_var_t cpus_to_visit __initdata;
170static void parsing_done_workfn(struct work_struct *work);170static void __init parsing_done_workfn(struct work_struct *work);
171static DECLARE_WORK(parsing_done_work, parsing_done_workfn);171static __initdata DECLARE_WORK(parsing_done_work, parsing_done_workfn);
172 172
173static int173static int __init
174init_cpu_capacity_callback(struct notifier_block *nb,174init_cpu_capacity_callback(struct notifier_block *nb,
175 unsigned long val,175 unsigned long val,
176 void *data)176 void *data)
@@ -206,7 +206,7 @@ init_cpu_capacity_callback(struct notifier_block *nb, · 29 unmodified lines
206 return 0;206 return 0;
207}207}
208 208
209static struct notifier_block init_cpu_capacity_notifier = {209static struct notifier_block init_cpu_capacity_notifier __initdata = {
210 .notifier_call = init_cpu_capacity_callback,210 .notifier_call = init_cpu_capacity_callback,
211};211};
212 212
@@ -232,7 +232,7 @@ static int __init register_cpufreq_notifier(void) · 19 unmodified lines
232}232}
233core_initcall(register_cpufreq_notifier);233core_initcall(register_cpufreq_notifier);
234 234
235static void parsing_done_workfn(struct work_struct *work)235static void __init parsing_done_workfn(struct work_struct *work)
236{236{
237 cpufreq_unregister_notifier(&init_cpu_capacity_notifier,237 cpufreq_unregister_notifier(&init_cpu_capacity_notifier,
238 CPUFREQ_POLICY_NOTIFIER);238 CPUFREQ_POLICY_NOTIFIER);
drivers/base/dma-coherent.c+9−10
@@ -348,16 +348,15 @@ static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev) · 347 unmodified lines
348 struct dma_coherent_mem *mem = rmem->priv;348 struct dma_coherent_mem *mem = rmem->priv;
349 int ret;349 int ret;
350 350
351 if (!mem)351 if (!mem) {
352 return -ENODEV;352 ret = dma_init_coherent_memory(rmem->base, rmem->base,
353 353 rmem->size,
354 ret = dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,354 DMA_MEMORY_EXCLUSIVE, &mem);
355 DMA_MEMORY_EXCLUSIVE, &mem);355 if (ret) {
356 356 pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n",
357 if (ret) {357 &rmem->base, (unsigned long)rmem->size / SZ_1M);
358 pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n",358 return ret;
359 &rmem->base, (unsigned long)rmem->size / SZ_1M);359 }
360 return ret;
361 }360 }
362 mem->use_dev_dma_pfn_offset = true;361 mem->use_dev_dma_pfn_offset = true;
363 rmem->priv = mem;362 rmem->priv = mem;
drivers/base/platform.c+2−1
@@ -868,7 +868,8 @@ static ssize_t driver_override_store(struct device *dev, · 867 unmodified lines
868 struct platform_device *pdev = to_platform_device(dev);868 struct platform_device *pdev = to_platform_device(dev);
869 char *driver_override, *old, *cp;869 char *driver_override, *old, *cp;
870 870
871 if (count > PATH_MAX)871 /* We need to keep extra room for a newline */
872 if (count >= (PAGE_SIZE - 1))
872 return -EINVAL;873 return -EINVAL;
873 874
874 driver_override = kstrndup(buf, count, GFP_KERNEL);875 driver_override = kstrndup(buf, count, GFP_KERNEL);
drivers/base/power/main.c+6−3
@@ -1860,10 +1860,13 @@ void device_pm_check_callbacks(struct device *dev) · 1859 unmodified lines
1860{1860{
1861 spin_lock_irq(&dev->power.lock);1861 spin_lock_irq(&dev->power.lock);
1862 dev->power.no_pm_callbacks =1862 dev->power.no_pm_callbacks =
1863 (!dev->bus || pm_ops_is_empty(dev->bus->pm)) &&1863 (!dev->bus || (pm_ops_is_empty(dev->bus->pm) &&
1864 (!dev->class || pm_ops_is_empty(dev->class->pm)) &&1864 !dev->bus->suspend && !dev->bus->resume)) &&
1865 (!dev->class || (pm_ops_is_empty(dev->class->pm) &&
1866 !dev->class->suspend && !dev->class->resume)) &&
1865 (!dev->type || pm_ops_is_empty(dev->type->pm)) &&1867 (!dev->type || pm_ops_is_empty(dev->type->pm)) &&
1866 (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) &&1868 (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) &&
1867 (!dev->driver || pm_ops_is_empty(dev->driver->pm));1869 (!dev->driver || (pm_ops_is_empty(dev->driver->pm) &&
1870 !dev->driver->suspend && !dev->driver->resume));
1868 spin_unlock_irq(&dev->power.lock);1871 spin_unlock_irq(&dev->power.lock);
1869}1872}
drivers/base/power/opp/core.c+7−0
@@ -1581,6 +1581,9 @@ static int _opp_set_availability(struct device *dev, unsigned long freq, · 1580 unmodified lines
1581 1581
1582 opp->available = availability_req;1582 opp->available = availability_req;
1583 1583
1584 dev_pm_opp_get(opp);
1585 mutex_unlock(&opp_table->lock);
1586
1584 /* Notify the change of the OPP availability */1587 /* Notify the change of the OPP availability */
1585 if (availability_req)1588 if (availability_req)
1586 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ENABLE,1589 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ENABLE,
@@ -1589,8 +1592,12 @@ static int _opp_set_availability(struct device *dev, unsigned long freq, · 2 unmodified lines
1589 blocking_notifier_call_chain(&opp_table->head,1592 blocking_notifier_call_chain(&opp_table->head,
1590 OPP_EVENT_DISABLE, opp);1593 OPP_EVENT_DISABLE, opp);
1591 1594
1595 dev_pm_opp_put(opp);
1596 goto put_table;
1597
1592unlock:1598unlock:
1593 mutex_unlock(&opp_table->lock);1599 mutex_unlock(&opp_table->lock);
1600put_table:
1594 dev_pm_opp_put_opp_table(opp_table);1601 dev_pm_opp_put_opp_table(opp_table);
1595 return r;1602 return r;
1596}1603}
drivers/base/power/qos.c+5−5
@@ -277,11 +277,11 @@ void dev_pm_qos_constraints_destroy(struct device *dev) · 276 unmodified lines
277 mutex_unlock(&dev_pm_qos_sysfs_mtx);277 mutex_unlock(&dev_pm_qos_sysfs_mtx);
278}278}
279 279
280static bool dev_pm_qos_invalid_request(struct device *dev,280static bool dev_pm_qos_invalid_req_type(struct device *dev,
281 struct dev_pm_qos_request *req)281 enum dev_pm_qos_req_type type)
282{282{
283 return !req || (req->type == DEV_PM_QOS_LATENCY_TOLERANCE283 return type == DEV_PM_QOS_LATENCY_TOLERANCE &&
284 && !dev->power.set_latency_tolerance);284 !dev->power.set_latency_tolerance;
285}285}
286 286
287static int __dev_pm_qos_add_request(struct device *dev,287static int __dev_pm_qos_add_request(struct device *dev,
@@ -290,7 +290,7 @@ static int __dev_pm_qos_add_request(struct device *dev, · 2 unmodified lines
290{290{
291 int ret = 0;291 int ret = 0;
292 292
293 if (!dev || dev_pm_qos_invalid_request(dev, req))293 if (!dev || !req || dev_pm_qos_invalid_req_type(dev, type))
294 return -EINVAL;294 return -EINVAL;
295 295
296 if (WARN(dev_pm_qos_request_active(req),296 if (WARN(dev_pm_qos_request_active(req),
drivers/block/Kconfig+1−1
@@ -17,7 +17,7 @@ if BLK_DEV · 16 unmodified lines
17 17
18config BLK_DEV_NULL_BLK18config BLK_DEV_NULL_BLK
19 tristate "Null test block driver"19 tristate "Null test block driver"
20 depends on CONFIGFS_FS20 select CONFIGFS_FS
21 21
22config BLK_DEV_FD22config BLK_DEV_FD
23 tristate "Normal floppy disk support"23 tristate "Normal floppy disk support"
drivers/block/brd.c+1−1
@@ -342,7 +342,7 @@ static long __brd_direct_access(struct brd_device *brd, pgoff_t pgoff, · 341 unmodified lines
342 342
343 if (!brd)343 if (!brd)
344 return -ENODEV;344 return -ENODEV;
345 page = brd_insert_page(brd, PFN_PHYS(pgoff) / 512);345 page = brd_insert_page(brd, (sector_t)pgoff << PAGE_SECTORS_SHIFT);
346 if (!page)346 if (!page)
347 return -ENOSPC;347 return -ENOSPC;
348 *kaddr = page_address(page);348 *kaddr = page_address(page);
drivers/block/loop.h+2−4
@@ -67,10 +67,8 @@ struct loop_device { · 66 unmodified lines
67struct loop_cmd {67struct loop_cmd {
68 struct kthread_work work;68 struct kthread_work work;
69 struct request *rq;69 struct request *rq;
70 union {70 bool use_aio; /* use AIO interface to handle I/O */
71 bool use_aio; /* use AIO interface to handle I/O */71 atomic_t ref; /* only for aio */
72 atomic_t ref; /* only for aio */
73 };
74 long ret;72 long ret;
75 struct kiocb iocb;73 struct kiocb iocb;
76 struct bio_vec *bvec;74 struct bio_vec *bvec;
drivers/block/nbd.c+11−1
@@ -820,9 +820,13 @@ static blk_status_t nbd_queue_rq(struct blk_mq_hw_ctx *hctx, · 819 unmodified lines
820 * appropriate.820 * appropriate.
821 */821 */
822 ret = nbd_handle_cmd(cmd, hctx->queue_num);822 ret = nbd_handle_cmd(cmd, hctx->queue_num);
823 if (ret < 0)
824 ret = BLK_STS_IOERR;
825 else if (!ret)
826 ret = BLK_STS_OK;
823 complete(&cmd->send_complete);827 complete(&cmd->send_complete);
824 828
825 return ret < 0 ? BLK_STS_IOERR : BLK_STS_OK;829 return ret;
826}830}
827 831
828static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,832static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
@@ -1194,6 +1198,12 @@ static int nbd_ioctl(struct block_device *bdev, fmode_t mode, · 365 unmodified lines
1194 if (!capable(CAP_SYS_ADMIN))1198 if (!capable(CAP_SYS_ADMIN))
1195 return -EPERM;1199 return -EPERM;
1196 1200
1201 /* The block layer will pass back some non-nbd ioctls in case we have
1202 * special handling for them, but we don't so just return an error.
1203 */
1204 if (_IOC_TYPE(cmd) != 0xab)
1205 return -EINVAL;
1206
1197 mutex_lock(&nbd->config_lock);1207 mutex_lock(&nbd->config_lock);
1198 1208
1199 /* Don't allow ioctl operations on a nbd device that was created with1209 /* Don't allow ioctl operations on a nbd device that was created with
drivers/block/zram/zram_drv.c+12−24
@@ -766,27 +766,6 @@ static void zram_slot_unlock(struct zram *zram, u32 index) · 765 unmodified lines
766 bit_spin_unlock(ZRAM_ACCESS, &zram->table[index].value);766 bit_spin_unlock(ZRAM_ACCESS, &zram->table[index].value);
767}767}
768 768
769static bool zram_same_page_read(struct zram *zram, u32 index,
770 struct page *page,
771 unsigned int offset, unsigned int len)
772{
773 zram_slot_lock(zram, index);
774 if (unlikely(!zram_get_handle(zram, index) ||
775 zram_test_flag(zram, index, ZRAM_SAME))) {
776 void *mem;
777
778 zram_slot_unlock(zram, index);
779 mem = kmap_atomic(page);
780 zram_fill_page(mem + offset, len,
781 zram_get_element(zram, index));
782 kunmap_atomic(mem);
783 return true;
784 }
785 zram_slot_unlock(zram, index);
786
787 return false;
788}
789
790static void zram_meta_free(struct zram *zram, u64 disksize)769static void zram_meta_free(struct zram *zram, u64 disksize)
791{770{
792 size_t num_pages = disksize >> PAGE_SHIFT;771 size_t num_pages = disksize >> PAGE_SHIFT;
@@ -884,11 +863,20 @@ static int __zram_bvec_read(struct zram *zram, struct page *page, u32 index, · 91 unmodified lines
884 zram_slot_unlock(zram, index);863 zram_slot_unlock(zram, index);
885 }864 }
886 865
887 if (zram_same_page_read(zram, index, page, 0, PAGE_SIZE))
888 return 0;
889
890 zram_slot_lock(zram, index);866 zram_slot_lock(zram, index);
891 handle = zram_get_handle(zram, index);867 handle = zram_get_handle(zram, index);
868 if (!handle || zram_test_flag(zram, index, ZRAM_SAME)) {
869 unsigned long value;
870 void *mem;
871
872 value = handle ? zram_get_element(zram, index) : 0;
873 mem = kmap_atomic(page);
874 zram_fill_page(mem, PAGE_SIZE, value);
875 kunmap_atomic(mem);
876 zram_slot_unlock(zram, index);
877 return 0;
878 }
879
892 size = zram_get_obj_size(zram, index);880 size = zram_get_obj_size(zram, index);
893 881
894 src = zs_map_object(zram->mem_pool, handle, ZS_MM_RO);882 src = zs_map_object(zram->mem_pool, handle, ZS_MM_RO);
drivers/char/tpm/tpm-interface.c+5−5
@@ -455,7 +455,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space, · 454 unmodified lines
455 goto out;455 goto out;
456 }456 }
457 457
458 msleep(TPM_TIMEOUT); /* CHECK */458 tpm_msleep(TPM_TIMEOUT);
459 rmb();459 rmb();
460 } while (time_before(jiffies, stop));460 } while (time_before(jiffies, stop));
461 461
@@ -970,7 +970,7 @@ int tpm_do_selftest(struct tpm_chip *chip) · 508 unmodified lines
970 dev_info(970 dev_info(
971 &chip->dev, HW_ERR971 &chip->dev, HW_ERR
972 "TPM command timed out during continue self test");972 "TPM command timed out during continue self test");
973 msleep(delay_msec);973 tpm_msleep(delay_msec);
974 continue;974 continue;
975 }975 }
976 976
@@ -985,7 +985,7 @@ int tpm_do_selftest(struct tpm_chip *chip) · 8 unmodified lines
985 }985 }
986 if (rc != TPM_WARN_DOING_SELFTEST)986 if (rc != TPM_WARN_DOING_SELFTEST)
987 return rc;987 return rc;
988 msleep(delay_msec);988 tpm_msleep(delay_msec);
989 } while (--loops > 0);989 } while (--loops > 0);
990 990
991 return rc;991 return rc;
@@ -1085,7 +1085,7 @@ again: · 93 unmodified lines
1085 }1085 }
1086 } else {1086 } else {
1087 do {1087 do {
1088 msleep(TPM_TIMEOUT);1088 tpm_msleep(TPM_TIMEOUT);
1089 status = chip->ops->status(chip);1089 status = chip->ops->status(chip);
1090 if ((status & mask) == mask)1090 if ((status & mask) == mask)
1091 return 0;1091 return 0;
@@ -1150,7 +1150,7 @@ int tpm_pm_suspend(struct device *dev) · 58 unmodified lines
1150 */1150 */
1151 if (rc != TPM_WARN_RETRY)1151 if (rc != TPM_WARN_RETRY)
1152 break;1152 break;
1153 msleep(TPM_TIMEOUT_RETRY);1153 tpm_msleep(TPM_TIMEOUT_RETRY);
1154 }1154 }
1155 1155
1156 if (rc)1156 if (rc)
drivers/char/tpm/tpm.h+8−1
@@ -50,7 +50,8 @@ enum tpm_const { · 49 unmodified lines
50 50
51enum tpm_timeout {51enum tpm_timeout {
52 TPM_TIMEOUT = 5, /* msecs */52 TPM_TIMEOUT = 5, /* msecs */
53 TPM_TIMEOUT_RETRY = 100 /* msecs */53 TPM_TIMEOUT_RETRY = 100, /* msecs */
54 TPM_TIMEOUT_RANGE_US = 300 /* usecs */
54};55};
55 56
56/* TPM addresses */57/* TPM addresses */
@@ -527,6 +528,12 @@ int tpm_pm_resume(struct device *dev); · 470 unmodified lines
527int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,528int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
528 wait_queue_head_t *queue, bool check_cancel);529 wait_queue_head_t *queue, bool check_cancel);
529 530
531static inline void tpm_msleep(unsigned int delay_msec)
532{
533 usleep_range(delay_msec * 1000,
534 (delay_msec * 1000) + TPM_TIMEOUT_RANGE_US);
535};
536
530struct tpm_chip *tpm_chip_find_get(int chip_num);537struct tpm_chip *tpm_chip_find_get(int chip_num);
531__must_check int tpm_try_get_ops(struct tpm_chip *chip);538__must_check int tpm_try_get_ops(struct tpm_chip *chip);
532void tpm_put_ops(struct tpm_chip *chip);539void tpm_put_ops(struct tpm_chip *chip);
drivers/char/tpm/tpm2-cmd.c+1−1
@@ -899,7 +899,7 @@ static int tpm2_do_selftest(struct tpm_chip *chip) · 898 unmodified lines
899 if (rc != TPM2_RC_TESTING)899 if (rc != TPM2_RC_TESTING)
900 break;900 break;
901 901
902 msleep(delay_msec);902 tpm_msleep(delay_msec);
903 }903 }
904 904
905 return rc;905 return rc;
drivers/char/tpm/tpm_crb.c+1−1
@@ -665,7 +665,7 @@ static const struct dev_pm_ops crb_pm = { · 664 unmodified lines
665 SET_RUNTIME_PM_OPS(crb_pm_runtime_suspend, crb_pm_runtime_resume, NULL)665 SET_RUNTIME_PM_OPS(crb_pm_runtime_suspend, crb_pm_runtime_resume, NULL)
666};666};
667 667
668static struct acpi_device_id crb_device_ids[] = {668static const struct acpi_device_id crb_device_ids[] = {
669 {"MSFT0101", 0},669 {"MSFT0101", 0},
670 {"", 0},670 {"", 0},
671};671};
drivers/char/tpm/tpm_ibmvtpm.c+61−37
@@ -32,26 +32,70 @@ · 31 unmodified lines
32 32
33static const char tpm_ibmvtpm_driver_name[] = "tpm_ibmvtpm";33static const char tpm_ibmvtpm_driver_name[] = "tpm_ibmvtpm";
34 34
35static struct vio_device_id tpm_ibmvtpm_device_table[] = {35static const struct vio_device_id tpm_ibmvtpm_device_table[] = {
36 { "IBM,vtpm", "IBM,vtpm"},36 { "IBM,vtpm", "IBM,vtpm"},
37 { "", "" }37 { "", "" }
38};38};
39MODULE_DEVICE_TABLE(vio, tpm_ibmvtpm_device_table);39MODULE_DEVICE_TABLE(vio, tpm_ibmvtpm_device_table);
40 40
41/**41/**
42 *
43 * ibmvtpm_send_crq_word - Send a CRQ request
44 * @vdev: vio device struct
45 * @w1: pre-constructed first word of tpm crq (second word is reserved)
46 *
47 * Return:
48 * 0 - Success
49 * Non-zero - Failure
50 */
51static int ibmvtpm_send_crq_word(struct vio_dev *vdev, u64 w1)
52{
53 return plpar_hcall_norets(H_SEND_CRQ, vdev->unit_address, w1, 0);
54}
55
56/**
57 *
42 * ibmvtpm_send_crq - Send a CRQ request58 * ibmvtpm_send_crq - Send a CRQ request
43 *59 *
44 * @vdev: vio device struct60 * @vdev: vio device struct
45 * @w1: first word61 * @valid: Valid field
46 * @w2: second word62 * @msg: Type field
63 * @len: Length field
64 * @data: Data field
65 *
66 * The ibmvtpm crq is defined as follows:
67 *
68 * Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
69 * -----------------------------------------------------------------------
70 * Word0 | Valid | Type | Length | Data
71 * -----------------------------------------------------------------------
72 * Word1 | Reserved
73 * -----------------------------------------------------------------------
74 *
75 * Which matches the following structure (on bigendian host):
76 *
77 * struct ibmvtpm_crq {
78 * u8 valid;
79 * u8 msg;
80 * __be16 len;
81 * __be32 data;
82 * __be64 reserved;
83 * } __attribute__((packed, aligned(8)));
84 *
85 * However, the value is passed in a register so just compute the numeric value
86 * to load into the register avoiding byteswap altogether. Endian only affects
87 * memory loads and stores - registers are internally represented the same.
47 *88 *
48 * Return:89 * Return:
49 * 0 -Sucess90 * 0 (H_SUCCESS) - Success
50 * Non-zero - Failure91 * Non-zero - Failure
51 */92 */
52static int ibmvtpm_send_crq(struct vio_dev *vdev, u64 w1, u64 w2)93static int ibmvtpm_send_crq(struct vio_dev *vdev,
94 u8 valid, u8 msg, u16 len, u32 data)
53{95{
54 return plpar_hcall_norets(H_SEND_CRQ, vdev->unit_address, w1, w2);96 u64 w1 = ((u64)valid << 56) | ((u64)msg << 48) | ((u64)len << 32) |
97 (u64)data;
98 return ibmvtpm_send_crq_word(vdev, w1);
55}99}
56 100
57/**101/**
@@ -109,8 +153,6 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) · 51 unmodified lines
109static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)153static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
110{154{
111 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);155 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
112 struct ibmvtpm_crq crq;
113 __be64 *word = (__be64 *)&crq;
114 int rc, sig;156 int rc, sig;
115 157
116 if (!ibmvtpm->rtce_buf) {158 if (!ibmvtpm->rtce_buf) {
@@ -137,10 +179,6 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) · 20 unmodified lines
137 spin_lock(&ibmvtpm->rtce_lock);179 spin_lock(&ibmvtpm->rtce_lock);
138 ibmvtpm->res_len = 0;180 ibmvtpm->res_len = 0;
139 memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);181 memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
140 crq.valid = (u8)IBMVTPM_VALID_CMD;
141 crq.msg = (u8)VTPM_TPM_COMMAND;
142 crq.len = cpu_to_be16(count);
143 crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);
144 182
145 /*183 /*
146 * set the processing flag before the Hcall, since we may get the184 * set the processing flag before the Hcall, since we may get the
@@ -148,8 +186,9 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) · 1 unmodified line
148 */186 */
149 ibmvtpm->tpm_processing_cmd = true;187 ibmvtpm->tpm_processing_cmd = true;
150 188
151 rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),189 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
152 be64_to_cpu(word[1]));190 IBMVTPM_VALID_CMD, VTPM_TPM_COMMAND,
191 count, ibmvtpm->rtce_dma_handle);
153 if (rc != H_SUCCESS) {192 if (rc != H_SUCCESS) {
154 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);193 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
155 rc = 0;194 rc = 0;
@@ -182,15 +221,10 @@ static u8 tpm_ibmvtpm_status(struct tpm_chip *chip) · 26 unmodified lines
182 */221 */
183static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm)222static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm)
184{223{
185 struct ibmvtpm_crq crq;
186 u64 *buf = (u64 *) &crq;
187 int rc;224 int rc;
188 225
189 crq.valid = (u8)IBMVTPM_VALID_CMD;226 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
190 crq.msg = (u8)VTPM_GET_RTCE_BUFFER_SIZE;227 IBMVTPM_VALID_CMD, VTPM_GET_RTCE_BUFFER_SIZE, 0, 0);
191
192 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
193 cpu_to_be64(buf[1]));
194 if (rc != H_SUCCESS)228 if (rc != H_SUCCESS)
195 dev_err(ibmvtpm->dev,229 dev_err(ibmvtpm->dev,
196 "ibmvtpm_crq_get_rtce_size failed rc=%d\n", rc);230 "ibmvtpm_crq_get_rtce_size failed rc=%d\n", rc);
@@ -210,15 +244,10 @@ static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm) · 13 unmodified lines
210 */244 */
211static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm)245static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm)
212{246{
213 struct ibmvtpm_crq crq;
214 u64 *buf = (u64 *) &crq;
215 int rc;247 int rc;
216 248
217 crq.valid = (u8)IBMVTPM_VALID_CMD;249 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
218 crq.msg = (u8)VTPM_GET_VERSION;250 IBMVTPM_VALID_CMD, VTPM_GET_VERSION, 0, 0);
219
220 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
221 cpu_to_be64(buf[1]));
222 if (rc != H_SUCCESS)251 if (rc != H_SUCCESS)
223 dev_err(ibmvtpm->dev,252 dev_err(ibmvtpm->dev,
224 "ibmvtpm_crq_get_version failed rc=%d\n", rc);253 "ibmvtpm_crq_get_version failed rc=%d\n", rc);
@@ -238,7 +267,7 @@ static int ibmvtpm_crq_send_init_complete(struct ibmvtpm_dev *ibmvtpm) · 13 unmodified lines
238{267{
239 int rc;268 int rc;
240 269
241 rc = ibmvtpm_send_crq(ibmvtpm->vdev, INIT_CRQ_COMP_CMD, 0);270 rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_COMP_CMD);
242 if (rc != H_SUCCESS)271 if (rc != H_SUCCESS)
243 dev_err(ibmvtpm->dev,272 dev_err(ibmvtpm->dev,
244 "ibmvtpm_crq_send_init_complete failed rc=%d\n", rc);273 "ibmvtpm_crq_send_init_complete failed rc=%d\n", rc);
@@ -258,7 +287,7 @@ static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm) · 13 unmodified lines
258{287{
259 int rc;288 int rc;
260 289
261 rc = ibmvtpm_send_crq(ibmvtpm->vdev, INIT_CRQ_CMD, 0);290 rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_CMD);
262 if (rc != H_SUCCESS)291 if (rc != H_SUCCESS)
263 dev_err(ibmvtpm->dev,292 dev_err(ibmvtpm->dev,
264 "ibmvtpm_crq_send_init failed rc=%d\n", rc);293 "ibmvtpm_crq_send_init failed rc=%d\n", rc);
@@ -340,15 +369,10 @@ static int tpm_ibmvtpm_suspend(struct device *dev) · 75 unmodified lines
340{369{
341 struct tpm_chip *chip = dev_get_drvdata(dev);370 struct tpm_chip *chip = dev_get_drvdata(dev);
342 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);371 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
343 struct ibmvtpm_crq crq;
344 u64 *buf = (u64 *) &crq;
345 int rc = 0;372 int rc = 0;
346 373
347 crq.valid = (u8)IBMVTPM_VALID_CMD;374 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
348 crq.msg = (u8)VTPM_PREPARE_TO_SUSPEND;375 IBMVTPM_VALID_CMD, VTPM_PREPARE_TO_SUSPEND, 0, 0);
349
350 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
351 cpu_to_be64(buf[1]));
352 if (rc != H_SUCCESS)376 if (rc != H_SUCCESS)
353 dev_err(ibmvtpm->dev,377 dev_err(ibmvtpm->dev,
354 "tpm_ibmvtpm_suspend failed rc=%d\n", rc);378 "tpm_ibmvtpm_suspend failed rc=%d\n", rc);
drivers/char/tpm/tpm_infineon.c+3−3
@@ -191,7 +191,7 @@ static int wait(struct tpm_chip *chip, int wait_for_bit) · 190 unmodified lines
191 /* check the status-register if wait_for_bit is set */191 /* check the status-register if wait_for_bit is set */
192 if (status & 1 << wait_for_bit)192 if (status & 1 << wait_for_bit)
193 break;193 break;
194 msleep(TPM_MSLEEP_TIME);194 tpm_msleep(TPM_MSLEEP_TIME);
195 }195 }
196 if (i == TPM_MAX_TRIES) { /* timeout occurs */196 if (i == TPM_MAX_TRIES) { /* timeout occurs */
197 if (wait_for_bit == STAT_XFE)197 if (wait_for_bit == STAT_XFE)
@@ -226,7 +226,7 @@ static void tpm_wtx(struct tpm_chip *chip) · 28 unmodified lines
226 wait_and_send(chip, TPM_CTRL_WTX);226 wait_and_send(chip, TPM_CTRL_WTX);
227 wait_and_send(chip, 0x00);227 wait_and_send(chip, 0x00);
228 wait_and_send(chip, 0x00);228 wait_and_send(chip, 0x00);
229 msleep(TPM_WTX_MSLEEP_TIME);229 tpm_msleep(TPM_WTX_MSLEEP_TIME);
230}230}
231 231
232static void tpm_wtx_abort(struct tpm_chip *chip)232static void tpm_wtx_abort(struct tpm_chip *chip)
@@ -237,7 +237,7 @@ static void tpm_wtx_abort(struct tpm_chip *chip) · 4 unmodified lines
237 wait_and_send(chip, 0x00);237 wait_and_send(chip, 0x00);
238 wait_and_send(chip, 0x00);238 wait_and_send(chip, 0x00);
239 number_of_wtx = 0;239 number_of_wtx = 0;
240 msleep(TPM_WTX_MSLEEP_TIME);240 tpm_msleep(TPM_WTX_MSLEEP_TIME);
241}241}
242 242
243static int tpm_inf_recv(struct tpm_chip *chip, u8 * buf, size_t count)243static int tpm_inf_recv(struct tpm_chip *chip, u8 * buf, size_t count)
drivers/char/tpm/tpm_tis_core.c+4−4
@@ -51,7 +51,7 @@ static int wait_startup(struct tpm_chip *chip, int l) · 50 unmodified lines
51 51
52 if (access & TPM_ACCESS_VALID)52 if (access & TPM_ACCESS_VALID)
53 return 0;53 return 0;
54 msleep(TPM_TIMEOUT);54 tpm_msleep(TPM_TIMEOUT);
55 } while (time_before(jiffies, stop));55 } while (time_before(jiffies, stop));
56 return -1;56 return -1;
57}57}
@@ -117,7 +117,7 @@ again: · 59 unmodified lines
117 do {117 do {
118 if (check_locality(chip, l))118 if (check_locality(chip, l))
119 return l;119 return l;
120 msleep(TPM_TIMEOUT);120 tpm_msleep(TPM_TIMEOUT);
121 } while (time_before(jiffies, stop));121 } while (time_before(jiffies, stop));
122 }122 }
123 return -1;123 return -1;
@@ -164,7 +164,7 @@ static int get_burstcount(struct tpm_chip *chip) · 40 unmodified lines
164 burstcnt = (value >> 8) & 0xFFFF;164 burstcnt = (value >> 8) & 0xFFFF;
165 if (burstcnt)165 if (burstcnt)
166 return burstcnt;166 return burstcnt;
167 msleep(TPM_TIMEOUT);167 tpm_msleep(TPM_TIMEOUT);
168 } while (time_before(jiffies, stop));168 } while (time_before(jiffies, stop));
169 return -EBUSY;169 return -EBUSY;
170}170}
@@ -396,7 +396,7 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len) · 225 unmodified lines
396 priv->irq = irq;396 priv->irq = irq;
397 chip->flags |= TPM_CHIP_FLAG_IRQ;397 chip->flags |= TPM_CHIP_FLAG_IRQ;
398 if (!priv->irq_tested)398 if (!priv->irq_tested)
399 msleep(1);399 tpm_msleep(1);
400 if (!priv->irq_tested)400 if (!priv->irq_tested)
401 disable_interrupts(chip);401 disable_interrupts(chip);
402 priv->irq_tested = true;402 priv->irq_tested = true;
drivers/clk/clk-bulk.c+1−0
@@ -105,6 +105,7 @@ err: · 104 unmodified lines
105 105
106 return ret;106 return ret;
107}107}
108EXPORT_SYMBOL_GPL(clk_bulk_prepare);
108 109
109#endif /* CONFIG_HAVE_CLK_PREPARE */110#endif /* CONFIG_HAVE_CLK_PREPARE */
110 111
drivers/clk/rockchip/clk-rk3128.c+7−5
@@ -315,13 +315,13 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = { · 314 unmodified lines
315 RK2928_CLKGATE_CON(10), 8, GFLAGS),315 RK2928_CLKGATE_CON(10), 8, GFLAGS),
316 316
317 GATE(SCLK_PVTM_CORE, "clk_pvtm_core", "xin24m", 0,317 GATE(SCLK_PVTM_CORE, "clk_pvtm_core", "xin24m", 0,
318 RK2928_CLKGATE_CON(10), 8, GFLAGS),318 RK2928_CLKGATE_CON(10), 0, GFLAGS),
319 GATE(SCLK_PVTM_GPU, "clk_pvtm_gpu", "xin24m", 0,319 GATE(SCLK_PVTM_GPU, "clk_pvtm_gpu", "xin24m", 0,
320 RK2928_CLKGATE_CON(10), 8, GFLAGS),320 RK2928_CLKGATE_CON(10), 1, GFLAGS),
321 GATE(SCLK_PVTM_FUNC, "clk_pvtm_func", "xin24m", 0,321 GATE(SCLK_PVTM_FUNC, "clk_pvtm_func", "xin24m", 0,
322 RK2928_CLKGATE_CON(10), 8, GFLAGS),322 RK2928_CLKGATE_CON(10), 2, GFLAGS),
323 GATE(SCLK_MIPI_24M, "clk_mipi_24m", "xin24m", CLK_IGNORE_UNUSED,323 GATE(SCLK_MIPI_24M, "clk_mipi_24m", "xin24m", CLK_IGNORE_UNUSED,
324 RK2928_CLKGATE_CON(10), 8, GFLAGS),324 RK2928_CLKGATE_CON(2), 15, GFLAGS),
325 325
326 COMPOSITE(SCLK_SDMMC, "sclk_sdmmc0", mux_mmc_src_p, 0,326 COMPOSITE(SCLK_SDMMC, "sclk_sdmmc0", mux_mmc_src_p, 0,
327 RK2928_CLKSEL_CON(11), 6, 2, MFLAGS, 0, 6, DFLAGS,327 RK2928_CLKSEL_CON(11), 6, 2, MFLAGS, 0, 6, DFLAGS,
@@ -541,7 +541,7 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = { · 213 unmodified lines
541 GATE(0, "pclk_grf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 4, GFLAGS),541 GATE(0, "pclk_grf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 4, GFLAGS),
542 GATE(0, "pclk_mipiphy", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 0, GFLAGS),542 GATE(0, "pclk_mipiphy", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 0, GFLAGS),
543 543
544 GATE(0, "pclk_pmu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 2, GFLAGS),544 GATE(0, "pclk_pmu", "pclk_pmu_pre", 0, RK2928_CLKGATE_CON(9), 2, GFLAGS),
545 GATE(0, "pclk_pmu_niu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 3, GFLAGS),545 GATE(0, "pclk_pmu_niu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 3, GFLAGS),
546 546
547 /* PD_MMC */547 /* PD_MMC */
@@ -577,6 +577,8 @@ static const char *const rk3128_critical_clocks[] __initconst = { · 29 unmodified lines
577 "aclk_peri",577 "aclk_peri",
578 "hclk_peri",578 "hclk_peri",
579 "pclk_peri",579 "pclk_peri",
580 "pclk_pmu",
581 "sclk_timer5",
580};582};
581 583
582static struct rockchip_clk_provider *__init rk3128_common_clk_init(struct device_node *np)584static struct rockchip_clk_provider *__init rk3128_common_clk_init(struct device_node *np)
drivers/clk/samsung/clk-exynos4.c+15−0
@@ -294,6 +294,18 @@ static const struct samsung_clk_reg_dump src_mask_suspend_e4210[] = { · 293 unmodified lines
294#define PLL_ENABLED (1 << 31)294#define PLL_ENABLED (1 << 31)
295#define PLL_LOCKED (1 << 29)295#define PLL_LOCKED (1 << 29)
296 296
297static void exynos4_clk_enable_pll(u32 reg)
298{
299 u32 pll_con = readl(reg_base + reg);
300 pll_con |= PLL_ENABLED;
301 writel(pll_con, reg_base + reg);
302
303 while (!(pll_con & PLL_LOCKED)) {
304 cpu_relax();
305 pll_con = readl(reg_base + reg);
306 }
307}
308
297static void exynos4_clk_wait_for_pll(u32 reg)309static void exynos4_clk_wait_for_pll(u32 reg)
298{310{
299 u32 pll_con;311 u32 pll_con;
@@ -315,6 +327,9 @@ static int exynos4_clk_suspend(void) · 15 unmodified lines
315 samsung_clk_save(reg_base, exynos4_save_pll,327 samsung_clk_save(reg_base, exynos4_save_pll,
316 ARRAY_SIZE(exynos4_clk_pll_regs));328 ARRAY_SIZE(exynos4_clk_pll_regs));
317 329
330 exynos4_clk_enable_pll(EPLL_CON0);
331 exynos4_clk_enable_pll(VPLL_CON0);
332
318 if (exynos4_soc == EXYNOS4210) {333 if (exynos4_soc == EXYNOS4210) {
319 samsung_clk_save(reg_base, exynos4_save_soc,334 samsung_clk_save(reg_base, exynos4_save_soc,
320 ARRAY_SIZE(exynos4210_clk_save));335 ARRAY_SIZE(exynos4210_clk_save));
drivers/clocksource/numachip.c+1−1
@@ -43,7 +43,7 @@ static int numachip2_set_next_event(unsigned long delta, struct clock_event_devi · 42 unmodified lines
43 return 0;43 return 0;
44}44}
45 45
46static struct clock_event_device numachip2_clockevent = {46static const struct clock_event_device numachip2_clockevent __initconst = {
47 .name = "numachip2",47 .name = "numachip2",
48 .rating = 400,48 .rating = 400,
49 .set_next_event = numachip2_set_next_event,49 .set_next_event = numachip2_set_next_event,
drivers/clocksource/timer-integrator-ap.c+2−2
@@ -36,8 +36,8 @@ static u64 notrace integrator_read_sched_clock(void) · 35 unmodified lines
36 return -readl(sched_clk_base + TIMER_VALUE);36 return -readl(sched_clk_base + TIMER_VALUE);
37}37}
38 38
39static int integrator_clocksource_init(unsigned long inrate,39static int __init integrator_clocksource_init(unsigned long inrate,
40 void __iomem *base)40 void __iomem *base)
41{41{
42 u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;42 u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
43 unsigned long rate = inrate;43 unsigned long rate = inrate;
drivers/cpufreq/cpufreq-dt-platdev.c+16−0
@@ -106,6 +106,22 @@ static const struct of_device_id whitelist[] __initconst = { · 105 unmodified lines
106 * platforms using "operating-points-v2" property.106 * platforms using "operating-points-v2" property.
107 */107 */
108static const struct of_device_id blacklist[] __initconst = {108static const struct of_device_id blacklist[] __initconst = {
109 { .compatible = "calxeda,highbank", },
110 { .compatible = "calxeda,ecx-2000", },
111
112 { .compatible = "marvell,armadaxp", },
113
114 { .compatible = "nvidia,tegra124", },
115
116 { .compatible = "st,stih407", },
117 { .compatible = "st,stih410", },
118
119 { .compatible = "sigma,tango4", },
120
121 { .compatible = "ti,am33xx", },
122 { .compatible = "ti,am43", },
123 { .compatible = "ti,dra7", },
124
109 { }125 { }
110};126};
111 127
drivers/cpufreq/ti-cpufreq.c+1−1
@@ -190,7 +190,7 @@ static int ti_cpufreq_setup_syscon_register(struct ti_cpufreq_data *opp_data) · 189 unmodified lines
190 190
191static const struct of_device_id ti_cpufreq_of_match[] = {191static const struct of_device_id ti_cpufreq_of_match[] = {
192 { .compatible = "ti,am33xx", .data = &am3x_soc_data, },192 { .compatible = "ti,am33xx", .data = &am3x_soc_data, },
193 { .compatible = "ti,am4372", .data = &am4x_soc_data, },193 { .compatible = "ti,am43", .data = &am4x_soc_data, },
194 { .compatible = "ti,dra7", .data = &dra7_soc_data },194 { .compatible = "ti,dra7", .data = &dra7_soc_data },
195 {},195 {},
196};196};
drivers/cpuidle/cpuidle-arm.c+4−2
@@ -104,13 +104,13 @@ static int __init arm_idle_init(void) · 103 unmodified lines
104 ret = dt_init_idle_driver(drv, arm_idle_state_match, 1);104 ret = dt_init_idle_driver(drv, arm_idle_state_match, 1);
105 if (ret <= 0) {105 if (ret <= 0) {
106 ret = ret ? : -ENODEV;106 ret = ret ? : -ENODEV;
107 goto out_fail;107 goto init_fail;
108 }108 }
109 109
110 ret = cpuidle_register_driver(drv);110 ret = cpuidle_register_driver(drv);
111 if (ret) {111 if (ret) {
112 pr_err("Failed to register cpuidle driver\n");112 pr_err("Failed to register cpuidle driver\n");
113 goto out_fail;113 goto init_fail;
114 }114 }
115 115
116 /*116 /*
@@ -149,6 +149,8 @@ static int __init arm_idle_init(void) · 32 unmodified lines
149 }149 }
150 150
151 return 0;151 return 0;
152init_fail:
153 kfree(drv);
152out_fail:154out_fail:
153 while (--cpu >= 0) {155 while (--cpu >= 0) {
154 dev = per_cpu(cpuidle_devices, cpu);156 dev = per_cpu(cpuidle_devices, cpu);
drivers/crypto/caam/Kconfig+1−4
@@ -1,6 +1,7 @@
1config CRYPTO_DEV_FSL_CAAM1config CRYPTO_DEV_FSL_CAAM
2 tristate "Freescale CAAM-Multicore driver backend"2 tristate "Freescale CAAM-Multicore driver backend"
3 depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE3 depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE
4 select SOC_BUS
4 help5 help
5 Enables the driver module for Freescale's Cryptographic Accelerator6 Enables the driver module for Freescale's Cryptographic Accelerator
6 and Assurance Module (CAAM), also known as the SEC version 4 (SEC4).7 and Assurance Module (CAAM), also known as the SEC version 4 (SEC4).
@@ -141,10 +142,6 @@ config CRYPTO_DEV_FSL_CAAM_RNG_API · 134 unmodified lines
141 To compile this as a module, choose M here: the module142 To compile this as a module, choose M here: the module
142 will be called caamrng.143 will be called caamrng.
143 144
144config CRYPTO_DEV_FSL_CAAM_IMX
145 def_bool SOC_IMX6 || SOC_IMX7D
146 depends on CRYPTO_DEV_FSL_CAAM
147
148config CRYPTO_DEV_FSL_CAAM_DEBUG145config CRYPTO_DEV_FSL_CAAM_DEBUG
149 bool "Enable debug output in CAAM driver"146 bool "Enable debug output in CAAM driver"
150 depends on CRYPTO_DEV_FSL_CAAM147 depends on CRYPTO_DEV_FSL_CAAM
drivers/crypto/caam/ctrl.c+10−9
@@ -7,6 +7,7 @@ · 6 unmodified lines
7#include <linux/device.h>7#include <linux/device.h>
8#include <linux/of_address.h>8#include <linux/of_address.h>
9#include <linux/of_irq.h>9#include <linux/of_irq.h>
10#include <linux/sys_soc.h>
10 11
11#include "compat.h"12#include "compat.h"
12#include "regs.h"13#include "regs.h"
@@ -19,6 +20,8 @@ bool caam_little_end; · 6 unmodified lines
19EXPORT_SYMBOL(caam_little_end);20EXPORT_SYMBOL(caam_little_end);
20bool caam_dpaa2;21bool caam_dpaa2;
21EXPORT_SYMBOL(caam_dpaa2);22EXPORT_SYMBOL(caam_dpaa2);
23bool caam_imx;
24EXPORT_SYMBOL(caam_imx);
22 25
23#ifdef CONFIG_CAAM_QI26#ifdef CONFIG_CAAM_QI
24#include "qi.h"27#include "qi.h"
@@ -28,19 +31,11 @@ EXPORT_SYMBOL(caam_dpaa2); · 3 unmodified lines
28 * i.MX targets tend to have clock control subsystems that can31 * i.MX targets tend to have clock control subsystems that can
29 * enable/disable clocking to our device.32 * enable/disable clocking to our device.
30 */33 */
31#ifdef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX
32static inline struct clk *caam_drv_identify_clk(struct device *dev,34static inline struct clk *caam_drv_identify_clk(struct device *dev,
33 char *clk_name)35 char *clk_name)
34{36{
35 return devm_clk_get(dev, clk_name);37 return caam_imx ? devm_clk_get(dev, clk_name) : NULL;
36}38}
37#else
38static inline struct clk *caam_drv_identify_clk(struct device *dev,
39 char *clk_name)
40{
41 return NULL;
42}
43#endif
44 39
45/*40/*
46 * Descriptor to instantiate RNG State Handle 0 in normal mode and41 * Descriptor to instantiate RNG State Handle 0 in normal mode and
@@ -430,6 +425,10 @@ static int caam_probe(struct platform_device *pdev) · 383 unmodified lines
430{425{
431 int ret, ring, gen_sk, ent_delay = RTSDCTL_ENT_DLY_MIN;426 int ret, ring, gen_sk, ent_delay = RTSDCTL_ENT_DLY_MIN;
432 u64 caam_id;427 u64 caam_id;
428 static const struct soc_device_attribute imx_soc[] = {
429 {.family = "Freescale i.MX"},
430 {},
431 };
433 struct device *dev;432 struct device *dev;
434 struct device_node *nprop, *np;433 struct device_node *nprop, *np;
435 struct caam_ctrl __iomem *ctrl;434 struct caam_ctrl __iomem *ctrl;
@@ -451,6 +450,8 @@ static int caam_probe(struct platform_device *pdev) · 15 unmodified lines
451 dev_set_drvdata(dev, ctrlpriv);450 dev_set_drvdata(dev, ctrlpriv);
452 nprop = pdev->dev.of_node;451 nprop = pdev->dev.of_node;
453 452
453 caam_imx = (bool)soc_device_match(imx_soc);
454
454 /* Enable clocking */455 /* Enable clocking */
455 clk = caam_drv_identify_clk(&pdev->dev, "ipg");456 clk = caam_drv_identify_clk(&pdev->dev, "ipg");
456 if (IS_ERR(clk)) {457 if (IS_ERR(clk)) {
drivers/crypto/caam/regs.h+28−31
@@ -67,6 +67,7 @@ · 66 unmodified lines
67 */67 */
68 68
69extern bool caam_little_end;69extern bool caam_little_end;
70extern bool caam_imx;
70 71
71#define caam_to_cpu(len) \72#define caam_to_cpu(len) \
72static inline u##len caam##len ## _to_cpu(u##len val) \73static inline u##len caam##len ## _to_cpu(u##len val) \
@@ -154,13 +155,10 @@ static inline u64 rd_reg64(void __iomem *reg) · 81 unmodified lines
154#else /* CONFIG_64BIT */155#else /* CONFIG_64BIT */
155static inline void wr_reg64(void __iomem *reg, u64 data)156static inline void wr_reg64(void __iomem *reg, u64 data)
156{157{
157#ifndef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX158 if (!caam_imx && caam_little_end) {
158 if (caam_little_end) {
159 wr_reg32((u32 __iomem *)(reg) + 1, data >> 32);159 wr_reg32((u32 __iomem *)(reg) + 1, data >> 32);
160 wr_reg32((u32 __iomem *)(reg), data);160 wr_reg32((u32 __iomem *)(reg), data);
161 } else161 } else {
162#endif
163 {
164 wr_reg32((u32 __iomem *)(reg), data >> 32);162 wr_reg32((u32 __iomem *)(reg), data >> 32);
165 wr_reg32((u32 __iomem *)(reg) + 1, data);163 wr_reg32((u32 __iomem *)(reg) + 1, data);
166 }164 }
@@ -168,41 +166,40 @@ static inline void wr_reg64(void __iomem *reg, u64 data) · 1 unmodified line
168 166
169static inline u64 rd_reg64(void __iomem *reg)167static inline u64 rd_reg64(void __iomem *reg)
170{168{
171#ifndef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX169 if (!caam_imx && caam_little_end)
172 if (caam_little_end)
173 return ((u64)rd_reg32((u32 __iomem *)(reg) + 1) << 32 |170 return ((u64)rd_reg32((u32 __iomem *)(reg) + 1) << 32 |
174 (u64)rd_reg32((u32 __iomem *)(reg)));171 (u64)rd_reg32((u32 __iomem *)(reg)));
175 else172
176#endif173 return ((u64)rd_reg32((u32 __iomem *)(reg)) << 32 |
177 return ((u64)rd_reg32((u32 __iomem *)(reg)) << 32 |174 (u64)rd_reg32((u32 __iomem *)(reg) + 1));
178 (u64)rd_reg32((u32 __iomem *)(reg) + 1));
179}175}
180#endif /* CONFIG_64BIT */176#endif /* CONFIG_64BIT */
181 177
178static inline u64 cpu_to_caam_dma64(dma_addr_t value)
179{
180 if (caam_imx)
181 return (((u64)cpu_to_caam32(lower_32_bits(value)) << 32) |
182 (u64)cpu_to_caam32(upper_32_bits(value)));
183
184 return cpu_to_caam64(value);
185}
186
187static inline u64 caam_dma64_to_cpu(u64 value)
188{
189 if (caam_imx)
190 return (((u64)caam32_to_cpu(lower_32_bits(value)) << 32) |
191 (u64)caam32_to_cpu(upper_32_bits(value)));
192
193 return caam64_to_cpu(value);
194}
195
182#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT196#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
183#ifdef CONFIG_SOC_IMX7D197#define cpu_to_caam_dma(value) cpu_to_caam_dma64(value)
184#define cpu_to_caam_dma(value) \198#define caam_dma_to_cpu(value) caam_dma64_to_cpu(value)
185 (((u64)cpu_to_caam32(lower_32_bits(value)) << 32) | \
186 (u64)cpu_to_caam32(upper_32_bits(value)))
187#define caam_dma_to_cpu(value) \
188 (((u64)caam32_to_cpu(lower_32_bits(value)) << 32) | \
189 (u64)caam32_to_cpu(upper_32_bits(value)))
190#else
191#define cpu_to_caam_dma(value) cpu_to_caam64(value)
192#define caam_dma_to_cpu(value) caam64_to_cpu(value)
193#endif /* CONFIG_SOC_IMX7D */
194#else199#else
195#define cpu_to_caam_dma(value) cpu_to_caam32(value)200#define cpu_to_caam_dma(value) cpu_to_caam32(value)
196#define caam_dma_to_cpu(value) caam32_to_cpu(value)201#define caam_dma_to_cpu(value) caam32_to_cpu(value)
197#endif /* CONFIG_ARCH_DMA_ADDR_T_64BIT */202#endif /* CONFIG_ARCH_DMA_ADDR_T_64BIT */
198
199#ifdef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX
200#define cpu_to_caam_dma64(value) \
201 (((u64)cpu_to_caam32(lower_32_bits(value)) << 32) | \
202 (u64)cpu_to_caam32(upper_32_bits(value)))
203#else
204#define cpu_to_caam_dma64(value) cpu_to_caam64(value)
205#endif
206 203
207/*204/*
208 * jr_outentry205 * jr_outentry
drivers/crypto/inside-secure/safexcel_cipher.c+1−1
@@ -386,7 +386,7 @@ static int safexcel_cipher_exit_inv(struct crypto_tfm *tfm) · 385 unmodified lines
386 struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm);386 struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm);
387 struct safexcel_crypto_priv *priv = ctx->priv;387 struct safexcel_crypto_priv *priv = ctx->priv;
388 struct skcipher_request req;388 struct skcipher_request req;
389 struct safexcel_inv_result result = { 0 };389 struct safexcel_inv_result result = {};
390 int ring = ctx->base.ring;390 int ring = ctx->base.ring;
391 391
392 memset(&req, 0, sizeof(struct skcipher_request));392 memset(&req, 0, sizeof(struct skcipher_request));
drivers/crypto/inside-secure/safexcel_hash.c+1−1
@@ -419,7 +419,7 @@ static int safexcel_ahash_exit_inv(struct crypto_tfm *tfm) · 418 unmodified lines
419 struct safexcel_ahash_ctx *ctx = crypto_tfm_ctx(tfm);419 struct safexcel_ahash_ctx *ctx = crypto_tfm_ctx(tfm);
420 struct safexcel_crypto_priv *priv = ctx->priv;420 struct safexcel_crypto_priv *priv = ctx->priv;
421 struct ahash_request req;421 struct ahash_request req;
422 struct safexcel_inv_result result = { 0 };422 struct safexcel_inv_result result = {};
423 int ring = ctx->base.ring;423 int ring = ctx->base.ring;
424 424
425 memset(&req, 0, sizeof(struct ahash_request));425 memset(&req, 0, sizeof(struct ahash_request));
drivers/crypto/talitos.c+5−4
@@ -1756,9 +1756,9 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, · 1755 unmodified lines
1756 req_ctx->swinit = 0;1756 req_ctx->swinit = 0;
1757 } else {1757 } else {
1758 desc->ptr[1] = zero_entry;1758 desc->ptr[1] = zero_entry;
1759 /* Indicate next op is not the first. */
1760 req_ctx->first = 0;
1761 }1759 }
1760 /* Indicate next op is not the first. */
1761 req_ctx->first = 0;
1762 1762
1763 /* HMAC key */1763 /* HMAC key */
1764 if (ctx->keylen)1764 if (ctx->keylen)
@@ -1769,7 +1769,7 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, · 4 unmodified lines
1769 1769
1770 sg_count = edesc->src_nents ?: 1;1770 sg_count = edesc->src_nents ?: 1;
1771 if (is_sec1 && sg_count > 1)1771 if (is_sec1 && sg_count > 1)
1772 sg_copy_to_buffer(areq->src, sg_count, edesc->buf, length);1772 sg_copy_to_buffer(req_ctx->psrc, sg_count, edesc->buf, length);
1773 else1773 else
1774 sg_count = dma_map_sg(dev, req_ctx->psrc, sg_count,1774 sg_count = dma_map_sg(dev, req_ctx->psrc, sg_count,
1775 DMA_TO_DEVICE);1775 DMA_TO_DEVICE);
@@ -3057,7 +3057,8 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev, · 1281 unmodified lines
3057 t_alg->algt.alg.hash.final = ahash_final;3057 t_alg->algt.alg.hash.final = ahash_final;
3058 t_alg->algt.alg.hash.finup = ahash_finup;3058 t_alg->algt.alg.hash.finup = ahash_finup;
3059 t_alg->algt.alg.hash.digest = ahash_digest;3059 t_alg->algt.alg.hash.digest = ahash_digest;
3060 t_alg->algt.alg.hash.setkey = ahash_setkey;3060 if (!strncmp(alg->cra_name, "hmac", 4))
3061 t_alg->algt.alg.hash.setkey = ahash_setkey;
3061 t_alg->algt.alg.hash.import = ahash_import;3062 t_alg->algt.alg.hash.import = ahash_import;
3062 t_alg->algt.alg.hash.export = ahash_export;3063 t_alg->algt.alg.hash.export = ahash_export;
3063 3064
drivers/fpga/altera-cvp.c+3−3
@@ -361,12 +361,12 @@ static const struct fpga_manager_ops altera_cvp_ops = { · 360 unmodified lines
361 .write_complete = altera_cvp_write_complete,361 .write_complete = altera_cvp_write_complete,
362};362};
363 363
364static ssize_t show_chkcfg(struct device_driver *dev, char *buf)364static ssize_t chkcfg_show(struct device_driver *dev, char *buf)
365{365{
366 return snprintf(buf, 3, "%d\n", altera_cvp_chkcfg);366 return snprintf(buf, 3, "%d\n", altera_cvp_chkcfg);
367}367}
368 368
369static ssize_t store_chkcfg(struct device_driver *drv, const char *buf,369static ssize_t chkcfg_store(struct device_driver *drv, const char *buf,
370 size_t count)370 size_t count)
371{371{
372 int ret;372 int ret;
@@ -378,7 +378,7 @@ static ssize_t store_chkcfg(struct device_driver *drv, const char *buf, · 5 unmodified lines
378 return count;378 return count;
379}379}
380 380
381static DRIVER_ATTR(chkcfg, 0600, show_chkcfg, store_chkcfg);381static DRIVER_ATTR_RW(chkcfg);
382 382
383static int altera_cvp_probe(struct pci_dev *pdev,383static int altera_cvp_probe(struct pci_dev *pdev,
384 const struct pci_device_id *dev_id);384 const struct pci_device_id *dev_id);
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c+188−1
@@ -636,7 +636,194 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) · 635 unmodified lines
636 NUM_BANKS(ADDR_SURF_2_BANK);636 NUM_BANKS(ADDR_SURF_2_BANK);
637 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)637 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
638 WREG32(mmGB_TILE_MODE0 + reg_offset, tilemode[reg_offset]);638 WREG32(mmGB_TILE_MODE0 + reg_offset, tilemode[reg_offset]);
639 } else if (adev->asic_type == CHIP_OLAND || adev->asic_type == CHIP_HAINAN) {639 } else if (adev->asic_type == CHIP_OLAND) {
640 tilemode[0] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
641 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
642 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
643 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
644 NUM_BANKS(ADDR_SURF_16_BANK) |
645 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
646 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
647 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
648 tilemode[1] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
649 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
650 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
651 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
652 NUM_BANKS(ADDR_SURF_16_BANK) |
653 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
654 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
655 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
656 tilemode[2] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
657 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
658 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
659 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
660 NUM_BANKS(ADDR_SURF_16_BANK) |
661 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
662 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
663 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
664 tilemode[3] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
665 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
666 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
667 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
668 NUM_BANKS(ADDR_SURF_16_BANK) |
669 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
670 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
671 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
672 tilemode[4] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
673 ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
674 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
675 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
676 NUM_BANKS(ADDR_SURF_16_BANK) |
677 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
678 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
679 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
680 tilemode[5] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
681 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
682 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
683 TILE_SPLIT(split_equal_to_row_size) |
684 NUM_BANKS(ADDR_SURF_16_BANK) |
685 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
686 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
687 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
688 tilemode[6] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
689 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
690 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
691 TILE_SPLIT(split_equal_to_row_size) |
692 NUM_BANKS(ADDR_SURF_16_BANK) |
693 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
694 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
695 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
696 tilemode[7] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
697 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
698 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
699 TILE_SPLIT(split_equal_to_row_size) |
700 NUM_BANKS(ADDR_SURF_16_BANK) |
701 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
702 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
703 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
704 tilemode[8] = MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
705 ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
706 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
707 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
708 NUM_BANKS(ADDR_SURF_16_BANK) |
709 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
710 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
711 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
712 tilemode[9] = MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
713 ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
714 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
715 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
716 NUM_BANKS(ADDR_SURF_16_BANK) |
717 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
718 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
719 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
720 tilemode[10] = MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
721 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
722 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
723 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
724 NUM_BANKS(ADDR_SURF_16_BANK) |
725 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
726 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
727 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
728 tilemode[11] = MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
729 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
730 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
731 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
732 NUM_BANKS(ADDR_SURF_16_BANK) |
733 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
734 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
735 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
736 tilemode[12] = MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
737 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
738 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
739 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
740 NUM_BANKS(ADDR_SURF_16_BANK) |
741 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
742 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
743 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
744 tilemode[13] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
745 ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
746 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
747 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
748 NUM_BANKS(ADDR_SURF_16_BANK) |
749 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
750 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
751 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
752 tilemode[14] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
753 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
754 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
755 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
756 NUM_BANKS(ADDR_SURF_16_BANK) |
757 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
758 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
759 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
760 tilemode[15] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
761 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
762 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
763 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
764 NUM_BANKS(ADDR_SURF_16_BANK) |
765 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
766 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
767 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
768 tilemode[16] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
769 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
770 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
771 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
772 NUM_BANKS(ADDR_SURF_16_BANK) |
773 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
774 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
775 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
776 tilemode[17] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
777 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
778 PIPE_CONFIG(ADDR_SURF_P4_8x16) |
779 TILE_SPLIT(split_equal_to_row_size) |
780 NUM_BANKS(ADDR_SURF_16_BANK) |
781 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
782 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
783 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
784 tilemode[21] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
785 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
786 PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
787 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
788 NUM_BANKS(ADDR_SURF_16_BANK) |
789 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
790 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
791 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
792 tilemode[22] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
793 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
794 PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
795 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
796 NUM_BANKS(ADDR_SURF_16_BANK) |
797 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
798 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
799 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4);
800 tilemode[23] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
801 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
802 PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
803 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
804 NUM_BANKS(ADDR_SURF_16_BANK) |
805 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
806 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
807 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
808 tilemode[24] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
809 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
810 PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
811 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
812 NUM_BANKS(ADDR_SURF_16_BANK) |
813 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
814 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
815 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2);
816 tilemode[25] = MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
817 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
818 PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
819 TILE_SPLIT(ADDR_SURF_TILE_SPLIT_1KB) |
820 NUM_BANKS(ADDR_SURF_8_BANK) |
821 BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
822 BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
823 MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1);
824 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
825 WREG32(mmGB_TILE_MODE0 + reg_offset, tilemode[reg_offset]);
826 } else if (adev->asic_type == CHIP_HAINAN) {
640 tilemode[0] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |827 tilemode[0] = MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
641 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |828 ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
642 PIPE_CONFIG(ADDR_SURF_P2) |829 PIPE_CONFIG(ADDR_SURF_P2) |
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c+2−0
@@ -892,6 +892,8 @@ static int kfd_ioctl_get_tile_config(struct file *filep, · 891 unmodified lines
892 int err = 0;892 int err = 0;
893 893
894 dev = kfd_device_by_id(args->gpu_id);894 dev = kfd_device_by_id(args->gpu_id);
895 if (!dev)
896 return -EINVAL;
895 897
896 dev->kfd2kgd->get_tile_config(dev->kgd, &config);898 dev->kfd2kgd->get_tile_config(dev->kgd, &config);
897 899
drivers/gpu/drm/amd/amdkfd/kfd_events.c+4−1
@@ -292,7 +292,10 @@ static int create_signal_event(struct file *devkfd, · 291 unmodified lines
292 struct kfd_event *ev)292 struct kfd_event *ev)
293{293{
294 if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) {294 if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) {
295 pr_warn("Signal event wasn't created because limit was reached\n");295 if (!p->signal_event_limit_reached) {
296 pr_warn("Signal event wasn't created because limit was reached\n");
297 p->signal_event_limit_reached = true;
298 }
296 return -ENOMEM;299 return -ENOMEM;
297 }300 }
298 301
drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c+17−5
@@ -183,8 +183,8 @@ static void uninitialize(struct kernel_queue *kq) · 182 unmodified lines
183{183{
184 if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ)184 if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ)
185 kq->mqd->destroy_mqd(kq->mqd,185 kq->mqd->destroy_mqd(kq->mqd,
186 NULL,186 kq->queue->mqd,
187 false,187 KFD_PREEMPT_TYPE_WAVEFRONT_RESET,
188 QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS,188 QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS,
189 kq->queue->pipe,189 kq->queue->pipe,
190 kq->queue->queue);190 kq->queue->queue);
@@ -210,6 +210,11 @@ static int acquire_packet_buffer(struct kernel_queue *kq, · 19 unmodified lines
210 uint32_t wptr, rptr;210 uint32_t wptr, rptr;
211 unsigned int *queue_address;211 unsigned int *queue_address;
212 212
213 /* When rptr == wptr, the buffer is empty.
214 * When rptr == wptr + 1, the buffer is full.
215 * It is always rptr that advances to the position of wptr, rather than
216 * the opposite. So we can only use up to queue_size_dwords - 1 dwords.
217 */
213 rptr = *kq->rptr_kernel;218 rptr = *kq->rptr_kernel;
214 wptr = *kq->wptr_kernel;219 wptr = *kq->wptr_kernel;
215 queue_address = (unsigned int *)kq->pq_kernel_addr;220 queue_address = (unsigned int *)kq->pq_kernel_addr;
@@ -219,11 +224,10 @@ static int acquire_packet_buffer(struct kernel_queue *kq, · 3 unmodified lines
219 pr_debug("wptr: %d\n", wptr);224 pr_debug("wptr: %d\n", wptr);
220 pr_debug("queue_address 0x%p\n", queue_address);225 pr_debug("queue_address 0x%p\n", queue_address);
221 226
222 available_size = (rptr - 1 - wptr + queue_size_dwords) %227 available_size = (rptr + queue_size_dwords - 1 - wptr) %
223 queue_size_dwords;228 queue_size_dwords;
224 229
225 if (packet_size_in_dwords >= queue_size_dwords ||230 if (packet_size_in_dwords > available_size) {
226 packet_size_in_dwords >= available_size) {
227 /*231 /*
228 * make sure calling functions know232 * make sure calling functions know
229 * acquire_packet_buffer() failed233 * acquire_packet_buffer() failed
@@ -233,6 +237,14 @@ static int acquire_packet_buffer(struct kernel_queue *kq, · 3 unmodified lines
233 }237 }
234 238
235 if (wptr + packet_size_in_dwords >= queue_size_dwords) {239 if (wptr + packet_size_in_dwords >= queue_size_dwords) {
240 /* make sure after rolling back to position 0, there is
241 * still enough space.
242 */
243 if (packet_size_in_dwords >= rptr) {
244 *buffer_ptr = NULL;
245 return -ENOMEM;
246 }
247 /* fill nops, roll back and start at position 0 */
236 while (wptr > 0) {248 while (wptr > 0) {
237 queue_address[wptr] = kq->nop_packet;249 queue_address[wptr] = kq->nop_packet;
238 wptr = (wptr + 1) % queue_size_dwords;250 wptr = (wptr + 1) % queue_size_dwords;
drivers/gpu/drm/amd/amdkfd/kfd_priv.h+1−0
@@ -521,6 +521,7 @@ struct kfd_process { · 520 unmodified lines
521 struct list_head signal_event_pages;521 struct list_head signal_event_pages;
522 u32 next_nonsignal_event_id;522 u32 next_nonsignal_event_id;
523 size_t signal_event_count;523 size_t signal_event_count;
524 bool signal_event_limit_reached;
524};525};
525 526
526/**527/**
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c+0−1
@@ -143,7 +143,6 @@ int pqm_create_queue(struct process_queue_manager *pqm, · 142 unmodified lines
143 int num_queues = 0;143 int num_queues = 0;
144 struct queue *cur;144 struct queue *cur;
145 145
146 memset(&q_properties, 0, sizeof(struct queue_properties));
147 memcpy(&q_properties, properties, sizeof(struct queue_properties));146 memcpy(&q_properties, properties, sizeof(struct queue_properties));
148 q = NULL;147 q = NULL;
149 kq = NULL;148 kq = NULL;
drivers/gpu/drm/etnaviv/etnaviv_gem.c+3−0
@@ -551,12 +551,15 @@ static const struct etnaviv_gem_ops etnaviv_gem_shmem_ops = { · 550 unmodified lines
551void etnaviv_gem_free_object(struct drm_gem_object *obj)551void etnaviv_gem_free_object(struct drm_gem_object *obj)
552{552{
553 struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);553 struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
554 struct etnaviv_drm_private *priv = obj->dev->dev_private;
554 struct etnaviv_vram_mapping *mapping, *tmp;555 struct etnaviv_vram_mapping *mapping, *tmp;
555 556
556 /* object should not be active */557 /* object should not be active */
557 WARN_ON(is_active(etnaviv_obj));558 WARN_ON(is_active(etnaviv_obj));
558 559
560 mutex_lock(&priv->gem_lock);
559 list_del(&etnaviv_obj->gem_node);561 list_del(&etnaviv_obj->gem_node);
562 mutex_unlock(&priv->gem_lock);
560 563
561 list_for_each_entry_safe(mapping, tmp, &etnaviv_obj->vram_list,564 list_for_each_entry_safe(mapping, tmp, &etnaviv_obj->vram_list,
562 obj_node) {565 obj_node) {
drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c+4−2
@@ -445,8 +445,10 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, · 444 unmodified lines
445 cmdbuf->user_size = ALIGN(args->stream_size, 8);445 cmdbuf->user_size = ALIGN(args->stream_size, 8);
446 446
447 ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);447 ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
448 if (ret == 0)448 if (ret)
449 cmdbuf = NULL;449 goto out;
450
451 cmdbuf = NULL;
450 452
451 if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {453 if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
452 /*454 /*
drivers/gpu/drm/exynos/exynos5433_drm_decon.c+1−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
14#include <linux/clk.h>14#include <linux/clk.h>
15#include <linux/component.h>15#include <linux/component.h>
16#include <linux/iopoll.h>16#include <linux/iopoll.h>
17#include <linux/irq.h>
17#include <linux/mfd/syscon.h>18#include <linux/mfd/syscon.h>
18#include <linux/of_device.h>19#include <linux/of_device.h>
19#include <linux/of_gpio.h>20#include <linux/of_gpio.h>
drivers/gpu/drm/exynos/exynos_drm_drv.c+12−24
@@ -168,23 +168,19 @@ static struct drm_driver exynos_drm_driver = { · 167 unmodified lines
168static int exynos_drm_suspend(struct device *dev)168static int exynos_drm_suspend(struct device *dev)
169{169{
170 struct drm_device *drm_dev = dev_get_drvdata(dev);170 struct drm_device *drm_dev = dev_get_drvdata(dev);
171 struct drm_connector *connector;171 struct exynos_drm_private *private = drm_dev->dev_private;
172 struct drm_connector_list_iter conn_iter;
173 172
174 if (pm_runtime_suspended(dev) || !drm_dev)173 if (pm_runtime_suspended(dev) || !drm_dev)
175 return 0;174 return 0;
176 175
177 drm_connector_list_iter_begin(drm_dev, &conn_iter);176 drm_kms_helper_poll_disable(drm_dev);
178 drm_for_each_connector_iter(connector, &conn_iter) {177 exynos_drm_fbdev_suspend(drm_dev);
179 int old_dpms = connector->dpms;178 private->suspend_state = drm_atomic_helper_suspend(drm_dev);
180 179 if (IS_ERR(private->suspend_state)) {
181 if (connector->funcs->dpms)180 exynos_drm_fbdev_resume(drm_dev);
182 connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);181 drm_kms_helper_poll_enable(drm_dev);
183 182 return PTR_ERR(private->suspend_state);
184 /* Set the old mode back to the connector for resume */
185 connector->dpms = old_dpms;
186 }183 }
187 drm_connector_list_iter_end(&conn_iter);
188 184
189 return 0;185 return 0;
190}186}
@@ -192,22 +188,14 @@ static int exynos_drm_suspend(struct device *dev) · 1 unmodified line
192static int exynos_drm_resume(struct device *dev)188static int exynos_drm_resume(struct device *dev)
193{189{
194 struct drm_device *drm_dev = dev_get_drvdata(dev);190 struct drm_device *drm_dev = dev_get_drvdata(dev);
195 struct drm_connector *connector;191 struct exynos_drm_private *private = drm_dev->dev_private;
196 struct drm_connector_list_iter conn_iter;
197 192
198 if (pm_runtime_suspended(dev) || !drm_dev)193 if (pm_runtime_suspended(dev) || !drm_dev)
199 return 0;194 return 0;
200 195
201 drm_connector_list_iter_begin(drm_dev, &conn_iter);196 drm_atomic_helper_resume(drm_dev, private->suspend_state);
202 drm_for_each_connector_iter(connector, &conn_iter) {197 exynos_drm_fbdev_resume(drm_dev);
203 if (connector->funcs->dpms) {198 drm_kms_helper_poll_enable(drm_dev);
204 int dpms = connector->dpms;
205
206 connector->dpms = DRM_MODE_DPMS_OFF;
207 connector->funcs->dpms(connector, dpms);
208 }
209 }
210 drm_connector_list_iter_end(&conn_iter);
211 199
212 return 0;200 return 0;
213}201}
drivers/gpu/drm/exynos/exynos_drm_drv.h+1−0
@@ -202,6 +202,7 @@ struct drm_exynos_file_private { · 201 unmodified lines
202 */202 */
203struct exynos_drm_private {203struct exynos_drm_private {
204 struct drm_fb_helper *fb_helper;204 struct drm_fb_helper *fb_helper;
205 struct drm_atomic_state *suspend_state;
205 206
206 struct device *dma_dev;207 struct device *dma_dev;
207 void *mapping;208 void *mapping;
drivers/gpu/drm/exynos/exynos_drm_fbdev.c+20−0
@@ -18,6 +18,8 @@ · 17 unmodified lines
18#include <drm/drm_crtc_helper.h>18#include <drm/drm_crtc_helper.h>
19#include <drm/exynos_drm.h>19#include <drm/exynos_drm.h>
20 20
21#include <linux/console.h>
22
21#include "exynos_drm_drv.h"23#include "exynos_drm_drv.h"
22#include "exynos_drm_fb.h"24#include "exynos_drm_fb.h"
23#include "exynos_drm_fbdev.h"25#include "exynos_drm_fbdev.h"
@@ -285,3 +287,21 @@ void exynos_drm_output_poll_changed(struct drm_device *dev) · 261 unmodified lines
285 287
286 drm_fb_helper_hotplug_event(fb_helper);288 drm_fb_helper_hotplug_event(fb_helper);
287}289}
290
291void exynos_drm_fbdev_suspend(struct drm_device *dev)
292{
293 struct exynos_drm_private *private = dev->dev_private;
294
295 console_lock();
296 drm_fb_helper_set_suspend(private->fb_helper, 1);
297 console_unlock();
298}
299
300void exynos_drm_fbdev_resume(struct drm_device *dev)
301{
302 struct exynos_drm_private *private = dev->dev_private;
303
304 console_lock();
305 drm_fb_helper_set_suspend(private->fb_helper, 0);
306 console_unlock();
307}
drivers/gpu/drm/exynos/exynos_drm_fbdev.h+10−0
@@ -21,6 +21,8 @@ int exynos_drm_fbdev_init(struct drm_device *dev); · 20 unmodified lines
21void exynos_drm_fbdev_fini(struct drm_device *dev);21void exynos_drm_fbdev_fini(struct drm_device *dev);
22void exynos_drm_fbdev_restore_mode(struct drm_device *dev);22void exynos_drm_fbdev_restore_mode(struct drm_device *dev);
23void exynos_drm_output_poll_changed(struct drm_device *dev);23void exynos_drm_output_poll_changed(struct drm_device *dev);
24void exynos_drm_fbdev_suspend(struct drm_device *drm);
25void exynos_drm_fbdev_resume(struct drm_device *drm);
24 26
25#else27#else
26 28
@@ -39,6 +41,14 @@ static inline void exynos_drm_fbdev_restore_mode(struct drm_device *dev) · 12 unmodified lines
39 41
40#define exynos_drm_output_poll_changed (NULL)42#define exynos_drm_output_poll_changed (NULL)
41 43
44static inline void exynos_drm_fbdev_suspend(struct drm_device *drm)
45{
46}
47
48static inline void exynos_drm_fbdev_resume(struct drm_device *drm)
49{
50}
51
42#endif52#endif
43 53
44#endif54#endif
drivers/gpu/drm/exynos/exynos_hdmi.c+11−3
@@ -944,22 +944,27 @@ static bool hdmi_mode_fixup(struct drm_encoder *encoder, · 943 unmodified lines
944 struct drm_device *dev = encoder->dev;944 struct drm_device *dev = encoder->dev;
945 struct drm_connector *connector;945 struct drm_connector *connector;
946 struct drm_display_mode *m;946 struct drm_display_mode *m;
947 struct drm_connector_list_iter conn_iter;
947 int mode_ok;948 int mode_ok;
948 949
949 drm_mode_set_crtcinfo(adjusted_mode, 0);950 drm_mode_set_crtcinfo(adjusted_mode, 0);
950 951
951 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {952 drm_connector_list_iter_begin(dev, &conn_iter);
953 drm_for_each_connector_iter(connector, &conn_iter) {
952 if (connector->encoder == encoder)954 if (connector->encoder == encoder)
953 break;955 break;
954 }956 }
957 if (connector)
958 drm_connector_get(connector);
959 drm_connector_list_iter_end(&conn_iter);
955 960
956 if (connector->encoder != encoder)961 if (!connector)
957 return true;962 return true;
958 963
959 mode_ok = hdmi_mode_valid(connector, adjusted_mode);964 mode_ok = hdmi_mode_valid(connector, adjusted_mode);
960 965
961 if (mode_ok == MODE_OK)966 if (mode_ok == MODE_OK)
962 return true;967 goto cleanup;
963 968
964 /*969 /*
965 * Find the most suitable mode and copy it to adjusted_mode.970 * Find the most suitable mode and copy it to adjusted_mode.
@@ -979,6 +984,9 @@ static bool hdmi_mode_fixup(struct drm_encoder *encoder, · 13 unmodified lines
979 }984 }
980 }985 }
981 986
987cleanup:
988 drm_connector_put(connector);
989
982 return true;990 return true;
983}991}
984 992
drivers/gpu/drm/i915/gvt/cfg_space.c+48−65
@@ -197,78 +197,65 @@ static int emulate_pci_command_write(struct intel_vgpu *vgpu, · 196 unmodified lines
197static int emulate_pci_bar_write(struct intel_vgpu *vgpu, unsigned int offset,197static int emulate_pci_bar_write(struct intel_vgpu *vgpu, unsigned int offset,
198 void *p_data, unsigned int bytes)198 void *p_data, unsigned int bytes)
199{199{
200 unsigned int bar_index =
201 (rounddown(offset, 8) % PCI_BASE_ADDRESS_0) / 8;
202 u32 new = *(u32 *)(p_data);200 u32 new = *(u32 *)(p_data);
203 bool lo = IS_ALIGNED(offset, 8);201 bool lo = IS_ALIGNED(offset, 8);
204 u64 size;202 u64 size;
205 int ret = 0;203 int ret = 0;
206 bool mmio_enabled =204 bool mmio_enabled =
207 vgpu_cfg_space(vgpu)[PCI_COMMAND] & PCI_COMMAND_MEMORY;205 vgpu_cfg_space(vgpu)[PCI_COMMAND] & PCI_COMMAND_MEMORY;
206 struct intel_vgpu_pci_bar *bars = vgpu->cfg_space.bar;
208 207
209 if (WARN_ON(bar_index >= INTEL_GVT_PCI_BAR_MAX))208 /*
210 return -EINVAL;209 * Power-up software can determine how much address
211 210 * space the device requires by writing a value of
211 * all 1's to the register and then reading the value
212 * back. The device will return 0's in all don't-care
213 * address bits.
214 */
212 if (new == 0xffffffff) {215 if (new == 0xffffffff) {
213 /*216 switch (offset) {
214 * Power-up software can determine how much address217 case PCI_BASE_ADDRESS_0:
215 * space the device requires by writing a value of218 case PCI_BASE_ADDRESS_1:
216 * all 1's to the register and then reading the value219 size = ~(bars[INTEL_GVT_PCI_BAR_GTTMMIO].size -1);
217 * back. The device will return 0's in all don't-care220 intel_vgpu_write_pci_bar(vgpu, offset,
218 * address bits.221 size >> (lo ? 0 : 32), lo);
219 */222 /*
220 size = vgpu->cfg_space.bar[bar_index].size;223 * Untrap the BAR, since guest hasn't configured a
221 if (lo) {224 * valid GPA
222 new = rounddown(new, size);
223 } else {
224 u32 val = vgpu_cfg_space(vgpu)[rounddown(offset, 8)];
225 /* for 32bit mode bar it returns all-0 in upper 32
226 * bit, for 64bit mode bar it will calculate the
227 * size with lower 32bit and return the corresponding
228 * value
229 */225 */
230 if (val & PCI_BASE_ADDRESS_MEM_TYPE_64)
231 new &= (~(size-1)) >> 32;
232 else
233 new = 0;
234 }
235 /*
236 * Unmapp & untrap the BAR, since guest hasn't configured a
237 * valid GPA
238 */
239 switch (bar_index) {
240 case INTEL_GVT_PCI_BAR_GTTMMIO:
241 ret = trap_gttmmio(vgpu, false);226 ret = trap_gttmmio(vgpu, false);
242 break;227 break;
243 case INTEL_GVT_PCI_BAR_APERTURE:228 case PCI_BASE_ADDRESS_2:
229 case PCI_BASE_ADDRESS_3:
230 size = ~(bars[INTEL_GVT_PCI_BAR_APERTURE].size -1);
231 intel_vgpu_write_pci_bar(vgpu, offset,
232 size >> (lo ? 0 : 32), lo);
244 ret = map_aperture(vgpu, false);233 ret = map_aperture(vgpu, false);
245 break;234 break;
235 default:
236 /* Unimplemented BARs */
237 intel_vgpu_write_pci_bar(vgpu, offset, 0x0, false);
246 }238 }
247 intel_vgpu_write_pci_bar(vgpu, offset, new, lo);
248 } else {239 } else {
249 /*240 switch (offset) {
250 * Unmapp & untrap the old BAR first, since guest has241 case PCI_BASE_ADDRESS_0:
251 * re-configured the BAR242 case PCI_BASE_ADDRESS_1:
252 */243 /*
253 switch (bar_index) {244 * Untrap the old BAR first, since guest has
254 case INTEL_GVT_PCI_BAR_GTTMMIO:245 * re-configured the BAR
255 ret = trap_gttmmio(vgpu, false);246 */
247 trap_gttmmio(vgpu, false);
248 intel_vgpu_write_pci_bar(vgpu, offset, new, lo);
249 ret = trap_gttmmio(vgpu, mmio_enabled);
256 break;250 break;
257 case INTEL_GVT_PCI_BAR_APERTURE:251 case PCI_BASE_ADDRESS_2:
258 ret = map_aperture(vgpu, false);252 case PCI_BASE_ADDRESS_3:
253 map_aperture(vgpu, false);
254 intel_vgpu_write_pci_bar(vgpu, offset, new, lo);
255 ret = map_aperture(vgpu, mmio_enabled);
259 break;256 break;
260 }257 default:
261 intel_vgpu_write_pci_bar(vgpu, offset, new, lo);258 intel_vgpu_write_pci_bar(vgpu, offset, new, lo);
262 /* Track the new BAR */
263 if (mmio_enabled) {
264 switch (bar_index) {
265 case INTEL_GVT_PCI_BAR_GTTMMIO:
266 ret = trap_gttmmio(vgpu, true);
267 break;
268 case INTEL_GVT_PCI_BAR_APERTURE:
269 ret = map_aperture(vgpu, true);
270 break;
271 }
272 }259 }
273 }260 }
274 return ret;261 return ret;
@@ -299,10 +286,7 @@ int intel_vgpu_emulate_cfg_write(struct intel_vgpu *vgpu, unsigned int offset, · 24 unmodified lines
299 }286 }
300 287
301 switch (rounddown(offset, 4)) {288 switch (rounddown(offset, 4)) {
302 case PCI_BASE_ADDRESS_0:289 case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_5:
303 case PCI_BASE_ADDRESS_1:
304 case PCI_BASE_ADDRESS_2:
305 case PCI_BASE_ADDRESS_3:
306 if (WARN_ON(!IS_ALIGNED(offset, 4)))290 if (WARN_ON(!IS_ALIGNED(offset, 4)))
307 return -EINVAL;291 return -EINVAL;
308 return emulate_pci_bar_write(vgpu, offset, p_data, bytes);292 return emulate_pci_bar_write(vgpu, offset, p_data, bytes);
@@ -344,7 +328,6 @@ void intel_vgpu_init_cfg_space(struct intel_vgpu *vgpu, · 35 unmodified lines
344 struct intel_gvt *gvt = vgpu->gvt;328 struct intel_gvt *gvt = vgpu->gvt;
345 const struct intel_gvt_device_info *info = &gvt->device_info;329 const struct intel_gvt_device_info *info = &gvt->device_info;
346 u16 *gmch_ctl;330 u16 *gmch_ctl;
347 int i;
348 331
349 memcpy(vgpu_cfg_space(vgpu), gvt->firmware.cfg_space,332 memcpy(vgpu_cfg_space(vgpu), gvt->firmware.cfg_space,
350 info->cfg_space_size);333 info->cfg_space_size);
@@ -371,13 +354,13 @@ void intel_vgpu_init_cfg_space(struct intel_vgpu *vgpu, · 20 unmodified lines
371 */354 */
372 memset(vgpu_cfg_space(vgpu) + PCI_BASE_ADDRESS_1, 0, 4);355 memset(vgpu_cfg_space(vgpu) + PCI_BASE_ADDRESS_1, 0, 4);
373 memset(vgpu_cfg_space(vgpu) + PCI_BASE_ADDRESS_3, 0, 4);356 memset(vgpu_cfg_space(vgpu) + PCI_BASE_ADDRESS_3, 0, 4);
357 memset(vgpu_cfg_space(vgpu) + PCI_BASE_ADDRESS_4, 0, 8);
374 memset(vgpu_cfg_space(vgpu) + INTEL_GVT_PCI_OPREGION, 0, 4);358 memset(vgpu_cfg_space(vgpu) + INTEL_GVT_PCI_OPREGION, 0, 4);
375 359
376 for (i = 0; i < INTEL_GVT_MAX_BAR_NUM; i++) {360 vgpu->cfg_space.bar[INTEL_GVT_PCI_BAR_GTTMMIO].size =
377 vgpu->cfg_space.bar[i].size = pci_resource_len(361 pci_resource_len(gvt->dev_priv->drm.pdev, 0);
378 gvt->dev_priv->drm.pdev, i * 2);362 vgpu->cfg_space.bar[INTEL_GVT_PCI_BAR_APERTURE].size =
379 vgpu->cfg_space.bar[i].tracked = false;363 pci_resource_len(gvt->dev_priv->drm.pdev, 2);
380 }
381}364}
382 365
383/**366/**
drivers/gpu/drm/i915/i915_irq.c+0−3
@@ -839,7 +839,6 @@ static bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, · 838 unmodified lines
839 pipe);839 pipe);
840 int position;840 int position;
841 int vbl_start, vbl_end, hsync_start, htotal, vtotal;841 int vbl_start, vbl_end, hsync_start, htotal, vtotal;
842 bool in_vbl = true;
843 unsigned long irqflags;842 unsigned long irqflags;
844 843
845 if (WARN_ON(!mode->crtc_clock)) {844 if (WARN_ON(!mode->crtc_clock)) {
@@ -922,8 +921,6 @@ static bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, · 76 unmodified lines
922 921
923 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);922 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
924 923
925 in_vbl = position >= vbl_start && position < vbl_end;
926
927 /*924 /*
928 * While in vblank, position will be negative925 * While in vblank, position will be negative
929 * counting up towards 0 at vbl_end. And outside926 * counting up towards 0 at vbl_end. And outside
drivers/gpu/drm/i915/intel_audio.c+0−5
@@ -606,11 +606,6 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder, · 605 unmodified lines
606 connector->encoder->base.id,606 connector->encoder->base.id,
607 connector->encoder->name);607 connector->encoder->name);
608 608
609 /* ELD Conn_Type */
610 connector->eld[5] &= ~(3 << 2);
611 if (intel_crtc_has_dp_encoder(crtc_state))
612 connector->eld[5] |= (1 << 2);
613
614 connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;609 connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
615 610
616 if (dev_priv->display.audio_codec_enable)611 if (dev_priv->display.audio_codec_enable)
drivers/gpu/drm/i915/intel_bios.c+7−0
@@ -1163,6 +1163,13 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, · 1162 unmodified lines
1163 is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;1163 is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
1164 is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);1164 is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
1165 1165
1166 if (port == PORT_A && is_dvi) {
1167 DRM_DEBUG_KMS("VBT claims port A supports DVI%s, ignoring\n",
1168 is_hdmi ? "/HDMI" : "");
1169 is_dvi = false;
1170 is_hdmi = false;
1171 }
1172
1166 info->supports_dvi = is_dvi;1173 info->supports_dvi = is_dvi;
1167 info->supports_hdmi = is_hdmi;1174 info->supports_hdmi = is_hdmi;
1168 info->supports_dp = is_dp;1175 info->supports_dp = is_dp;
drivers/gpu/drm/i915/intel_csr.c+1−1
@@ -216,7 +216,7 @@ static void gen9_set_dc_state_debugmask(struct drm_i915_private *dev_priv) · 215 unmodified lines
216 216
217 mask = DC_STATE_DEBUG_MASK_MEMORY_UP;217 mask = DC_STATE_DEBUG_MASK_MEMORY_UP;
218 218
219 if (IS_BROXTON(dev_priv))219 if (IS_GEN9_LP(dev_priv))
220 mask |= DC_STATE_DEBUG_MASK_CORES;220 mask |= DC_STATE_DEBUG_MASK_CORES;
221 221
222 /* The below bit doesn't need to be cleared ever afterwards */222 /* The below bit doesn't need to be cleared ever afterwards */
drivers/gpu/drm/i915/intel_ddi.c+2−1
@@ -1655,7 +1655,8 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder, · 1654 unmodified lines
1655out:1655out:
1656 if (ret && IS_GEN9_LP(dev_priv)) {1656 if (ret && IS_GEN9_LP(dev_priv)) {
1657 tmp = I915_READ(BXT_PHY_CTL(port));1657 tmp = I915_READ(BXT_PHY_CTL(port));
1658 if ((tmp & (BXT_PHY_LANE_POWERDOWN_ACK |1658 if ((tmp & (BXT_PHY_CMNLANE_POWERDOWN_ACK |
1659 BXT_PHY_LANE_POWERDOWN_ACK |
1659 BXT_PHY_LANE_ENABLED)) != BXT_PHY_LANE_ENABLED)1660 BXT_PHY_LANE_ENABLED)) != BXT_PHY_LANE_ENABLED)
1660 DRM_ERROR("Port %c enabled but PHY powered down? "1661 DRM_ERROR("Port %c enabled but PHY powered down? "
1661 "(PHY_CTL %08x)\n", port_name(port), tmp);1662 "(PHY_CTL %08x)\n", port_name(port), tmp);
drivers/gpu/drm/i915/intel_display.c+1−3
@@ -12359,7 +12359,6 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) · 12358 unmodified lines
12359 struct drm_crtc_state *old_crtc_state, *new_crtc_state;12359 struct drm_crtc_state *old_crtc_state, *new_crtc_state;
12360 struct drm_crtc *crtc;12360 struct drm_crtc *crtc;
12361 struct intel_crtc_state *intel_cstate;12361 struct intel_crtc_state *intel_cstate;
12362 bool hw_check = intel_state->modeset;
12363 u64 put_domains[I915_MAX_PIPES] = {};12362 u64 put_domains[I915_MAX_PIPES] = {};
12364 unsigned crtc_vblank_mask = 0;12363 unsigned crtc_vblank_mask = 0;
12365 int i;12364 int i;
@@ -12376,7 +12375,6 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) · 10 unmodified lines
12376 12375
12377 if (needs_modeset(new_crtc_state) ||12376 if (needs_modeset(new_crtc_state) ||
12378 to_intel_crtc_state(new_crtc_state)->update_pipe) {12377 to_intel_crtc_state(new_crtc_state)->update_pipe) {
12379 hw_check = true;
12380 12378
12381 put_domains[to_intel_crtc(crtc)->pipe] =12379 put_domains[to_intel_crtc(crtc)->pipe] =
12382 modeset_get_crtc_power_domains(crtc,12380 modeset_get_crtc_power_domains(crtc,
@@ -14030,7 +14028,7 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb, · 1647 unmodified lines
14030 14028
14031 if (mode_cmd->handles[i] != mode_cmd->handles[0]) {14029 if (mode_cmd->handles[i] != mode_cmd->handles[0]) {
14032 DRM_DEBUG_KMS("bad plane %d handle\n", i);14030 DRM_DEBUG_KMS("bad plane %d handle\n", i);
14033 return -EINVAL;14031 goto err;
14034 }14032 }
14035 14033
14036 stride_alignment = intel_fb_stride_alignment(fb, i);14034 stride_alignment = intel_fb_stride_alignment(fb, i);
drivers/gpu/drm/i915/intel_dpio_phy.c+0−20
@@ -208,12 +208,6 @@ static const struct bxt_ddi_phy_info glk_ddi_phy_info[] = { · 207 unmodified lines
208 },208 },
209};209};
210 210
211static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info *phy_info)
212{
213 return (phy_info->dual_channel * BIT(phy_info->channel[DPIO_CH1].port)) |
214 BIT(phy_info->channel[DPIO_CH0].port);
215}
216
217static const struct bxt_ddi_phy_info *211static const struct bxt_ddi_phy_info *
218bxt_get_phy_list(struct drm_i915_private *dev_priv, int *count)212bxt_get_phy_list(struct drm_i915_private *dev_priv, int *count)
219{213{
@@ -313,7 +307,6 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv, · 93 unmodified lines
313 enum dpio_phy phy)307 enum dpio_phy phy)
314{308{
315 const struct bxt_ddi_phy_info *phy_info;309 const struct bxt_ddi_phy_info *phy_info;
316 enum port port;
317 310
318 phy_info = bxt_get_phy_info(dev_priv, phy);311 phy_info = bxt_get_phy_info(dev_priv, phy);
319 312
@@ -335,19 +328,6 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv, · 15 unmodified lines
335 return false;328 return false;
336 }329 }
337 330
338 for_each_port_masked(port, bxt_phy_port_mask(phy_info)) {
339 u32 tmp = I915_READ(BXT_PHY_CTL(port));
340
341 if (tmp & BXT_PHY_CMNLANE_POWERDOWN_ACK) {
342 DRM_DEBUG_DRIVER("DDI PHY %d powered, but common lane "
343 "for port %c powered down "
344 "(PHY_CTL %08x)\n",
345 phy, port_name(port), tmp);
346
347 return false;
348 }
349 }
350
351 return true;331 return true;
352}332}
353 333
drivers/gpu/drm/i915/intel_dsi.c+0−11
@@ -892,8 +892,6 @@ static void intel_dsi_disable(struct intel_encoder *encoder, · 891 unmodified lines
892 struct intel_crtc_state *old_crtc_state,892 struct intel_crtc_state *old_crtc_state,
893 struct drm_connector_state *old_conn_state)893 struct drm_connector_state *old_conn_state)
894{894{
895 struct drm_device *dev = encoder->base.dev;
896 struct drm_i915_private *dev_priv = dev->dev_private;
897 struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);895 struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
898 enum port port;896 enum port port;
899 897
@@ -902,15 +900,6 @@ static void intel_dsi_disable(struct intel_encoder *encoder, · 2 unmodified lines
902 intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_OFF);900 intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_OFF);
903 intel_panel_disable_backlight(old_conn_state);901 intel_panel_disable_backlight(old_conn_state);
904 902
905 /*
906 * Disable Device ready before the port shutdown in order
907 * to avoid split screen
908 */
909 if (IS_BROXTON(dev_priv)) {
910 for_each_dsi_port(port, intel_dsi->ports)
911 I915_WRITE(MIPI_DEVICE_READY(port), 0);
912 }
913
914 /*903 /*
915 * According to the spec we should send SHUTDOWN before904 * According to the spec we should send SHUTDOWN before
916 * MIPI_SEQ_DISPLAY_OFF only for v3+ VBTs, but field testing905 * MIPI_SEQ_DISPLAY_OFF only for v3+ VBTs, but field testing
drivers/gpu/drm/i915/intel_modes.c+17−0
@@ -30,6 +30,21 @@ · 29 unmodified lines
30#include "intel_drv.h"30#include "intel_drv.h"
31#include "i915_drv.h"31#include "i915_drv.h"
32 32
33static void intel_connector_update_eld_conn_type(struct drm_connector *connector)
34{
35 u8 conn_type;
36
37 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
38 connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
39 conn_type = DRM_ELD_CONN_TYPE_DP;
40 } else {
41 conn_type = DRM_ELD_CONN_TYPE_HDMI;
42 }
43
44 connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] &= ~DRM_ELD_CONN_TYPE_MASK;
45 connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= conn_type;
46}
47
33/**48/**
34 * intel_connector_update_modes - update connector from edid49 * intel_connector_update_modes - update connector from edid
35 * @connector: DRM connector device to use50 * @connector: DRM connector device to use
@@ -44,6 +59,8 @@ int intel_connector_update_modes(struct drm_connector *connector, · 8 unmodified lines
44 ret = drm_add_edid_modes(connector, edid);59 ret = drm_add_edid_modes(connector, edid);
45 drm_edid_to_eld(connector, edid);60 drm_edid_to_eld(connector, edid);
46 61
62 intel_connector_update_eld_conn_type(connector);
63
47 return ret;64 return ret;
48}65}
49 66
drivers/gpu/drm/i915/intel_panel.c+4−0
@@ -1699,6 +1699,8 @@ bxt_setup_backlight(struct intel_connector *connector, enum pipe unused) · 1698 unmodified lines
1699 if (!panel->backlight.max)1699 if (!panel->backlight.max)
1700 return -ENODEV;1700 return -ENODEV;
1701 1701
1702 panel->backlight.min = get_backlight_min_vbt(connector);
1703
1702 val = bxt_get_backlight(connector);1704 val = bxt_get_backlight(connector);
1703 val = intel_panel_compute_brightness(connector, val);1705 val = intel_panel_compute_brightness(connector, val);
1704 panel->backlight.level = clamp(val, panel->backlight.min,1706 panel->backlight.level = clamp(val, panel->backlight.min,
@@ -1735,6 +1737,8 @@ cnp_setup_backlight(struct intel_connector *connector, enum pipe unused) · 30 unmodified lines
1735 if (!panel->backlight.max)1737 if (!panel->backlight.max)
1736 return -ENODEV;1738 return -ENODEV;
1737 1739
1740 panel->backlight.min = get_backlight_min_vbt(connector);
1741
1738 val = bxt_get_backlight(connector);1742 val = bxt_get_backlight(connector);
1739 val = intel_panel_compute_brightness(connector, val);1743 val = intel_panel_compute_brightness(connector, val);
1740 panel->backlight.level = clamp(val, panel->backlight.min,1744 panel->backlight.level = clamp(val, panel->backlight.min,
drivers/gpu/drm/i915/intel_runtime_pm.c+3−0
@@ -2782,6 +2782,9 @@ static void cnl_display_core_init(struct drm_i915_private *dev_priv, bool resume · 2781 unmodified lines
2782 2782
2783 /* 6. Enable DBUF */2783 /* 6. Enable DBUF */
2784 gen9_dbuf_enable(dev_priv);2784 gen9_dbuf_enable(dev_priv);
2785
2786 if (resume && dev_priv->csr.dmc_payload)
2787 intel_csr_load_program(dev_priv);
2785}2788}
2786 2789
2787#undef CNL_PROCMON_IDX2790#undef CNL_PROCMON_IDX
drivers/gpu/drm/qxl/qxl_display.c+23−18
@@ -509,23 +509,25 @@ static void qxl_primary_atomic_update(struct drm_plane *plane, · 508 unmodified lines
509 .y2 = qfb->base.height509 .y2 = qfb->base.height
510 };510 };
511 511
512 if (!old_state->fb) {512 if (old_state->fb) {
513 qxl_io_log(qdev,513 qfb_old = to_qxl_framebuffer(old_state->fb);
514 "create primary fb: %dx%d,%d,%d\n",514 bo_old = gem_to_qxl_bo(qfb_old->obj);
515 bo->surf.width, bo->surf.height,515 } else {
516 bo->surf.stride, bo->surf.format);516 bo_old = NULL;
517 }
517 518
518 qxl_io_create_primary(qdev, 0, bo);519 if (bo == bo_old)
519 bo->is_primary = true;
520 return;520 return;
521 521
522 } else {522 if (bo_old && bo_old->is_primary) {
523 qfb_old = to_qxl_framebuffer(old_state->fb);523 qxl_io_destroy_primary(qdev);
524 bo_old = gem_to_qxl_bo(qfb_old->obj);
525 bo_old->is_primary = false;524 bo_old->is_primary = false;
526 }525 }
527 526
528 bo->is_primary = true;527 if (!bo->is_primary) {
528 qxl_io_create_primary(qdev, 0, bo);
529 bo->is_primary = true;
530 }
529 qxl_draw_dirty_fb(qdev, qfb, bo, 0, 0, &norect, 1, 1);531 qxl_draw_dirty_fb(qdev, qfb, bo, 0, 0, &norect, 1, 1);
530}532}
531 533
@@ -534,13 +536,15 @@ static void qxl_primary_atomic_disable(struct drm_plane *plane, · 2 unmodified lines
534{536{
535 struct qxl_device *qdev = plane->dev->dev_private;537 struct qxl_device *qdev = plane->dev->dev_private;
536 538
537 if (old_state->fb)539 if (old_state->fb) {
538 { struct qxl_framebuffer *qfb =540 struct qxl_framebuffer *qfb =
539 to_qxl_framebuffer(old_state->fb);541 to_qxl_framebuffer(old_state->fb);
540 struct qxl_bo *bo = gem_to_qxl_bo(qfb->obj);542 struct qxl_bo *bo = gem_to_qxl_bo(qfb->obj);
541 543
542 qxl_io_destroy_primary(qdev);544 if (bo->is_primary) {
543 bo->is_primary = false;545 qxl_io_destroy_primary(qdev);
546 bo->is_primary = false;
547 }
544 }548 }
545}549}
546 550
@@ -698,14 +702,15 @@ static void qxl_plane_cleanup_fb(struct drm_plane *plane, · 151 unmodified lines
698 struct drm_gem_object *obj;702 struct drm_gem_object *obj;
699 struct qxl_bo *user_bo;703 struct qxl_bo *user_bo;
700 704
701 if (!plane->state->fb) {705 if (!old_state->fb) {
702 /* we never executed prepare_fb, so there's nothing to706 /*
707 * we never executed prepare_fb, so there's nothing to
703 * unpin.708 * unpin.
704 */709 */
705 return;710 return;
706 }711 }
707 712
708 obj = to_qxl_framebuffer(plane->state->fb)->obj;713 obj = to_qxl_framebuffer(old_state->fb)->obj;
709 user_bo = gem_to_qxl_bo(obj);714 user_bo = gem_to_qxl_bo(obj);
710 qxl_bo_unpin(user_bo);715 qxl_bo_unpin(user_bo);
711}716}
drivers/gpu/drm/radeon/radeon_device.c+1−1
@@ -1663,7 +1663,7 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend, · 1662 unmodified lines
1663 radeon_agp_suspend(rdev);1663 radeon_agp_suspend(rdev);
1664 1664
1665 pci_save_state(dev->pdev);1665 pci_save_state(dev->pdev);
1666 if (freeze && rdev->family >= CHIP_CEDAR) {1666 if (freeze && rdev->family >= CHIP_CEDAR && !(rdev->flags & RADEON_IS_IGP)) {
1667 rdev->asic->asic_reset(rdev, true);1667 rdev->asic->asic_reset(rdev, true);
1668 pci_restore_state(dev->pdev);1668 pci_restore_state(dev->pdev);
1669 } else if (suspend) {1669 } else if (suspend) {
drivers/gpu/drm/sun4i/Kconfig+1−1
@@ -26,7 +26,7 @@ config DRM_SUN4I_HDMI_CEC · 25 unmodified lines
26 bool "Allwinner A10 HDMI CEC Support"26 bool "Allwinner A10 HDMI CEC Support"
27 depends on DRM_SUN4I_HDMI27 depends on DRM_SUN4I_HDMI
28 select CEC_CORE28 select CEC_CORE
29 depends on CEC_PIN29 select CEC_PIN
30 help30 help
31 Choose this option if you have an Allwinner SoC with an HDMI31 Choose this option if you have an Allwinner SoC with an HDMI
32 controller and want to use CEC.32 controller and want to use CEC.
drivers/gpu/drm/sun4i/sun4i_hdmi.h+1−1
@@ -15,7 +15,7 @@ · 14 unmodified lines
15#include <drm/drm_connector.h>15#include <drm/drm_connector.h>
16#include <drm/drm_encoder.h>16#include <drm/drm_encoder.h>
17 17
18#include <media/cec.h>18#include <media/cec-pin.h>
19 19
20#define SUN4I_HDMI_CTRL_REG 0x00420#define SUN4I_HDMI_CTRL_REG 0x004
21#define SUN4I_HDMI_CTRL_ENABLE BIT(31)21#define SUN4I_HDMI_CTRL_ENABLE BIT(31)
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c+14−5
@@ -302,26 +302,29 @@ static int sun4i_hdmi_bind(struct device *dev, struct device *master, · 301 unmodified lines
302 hdmi->mod_clk = devm_clk_get(dev, "mod");302 hdmi->mod_clk = devm_clk_get(dev, "mod");
303 if (IS_ERR(hdmi->mod_clk)) {303 if (IS_ERR(hdmi->mod_clk)) {
304 dev_err(dev, "Couldn't get the HDMI mod clock\n");304 dev_err(dev, "Couldn't get the HDMI mod clock\n");
305 return PTR_ERR(hdmi->mod_clk);305 ret = PTR_ERR(hdmi->mod_clk);
306 goto err_disable_bus_clk;
306 }307 }
307 clk_prepare_enable(hdmi->mod_clk);308 clk_prepare_enable(hdmi->mod_clk);
308 309
309 hdmi->pll0_clk = devm_clk_get(dev, "pll-0");310 hdmi->pll0_clk = devm_clk_get(dev, "pll-0");
310 if (IS_ERR(hdmi->pll0_clk)) {311 if (IS_ERR(hdmi->pll0_clk)) {
311 dev_err(dev, "Couldn't get the HDMI PLL 0 clock\n");312 dev_err(dev, "Couldn't get the HDMI PLL 0 clock\n");
312 return PTR_ERR(hdmi->pll0_clk);313 ret = PTR_ERR(hdmi->pll0_clk);
314 goto err_disable_mod_clk;
313 }315 }
314 316
315 hdmi->pll1_clk = devm_clk_get(dev, "pll-1");317 hdmi->pll1_clk = devm_clk_get(dev, "pll-1");
316 if (IS_ERR(hdmi->pll1_clk)) {318 if (IS_ERR(hdmi->pll1_clk)) {
317 dev_err(dev, "Couldn't get the HDMI PLL 1 clock\n");319 dev_err(dev, "Couldn't get the HDMI PLL 1 clock\n");
318 return PTR_ERR(hdmi->pll1_clk);320 ret = PTR_ERR(hdmi->pll1_clk);
321 goto err_disable_mod_clk;
319 }322 }
320 323
321 ret = sun4i_tmds_create(hdmi);324 ret = sun4i_tmds_create(hdmi);
322 if (ret) {325 if (ret) {
323 dev_err(dev, "Couldn't create the TMDS clock\n");326 dev_err(dev, "Couldn't create the TMDS clock\n");
324 return ret;327 goto err_disable_mod_clk;
325 }328 }
326 329
327 writel(SUN4I_HDMI_CTRL_ENABLE, hdmi->base + SUN4I_HDMI_CTRL_REG);330 writel(SUN4I_HDMI_CTRL_ENABLE, hdmi->base + SUN4I_HDMI_CTRL_REG);
@@ -362,7 +365,7 @@ static int sun4i_hdmi_bind(struct device *dev, struct device *master, · 34 unmodified lines
362 ret = sun4i_hdmi_i2c_create(dev, hdmi);365 ret = sun4i_hdmi_i2c_create(dev, hdmi);
363 if (ret) {366 if (ret) {
364 dev_err(dev, "Couldn't create the HDMI I2C adapter\n");367 dev_err(dev, "Couldn't create the HDMI I2C adapter\n");
365 return ret;368 goto err_disable_mod_clk;
366 }369 }
367 370
368 drm_encoder_helper_add(&hdmi->encoder,371 drm_encoder_helper_add(&hdmi->encoder,
@@ -422,6 +425,10 @@ err_cleanup_connector: · 53 unmodified lines
422 drm_encoder_cleanup(&hdmi->encoder);425 drm_encoder_cleanup(&hdmi->encoder);
423err_del_i2c_adapter:426err_del_i2c_adapter:
424 i2c_del_adapter(hdmi->i2c);427 i2c_del_adapter(hdmi->i2c);
428err_disable_mod_clk:
429 clk_disable_unprepare(hdmi->mod_clk);
430err_disable_bus_clk:
431 clk_disable_unprepare(hdmi->bus_clk);
425 return ret;432 return ret;
426}433}
427 434
@@ -434,6 +441,8 @@ static void sun4i_hdmi_unbind(struct device *dev, struct device *master, · 6 unmodified lines
434 drm_connector_cleanup(&hdmi->connector);441 drm_connector_cleanup(&hdmi->connector);
435 drm_encoder_cleanup(&hdmi->encoder);442 drm_encoder_cleanup(&hdmi->encoder);
436 i2c_del_adapter(hdmi->i2c);443 i2c_del_adapter(hdmi->i2c);
444 clk_disable_unprepare(hdmi->mod_clk);
445 clk_disable_unprepare(hdmi->bus_clk);
437}446}
438 447
439static const struct component_ops sun4i_hdmi_ops = {448static const struct component_ops sun4i_hdmi_ops = {
drivers/gpu/drm/tegra/trace.h+1−1
@@ -63,6 +63,6 @@ DEFINE_EVENT(register_access, sor_readl, · 62 unmodified lines
63 63
64/* This part must be outside protection */64/* This part must be outside protection */
65#undef TRACE_INCLUDE_PATH65#undef TRACE_INCLUDE_PATH
66#define TRACE_INCLUDE_PATH .66#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/tegra
67#define TRACE_INCLUDE_FILE trace67#define TRACE_INCLUDE_FILE trace
68#include <trace/define_trace.h>68#include <trace/define_trace.h>
drivers/hid/hid-ids.h+2−0
@@ -533,6 +533,7 @@ · 532 unmodified lines
533#define USB_VENDOR_ID_IDEACOM 0x1cb6533#define USB_VENDOR_ID_IDEACOM 0x1cb6
534#define USB_DEVICE_ID_IDEACOM_IDC6650 0x6650534#define USB_DEVICE_ID_IDEACOM_IDC6650 0x6650
535#define USB_DEVICE_ID_IDEACOM_IDC6651 0x6651535#define USB_DEVICE_ID_IDEACOM_IDC6651 0x6651
536#define USB_DEVICE_ID_IDEACOM_IDC6680 0x6680
536 537
537#define USB_VENDOR_ID_ILITEK 0x222a538#define USB_VENDOR_ID_ILITEK 0x222a
538#define USB_DEVICE_ID_ILITEK_MULTITOUCH 0x0001539#define USB_DEVICE_ID_ILITEK_MULTITOUCH 0x0001
@@ -660,6 +661,7 @@ · 121 unmodified lines
660#define USB_DEVICE_ID_LENOVO_CBTKBD 0x6048661#define USB_DEVICE_ID_LENOVO_CBTKBD 0x6048
661#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067662#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067
662#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085663#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085
664#define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3
663 665
664#define USB_VENDOR_ID_LG 0x1fd2666#define USB_VENDOR_ID_LG 0x1fd2
665#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064667#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064
drivers/hid/hid-multitouch.c+7−0
@@ -930,6 +930,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, · 929 unmodified lines
930 field->application != HID_DG_PEN &&930 field->application != HID_DG_PEN &&
931 field->application != HID_DG_TOUCHPAD &&931 field->application != HID_DG_TOUCHPAD &&
932 field->application != HID_GD_KEYBOARD &&932 field->application != HID_GD_KEYBOARD &&
933 field->application != HID_GD_SYSTEM_CONTROL &&
933 field->application != HID_CP_CONSUMER_CONTROL &&934 field->application != HID_CP_CONSUMER_CONTROL &&
934 field->application != HID_GD_WIRELESS_RADIO_CTLS &&935 field->application != HID_GD_WIRELESS_RADIO_CTLS &&
935 !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&936 !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
@@ -1419,6 +1420,12 @@ static const struct hid_device_id mt_devices[] = { · 483 unmodified lines
1419 USB_VENDOR_ID_ALPS_JP,1420 USB_VENDOR_ID_ALPS_JP,
1420 HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },1421 HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },
1421 1422
1423 /* Lenovo X1 TAB Gen 2 */
1424 { .driver_data = MT_CLS_WIN_8_DUAL,
1425 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
1426 USB_VENDOR_ID_LENOVO,
1427 USB_DEVICE_ID_LENOVO_X1_TAB) },
1428
1422 /* Anton devices */1429 /* Anton devices */
1423 { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,1430 { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
1424 MT_USB_DEVICE(USB_VENDOR_ID_ANTON,1431 MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
drivers/hid/hid-rmi.c+10−3
@@ -436,17 +436,24 @@ static int rmi_post_resume(struct hid_device *hdev) · 435 unmodified lines
436 if (!(data->device_flags & RMI_DEVICE))436 if (!(data->device_flags & RMI_DEVICE))
437 return 0;437 return 0;
438 438
439 ret = rmi_reset_attn_mode(hdev);439 /* Make sure the HID device is ready to receive events */
440 ret = hid_hw_open(hdev);
440 if (ret)441 if (ret)
441 return ret;442 return ret;
442 443
444 ret = rmi_reset_attn_mode(hdev);
445 if (ret)
446 goto out;
447
443 ret = rmi_driver_resume(rmi_dev, false);448 ret = rmi_driver_resume(rmi_dev, false);
444 if (ret) {449 if (ret) {
445 hid_warn(hdev, "Failed to resume device: %d\n", ret);450 hid_warn(hdev, "Failed to resume device: %d\n", ret);
446 return ret;451 goto out;
447 }452 }
448 453
449 return 0;454out:
455 hid_hw_close(hdev);
456 return ret;
450}457}
451#endif /* CONFIG_PM */458#endif /* CONFIG_PM */
452 459
drivers/hid/hidraw.c+1−1
@@ -337,8 +337,8 @@ static void drop_ref(struct hidraw *hidraw, int exists_bit) · 336 unmodified lines
337 kfree(hidraw);337 kfree(hidraw);
338 } else {338 } else {
339 /* close device for last reader */339 /* close device for last reader */
340 hid_hw_power(hidraw->hid, PM_HINT_NORMAL);
341 hid_hw_close(hidraw->hid);340 hid_hw_close(hidraw->hid);
341 hid_hw_power(hidraw->hid, PM_HINT_NORMAL);
342 }342 }
343 }343 }
344}344}
drivers/hid/i2c-hid/i2c-hid.c+2−1
@@ -543,7 +543,8 @@ static int i2c_hid_alloc_buffers(struct i2c_hid *ihid, size_t report_size) · 542 unmodified lines
543{543{
544 /* the worst case is computed from the set_report command with a544 /* the worst case is computed from the set_report command with a
545 * reportID > 15 and the maximum report length */545 * reportID > 15 and the maximum report length */
546 int args_len = sizeof(__u8) + /* optional ReportID byte */546 int args_len = sizeof(__u8) + /* ReportID */
547 sizeof(__u8) + /* optional ReportID byte */
547 sizeof(__u16) + /* data register */548 sizeof(__u16) + /* data register */
548 sizeof(__u16) + /* size of the report */549 sizeof(__u16) + /* size of the report */
549 report_size; /* report */550 report_size; /* report */
drivers/hid/usbhid/hid-quirks.c+1−0
@@ -99,6 +99,7 @@ static const struct hid_blacklist { · 98 unmodified lines
99 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A, HID_QUIRK_ALWAYS_POLL },99 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A, HID_QUIRK_ALWAYS_POLL },
100 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A, HID_QUIRK_ALWAYS_POLL },100 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A, HID_QUIRK_ALWAYS_POLL },
101 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },101 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
102 { USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680, HID_QUIRK_MULTI_INPUT },
102 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007, HID_QUIRK_ALWAYS_POLL },103 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007, HID_QUIRK_ALWAYS_POLL },
103 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077, HID_QUIRK_ALWAYS_POLL },104 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077, HID_QUIRK_ALWAYS_POLL },
104 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS, HID_QUIRK_NOGET },105 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS, HID_QUIRK_NOGET },
drivers/hid/wacom_sys.c+6−1
@@ -668,8 +668,10 @@ static struct wacom_hdev_data *wacom_get_hdev_data(struct hid_device *hdev) · 667 unmodified lines
668 668
669 /* Try to find an already-probed interface from the same device */669 /* Try to find an already-probed interface from the same device */
670 list_for_each_entry(data, &wacom_udev_list, list) {670 list_for_each_entry(data, &wacom_udev_list, list) {
671 if (compare_device_paths(hdev, data->dev, '/'))671 if (compare_device_paths(hdev, data->dev, '/')) {
672 kref_get(&data->kref);
672 return data;673 return data;
674 }
673 }675 }
674 676
675 /* Fallback to finding devices that appear to be "siblings" */677 /* Fallback to finding devices that appear to be "siblings" */
@@ -766,6 +768,9 @@ static int wacom_led_control(struct wacom *wacom) · 90 unmodified lines
766 if (!wacom->led.groups)768 if (!wacom->led.groups)
767 return -ENOTSUPP;769 return -ENOTSUPP;
768 770
771 if (wacom->wacom_wac.features.type == REMOTE)
772 return -ENOTSUPP;
773
769 if (wacom->wacom_wac.pid) { /* wireless connected */774 if (wacom->wacom_wac.pid) { /* wireless connected */
770 report_id = WAC_CMD_WL_LED_CONTROL;775 report_id = WAC_CMD_WL_LED_CONTROL;
771 buf_size = 13;776 buf_size = 13;
drivers/hid/wacom_wac.c+89−21
@@ -567,8 +567,8 @@ static int wacom_intuos_pad(struct wacom_wac *wacom) · 566 unmodified lines
567 keys = data[9] & 0x07;567 keys = data[9] & 0x07;
568 }568 }
569 } else {569 } else {
570 buttons = ((data[6] & 0x10) << 10) |570 buttons = ((data[6] & 0x10) << 5) |
571 ((data[5] & 0x10) << 9) |571 ((data[5] & 0x10) << 4) |
572 ((data[6] & 0x0F) << 4) |572 ((data[6] & 0x0F) << 4) |
573 (data[5] & 0x0F);573 (data[5] & 0x0F);
574 }574 }
@@ -1227,11 +1227,17 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) · 652 unmodified lines
1227 continue;1227 continue;
1228 1228
1229 if (range) {1229 if (range) {
1230 /* Fix rotation alignment: userspace expects zero at left */
1231 int16_t rotation = (int16_t)get_unaligned_le16(&frame[9]);
1232 rotation += 1800/4;
1233 if (rotation > 899)
1234 rotation -= 1800;
1235
1230 input_report_abs(pen_input, ABS_X, get_unaligned_le16(&frame[1]));1236 input_report_abs(pen_input, ABS_X, get_unaligned_le16(&frame[1]));
1231 input_report_abs(pen_input, ABS_Y, get_unaligned_le16(&frame[3]));1237 input_report_abs(pen_input, ABS_Y, get_unaligned_le16(&frame[3]));
1232 input_report_abs(pen_input, ABS_TILT_X, frame[7]);1238 input_report_abs(pen_input, ABS_TILT_X, (char)frame[7]);
1233 input_report_abs(pen_input, ABS_TILT_Y, frame[8]);1239 input_report_abs(pen_input, ABS_TILT_Y, (char)frame[8]);
1234 input_report_abs(pen_input, ABS_Z, get_unaligned_le16(&frame[9]));1240 input_report_abs(pen_input, ABS_Z, rotation);
1235 input_report_abs(pen_input, ABS_WHEEL, get_unaligned_le16(&frame[11]));1241 input_report_abs(pen_input, ABS_WHEEL, get_unaligned_le16(&frame[11]));
1236 }1242 }
1237 input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5]));1243 input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5]));
@@ -1319,12 +1325,19 @@ static void wacom_intuos_pro2_bt_pad(struct wacom_wac *wacom) · 81 unmodified lines
1319 unsigned char *data = wacom->data;1325 unsigned char *data = wacom->data;
1320 1326
1321 int buttons = (data[282] << 1) | ((data[281] >> 6) & 0x01);1327 int buttons = (data[282] << 1) | ((data[281] >> 6) & 0x01);
1322 int ring = data[285];1328 int ring = data[285] & 0x7F;
1323 int prox = buttons | (ring & 0x80);1329 bool ringstatus = data[285] & 0x80;
1330 bool prox = buttons || ringstatus;
1331
1332 /* Fix touchring data: userspace expects 0 at left and increasing clockwise */
1333 ring = 71 - ring;
1334 ring += 3*72/16;
1335 if (ring > 71)
1336 ring -= 72;
1324 1337
1325 wacom_report_numbered_buttons(pad_input, 9, buttons);1338 wacom_report_numbered_buttons(pad_input, 9, buttons);
1326 1339
1327 input_report_abs(pad_input, ABS_WHEEL, (ring & 0x80) ? (ring & 0x7f) : 0);1340 input_report_abs(pad_input, ABS_WHEEL, ringstatus ? ring : 0);
1328 1341
1329 input_report_key(pad_input, wacom->tool[1], prox ? 1 : 0);1342 input_report_key(pad_input, wacom->tool[1], prox ? 1 : 0);
1330 input_report_abs(pad_input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);1343 input_report_abs(pad_input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);
@@ -1616,6 +1629,20 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len) · 285 unmodified lines
1616 return 0;1629 return 0;
1617}1630}
1618 1631
1632static int wacom_offset_rotation(struct input_dev *input, struct hid_usage *usage,
1633 int value, int num, int denom)
1634{
1635 struct input_absinfo *abs = &input->absinfo[usage->code];
1636 int range = (abs->maximum - abs->minimum + 1);
1637
1638 value += num*range/denom;
1639 if (value > abs->maximum)
1640 value -= range;
1641 else if (value < abs->minimum)
1642 value += range;
1643 return value;
1644}
1645
1619int wacom_equivalent_usage(int usage)1646int wacom_equivalent_usage(int usage)
1620{1647{
1621 if ((usage & HID_USAGE_PAGE) == WACOM_HID_UP_WACOMDIGITIZER) {1648 if ((usage & HID_USAGE_PAGE) == WACOM_HID_UP_WACOMDIGITIZER) {
@@ -1898,6 +1925,7 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field · 276 unmodified lines
1898 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);1925 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
1899 int i;1926 int i;
1900 bool is_touch_on = value;1927 bool is_touch_on = value;
1928 bool do_report = false;
1901 1929
1902 /*1930 /*
1903 * Avoid reporting this event and setting inrange_state if this usage1931 * Avoid reporting this event and setting inrange_state if this usage
@@ -1912,6 +1940,29 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field · 8 unmodified lines
1912 }1940 }
1913 1941
1914 switch (equivalent_usage) {1942 switch (equivalent_usage) {
1943 case WACOM_HID_WD_TOUCHRING:
1944 /*
1945 * Userspace expects touchrings to increase in value with
1946 * clockwise gestures and have their zero point at the
1947 * tablet's left. HID events "should" be clockwise-
1948 * increasing and zero at top, though the MobileStudio
1949 * Pro and 2nd-gen Intuos Pro don't do this...
1950 */
1951 if (hdev->vendor == 0x56a &&
1952 (hdev->product == 0x34d || hdev->product == 0x34e || /* MobileStudio Pro */
1953 hdev->product == 0x357 || hdev->product == 0x358)) { /* Intuos Pro 2 */
1954 value = (field->logical_maximum - value);
1955
1956 if (hdev->product == 0x357 || hdev->product == 0x358)
1957 value = wacom_offset_rotation(input, usage, value, 3, 16);
1958 else if (hdev->product == 0x34d || hdev->product == 0x34e)
1959 value = wacom_offset_rotation(input, usage, value, 1, 2);
1960 }
1961 else {
1962 value = wacom_offset_rotation(input, usage, value, 1, 4);
1963 }
1964 do_report = true;
1965 break;
1915 case WACOM_HID_WD_TOUCHRINGSTATUS:1966 case WACOM_HID_WD_TOUCHRINGSTATUS:
1916 if (!value)1967 if (!value)
1917 input_event(input, usage->type, usage->code, 0);1968 input_event(input, usage->type, usage->code, 0);
@@ -1945,10 +1996,14 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field · 27 unmodified lines
1945 value, i);1996 value, i);
1946 /* fall through*/1997 /* fall through*/
1947 default:1998 default:
1999 do_report = true;
2000 break;
2001 }
2002
2003 if (do_report) {
1948 input_event(input, usage->type, usage->code, value);2004 input_event(input, usage->type, usage->code, value);
1949 if (value)2005 if (value)
1950 wacom_wac->hid_data.pad_input_event_flag = true;2006 wacom_wac->hid_data.pad_input_event_flag = true;
1951 break;
1952 }2007 }
1953}2008}
1954 2009
@@ -2086,22 +2141,34 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field · 131 unmodified lines
2086 wacom_wac->hid_data.tipswitch |= value;2141 wacom_wac->hid_data.tipswitch |= value;
2087 return;2142 return;
2088 case HID_DG_TOOLSERIALNUMBER:2143 case HID_DG_TOOLSERIALNUMBER:
2089 wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);2144 if (value) {
2090 wacom_wac->serial[0] |= (__u32)value;2145 wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
2146 wacom_wac->serial[0] |= (__u32)value;
2147 }
2091 return;2148 return;
2149 case HID_DG_TWIST:
2150 /*
2151 * Userspace expects pen twist to have its zero point when
2152 * the buttons/finger is on the tablet's left. HID values
2153 * are zero when buttons are toward the top.
2154 */
2155 value = wacom_offset_rotation(input, usage, value, 1, 4);
2156 break;
2092 case WACOM_HID_WD_SENSE:2157 case WACOM_HID_WD_SENSE:
2093 wacom_wac->hid_data.sense_state = value;2158 wacom_wac->hid_data.sense_state = value;
2094 return;2159 return;
2095 case WACOM_HID_WD_SERIALHI:2160 case WACOM_HID_WD_SERIALHI:
2096 wacom_wac->serial[0] = (wacom_wac->serial[0] & 0xFFFFFFFF);2161 if (value) {
2097 wacom_wac->serial[0] |= ((__u64)value) << 32;2162 wacom_wac->serial[0] = (wacom_wac->serial[0] & 0xFFFFFFFF);
2098 /*2163 wacom_wac->serial[0] |= ((__u64)value) << 32;
2099 * Non-USI EMR devices may contain additional tool type2164 /*
2100 * information here. See WACOM_HID_WD_TOOLTYPE case for2165 * Non-USI EMR devices may contain additional tool type
2101 * more details.2166 * information here. See WACOM_HID_WD_TOOLTYPE case for
2102 */2167 * more details.
2103 if (value >> 20 == 1) {2168 */
2104 wacom_wac->id[0] |= value & 0xFFFFF;2169 if (value >> 20 == 1) {
2170 wacom_wac->id[0] |= value & 0xFFFFF;
2171 }
2105 }2172 }
2106 return;2173 return;
2107 case WACOM_HID_WD_TOOLTYPE:2174 case WACOM_HID_WD_TOOLTYPE:
@@ -2205,7 +2272,7 @@ static void wacom_wac_pen_report(struct hid_device *hdev, · 97 unmodified lines
2205 input_report_key(input, wacom_wac->tool[0], prox);2272 input_report_key(input, wacom_wac->tool[0], prox);
2206 if (wacom_wac->serial[0]) {2273 if (wacom_wac->serial[0]) {
2207 input_event(input, EV_MSC, MSC_SERIAL, wacom_wac->serial[0]);2274 input_event(input, EV_MSC, MSC_SERIAL, wacom_wac->serial[0]);
2208 input_report_abs(input, ABS_MISC, id);2275 input_report_abs(input, ABS_MISC, prox ? id : 0);
2209 }2276 }
2210 2277
2211 wacom_wac->hid_data.tipswitch = false;2278 wacom_wac->hid_data.tipswitch = false;
@@ -2216,6 +2283,7 @@ static void wacom_wac_pen_report(struct hid_device *hdev, · 4 unmodified lines
2216 if (!prox) {2283 if (!prox) {
2217 wacom_wac->tool[0] = 0;2284 wacom_wac->tool[0] = 0;
2218 wacom_wac->id[0] = 0;2285 wacom_wac->id[0] = 0;
2286 wacom_wac->serial[0] = 0;
2219 }2287 }
2220}2288}
2221 2289
drivers/hv/channel_mgmt.c+0−4
@@ -936,14 +936,10 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) · 935 unmodified lines
936 936
937void vmbus_hvsock_device_unregister(struct vmbus_channel *channel)937void vmbus_hvsock_device_unregister(struct vmbus_channel *channel)
938{938{
939 mutex_lock(&vmbus_connection.channel_mutex);
940
941 BUG_ON(!is_hvsock_channel(channel));939 BUG_ON(!is_hvsock_channel(channel));
942 940
943 channel->rescind = true;941 channel->rescind = true;
944 vmbus_device_unregister(channel->device_obj);942 vmbus_device_unregister(channel->device_obj);
945
946 mutex_unlock(&vmbus_connection.channel_mutex);
947}943}
948EXPORT_SYMBOL_GPL(vmbus_hvsock_device_unregister);944EXPORT_SYMBOL_GPL(vmbus_hvsock_device_unregister);
949 945
drivers/hv/hv_fcopy.c+4−0
@@ -170,6 +170,10 @@ static void fcopy_send_data(struct work_struct *dummy) · 169 unmodified lines
170 out_src = smsg_out;170 out_src = smsg_out;
171 break;171 break;
172 172
173 case WRITE_TO_FILE:
174 out_src = fcopy_transaction.fcopy_msg;
175 out_len = sizeof(struct hv_do_fcopy);
176 break;
173 default:177 default:
174 out_src = fcopy_transaction.fcopy_msg;178 out_src = fcopy_transaction.fcopy_msg;
175 out_len = fcopy_transaction.recv_len;179 out_len = fcopy_transaction.recv_len;
drivers/hwmon/xgene-hwmon.c+11−8
@@ -630,7 +630,7 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 629 unmodified lines
630 sizeof(struct slimpro_resp_msg) * ASYNC_MSG_FIFO_SIZE,630 sizeof(struct slimpro_resp_msg) * ASYNC_MSG_FIFO_SIZE,
631 GFP_KERNEL);631 GFP_KERNEL);
632 if (rc)632 if (rc)
633 goto out_mbox_free;633 return -ENOMEM;
634 634
635 INIT_WORK(&ctx->workq, xgene_hwmon_evt_work);635 INIT_WORK(&ctx->workq, xgene_hwmon_evt_work);
636 636
@@ -646,7 +646,8 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 9 unmodified lines
646 if (IS_ERR(ctx->mbox_chan)) {646 if (IS_ERR(ctx->mbox_chan)) {
647 dev_err(&pdev->dev,647 dev_err(&pdev->dev,
648 "SLIMpro mailbox channel request failed\n");648 "SLIMpro mailbox channel request failed\n");
649 return -ENODEV;649 rc = -ENODEV;
650 goto out_mbox_free;
650 }651 }
651 } else {652 } else {
652 struct acpi_pcct_hw_reduced *cppc_ss;653 struct acpi_pcct_hw_reduced *cppc_ss;
@@ -654,7 +655,8 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 1 unmodified line
654 if (device_property_read_u32(&pdev->dev, "pcc-channel",655 if (device_property_read_u32(&pdev->dev, "pcc-channel",
655 &ctx->mbox_idx)) {656 &ctx->mbox_idx)) {
656 dev_err(&pdev->dev, "no pcc-channel property\n");657 dev_err(&pdev->dev, "no pcc-channel property\n");
657 return -ENODEV;658 rc = -ENODEV;
659 goto out_mbox_free;
658 }660 }
659 661
660 cl->rx_callback = xgene_hwmon_pcc_rx_cb;662 cl->rx_callback = xgene_hwmon_pcc_rx_cb;
@@ -662,7 +664,8 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 1 unmodified line
662 if (IS_ERR(ctx->mbox_chan)) {664 if (IS_ERR(ctx->mbox_chan)) {
663 dev_err(&pdev->dev,665 dev_err(&pdev->dev,
664 "PPC channel request failed\n");666 "PPC channel request failed\n");
665 return -ENODEV;667 rc = -ENODEV;
668 goto out_mbox_free;
666 }669 }
667 670
668 /*671 /*
@@ -675,13 +678,13 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 6 unmodified lines
675 if (!cppc_ss) {678 if (!cppc_ss) {
676 dev_err(&pdev->dev, "PPC subspace not found\n");679 dev_err(&pdev->dev, "PPC subspace not found\n");
677 rc = -ENODEV;680 rc = -ENODEV;
678 goto out_mbox_free;681 goto out;
679 }682 }
680 683
681 if (!ctx->mbox_chan->mbox->txdone_irq) {684 if (!ctx->mbox_chan->mbox->txdone_irq) {
682 dev_err(&pdev->dev, "PCC IRQ not supported\n");685 dev_err(&pdev->dev, "PCC IRQ not supported\n");
683 rc = -ENODEV;686 rc = -ENODEV;
684 goto out_mbox_free;687 goto out;
685 }688 }
686 689
687 /*690 /*
@@ -696,14 +699,14 @@ static int xgene_hwmon_probe(struct platform_device *pdev) · 8 unmodified lines
696 } else {699 } else {
697 dev_err(&pdev->dev, "Failed to get PCC comm region\n");700 dev_err(&pdev->dev, "Failed to get PCC comm region\n");
698 rc = -ENODEV;701 rc = -ENODEV;
699 goto out_mbox_free;702 goto out;
700 }703 }
701 704
702 if (!ctx->pcc_comm_addr) {705 if (!ctx->pcc_comm_addr) {
703 dev_err(&pdev->dev,706 dev_err(&pdev->dev,
704 "Failed to ioremap PCC comm region\n");707 "Failed to ioremap PCC comm region\n");
705 rc = -ENOMEM;708 rc = -ENOMEM;
706 goto out_mbox_free;709 goto out;
707 }710 }
708 711
709 /*712 /*
drivers/hwtracing/intel_th/pci.c+10−0
@@ -143,6 +143,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { · 142 unmodified lines
143 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x19e1),143 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x19e1),
144 .driver_data = (kernel_ulong_t)0,144 .driver_data = (kernel_ulong_t)0,
145 },145 },
146 {
147 /* Lewisburg PCH */
148 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa1a6),
149 .driver_data = (kernel_ulong_t)0,
150 },
146 {151 {
147 /* Gemini Lake */152 /* Gemini Lake */
148 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x318e),153 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x318e),
@@ -158,6 +163,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { · 9 unmodified lines
158 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x9da6),163 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x9da6),
159 .driver_data = (kernel_ulong_t)&intel_th_2x,164 .driver_data = (kernel_ulong_t)&intel_th_2x,
160 },165 },
166 {
167 /* Cedar Fork PCH */
168 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x18e1),
169 .driver_data = (kernel_ulong_t)&intel_th_2x,
170 },
161 { 0 },171 { 0 },
162};172};
163 173
drivers/hwtracing/stm/core.c+1−1
@@ -1119,7 +1119,7 @@ void stm_source_unregister_device(struct stm_source_data *data) · 1118 unmodified lines
1119 1119
1120 stm_source_link_drop(src);1120 stm_source_link_drop(src);
1121 1121
1122 device_destroy(&stm_source_class, src->dev.devt);1122 device_unregister(&src->dev);
1123}1123}
1124EXPORT_SYMBOL_GPL(stm_source_unregister_device);1124EXPORT_SYMBOL_GPL(stm_source_unregister_device);
1125 1125
drivers/i2c/busses/Kconfig+1−0
@@ -131,6 +131,7 @@ config I2C_I801 · 130 unmodified lines
131 Gemini Lake (SOC)131 Gemini Lake (SOC)
132 Cannon Lake-H (PCH)132 Cannon Lake-H (PCH)
133 Cannon Lake-LP (PCH)133 Cannon Lake-LP (PCH)
134 Cedar Fork (PCH)
134 135
135 This driver can also be built as a module. If so, the module136 This driver can also be built as a module. If so, the module
136 will be called i2c-i801.137 will be called i2c-i801.
drivers/i2c/busses/i2c-i801.c+4−0
@@ -68,6 +68,7 @@ · 67 unmodified lines
68 * Gemini Lake (SOC) 0x31d4 32 hard yes yes yes68 * Gemini Lake (SOC) 0x31d4 32 hard yes yes yes
69 * Cannon Lake-H (PCH) 0xa323 32 hard yes yes yes69 * Cannon Lake-H (PCH) 0xa323 32 hard yes yes yes
70 * Cannon Lake-LP (PCH) 0x9da3 32 hard yes yes yes70 * Cannon Lake-LP (PCH) 0x9da3 32 hard yes yes yes
71 * Cedar Fork (PCH) 0x18df 32 hard yes yes yes
71 *72 *
72 * Features supported by this driver:73 * Features supported by this driver:
73 * Software PEC no74 * Software PEC no
@@ -204,6 +205,7 @@ · 130 unmodified lines
204 205
205/* Older devices have their ID defined in <linux/pci_ids.h> */206/* Older devices have their ID defined in <linux/pci_ids.h> */
206#define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS 0x0f12207#define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS 0x0f12
208#define PCI_DEVICE_ID_INTEL_CDF_SMBUS 0x18df
207#define PCI_DEVICE_ID_INTEL_DNV_SMBUS 0x19df209#define PCI_DEVICE_ID_INTEL_DNV_SMBUS 0x19df
208#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22210#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
209#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22211#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
@@ -1025,6 +1027,7 @@ static const struct pci_device_id i801_ids[] = { · 815 unmodified lines
1025 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS) },1027 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS) },
1026 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS) },1028 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS) },
1027 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS) },1029 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS) },
1030 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CDF_SMBUS) },
1028 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DNV_SMBUS) },1031 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DNV_SMBUS) },
1029 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BROXTON_SMBUS) },1032 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BROXTON_SMBUS) },
1030 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS) },1033 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS) },
@@ -1513,6 +1516,7 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) · 482 unmodified lines
1513 case PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS:1516 case PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS:
1514 case PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS:1517 case PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS:
1515 case PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS:1518 case PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS:
1519 case PCI_DEVICE_ID_INTEL_CDF_SMBUS:
1516 case PCI_DEVICE_ID_INTEL_DNV_SMBUS:1520 case PCI_DEVICE_ID_INTEL_DNV_SMBUS:
1517 case PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS:1521 case PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS:
1518 priv->features |= FEATURE_I2C_BLOCK_READ;1522 priv->features |= FEATURE_I2C_BLOCK_READ;
drivers/i2c/busses/i2c-img-scb.c+1−1
@@ -1459,6 +1459,6 @@ static struct platform_driver img_scb_i2c_driver = { · 1458 unmodified lines
1459};1459};
1460module_platform_driver(img_scb_i2c_driver);1460module_platform_driver(img_scb_i2c_driver);
1461 1461
1462MODULE_AUTHOR("James Hogan <james.hogan@imgtec.com>");1462MODULE_AUTHOR("James Hogan <jhogan@kernel.org>");
1463MODULE_DESCRIPTION("IMG host I2C driver");1463MODULE_DESCRIPTION("IMG host I2C driver");
1464MODULE_LICENSE("GPL v2");1464MODULE_LICENSE("GPL v2");
drivers/i2c/busses/i2c-sprd.c+1−0
@@ -627,6 +627,7 @@ static const struct dev_pm_ops sprd_i2c_pm_ops = { · 626 unmodified lines
627 627
628static const struct of_device_id sprd_i2c_of_match[] = {628static const struct of_device_id sprd_i2c_of_match[] = {
629 { .compatible = "sprd,sc9860-i2c", },629 { .compatible = "sprd,sc9860-i2c", },
630 {},
630};631};
631 632
632static struct platform_driver sprd_i2c_driver = {633static struct platform_driver sprd_i2c_driver = {
drivers/i2c/busses/i2c-stm32f7.c+7−10
@@ -215,7 +215,7 @@ struct stm32f7_i2c_dev { · 214 unmodified lines
215 unsigned int msg_num;215 unsigned int msg_num;
216 unsigned int msg_id;216 unsigned int msg_id;
217 struct stm32f7_i2c_msg f7_msg;217 struct stm32f7_i2c_msg f7_msg;
218 struct stm32f7_i2c_setup *setup;218 struct stm32f7_i2c_setup setup;
219 struct stm32f7_i2c_timings timing;219 struct stm32f7_i2c_timings timing;
220};220};
221 221
@@ -265,7 +265,7 @@ static struct stm32f7_i2c_spec i2c_specs[] = { · 43 unmodified lines
265 },265 },
266};266};
267 267
268struct stm32f7_i2c_setup stm32f7_setup = {268static const struct stm32f7_i2c_setup stm32f7_setup = {
269 .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,269 .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
270 .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,270 .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
271 .dnf = STM32F7_I2C_DNF_DEFAULT,271 .dnf = STM32F7_I2C_DNF_DEFAULT,
@@ -537,7 +537,7 @@ static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev) · 265 unmodified lines
537 writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);537 writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
538 538
539 /* Enable I2C */539 /* Enable I2C */
540 if (i2c_dev->setup->analog_filter)540 if (i2c_dev->setup.analog_filter)
541 stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,541 stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
542 STM32F7_I2C_CR1_ANFOFF);542 STM32F7_I2C_CR1_ANFOFF);
543 else543 else
@@ -887,22 +887,19 @@ static int stm32f7_i2c_probe(struct platform_device *pdev) · 343 unmodified lines
887 }887 }
888 888
889 setup = of_device_get_match_data(&pdev->dev);889 setup = of_device_get_match_data(&pdev->dev);
890 i2c_dev->setup->rise_time = setup->rise_time;890 i2c_dev->setup = *setup;
891 i2c_dev->setup->fall_time = setup->fall_time;
892 i2c_dev->setup->dnf = setup->dnf;
893 i2c_dev->setup->analog_filter = setup->analog_filter;
894 891
895 ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns",892 ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns",
896 &rise_time);893 &rise_time);
897 if (!ret)894 if (!ret)
898 i2c_dev->setup->rise_time = rise_time;895 i2c_dev->setup.rise_time = rise_time;
899 896
900 ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-falling-time-ns",897 ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-falling-time-ns",
901 &fall_time);898 &fall_time);
902 if (!ret)899 if (!ret)
903 i2c_dev->setup->fall_time = fall_time;900 i2c_dev->setup.fall_time = fall_time;
904 901
905 ret = stm32f7_i2c_setup_timing(i2c_dev, i2c_dev->setup);902 ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup);
906 if (ret)903 if (ret)
907 goto clk_free;904 goto clk_free;
908 905
drivers/ide/ide-probe.c+1−0
@@ -1451,6 +1451,7 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d, · 1450 unmodified lines
1451 if (hwif_init(hwif) == 0) {1451 if (hwif_init(hwif) == 0) {
1452 printk(KERN_INFO "%s: failed to initialize IDE "1452 printk(KERN_INFO "%s: failed to initialize IDE "
1453 "interface\n", hwif->name);1453 "interface\n", hwif->name);
1454 device_unregister(hwif->portdev);
1454 device_unregister(&hwif->gendev);1455 device_unregister(&hwif->gendev);
1455 ide_disable_port(hwif);1456 ide_disable_port(hwif);
1456 continue;1457 continue;
drivers/ide/ide-scan-pci.c+9−4
@@ -56,6 +56,7 @@ static int __init ide_scan_pcidev(struct pci_dev *dev) · 55 unmodified lines
56{56{
57 struct list_head *l;57 struct list_head *l;
58 struct pci_driver *d;58 struct pci_driver *d;
59 int ret;
59 60
60 list_for_each(l, &ide_pci_drivers) {61 list_for_each(l, &ide_pci_drivers) {
61 d = list_entry(l, struct pci_driver, node);62 d = list_entry(l, struct pci_driver, node);
@@ -63,10 +64,14 @@ static int __init ide_scan_pcidev(struct pci_dev *dev) · 1 unmodified line
63 const struct pci_device_id *id =64 const struct pci_device_id *id =
64 pci_match_id(d->id_table, dev);65 pci_match_id(d->id_table, dev);
65 66
66 if (id != NULL && d->probe(dev, id) >= 0) {67 if (id != NULL) {
67 dev->driver = d;68 pci_assign_irq(dev);
68 pci_dev_get(dev);69 ret = d->probe(dev, id);
69 return 1;70 if (ret >= 0) {
71 dev->driver = d;
72 pci_dev_get(dev);
73 return 1;
74 }
70 }75 }
71 }76 }
72 }77 }
drivers/ide/setup-pci.c+40−23
@@ -179,6 +179,7 @@ EXPORT_SYMBOL_GPL(ide_setup_pci_noise); · 178 unmodified lines
179/**179/**
180 * ide_pci_enable - do PCI enables180 * ide_pci_enable - do PCI enables
181 * @dev: PCI device181 * @dev: PCI device
182 * @bars: PCI BARs mask
182 * @d: IDE port info183 * @d: IDE port info
183 *184 *
184 * Enable the IDE PCI device. We attempt to enable the device in full185 * Enable the IDE PCI device. We attempt to enable the device in full
@@ -189,9 +190,10 @@ EXPORT_SYMBOL_GPL(ide_setup_pci_noise); · 4 unmodified lines
189 * Returns zero on success or an error code190 * Returns zero on success or an error code
190 */191 */
191 192
192static int ide_pci_enable(struct pci_dev *dev, const struct ide_port_info *d)193static int ide_pci_enable(struct pci_dev *dev, int bars,
194 const struct ide_port_info *d)
193{195{
194 int ret, bars;196 int ret;
195 197
196 if (pci_enable_device(dev)) {198 if (pci_enable_device(dev)) {
197 ret = pci_enable_device_io(dev);199 ret = pci_enable_device_io(dev);
@@ -216,18 +218,6 @@ static int ide_pci_enable(struct pci_dev *dev, const struct ide_port_info *d) · 18 unmodified lines
216 goto out;218 goto out;
217 }219 }
218 220
219 if (d->host_flags & IDE_HFLAG_SINGLE)
220 bars = (1 << 2) - 1;
221 else
222 bars = (1 << 4) - 1;
223
224 if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0) {
225 if (d->host_flags & IDE_HFLAG_CS5520)
226 bars |= (1 << 2);
227 else
228 bars |= (1 << 4);
229 }
230
231 ret = pci_request_selected_regions(dev, bars, d->name);221 ret = pci_request_selected_regions(dev, bars, d->name);
232 if (ret < 0)222 if (ret < 0)
233 printk(KERN_ERR "%s %s: can't reserve resources\n",223 printk(KERN_ERR "%s %s: can't reserve resources\n",
@@ -403,6 +393,7 @@ int ide_hwif_setup_dma(ide_hwif_t *hwif, const struct ide_port_info *d) · 169 unmodified lines
403/**393/**
404 * ide_setup_pci_controller - set up IDE PCI394 * ide_setup_pci_controller - set up IDE PCI
405 * @dev: PCI device395 * @dev: PCI device
396 * @bars: PCI BARs mask
406 * @d: IDE port info397 * @d: IDE port info
407 * @noisy: verbose flag398 * @noisy: verbose flag
408 *399 *
@@ -411,7 +402,7 @@ int ide_hwif_setup_dma(ide_hwif_t *hwif, const struct ide_port_info *d) · 2 unmodified lines
411 * and enables it if need be402 * and enables it if need be
412 */403 */
413 404
414static int ide_setup_pci_controller(struct pci_dev *dev,405static int ide_setup_pci_controller(struct pci_dev *dev, int bars,
415 const struct ide_port_info *d, int noisy)406 const struct ide_port_info *d, int noisy)
416{407{
417 int ret;408 int ret;
@@ -420,7 +411,7 @@ static int ide_setup_pci_controller(struct pci_dev *dev, · 2 unmodified lines
420 if (noisy)411 if (noisy)
421 ide_setup_pci_noise(dev, d);412 ide_setup_pci_noise(dev, d);
422 413
423 ret = ide_pci_enable(dev, d);414 ret = ide_pci_enable(dev, bars, d);
424 if (ret < 0)415 if (ret < 0)
425 goto out;416 goto out;
426 417
@@ -428,16 +419,20 @@ static int ide_setup_pci_controller(struct pci_dev *dev, · 1 unmodified line
428 if (ret < 0) {419 if (ret < 0) {
429 printk(KERN_ERR "%s %s: error accessing PCI regs\n",420 printk(KERN_ERR "%s %s: error accessing PCI regs\n",
430 d->name, pci_name(dev));421 d->name, pci_name(dev));
431 goto out;422 goto out_free_bars;
432 }423 }
433 if (!(pcicmd & PCI_COMMAND_IO)) { /* is device disabled? */424 if (!(pcicmd & PCI_COMMAND_IO)) { /* is device disabled? */
434 ret = ide_pci_configure(dev, d);425 ret = ide_pci_configure(dev, d);
435 if (ret < 0)426 if (ret < 0)
436 goto out;427 goto out_free_bars;
437 printk(KERN_INFO "%s %s: device enabled (Linux)\n",428 printk(KERN_INFO "%s %s: device enabled (Linux)\n",
438 d->name, pci_name(dev));429 d->name, pci_name(dev));
439 }430 }
440 431
432 goto out;
433
434out_free_bars:
435 pci_release_selected_regions(dev, bars);
441out:436out:
442 return ret;437 return ret;
443}438}
@@ -540,13 +535,28 @@ int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, · 96 unmodified lines
540{535{
541 struct pci_dev *pdev[] = { dev1, dev2 };536 struct pci_dev *pdev[] = { dev1, dev2 };
542 struct ide_host *host;537 struct ide_host *host;
543 int ret, i, n_ports = dev2 ? 4 : 2;538 int ret, i, n_ports = dev2 ? 4 : 2, bars;
544 struct ide_hw hw[4], *hws[] = { NULL, NULL, NULL, NULL };539 struct ide_hw hw[4], *hws[] = { NULL, NULL, NULL, NULL };
545 540
541 if (d->host_flags & IDE_HFLAG_SINGLE)
542 bars = (1 << 2) - 1;
543 else
544 bars = (1 << 4) - 1;
545
546 if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0) {
547 if (d->host_flags & IDE_HFLAG_CS5520)
548 bars |= (1 << 2);
549 else
550 bars |= (1 << 4);
551 }
552
546 for (i = 0; i < n_ports / 2; i++) {553 for (i = 0; i < n_ports / 2; i++) {
547 ret = ide_setup_pci_controller(pdev[i], d, !i);554 ret = ide_setup_pci_controller(pdev[i], bars, d, !i);
548 if (ret < 0)555 if (ret < 0) {
556 if (i == 1)
557 pci_release_selected_regions(pdev[0], bars);
549 goto out;558 goto out;
559 }
550 560
551 ide_pci_setup_ports(pdev[i], d, &hw[i*2], &hws[i*2]);561 ide_pci_setup_ports(pdev[i], d, &hw[i*2], &hws[i*2]);
552 }562 }
@@ -554,7 +564,7 @@ int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, · 1 unmodified line
554 host = ide_host_alloc(d, hws, n_ports);564 host = ide_host_alloc(d, hws, n_ports);
555 if (host == NULL) {565 if (host == NULL) {
556 ret = -ENOMEM;566 ret = -ENOMEM;
557 goto out;567 goto out_free_bars;
558 }568 }
559 569
560 host->dev[0] = &dev1->dev;570 host->dev[0] = &dev1->dev;
@@ -576,7 +586,7 @@ int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, · 15 unmodified lines
576 * do_ide_setup_pci_device() on the first device!586 * do_ide_setup_pci_device() on the first device!
577 */587 */
578 if (ret < 0)588 if (ret < 0)
579 goto out;589 goto out_free_bars;
580 590
581 /* fixup IRQ */591 /* fixup IRQ */
582 if (ide_pci_is_in_compatibility_mode(pdev[i])) {592 if (ide_pci_is_in_compatibility_mode(pdev[i])) {
@@ -589,6 +599,13 @@ int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, · 6 unmodified lines
589 ret = ide_host_register(host, d, hws);599 ret = ide_host_register(host, d, hws);
590 if (ret)600 if (ret)
591 ide_host_free(host);601 ide_host_free(host);
602 else
603 goto out;
604
605out_free_bars:
606 i = n_ports / 2;
607 while (i--)
608 pci_release_selected_regions(pdev[i], bars);
592out:609out:
593 return ret;610 return ret;
594}611}
drivers/iio/adc/ad7793.c+2−2
@@ -257,7 +257,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, · 256 unmodified lines
257 unsigned int vref_mv)257 unsigned int vref_mv)
258{258{
259 struct ad7793_state *st = iio_priv(indio_dev);259 struct ad7793_state *st = iio_priv(indio_dev);
260 int i, ret = -1;260 int i, ret;
261 unsigned long long scale_uv;261 unsigned long long scale_uv;
262 u32 id;262 u32 id;
263 263
@@ -266,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, · 2 unmodified lines
266 return ret;266 return ret;
267 267
268 /* reset the serial interface */268 /* reset the serial interface */
269 ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret));269 ret = ad_sd_reset(&st->sd, 32);
270 if (ret < 0)270 if (ret < 0)
271 goto out;271 goto out;
272 usleep_range(500, 2000); /* Wait for at least 500us */272 usleep_range(500, 2000); /* Wait for at least 500us */
drivers/iio/adc/ad_sigma_delta.c+28−0
@@ -177,6 +177,34 @@ out: · 176 unmodified lines
177}177}
178EXPORT_SYMBOL_GPL(ad_sd_read_reg);178EXPORT_SYMBOL_GPL(ad_sd_read_reg);
179 179
180/**
181 * ad_sd_reset() - Reset the serial interface
182 *
183 * @sigma_delta: The sigma delta device
184 * @reset_length: Number of SCLKs with DIN = 1
185 *
186 * Returns 0 on success, an error code otherwise.
187 **/
188int ad_sd_reset(struct ad_sigma_delta *sigma_delta,
189 unsigned int reset_length)
190{
191 uint8_t *buf;
192 unsigned int size;
193 int ret;
194
195 size = DIV_ROUND_UP(reset_length, 8);
196 buf = kcalloc(size, sizeof(*buf), GFP_KERNEL);
197 if (!buf)
198 return -ENOMEM;
199
200 memset(buf, 0xff, size);
201 ret = spi_write(sigma_delta->spi, buf, size);
202 kfree(buf);
203
204 return ret;
205}
206EXPORT_SYMBOL_GPL(ad_sd_reset);
207
180static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta,208static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta,
181 unsigned int mode, unsigned int channel)209 unsigned int mode, unsigned int channel)
182{210{
drivers/iio/adc/mcp320x.c+16−9
@@ -17,6 +17,8 @@ · 16 unmodified lines
17 * MCP320417 * MCP3204
18 * MCP320818 * MCP3208
19 * ------------19 * ------------
20 * 13 bit converter
21 * MCP3301
20 *22 *
21 * Datasheet can be found here:23 * Datasheet can be found here:
22 * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp300124 * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001
@@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index, · 73 unmodified lines
96}98}
97 99
98static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,100static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
99 bool differential, int device_index)101 bool differential, int device_index, int *val)
100{102{
101 int ret;103 int ret;
102 104
@@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, · 14 unmodified lines
117 119
118 switch (device_index) {120 switch (device_index) {
119 case mcp3001:121 case mcp3001:
120 return (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3);122 *val = (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3);
123 return 0;
121 case mcp3002:124 case mcp3002:
122 case mcp3004:125 case mcp3004:
123 case mcp3008:126 case mcp3008:
124 return (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6);127 *val = (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6);
128 return 0;
125 case mcp3201:129 case mcp3201:
126 return (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1);130 *val = (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1);
131 return 0;
127 case mcp3202:132 case mcp3202:
128 case mcp3204:133 case mcp3204:
129 case mcp3208:134 case mcp3208:
130 return (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4);135 *val = (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4);
136 return 0;
131 case mcp3301:137 case mcp3301:
132 return sign_extend32((adc->rx_buf[0] & 0x1f) << 8 | adc->rx_buf[1], 12);138 *val = sign_extend32((adc->rx_buf[0] & 0x1f) << 8
139 | adc->rx_buf[1], 12);
140 return 0;
133 default:141 default:
134 return -EINVAL;142 return -EINVAL;
135 }143 }
@@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev, · 14 unmodified lines
150 switch (mask) {158 switch (mask) {
151 case IIO_CHAN_INFO_RAW:159 case IIO_CHAN_INFO_RAW:
152 ret = mcp320x_adc_conversion(adc, channel->address,160 ret = mcp320x_adc_conversion(adc, channel->address,
153 channel->differential, device_index);161 channel->differential, device_index, val);
154
155 if (ret < 0)162 if (ret < 0)
156 goto out;163 goto out;
157 164
158 *val = ret;
159 ret = IIO_VAL_INT;165 ret = IIO_VAL_INT;
160 break;166 break;
161 167
@@ -312,6 +318,7 @@ static int mcp320x_probe(struct spi_device *spi) · 150 unmodified lines
312 indio_dev->name = spi_get_device_id(spi)->name;318 indio_dev->name = spi_get_device_id(spi)->name;
313 indio_dev->modes = INDIO_DIRECT_MODE;319 indio_dev->modes = INDIO_DIRECT_MODE;
314 indio_dev->info = &mcp320x_info;320 indio_dev->info = &mcp320x_info;
321 spi_set_drvdata(spi, indio_dev);
315 322
316 chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data];323 chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data];
317 indio_dev->channels = chip_info->channels;324 indio_dev->channels = chip_info->channels;
drivers/iio/adc/stm32-adc.c+1−1
@@ -1666,7 +1666,7 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev) · 1665 unmodified lines
1666 1666
1667 num_channels = of_property_count_u32_elems(node, "st,adc-channels");1667 num_channels = of_property_count_u32_elems(node, "st,adc-channels");
1668 if (num_channels < 0 ||1668 if (num_channels < 0 ||
1669 num_channels >= adc_info->max_channels) {1669 num_channels > adc_info->max_channels) {
1670 dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");1670 dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
1671 return num_channels < 0 ? num_channels : -EINVAL;1671 return num_channels < 0 ? num_channels : -EINVAL;
1672 }1672 }
drivers/iio/adc/ti-ads1015.c+5−3
@@ -52,7 +52,7 @@ · 51 unmodified lines
52 52
53#define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0)53#define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0)
54#define ADS1015_CFG_COMP_LAT_MASK BIT(2)54#define ADS1015_CFG_COMP_LAT_MASK BIT(2)
55#define ADS1015_CFG_COMP_POL_MASK BIT(2)55#define ADS1015_CFG_COMP_POL_MASK BIT(3)
56#define ADS1015_CFG_COMP_MODE_MASK BIT(4)56#define ADS1015_CFG_COMP_MODE_MASK BIT(4)
57#define ADS1015_CFG_DR_MASK GENMASK(7, 5)57#define ADS1015_CFG_DR_MASK GENMASK(7, 5)
58#define ADS1015_CFG_MOD_MASK BIT(8)58#define ADS1015_CFG_MOD_MASK BIT(8)
@@ -1017,10 +1017,12 @@ static int ads1015_probe(struct i2c_client *client, · 958 unmodified lines
1017 1017
1018 switch (irq_trig) {1018 switch (irq_trig) {
1019 case IRQF_TRIGGER_LOW:1019 case IRQF_TRIGGER_LOW:
1020 cfg_comp |= ADS1015_CFG_COMP_POL_LOW;1020 cfg_comp |= ADS1015_CFG_COMP_POL_LOW <<
1021 ADS1015_CFG_COMP_POL_SHIFT;
1021 break;1022 break;
1022 case IRQF_TRIGGER_HIGH:1023 case IRQF_TRIGGER_HIGH:
1023 cfg_comp |= ADS1015_CFG_COMP_POL_HIGH;1024 cfg_comp |= ADS1015_CFG_COMP_POL_HIGH <<
1025 ADS1015_CFG_COMP_POL_SHIFT;
1024 break;1026 break;
1025 default:1027 default:
1026 return -EINVAL;1028 return -EINVAL;
drivers/iio/adc/twl4030-madc.c+10−4
@@ -887,21 +887,27 @@ static int twl4030_madc_probe(struct platform_device *pdev) · 886 unmodified lines
887 887
888 /* Enable 3v1 bias regulator for MADC[3:6] */888 /* Enable 3v1 bias regulator for MADC[3:6] */
889 madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");889 madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");
890 if (IS_ERR(madc->usb3v1))890 if (IS_ERR(madc->usb3v1)) {
891 return -ENODEV;891 ret = -ENODEV;
892 goto err_i2c;
893 }
892 894
893 ret = regulator_enable(madc->usb3v1);895 ret = regulator_enable(madc->usb3v1);
894 if (ret)896 if (ret) {
895 dev_err(madc->dev, "could not enable 3v1 bias regulator\n");897 dev_err(madc->dev, "could not enable 3v1 bias regulator\n");
898 goto err_i2c;
899 }
896 900
897 ret = iio_device_register(iio_dev);901 ret = iio_device_register(iio_dev);
898 if (ret) {902 if (ret) {
899 dev_err(&pdev->dev, "could not register iio device\n");903 dev_err(&pdev->dev, "could not register iio device\n");
900 goto err_i2c;904 goto err_usb3v1;
901 }905 }
902 906
903 return 0;907 return 0;
904 908
909err_usb3v1:
910 regulator_disable(madc->usb3v1);
905err_i2c:911err_i2c:
906 twl4030_madc_set_current_generator(madc, 0, 0);912 twl4030_madc_set_current_generator(madc, 0, 0);
907err_current_generator:913err_current_generator:
drivers/iio/common/st_sensors/st_sensors_core.c+10−1
@@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable) · 462 unmodified lines
463 u8 drdy_mask;463 u8 drdy_mask;
464 struct st_sensor_data *sdata = iio_priv(indio_dev);464 struct st_sensor_data *sdata = iio_priv(indio_dev);
465 465
466 if (!sdata->sensor_settings->drdy_irq.addr)466 if (!sdata->sensor_settings->drdy_irq.addr) {
467 /*
468 * there are some devices (e.g. LIS3MDL) where drdy line is
469 * routed to a given pin and it is not possible to select a
470 * different one. Take into account irq status register
471 * to understand if irq trigger can be properly supported
472 */
473 if (sdata->sensor_settings->drdy_irq.addr_stat_drdy)
474 sdata->hw_irq_trigger = enable;
467 return 0;475 return 0;
476 }
468 477
469 /* Enable/Disable the interrupt generator 1. */478 /* Enable/Disable the interrupt generator 1. */
470 if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) {479 if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) {
drivers/iio/industrialio-core.c+3−1
@@ -310,8 +310,10 @@ static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf, · 309 unmodified lines
310 ret = indio_dev->info->debugfs_reg_access(indio_dev,310 ret = indio_dev->info->debugfs_reg_access(indio_dev,
311 indio_dev->cached_reg_addr,311 indio_dev->cached_reg_addr,
312 0, &val);312 0, &val);
313 if (ret)313 if (ret) {
314 dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);314 dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
315 return ret;
316 }
315 317
316 len = snprintf(buf, sizeof(buf), "0x%X\n", val);318 len = snprintf(buf, sizeof(buf), "0x%X\n", val);
317 319
drivers/iio/magnetometer/st_magn_core.c+4−0
@@ -315,6 +315,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = { · 314 unmodified lines
315 },315 },
316 },316 },
317 },317 },
318 .drdy_irq = {
319 /* drdy line is routed drdy pin */
320 .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
321 },
318 .multi_read_bit = true,322 .multi_read_bit = true,
319 .bootime = 2,323 .bootime = 2,
320 },324 },
drivers/iio/pressure/bmp280-core.c+1−1
@@ -573,7 +573,7 @@ static int bmp280_chip_config(struct bmp280_data *data) · 572 unmodified lines
573 u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) |573 u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) |
574 BMP280_OSRS_PRESS_X(data->oversampling_press + 1);574 BMP280_OSRS_PRESS_X(data->oversampling_press + 1);
575 575
576 ret = regmap_update_bits(data->regmap, BMP280_REG_CTRL_MEAS,576 ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS,
577 BMP280_OSRS_TEMP_MASK |577 BMP280_OSRS_TEMP_MASK |
578 BMP280_OSRS_PRESS_MASK |578 BMP280_OSRS_PRESS_MASK |
579 BMP280_MODE_MASK,579 BMP280_MODE_MASK,
drivers/iio/trigger/stm32-timer-trigger.c+3−1
@@ -174,6 +174,7 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv) · 173 unmodified lines
174 clk_disable(priv->clk);174 clk_disable(priv->clk);
175 175
176 /* Stop timer */176 /* Stop timer */
177 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
177 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);178 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
178 regmap_write(priv->regmap, TIM_PSC, 0);179 regmap_write(priv->regmap, TIM_PSC, 0);
179 regmap_write(priv->regmap, TIM_ARR, 0);180 regmap_write(priv->regmap, TIM_ARR, 0);
@@ -715,8 +716,9 @@ static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev, · 535 unmodified lines
715 if (ret)716 if (ret)
716 return ret;717 return ret;
717 718
719 /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
720 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
718 regmap_write(priv->regmap, TIM_ARR, preset);721 regmap_write(priv->regmap, TIM_ARR, preset);
719 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, TIM_CR1_ARPE);
720 722
721 return len;723 return len;
722}724}
drivers/infiniband/core/iwpm_msg.c+8−0
@@ -100,6 +100,8 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client) · 99 unmodified lines
100 if (ret)100 if (ret)
101 goto pid_query_error;101 goto pid_query_error;
102 102
103 nlmsg_end(skb, nlh);
104
103 pr_debug("%s: Multicasting a nlmsg (dev = %s ifname = %s iwpm = %s)\n",105 pr_debug("%s: Multicasting a nlmsg (dev = %s ifname = %s iwpm = %s)\n",
104 __func__, pm_msg->dev_name, pm_msg->if_name, iwpm_ulib_name);106 __func__, pm_msg->dev_name, pm_msg->if_name, iwpm_ulib_name);
105 107
@@ -170,6 +172,8 @@ int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client) · 64 unmodified lines
170 &pm_msg->loc_addr, IWPM_NLA_MANAGE_ADDR);172 &pm_msg->loc_addr, IWPM_NLA_MANAGE_ADDR);
171 if (ret)173 if (ret)
172 goto add_mapping_error;174 goto add_mapping_error;
175
176 nlmsg_end(skb, nlh);
173 nlmsg_request->req_buffer = pm_msg;177 nlmsg_request->req_buffer = pm_msg;
174 178
175 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);179 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
@@ -246,6 +250,8 @@ int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client) · 70 unmodified lines
246 &pm_msg->rem_addr, IWPM_NLA_QUERY_REMOTE_ADDR);250 &pm_msg->rem_addr, IWPM_NLA_QUERY_REMOTE_ADDR);
247 if (ret)251 if (ret)
248 goto query_mapping_error;252 goto query_mapping_error;
253
254 nlmsg_end(skb, nlh);
249 nlmsg_request->req_buffer = pm_msg;255 nlmsg_request->req_buffer = pm_msg;
250 256
251 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);257 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
@@ -308,6 +314,8 @@ int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client) · 56 unmodified lines
308 if (ret)314 if (ret)
309 goto remove_mapping_error;315 goto remove_mapping_error;
310 316
317 nlmsg_end(skb, nlh);
318
311 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);319 ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
312 if (ret) {320 if (ret) {
313 skb = NULL; /* skb is freed in the netlink send-op handling */321 skb = NULL; /* skb is freed in the netlink send-op handling */
drivers/infiniband/core/iwpm_util.c+5−0
@@ -597,6 +597,9 @@ static int send_mapinfo_num(u32 mapping_num, u8 nl_client, int iwpm_pid) · 596 unmodified lines
597 &mapping_num, IWPM_NLA_MAPINFO_SEND_NUM);597 &mapping_num, IWPM_NLA_MAPINFO_SEND_NUM);
598 if (ret)598 if (ret)
599 goto mapinfo_num_error;599 goto mapinfo_num_error;
600
601 nlmsg_end(skb, nlh);
602
600 ret = rdma_nl_unicast(skb, iwpm_pid);603 ret = rdma_nl_unicast(skb, iwpm_pid);
601 if (ret) {604 if (ret) {
602 skb = NULL;605 skb = NULL;
@@ -678,6 +681,8 @@ int iwpm_send_mapinfo(u8 nl_client, int iwpm_pid) · 75 unmodified lines
678 if (ret)681 if (ret)
679 goto send_mapping_info_unlock;682 goto send_mapping_info_unlock;
680 683
684 nlmsg_end(skb, nlh);
685
681 iwpm_print_sockaddr(&map_info->local_sockaddr,686 iwpm_print_sockaddr(&map_info->local_sockaddr,
682 "send_mapping_info: Local sockaddr:");687 "send_mapping_info: Local sockaddr:");
683 iwpm_print_sockaddr(&map_info->mapped_sockaddr,688 iwpm_print_sockaddr(&map_info->mapped_sockaddr,
drivers/infiniband/core/security.c+3−1
@@ -432,8 +432,10 @@ int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev) · 431 unmodified lines
432 atomic_set(&qp->qp_sec->error_list_count, 0);432 atomic_set(&qp->qp_sec->error_list_count, 0);
433 init_completion(&qp->qp_sec->error_complete);433 init_completion(&qp->qp_sec->error_complete);
434 ret = security_ib_alloc_security(&qp->qp_sec->security);434 ret = security_ib_alloc_security(&qp->qp_sec->security);
435 if (ret)435 if (ret) {
436 kfree(qp->qp_sec);436 kfree(qp->qp_sec);
437 qp->qp_sec = NULL;
438 }
437 439
438 return ret;440 return ret;
439}441}
drivers/infiniband/core/uverbs_cmd.c+7−7
@@ -3869,15 +3869,15 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file, · 3868 unmodified lines
3869 resp.raw_packet_caps = attr.raw_packet_caps;3869 resp.raw_packet_caps = attr.raw_packet_caps;
3870 resp.response_length += sizeof(resp.raw_packet_caps);3870 resp.response_length += sizeof(resp.raw_packet_caps);
3871 3871
3872 if (ucore->outlen < resp.response_length + sizeof(resp.xrq_caps))3872 if (ucore->outlen < resp.response_length + sizeof(resp.tm_caps))
3873 goto end;3873 goto end;
3874 3874
3875 resp.xrq_caps.max_rndv_hdr_size = attr.xrq_caps.max_rndv_hdr_size;3875 resp.tm_caps.max_rndv_hdr_size = attr.tm_caps.max_rndv_hdr_size;
3876 resp.xrq_caps.max_num_tags = attr.xrq_caps.max_num_tags;3876 resp.tm_caps.max_num_tags = attr.tm_caps.max_num_tags;
3877 resp.xrq_caps.max_ops = attr.xrq_caps.max_ops;3877 resp.tm_caps.max_ops = attr.tm_caps.max_ops;
3878 resp.xrq_caps.max_sge = attr.xrq_caps.max_sge;3878 resp.tm_caps.max_sge = attr.tm_caps.max_sge;
3879 resp.xrq_caps.flags = attr.xrq_caps.flags;3879 resp.tm_caps.flags = attr.tm_caps.flags;
3880 resp.response_length += sizeof(resp.xrq_caps);3880 resp.response_length += sizeof(resp.tm_caps);
3881end:3881end:
3882 err = ib_copy_to_udata(ucore, &resp, resp.response_length);3882 err = ib_copy_to_udata(ucore, &resp, resp.response_length);
3883 return err;3883 return err;
drivers/infiniband/core/verbs.c+2−2
@@ -1646,7 +1646,7 @@ static bool is_valid_mcast_lid(struct ib_qp *qp, u16 lid) · 1645 unmodified lines
1646 */1646 */
1647 if (!ib_query_qp(qp, &attr, IB_QP_STATE | IB_QP_PORT, &init_attr)) {1647 if (!ib_query_qp(qp, &attr, IB_QP_STATE | IB_QP_PORT, &init_attr)) {
1648 if (attr.qp_state >= IB_QPS_INIT) {1648 if (attr.qp_state >= IB_QPS_INIT) {
1649 if (qp->device->get_link_layer(qp->device, attr.port_num) !=1649 if (rdma_port_get_link_layer(qp->device, attr.port_num) !=
1650 IB_LINK_LAYER_INFINIBAND)1650 IB_LINK_LAYER_INFINIBAND)
1651 return true;1651 return true;
1652 goto lid_check;1652 goto lid_check;
@@ -1655,7 +1655,7 @@ static bool is_valid_mcast_lid(struct ib_qp *qp, u16 lid) · 2 unmodified lines
1655 1655
1656 /* Can't get a quick answer, iterate over all ports */1656 /* Can't get a quick answer, iterate over all ports */
1657 for (port = 0; port < qp->device->phys_port_cnt; port++)1657 for (port = 0; port < qp->device->phys_port_cnt; port++)
1658 if (qp->device->get_link_layer(qp->device, port) !=1658 if (rdma_port_get_link_layer(qp->device, port) !=
1659 IB_LINK_LAYER_INFINIBAND)1659 IB_LINK_LAYER_INFINIBAND)
1660 num_eth_ports++;1660 num_eth_ports++;
1661 1661
drivers/infiniband/hw/bnxt_re/bnxt_re.h+9−5
@@ -93,11 +93,13 @@ struct bnxt_re_dev { · 92 unmodified lines
93 struct ib_device ibdev;93 struct ib_device ibdev;
94 struct list_head list;94 struct list_head list;
95 unsigned long flags;95 unsigned long flags;
96#define BNXT_RE_FLAG_NETDEV_REGISTERED 096#define BNXT_RE_FLAG_NETDEV_REGISTERED 0
97#define BNXT_RE_FLAG_IBDEV_REGISTERED 197#define BNXT_RE_FLAG_IBDEV_REGISTERED 1
98#define BNXT_RE_FLAG_GOT_MSIX 298#define BNXT_RE_FLAG_GOT_MSIX 2
99#define BNXT_RE_FLAG_RCFW_CHANNEL_EN 899#define BNXT_RE_FLAG_HAVE_L2_REF 3
100#define BNXT_RE_FLAG_QOS_WORK_REG 16100#define BNXT_RE_FLAG_RCFW_CHANNEL_EN 4
101#define BNXT_RE_FLAG_QOS_WORK_REG 5
102#define BNXT_RE_FLAG_TASK_IN_PROG 6
101 struct net_device *netdev;103 struct net_device *netdev;
102 unsigned int version, major, minor;104 unsigned int version, major, minor;
103 struct bnxt_en_dev *en_dev;105 struct bnxt_en_dev *en_dev;
@@ -108,6 +110,8 @@ struct bnxt_re_dev { · 4 unmodified lines
108 110
109 struct delayed_work worker;111 struct delayed_work worker;
110 u8 cur_prio_map;112 u8 cur_prio_map;
113 u8 active_speed;
114 u8 active_width;
111 115
112 /* FP Notification Queue (CQ & SRQ) */116 /* FP Notification Queue (CQ & SRQ) */
113 struct tasklet_struct nq_task;117 struct tasklet_struct nq_task;
drivers/infiniband/hw/bnxt_re/ib_verbs.c+64−43
@@ -259,14 +259,9 @@ int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num, · 258 unmodified lines
259 port_attr->sm_sl = 0;259 port_attr->sm_sl = 0;
260 port_attr->subnet_timeout = 0;260 port_attr->subnet_timeout = 0;
261 port_attr->init_type_reply = 0;261 port_attr->init_type_reply = 0;
262 /* call the underlying netdev's ethtool hooks to query speed settings262 port_attr->active_speed = rdev->active_speed;
263 * for which we acquire rtnl_lock _only_ if it's registered with263 port_attr->active_width = rdev->active_width;
264 * IB stack to avoid race in the NETDEV_UNREG path264
265 */
266 if (test_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags))
267 if (ib_get_eth_speed(ibdev, port_num, &port_attr->active_speed,
268 &port_attr->active_width))
269 return -EINVAL;
270 return 0;265 return 0;
271}266}
272 267
@@ -319,6 +314,7 @@ int bnxt_re_del_gid(struct ib_device *ibdev, u8 port_num, · 46 unmodified lines
319 struct bnxt_re_gid_ctx *ctx, **ctx_tbl;314 struct bnxt_re_gid_ctx *ctx, **ctx_tbl;
320 struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);315 struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
321 struct bnxt_qplib_sgid_tbl *sgid_tbl = &rdev->qplib_res.sgid_tbl;316 struct bnxt_qplib_sgid_tbl *sgid_tbl = &rdev->qplib_res.sgid_tbl;
317 struct bnxt_qplib_gid *gid_to_del;
322 318
323 /* Delete the entry from the hardware */319 /* Delete the entry from the hardware */
324 ctx = *context;320 ctx = *context;
@@ -328,11 +324,25 @@ int bnxt_re_del_gid(struct ib_device *ibdev, u8 port_num, · 3 unmodified lines
328 if (sgid_tbl && sgid_tbl->active) {324 if (sgid_tbl && sgid_tbl->active) {
329 if (ctx->idx >= sgid_tbl->max)325 if (ctx->idx >= sgid_tbl->max)
330 return -EINVAL;326 return -EINVAL;
327 gid_to_del = &sgid_tbl->tbl[ctx->idx];
328 /* DEL_GID is called in WQ context(netdevice_event_work_handler)
329 * or via the ib_unregister_device path. In the former case QP1
330 * may not be destroyed yet, in which case just return as FW
331 * needs that entry to be present and will fail it's deletion.
332 * We could get invoked again after QP1 is destroyed OR get an
333 * ADD_GID call with a different GID value for the same index
334 * where we issue MODIFY_GID cmd to update the GID entry -- TBD
335 */
336 if (ctx->idx == 0 &&
337 rdma_link_local_addr((struct in6_addr *)gid_to_del) &&
338 ctx->refcnt == 1 && rdev->qp1_sqp) {
339 dev_dbg(rdev_to_dev(rdev),
340 "Trying to delete GID0 while QP1 is alive\n");
341 return -EFAULT;
342 }
331 ctx->refcnt--;343 ctx->refcnt--;
332 if (!ctx->refcnt) {344 if (!ctx->refcnt) {
333 rc = bnxt_qplib_del_sgid(sgid_tbl,345 rc = bnxt_qplib_del_sgid(sgid_tbl, gid_to_del, true);
334 &sgid_tbl->tbl[ctx->idx],
335 true);
336 if (rc) {346 if (rc) {
337 dev_err(rdev_to_dev(rdev),347 dev_err(rdev_to_dev(rdev),
338 "Failed to remove GID: %#x", rc);348 "Failed to remove GID: %#x", rc);
@@ -816,6 +826,8 @@ int bnxt_re_destroy_qp(struct ib_qp *ib_qp) · 477 unmodified lines
816 826
817 kfree(rdev->sqp_ah);827 kfree(rdev->sqp_ah);
818 kfree(rdev->qp1_sqp);828 kfree(rdev->qp1_sqp);
829 rdev->qp1_sqp = NULL;
830 rdev->sqp_ah = NULL;
819 }831 }
820 832
821 if (!IS_ERR_OR_NULL(qp->rumem))833 if (!IS_ERR_OR_NULL(qp->rumem))
@@ -1436,11 +1448,14 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, · 614 unmodified lines
1436 qp->qplib_qp.modify_flags |=1448 qp->qplib_qp.modify_flags |=
1437 CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;1449 CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;
1438 qp->qplib_qp.path_mtu = __from_ib_mtu(qp_attr->path_mtu);1450 qp->qplib_qp.path_mtu = __from_ib_mtu(qp_attr->path_mtu);
1451 qp->qplib_qp.mtu = ib_mtu_enum_to_int(qp_attr->path_mtu);
1439 } else if (qp_attr->qp_state == IB_QPS_RTR) {1452 } else if (qp_attr->qp_state == IB_QPS_RTR) {
1440 qp->qplib_qp.modify_flags |=1453 qp->qplib_qp.modify_flags |=
1441 CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;1454 CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU;
1442 qp->qplib_qp.path_mtu =1455 qp->qplib_qp.path_mtu =
1443 __from_ib_mtu(iboe_get_mtu(rdev->netdev->mtu));1456 __from_ib_mtu(iboe_get_mtu(rdev->netdev->mtu));
1457 qp->qplib_qp.mtu =
1458 ib_mtu_enum_to_int(iboe_get_mtu(rdev->netdev->mtu));
1444 }1459 }
1445 1460
1446 if (qp_attr_mask & IB_QP_TIMEOUT) {1461 if (qp_attr_mask & IB_QP_TIMEOUT) {
@@ -1551,43 +1566,46 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, · 104 unmodified lines
1551{1566{
1552 struct bnxt_re_qp *qp = container_of(ib_qp, struct bnxt_re_qp, ib_qp);1567 struct bnxt_re_qp *qp = container_of(ib_qp, struct bnxt_re_qp, ib_qp);
1553 struct bnxt_re_dev *rdev = qp->rdev;1568 struct bnxt_re_dev *rdev = qp->rdev;
1554 struct bnxt_qplib_qp qplib_qp;1569 struct bnxt_qplib_qp *qplib_qp;
1555 int rc;1570 int rc;
1556 1571
1557 memset(&qplib_qp, 0, sizeof(struct bnxt_qplib_qp));1572 qplib_qp = kzalloc(sizeof(*qplib_qp), GFP_KERNEL);
1558 qplib_qp.id = qp->qplib_qp.id;1573 if (!qplib_qp)
1559 qplib_qp.ah.host_sgid_index = qp->qplib_qp.ah.host_sgid_index;1574 return -ENOMEM;
1575
1576 qplib_qp->id = qp->qplib_qp.id;
1577 qplib_qp->ah.host_sgid_index = qp->qplib_qp.ah.host_sgid_index;
1560 1578
1561 rc = bnxt_qplib_query_qp(&rdev->qplib_res, &qplib_qp);1579 rc = bnxt_qplib_query_qp(&rdev->qplib_res, qplib_qp);
1562 if (rc) {1580 if (rc) {
1563 dev_err(rdev_to_dev(rdev), "Failed to query HW QP");1581 dev_err(rdev_to_dev(rdev), "Failed to query HW QP");
1564 return rc;1582 goto out;
1565 }1583 }
1566 qp_attr->qp_state = __to_ib_qp_state(qplib_qp.state);1584 qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state);
1567 qp_attr->en_sqd_async_notify = qplib_qp.en_sqd_async_notify ? 1 : 0;1585 qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0;
1568 qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp.access);1586 qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access);
1569 qp_attr->pkey_index = qplib_qp.pkey_index;1587 qp_attr->pkey_index = qplib_qp->pkey_index;
1570 qp_attr->qkey = qplib_qp.qkey;1588 qp_attr->qkey = qplib_qp->qkey;
1571 qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;1589 qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
1572 rdma_ah_set_grh(&qp_attr->ah_attr, NULL, qplib_qp.ah.flow_label,1590 rdma_ah_set_grh(&qp_attr->ah_attr, NULL, qplib_qp->ah.flow_label,
1573 qplib_qp.ah.host_sgid_index,1591 qplib_qp->ah.host_sgid_index,
1574 qplib_qp.ah.hop_limit,1592 qplib_qp->ah.hop_limit,
1575 qplib_qp.ah.traffic_class);1593 qplib_qp->ah.traffic_class);
1576 rdma_ah_set_dgid_raw(&qp_attr->ah_attr, qplib_qp.ah.dgid.data);1594 rdma_ah_set_dgid_raw(&qp_attr->ah_attr, qplib_qp->ah.dgid.data);
1577 rdma_ah_set_sl(&qp_attr->ah_attr, qplib_qp.ah.sl);1595 rdma_ah_set_sl(&qp_attr->ah_attr, qplib_qp->ah.sl);
1578 ether_addr_copy(qp_attr->ah_attr.roce.dmac, qplib_qp.ah.dmac);1596 ether_addr_copy(qp_attr->ah_attr.roce.dmac, qplib_qp->ah.dmac);
1579 qp_attr->path_mtu = __to_ib_mtu(qplib_qp.path_mtu);1597 qp_attr->path_mtu = __to_ib_mtu(qplib_qp->path_mtu);
1580 qp_attr->timeout = qplib_qp.timeout;1598 qp_attr->timeout = qplib_qp->timeout;
1581 qp_attr->retry_cnt = qplib_qp.retry_cnt;1599 qp_attr->retry_cnt = qplib_qp->retry_cnt;
1582 qp_attr->rnr_retry = qplib_qp.rnr_retry;1600 qp_attr->rnr_retry = qplib_qp->rnr_retry;
1583 qp_attr->min_rnr_timer = qplib_qp.min_rnr_timer;1601 qp_attr->min_rnr_timer = qplib_qp->min_rnr_timer;
1584 qp_attr->rq_psn = qplib_qp.rq.psn;1602 qp_attr->rq_psn = qplib_qp->rq.psn;
1585 qp_attr->max_rd_atomic = qplib_qp.max_rd_atomic;1603 qp_attr->max_rd_atomic = qplib_qp->max_rd_atomic;
1586 qp_attr->sq_psn = qplib_qp.sq.psn;1604 qp_attr->sq_psn = qplib_qp->sq.psn;
1587 qp_attr->max_dest_rd_atomic = qplib_qp.max_dest_rd_atomic;1605 qp_attr->max_dest_rd_atomic = qplib_qp->max_dest_rd_atomic;
1588 qp_init_attr->sq_sig_type = qplib_qp.sig_type ? IB_SIGNAL_ALL_WR :1606 qp_init_attr->sq_sig_type = qplib_qp->sig_type ? IB_SIGNAL_ALL_WR :
1589 IB_SIGNAL_REQ_WR;1607 IB_SIGNAL_REQ_WR;
1590 qp_attr->dest_qp_num = qplib_qp.dest_qpn;1608 qp_attr->dest_qp_num = qplib_qp->dest_qpn;
1591 1609
1592 qp_attr->cap.max_send_wr = qp->qplib_qp.sq.max_wqe;1610 qp_attr->cap.max_send_wr = qp->qplib_qp.sq.max_wqe;
1593 qp_attr->cap.max_send_sge = qp->qplib_qp.sq.max_sge;1611 qp_attr->cap.max_send_sge = qp->qplib_qp.sq.max_sge;
@@ -1596,7 +1614,9 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, · 2 unmodified lines
1596 qp_attr->cap.max_inline_data = qp->qplib_qp.max_inline_data;1614 qp_attr->cap.max_inline_data = qp->qplib_qp.max_inline_data;
1597 qp_init_attr->cap = qp_attr->cap;1615 qp_init_attr->cap = qp_attr->cap;
1598 1616
1599 return 0;1617out:
1618 kfree(qplib_qp);
1619 return rc;
1600}1620}
1601 1621
1602/* Routine for sending QP1 packets for RoCE V1 an V21622/* Routine for sending QP1 packets for RoCE V1 an V2
@@ -1908,6 +1928,7 @@ static int bnxt_re_build_atomic_wqe(struct ib_send_wr *wr, · 305 unmodified lines
1908 switch (wr->opcode) {1928 switch (wr->opcode) {
1909 case IB_WR_ATOMIC_CMP_AND_SWP:1929 case IB_WR_ATOMIC_CMP_AND_SWP:
1910 wqe->type = BNXT_QPLIB_SWQE_TYPE_ATOMIC_CMP_AND_SWP;1930 wqe->type = BNXT_QPLIB_SWQE_TYPE_ATOMIC_CMP_AND_SWP;
1931 wqe->atomic.cmp_data = atomic_wr(wr)->compare_add;
1911 wqe->atomic.swap_data = atomic_wr(wr)->swap;1932 wqe->atomic.swap_data = atomic_wr(wr)->swap;
1912 break;1933 break;
1913 case IB_WR_ATOMIC_FETCH_AND_ADD:1934 case IB_WR_ATOMIC_FETCH_AND_ADD:
@@ -3062,7 +3083,7 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr) · 1148 unmodified lines
3062 return rc;3083 return rc;
3063 }3084 }
3064 3085
3065 if (mr->npages && mr->pages) {3086 if (mr->pages) {
3066 rc = bnxt_qplib_free_fast_reg_page_list(&rdev->qplib_res,3087 rc = bnxt_qplib_free_fast_reg_page_list(&rdev->qplib_res,
3067 &mr->qplib_frpl);3088 &mr->qplib_frpl);
3068 kfree(mr->pages);3089 kfree(mr->pages);
drivers/infiniband/hw/bnxt_re/main.c+28−0
@@ -1161,6 +1161,8 @@ static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev) · 1160 unmodified lines
1161 }1161 }
1162 }1162 }
1163 set_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags);1163 set_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags);
1164 ib_get_eth_speed(&rdev->ibdev, 1, &rdev->active_speed,
1165 &rdev->active_width);
1164 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1, IB_EVENT_PORT_ACTIVE);1166 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1, IB_EVENT_PORT_ACTIVE);
1165 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1, IB_EVENT_GID_CHANGE);1167 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1, IB_EVENT_GID_CHANGE);
1166 1168
@@ -1255,10 +1257,14 @@ static void bnxt_re_task(struct work_struct *work) · 88 unmodified lines
1255 else if (netif_carrier_ok(rdev->netdev))1257 else if (netif_carrier_ok(rdev->netdev))
1256 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1,1258 bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1,
1257 IB_EVENT_PORT_ACTIVE);1259 IB_EVENT_PORT_ACTIVE);
1260 ib_get_eth_speed(&rdev->ibdev, 1, &rdev->active_speed,
1261 &rdev->active_width);
1258 break;1262 break;
1259 default:1263 default:
1260 break;1264 break;
1261 }1265 }
1266 smp_mb__before_atomic();
1267 clear_bit(BNXT_RE_FLAG_TASK_IN_PROG, &rdev->flags);
1262 kfree(re_work);1268 kfree(re_work);
1263}1269}
1264 1270
@@ -1317,6 +1323,11 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier, · 52 unmodified lines
1317 break;1323 break;
1318 1324
1319 case NETDEV_UNREGISTER:1325 case NETDEV_UNREGISTER:
1326 /* netdev notifier will call NETDEV_UNREGISTER again later since
1327 * we are still holding the reference to the netdev
1328 */
1329 if (test_bit(BNXT_RE_FLAG_TASK_IN_PROG, &rdev->flags))
1330 goto exit;
1320 bnxt_re_ib_unreg(rdev, false);1331 bnxt_re_ib_unreg(rdev, false);
1321 bnxt_re_remove_one(rdev);1332 bnxt_re_remove_one(rdev);
1322 bnxt_re_dev_unreg(rdev);1333 bnxt_re_dev_unreg(rdev);
@@ -1335,6 +1346,7 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier, · 12 unmodified lines
1335 re_work->vlan_dev = (real_dev == netdev ?1346 re_work->vlan_dev = (real_dev == netdev ?
1336 NULL : netdev);1347 NULL : netdev);
1337 INIT_WORK(&re_work->work, bnxt_re_task);1348 INIT_WORK(&re_work->work, bnxt_re_task);
1349 set_bit(BNXT_RE_FLAG_TASK_IN_PROG, &rdev->flags);
1338 queue_work(bnxt_re_wq, &re_work->work);1350 queue_work(bnxt_re_wq, &re_work->work);
1339 }1351 }
1340 }1352 }
@@ -1375,6 +1387,22 @@ err_netdev: · 34 unmodified lines
1375 1387
1376static void __exit bnxt_re_mod_exit(void)1388static void __exit bnxt_re_mod_exit(void)
1377{1389{
1390 struct bnxt_re_dev *rdev;
1391 LIST_HEAD(to_be_deleted);
1392
1393 mutex_lock(&bnxt_re_dev_lock);
1394 /* Free all adapter allocated resources */
1395 if (!list_empty(&bnxt_re_dev_list))
1396 list_splice_init(&bnxt_re_dev_list, &to_be_deleted);
1397 mutex_unlock(&bnxt_re_dev_lock);
1398
1399 list_for_each_entry(rdev, &to_be_deleted, list) {
1400 dev_info(rdev_to_dev(rdev), "Unregistering Device");
1401 bnxt_re_dev_stop(rdev);
1402 bnxt_re_ib_unreg(rdev, true);
1403 bnxt_re_remove_one(rdev);
1404 bnxt_re_dev_unreg(rdev);
1405 }
1378 unregister_netdevice_notifier(&bnxt_re_netdev_notifier);1406 unregister_netdevice_notifier(&bnxt_re_netdev_notifier);
1379 if (bnxt_re_wq)1407 if (bnxt_re_wq)
1380 destroy_workqueue(bnxt_re_wq);1408 destroy_workqueue(bnxt_re_wq);
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c+4−0
@@ -107,6 +107,9 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req, · 106 unmodified lines
107 return -EINVAL;107 return -EINVAL;
108 }108 }
109 109
110 if (test_bit(FIRMWARE_TIMED_OUT, &rcfw->flags))
111 return -ETIMEDOUT;
112
110 /* Cmdq are in 16-byte units, each request can consume 1 or more113 /* Cmdq are in 16-byte units, each request can consume 1 or more
111 * cmdqe114 * cmdqe
112 */115 */
@@ -226,6 +229,7 @@ int bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw, · 113 unmodified lines
226 /* timed out */229 /* timed out */
227 dev_err(&rcfw->pdev->dev, "QPLIB: cmdq[%#x]=%#x timedout (%d)msec",230 dev_err(&rcfw->pdev->dev, "QPLIB: cmdq[%#x]=%#x timedout (%d)msec",
228 cookie, opcode, RCFW_CMD_WAIT_TIME_MS);231 cookie, opcode, RCFW_CMD_WAIT_TIME_MS);
232 set_bit(FIRMWARE_TIMED_OUT, &rcfw->flags);
229 return rc;233 return rc;
230 }234 }
231 235
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h+2−1
@@ -162,8 +162,9 @@ struct bnxt_qplib_rcfw { · 161 unmodified lines
162 unsigned long *cmdq_bitmap;162 unsigned long *cmdq_bitmap;
163 u32 bmap_size;163 u32 bmap_size;
164 unsigned long flags;164 unsigned long flags;
165#define FIRMWARE_INITIALIZED_FLAG 1165#define FIRMWARE_INITIALIZED_FLAG BIT(0)
166#define FIRMWARE_FIRST_FLAG BIT(31)166#define FIRMWARE_FIRST_FLAG BIT(31)
167#define FIRMWARE_TIMED_OUT BIT(3)
167 wait_queue_head_t waitq;168 wait_queue_head_t waitq;
168 int (*aeq_handler)(struct bnxt_qplib_rcfw *,169 int (*aeq_handler)(struct bnxt_qplib_rcfw *,
169 struct creq_func_event *);170 struct creq_func_event *);
drivers/infiniband/hw/cxgb4/cm.c+7−2
@@ -2333,9 +2333,14 @@ static int close_listsrv_rpl(struct c4iw_dev *dev, struct sk_buff *skb) · 2332 unmodified lines
2333 unsigned int stid = GET_TID(rpl);2333 unsigned int stid = GET_TID(rpl);
2334 struct c4iw_listen_ep *ep = get_ep_from_stid(dev, stid);2334 struct c4iw_listen_ep *ep = get_ep_from_stid(dev, stid);
2335 2335
2336 if (!ep) {
2337 pr_debug("%s stid %d lookup failure!\n", __func__, stid);
2338 goto out;
2339 }
2336 pr_debug("%s ep %p\n", __func__, ep);2340 pr_debug("%s ep %p\n", __func__, ep);
2337 c4iw_wake_up(&ep->com.wr_wait, status2errno(rpl->status));2341 c4iw_wake_up(&ep->com.wr_wait, status2errno(rpl->status));
2338 c4iw_put_ep(&ep->com);2342 c4iw_put_ep(&ep->com);
2343out:
2339 return 0;2344 return 0;
2340}2345}
2341 2346
@@ -2594,9 +2599,9 @@ fail: · 252 unmodified lines
2594 c4iw_put_ep(&child_ep->com);2599 c4iw_put_ep(&child_ep->com);
2595reject:2600reject:
2596 reject_cr(dev, hwtid, skb);2601 reject_cr(dev, hwtid, skb);
2602out:
2597 if (parent_ep)2603 if (parent_ep)
2598 c4iw_put_ep(&parent_ep->com);2604 c4iw_put_ep(&parent_ep->com);
2599out:
2600 return 0;2605 return 0;
2601}2606}
2602 2607
@@ -3457,7 +3462,7 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog) · 854 unmodified lines
3457 cm_id->provider_data = ep;3462 cm_id->provider_data = ep;
3458 goto out;3463 goto out;
3459 }3464 }
3460 3465 remove_handle(ep->com.dev, &ep->com.dev->stid_idr, ep->stid);
3461 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid,3466 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid,
3462 ep->com.local_addr.ss_family);3467 ep->com.local_addr.ss_family);
3463fail2:3468fail2:
drivers/infiniband/hw/hfi1/chip.c+78−23
@@ -1066,6 +1066,8 @@ static int read_idle_sma(struct hfi1_devdata *dd, u64 *data); · 1065 unmodified lines
1066static int thermal_init(struct hfi1_devdata *dd);1066static int thermal_init(struct hfi1_devdata *dd);
1067 1067
1068static void update_statusp(struct hfi1_pportdata *ppd, u32 state);1068static void update_statusp(struct hfi1_pportdata *ppd, u32 state);
1069static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd,
1070 int msecs);
1069static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,1071static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1070 int msecs);1072 int msecs);
1071static void log_state_transition(struct hfi1_pportdata *ppd, u32 state);1073static void log_state_transition(struct hfi1_pportdata *ppd, u32 state);
@@ -8238,6 +8240,7 @@ static irqreturn_t general_interrupt(int irq, void *data) · 7166 unmodified lines
8238 u64 regs[CCE_NUM_INT_CSRS];8240 u64 regs[CCE_NUM_INT_CSRS];
8239 u32 bit;8241 u32 bit;
8240 int i;8242 int i;
8243 irqreturn_t handled = IRQ_NONE;
8241 8244
8242 this_cpu_inc(*dd->int_counter);8245 this_cpu_inc(*dd->int_counter);
8243 8246
@@ -8258,9 +8261,10 @@ static irqreturn_t general_interrupt(int irq, void *data) · 14 unmodified lines
8258 for_each_set_bit(bit, (unsigned long *)&regs[0],8261 for_each_set_bit(bit, (unsigned long *)&regs[0],
8259 CCE_NUM_INT_CSRS * 64) {8262 CCE_NUM_INT_CSRS * 64) {
8260 is_interrupt(dd, bit);8263 is_interrupt(dd, bit);
8264 handled = IRQ_HANDLED;
8261 }8265 }
8262 8266
8263 return IRQ_HANDLED;8267 return handled;
8264}8268}
8265 8269
8266static irqreturn_t sdma_interrupt(int irq, void *data)8270static irqreturn_t sdma_interrupt(int irq, void *data)
@@ -9413,7 +9417,7 @@ static void set_qsfp_int_n(struct hfi1_pportdata *ppd, u8 enable) · 1146 unmodified lines
9413 write_csr(dd, dd->hfi1_id ? ASIC_QSFP2_MASK : ASIC_QSFP1_MASK, mask);9417 write_csr(dd, dd->hfi1_id ? ASIC_QSFP2_MASK : ASIC_QSFP1_MASK, mask);
9414}9418}
9415 9419
9416void reset_qsfp(struct hfi1_pportdata *ppd)9420int reset_qsfp(struct hfi1_pportdata *ppd)
9417{9421{
9418 struct hfi1_devdata *dd = ppd->dd;9422 struct hfi1_devdata *dd = ppd->dd;
9419 u64 mask, qsfp_mask;9423 u64 mask, qsfp_mask;
@@ -9443,6 +9447,13 @@ void reset_qsfp(struct hfi1_pportdata *ppd) · 23 unmodified lines
9443 * for alarms and warnings9447 * for alarms and warnings
9444 */9448 */
9445 set_qsfp_int_n(ppd, 1);9449 set_qsfp_int_n(ppd, 1);
9450
9451 /*
9452 * After the reset, AOC transmitters are enabled by default. They need
9453 * to be turned off to complete the QSFP setup before they can be
9454 * enabled again.
9455 */
9456 return set_qsfp_tx(ppd, 0);
9446}9457}
9447 9458
9448static int handle_qsfp_error_conditions(struct hfi1_pportdata *ppd,9459static int handle_qsfp_error_conditions(struct hfi1_pportdata *ppd,
@@ -10305,6 +10316,7 @@ static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) · 856 unmodified lines
10305{10316{
10306 struct hfi1_devdata *dd = ppd->dd;10317 struct hfi1_devdata *dd = ppd->dd;
10307 u32 previous_state;10318 u32 previous_state;
10319 int offline_state_ret;
10308 int ret;10320 int ret;
10309 10321
10310 update_lcb_cache(dd);10322 update_lcb_cache(dd);
@@ -10326,28 +10338,11 @@ static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) · 15 unmodified lines
10326 ppd->offline_disabled_reason =10338 ppd->offline_disabled_reason =
10327 HFI1_ODR_MASK(OPA_LINKDOWN_REASON_TRANSIENT);10339 HFI1_ODR_MASK(OPA_LINKDOWN_REASON_TRANSIENT);
10328 10340
10329 /*10341 offline_state_ret = wait_phys_link_offline_substates(ppd, 10000);
10330 * Wait for offline transition. It can take a while for10342 if (offline_state_ret < 0)
10331 * the link to go down.10343 return offline_state_ret;
10332 */
10333 ret = wait_physical_linkstate(ppd, PLS_OFFLINE, 10000);
10334 if (ret < 0)
10335 return ret;
10336
10337 /*
10338 * Now in charge of LCB - must be after the physical state is
10339 * offline.quiet and before host_link_state is changed.
10340 */
10341 set_host_lcb_access(dd);
10342 write_csr(dd, DC_LCB_ERR_EN, ~0ull); /* watch LCB errors */
10343
10344 /* make sure the logical state is also down */
10345 ret = wait_logical_linkstate(ppd, IB_PORT_DOWN, 1000);
10346 if (ret)
10347 force_logical_link_state_down(ppd);
10348
10349 ppd->host_link_state = HLS_LINK_COOLDOWN; /* LCB access allowed */
10350 10344
10345 /* Disabling AOC transmitters */
10351 if (ppd->port_type == PORT_TYPE_QSFP &&10346 if (ppd->port_type == PORT_TYPE_QSFP &&
10352 ppd->qsfp_info.limiting_active &&10347 ppd->qsfp_info.limiting_active &&
10353 qsfp_mod_present(ppd)) {10348 qsfp_mod_present(ppd)) {
@@ -10364,6 +10359,30 @@ static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) · 10 unmodified lines
10364 }10359 }
10365 }10360 }
10366 10361
10362 /*
10363 * Wait for the offline.Quiet transition if it hasn't happened yet. It
10364 * can take a while for the link to go down.
10365 */
10366 if (offline_state_ret != PLS_OFFLINE_QUIET) {
10367 ret = wait_physical_linkstate(ppd, PLS_OFFLINE, 30000);
10368 if (ret < 0)
10369 return ret;
10370 }
10371
10372 /*
10373 * Now in charge of LCB - must be after the physical state is
10374 * offline.quiet and before host_link_state is changed.
10375 */
10376 set_host_lcb_access(dd);
10377 write_csr(dd, DC_LCB_ERR_EN, ~0ull); /* watch LCB errors */
10378
10379 /* make sure the logical state is also down */
10380 ret = wait_logical_linkstate(ppd, IB_PORT_DOWN, 1000);
10381 if (ret)
10382 force_logical_link_state_down(ppd);
10383
10384 ppd->host_link_state = HLS_LINK_COOLDOWN; /* LCB access allowed */
10385
10367 /*10386 /*
10368 * The LNI has a mandatory wait time after the physical state10387 * The LNI has a mandatory wait time after the physical state
10369 * moves to Offline.Quiet. The wait time may be different10388 * moves to Offline.Quiet. The wait time may be different
@@ -10396,6 +10415,9 @@ static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) · 26 unmodified lines
10396 & (HLS_DN_POLL | HLS_VERIFY_CAP | HLS_GOING_UP)) {10415 & (HLS_DN_POLL | HLS_VERIFY_CAP | HLS_GOING_UP)) {
10397 /* went down while attempting link up */10416 /* went down while attempting link up */
10398 check_lni_states(ppd);10417 check_lni_states(ppd);
10418
10419 /* The QSFP doesn't need to be reset on LNI failure */
10420 ppd->qsfp_info.reset_needed = 0;
10399 }10421 }
10400 10422
10401 /* the active link width (downgrade) is 0 on link down */10423 /* the active link width (downgrade) is 0 on link down */
@@ -12804,6 +12826,39 @@ static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state, · 2402 unmodified lines
12804 return 0;12826 return 0;
12805}12827}
12806 12828
12829/*
12830 * wait_phys_link_offline_quiet_substates - wait for any offline substate
12831 * @ppd: port device
12832 * @msecs: the number of milliseconds to wait
12833 *
12834 * Wait up to msecs milliseconds for any offline physical link
12835 * state change to occur.
12836 * Returns 0 if at least one state is reached, otherwise -ETIMEDOUT.
12837 */
12838static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd,
12839 int msecs)
12840{
12841 u32 read_state;
12842 unsigned long timeout;
12843
12844 timeout = jiffies + msecs_to_jiffies(msecs);
12845 while (1) {
12846 read_state = read_physical_state(ppd->dd);
12847 if ((read_state & 0xF0) == PLS_OFFLINE)
12848 break;
12849 if (time_after(jiffies, timeout)) {
12850 dd_dev_err(ppd->dd,
12851 "timeout waiting for phy link offline.quiet substates. Read state 0x%x, %dms\n",
12852 read_state, msecs);
12853 return -ETIMEDOUT;
12854 }
12855 usleep_range(1950, 2050); /* sleep 2ms-ish */
12856 }
12857
12858 log_state_transition(ppd, read_state);
12859 return read_state;
12860}
12861
12807#define CLEAR_STATIC_RATE_CONTROL_SMASK(r) \12862#define CLEAR_STATIC_RATE_CONTROL_SMASK(r) \
12808(r &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK)12863(r &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK)
12809 12864
drivers/infiniband/hw/hfi1/chip.h+2−1
@@ -204,6 +204,7 @@ · 203 unmodified lines
204#define PLS_OFFLINE_READY_TO_QUIET_LT 0x92204#define PLS_OFFLINE_READY_TO_QUIET_LT 0x92
205#define PLS_OFFLINE_REPORT_FAILURE 0x93205#define PLS_OFFLINE_REPORT_FAILURE 0x93
206#define PLS_OFFLINE_READY_TO_QUIET_BCC 0x94206#define PLS_OFFLINE_READY_TO_QUIET_BCC 0x94
207#define PLS_OFFLINE_QUIET_DURATION 0x95
207#define PLS_POLLING 0x20208#define PLS_POLLING 0x20
208#define PLS_POLLING_QUIET 0x20209#define PLS_POLLING_QUIET 0x20
209#define PLS_POLLING_ACTIVE 0x21210#define PLS_POLLING_ACTIVE 0x21
@@ -722,7 +723,7 @@ void handle_link_downgrade(struct work_struct *work); · 512 unmodified lines
722void handle_link_bounce(struct work_struct *work);723void handle_link_bounce(struct work_struct *work);
723void handle_start_link(struct work_struct *work);724void handle_start_link(struct work_struct *work);
724void handle_sma_message(struct work_struct *work);725void handle_sma_message(struct work_struct *work);
725void reset_qsfp(struct hfi1_pportdata *ppd);726int reset_qsfp(struct hfi1_pportdata *ppd);
726void qsfp_event(struct work_struct *work);727void qsfp_event(struct work_struct *work);
727void start_freeze_handling(struct hfi1_pportdata *ppd, int flags);728void start_freeze_handling(struct hfi1_pportdata *ppd, int flags);
728int send_idle_sma(struct hfi1_devdata *dd, u64 message);729int send_idle_sma(struct hfi1_devdata *dd, u64 message);
drivers/infiniband/hw/hfi1/eprom.c+15−5
@@ -204,7 +204,10 @@ done_asic: · 203 unmodified lines
204 return ret;204 return ret;
205}205}
206 206
207/* magic character sequence that trails an image */207/* magic character sequence that begins an image */
208#define IMAGE_START_MAGIC "APO="
209
210/* magic character sequence that might trail an image */
208#define IMAGE_TRAIL_MAGIC "egamiAPO"211#define IMAGE_TRAIL_MAGIC "egamiAPO"
209 212
210/* EPROM file types */213/* EPROM file types */
@@ -250,6 +253,7 @@ static int read_partition_platform_config(struct hfi1_devdata *dd, void **data, · 39 unmodified lines
250{253{
251 void *buffer;254 void *buffer;
252 void *p;255 void *p;
256 u32 length;
253 int ret;257 int ret;
254 258
255 buffer = kmalloc(P1_SIZE, GFP_KERNEL);259 buffer = kmalloc(P1_SIZE, GFP_KERNEL);
@@ -262,15 +266,21 @@ static int read_partition_platform_config(struct hfi1_devdata *dd, void **data, · 6 unmodified lines
262 return ret;266 return ret;
263 }267 }
264 268
265 /* scan for image magic that may trail the actual data */269 /* config partition is valid only if it starts with IMAGE_START_MAGIC */
266 p = strnstr(buffer, IMAGE_TRAIL_MAGIC, P1_SIZE);270 if (memcmp(buffer, IMAGE_START_MAGIC, strlen(IMAGE_START_MAGIC))) {
267 if (!p) {
268 kfree(buffer);271 kfree(buffer);
269 return -ENOENT;272 return -ENOENT;
270 }273 }
271 274
275 /* scan for image magic that may trail the actual data */
276 p = strnstr(buffer, IMAGE_TRAIL_MAGIC, P1_SIZE);
277 if (p)
278 length = p - buffer;
279 else
280 length = P1_SIZE;
281
272 *data = buffer;282 *data = buffer;
273 *size = p - buffer;283 *size = length;
274 return 0;284 return 0;
275}285}
276 286
drivers/infiniband/hw/hfi1/file_ops.c+22−19
@@ -930,15 +930,8 @@ static int assign_ctxt(struct hfi1_filedata *fd, struct hfi1_user_info *uinfo) · 929 unmodified lines
930 switch (ret) {930 switch (ret) {
931 case 0:931 case 0:
932 ret = setup_base_ctxt(fd, uctxt);932 ret = setup_base_ctxt(fd, uctxt);
933 if (uctxt->subctxt_cnt) {933 if (ret)
934 /*934 deallocate_ctxt(uctxt);
935 * Base context is done (successfully or not), notify
936 * anybody using a sub-context that is waiting for
937 * this completion.
938 */
939 clear_bit(HFI1_CTXT_BASE_UNINIT, &uctxt->event_flags);
940 wake_up(&uctxt->wait);
941 }
942 break;935 break;
943 case 1:936 case 1:
944 ret = complete_subctxt(fd);937 ret = complete_subctxt(fd);
@@ -1305,25 +1298,25 @@ static int setup_base_ctxt(struct hfi1_filedata *fd, · 360 unmodified lines
1305 /* Now allocate the RcvHdr queue and eager buffers. */1298 /* Now allocate the RcvHdr queue and eager buffers. */
1306 ret = hfi1_create_rcvhdrq(dd, uctxt);1299 ret = hfi1_create_rcvhdrq(dd, uctxt);
1307 if (ret)1300 if (ret)
1308 return ret;1301 goto done;
1309 1302
1310 ret = hfi1_setup_eagerbufs(uctxt);1303 ret = hfi1_setup_eagerbufs(uctxt);
1311 if (ret)1304 if (ret)
1312 goto setup_failed;1305 goto done;
1313 1306
1314 /* If sub-contexts are enabled, do the appropriate setup */1307 /* If sub-contexts are enabled, do the appropriate setup */
1315 if (uctxt->subctxt_cnt)1308 if (uctxt->subctxt_cnt)
1316 ret = setup_subctxt(uctxt);1309 ret = setup_subctxt(uctxt);
1317 if (ret)1310 if (ret)
1318 goto setup_failed;1311 goto done;
1319 1312
1320 ret = hfi1_alloc_ctxt_rcv_groups(uctxt);1313 ret = hfi1_alloc_ctxt_rcv_groups(uctxt);
1321 if (ret)1314 if (ret)
1322 goto setup_failed;1315 goto done;
1323 1316
1324 ret = init_user_ctxt(fd, uctxt);1317 ret = init_user_ctxt(fd, uctxt);
1325 if (ret)1318 if (ret)
1326 goto setup_failed;1319 goto done;
1327 1320
1328 user_init(uctxt);1321 user_init(uctxt);
1329 1322
@@ -1331,12 +1324,22 @@ static int setup_base_ctxt(struct hfi1_filedata *fd, · 1 unmodified line
1331 fd->uctxt = uctxt;1324 fd->uctxt = uctxt;
1332 hfi1_rcd_get(uctxt);1325 hfi1_rcd_get(uctxt);
1333 1326
1334 return 0;1327done:
1328 if (uctxt->subctxt_cnt) {
1329 /*
1330 * On error, set the failed bit so sub-contexts will clean up
1331 * correctly.
1332 */
1333 if (ret)
1334 set_bit(HFI1_CTXT_BASE_FAILED, &uctxt->event_flags);
1335 1335
1336setup_failed:1336 /*
1337 /* Set the failed bit so sub-context init can do the right thing */1337 * Base context is done (successfully or not), notify anybody
1338 set_bit(HFI1_CTXT_BASE_FAILED, &uctxt->event_flags);1338 * using a sub-context that is waiting for this completion.
1339 deallocate_ctxt(uctxt);1339 */
1340 clear_bit(HFI1_CTXT_BASE_UNINIT, &uctxt->event_flags);
1341 wake_up(&uctxt->wait);
1342 }
1340 1343
1341 return ret;1344 return ret;
1342}1345}
drivers/infiniband/hw/hfi1/pcie.c+21−29
@@ -68,7 +68,7 @@ · 67 unmodified lines
68/*68/*
69 * Code to adjust PCIe capabilities.69 * Code to adjust PCIe capabilities.
70 */70 */
71static int tune_pcie_caps(struct hfi1_devdata *);71static void tune_pcie_caps(struct hfi1_devdata *);
72 72
73/*73/*
74 * Do all the common PCIe setup and initialization.74 * Do all the common PCIe setup and initialization.
@@ -351,7 +351,7 @@ int pcie_speeds(struct hfi1_devdata *dd) · 276 unmodified lines
351 */351 */
352int request_msix(struct hfi1_devdata *dd, u32 msireq)352int request_msix(struct hfi1_devdata *dd, u32 msireq)
353{353{
354 int nvec, ret;354 int nvec;
355 355
356 nvec = pci_alloc_irq_vectors(dd->pcidev, 1, msireq,356 nvec = pci_alloc_irq_vectors(dd->pcidev, 1, msireq,
357 PCI_IRQ_MSIX | PCI_IRQ_LEGACY);357 PCI_IRQ_MSIX | PCI_IRQ_LEGACY);
@@ -360,12 +360,7 @@ int request_msix(struct hfi1_devdata *dd, u32 msireq) · 2 unmodified lines
360 return nvec;360 return nvec;
361 }361 }
362 362
363 ret = tune_pcie_caps(dd);363 tune_pcie_caps(dd);
364 if (ret) {
365 dd_dev_err(dd, "tune_pcie_caps() failed: %d\n", ret);
366 pci_free_irq_vectors(dd->pcidev);
367 return ret;
368 }
369 364
370 /* check for legacy IRQ */365 /* check for legacy IRQ */
371 if (nvec == 1 && !dd->pcidev->msix_enabled)366 if (nvec == 1 && !dd->pcidev->msix_enabled)
@@ -502,7 +497,7 @@ uint aspm_mode = ASPM_MODE_DISABLED; · 130 unmodified lines
502module_param_named(aspm, aspm_mode, uint, S_IRUGO);497module_param_named(aspm, aspm_mode, uint, S_IRUGO);
503MODULE_PARM_DESC(aspm, "PCIe ASPM: 0: disable, 1: enable, 2: dynamic");498MODULE_PARM_DESC(aspm, "PCIe ASPM: 0: disable, 1: enable, 2: dynamic");
504 499
505static int tune_pcie_caps(struct hfi1_devdata *dd)500static void tune_pcie_caps(struct hfi1_devdata *dd)
506{501{
507 struct pci_dev *parent;502 struct pci_dev *parent;
508 u16 rc_mpss, rc_mps, ep_mpss, ep_mps;503 u16 rc_mpss, rc_mps, ep_mpss, ep_mps;
@@ -513,22 +508,14 @@ static int tune_pcie_caps(struct hfi1_devdata *dd) · 4 unmodified lines
513 * Turn on extended tags in DevCtl in case the BIOS has turned it off508 * Turn on extended tags in DevCtl in case the BIOS has turned it off
514 * to improve WFR SDMA bandwidth509 * to improve WFR SDMA bandwidth
515 */510 */
516 ret = pcie_capability_read_word(dd->pcidev,511 ret = pcie_capability_read_word(dd->pcidev, PCI_EXP_DEVCTL, &ectl);
517 PCI_EXP_DEVCTL, &ectl);512 if ((!ret) && !(ectl & PCI_EXP_DEVCTL_EXT_TAG)) {
518 if (ret) {
519 dd_dev_err(dd, "Unable to read from PCI config\n");
520 return ret;
521 }
522
523 if (!(ectl & PCI_EXP_DEVCTL_EXT_TAG)) {
524 dd_dev_info(dd, "Enabling PCIe extended tags\n");513 dd_dev_info(dd, "Enabling PCIe extended tags\n");
525 ectl |= PCI_EXP_DEVCTL_EXT_TAG;514 ectl |= PCI_EXP_DEVCTL_EXT_TAG;
526 ret = pcie_capability_write_word(dd->pcidev,515 ret = pcie_capability_write_word(dd->pcidev,
527 PCI_EXP_DEVCTL, ectl);516 PCI_EXP_DEVCTL, ectl);
528 if (ret) {517 if (ret)
529 dd_dev_err(dd, "Unable to write to PCI config\n");518 dd_dev_info(dd, "Unable to write to PCI config\n");
530 return ret;
531 }
532 }519 }
533 /* Find out supported and configured values for parent (root) */520 /* Find out supported and configured values for parent (root) */
534 parent = dd->pcidev->bus->self;521 parent = dd->pcidev->bus->self;
@@ -536,15 +523,22 @@ static int tune_pcie_caps(struct hfi1_devdata *dd) · 1 unmodified line
536 * The driver cannot perform the tuning if it does not have523 * The driver cannot perform the tuning if it does not have
537 * access to the upstream component.524 * access to the upstream component.
538 */525 */
539 if (!parent)526 if (!parent) {
540 return -EINVAL;527 dd_dev_info(dd, "Parent not found\n");
528 return;
529 }
541 if (!pci_is_root_bus(parent->bus)) {530 if (!pci_is_root_bus(parent->bus)) {
542 dd_dev_info(dd, "Parent not root\n");531 dd_dev_info(dd, "Parent not root\n");
543 return -EINVAL;532 return;
533 }
534 if (!pci_is_pcie(parent)) {
535 dd_dev_info(dd, "Parent is not PCI Express capable\n");
536 return;
537 }
538 if (!pci_is_pcie(dd->pcidev)) {
539 dd_dev_info(dd, "PCI device is not PCI Express capable\n");
540 return;
544 }541 }
545
546 if (!pci_is_pcie(parent) || !pci_is_pcie(dd->pcidev))
547 return -EINVAL;
548 rc_mpss = parent->pcie_mpss;542 rc_mpss = parent->pcie_mpss;
549 rc_mps = ffs(pcie_get_mps(parent)) - 8;543 rc_mps = ffs(pcie_get_mps(parent)) - 8;
550 /* Find out supported and configured values for endpoint (us) */544 /* Find out supported and configured values for endpoint (us) */
@@ -590,8 +584,6 @@ static int tune_pcie_caps(struct hfi1_devdata *dd) · 39 unmodified lines
590 ep_mrrs = max_mrrs;584 ep_mrrs = max_mrrs;
591 pcie_set_readrq(dd->pcidev, ep_mrrs);585 pcie_set_readrq(dd->pcidev, ep_mrrs);
592 }586 }
593
594 return 0;
595}587}
596 588
597/* End of PCIe capability tuning */589/* End of PCIe capability tuning */
drivers/infiniband/hw/hfi1/platform.c+3−1
@@ -790,7 +790,9 @@ static int tune_active_qsfp(struct hfi1_pportdata *ppd, u32 *ptr_tx_preset, · 789 unmodified lines
790 * reuse of stale settings established in our previous pass through.790 * reuse of stale settings established in our previous pass through.
791 */791 */
792 if (ppd->qsfp_info.reset_needed) {792 if (ppd->qsfp_info.reset_needed) {
793 reset_qsfp(ppd);793 ret = reset_qsfp(ppd);
794 if (ret)
795 return ret;
794 refresh_qsfp_cache(ppd, &ppd->qsfp_info);796 refresh_qsfp_cache(ppd, &ppd->qsfp_info);
795 } else {797 } else {
796 ppd->qsfp_info.reset_needed = 1;798 ppd->qsfp_info.reset_needed = 1;
drivers/infiniband/hw/i40iw/i40iw.h+0−1
@@ -201,7 +201,6 @@ enum init_completion_state { · 200 unmodified lines
201 CEQ_CREATED,201 CEQ_CREATED,
202 ILQ_CREATED,202 ILQ_CREATED,
203 IEQ_CREATED,203 IEQ_CREATED,
204 INET_NOTIFIER,
205 IP_ADDR_REGISTERED,204 IP_ADDR_REGISTERED,
206 RDMA_DEV_REGISTERED205 RDMA_DEV_REGISTERED
207};206};
drivers/infiniband/hw/i40iw/i40iw_cm.c+77−77
@@ -1504,23 +1504,40 @@ static void i40iw_add_hte_node(struct i40iw_cm_core *cm_core, · 1503 unmodified lines
1504}1504}
1505 1505
1506/**1506/**
1507 * listen_port_in_use - determine if port is in use1507 * i40iw_port_in_use - determine if port is in use
1508 * @port: Listen port number1508 * @port: port number
1509 * @active_side: flag for listener side vs active side
1509 */1510 */
1510static bool i40iw_listen_port_in_use(struct i40iw_cm_core *cm_core, u16 port)1511static bool i40iw_port_in_use(struct i40iw_cm_core *cm_core, u16 port, bool active_side)
1511{1512{
1512 struct i40iw_cm_listener *listen_node;1513 struct i40iw_cm_listener *listen_node;
1514 struct i40iw_cm_node *cm_node;
1513 unsigned long flags;1515 unsigned long flags;
1514 bool ret = false;1516 bool ret = false;
1515 1517
1516 spin_lock_irqsave(&cm_core->listen_list_lock, flags);1518 if (active_side) {
1517 list_for_each_entry(listen_node, &cm_core->listen_nodes, list) {1519 /* search connected node list */
1518 if (listen_node->loc_port == port) {1520 spin_lock_irqsave(&cm_core->ht_lock, flags);
1519 ret = true;1521 list_for_each_entry(cm_node, &cm_core->connected_nodes, list) {
1520 break;1522 if (cm_node->loc_port == port) {
1523 ret = true;
1524 break;
1525 }
1526 }
1527 if (!ret)
1528 clear_bit(port, cm_core->active_side_ports);
1529 spin_unlock_irqrestore(&cm_core->ht_lock, flags);
1530 } else {
1531 spin_lock_irqsave(&cm_core->listen_list_lock, flags);
1532 list_for_each_entry(listen_node, &cm_core->listen_nodes, list) {
1533 if (listen_node->loc_port == port) {
1534 ret = true;
1535 break;
1536 }
1521 }1537 }
1538 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
1522 }1539 }
1523 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);1540
1524 return ret;1541 return ret;
1525}1542}
1526 1543
@@ -1868,7 +1885,7 @@ static int i40iw_dec_refcnt_listen(struct i40iw_cm_core *cm_core, · 341 unmodified lines
1868 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);1885 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
1869 1886
1870 if (listener->iwdev) {1887 if (listener->iwdev) {
1871 if (apbvt_del && !i40iw_listen_port_in_use(cm_core, listener->loc_port))1888 if (apbvt_del && !i40iw_port_in_use(cm_core, listener->loc_port, false))
1872 i40iw_manage_apbvt(listener->iwdev,1889 i40iw_manage_apbvt(listener->iwdev,
1873 listener->loc_port,1890 listener->loc_port,
1874 I40IW_MANAGE_APBVT_DEL);1891 I40IW_MANAGE_APBVT_DEL);
@@ -2247,21 +2264,21 @@ static void i40iw_rem_ref_cm_node(struct i40iw_cm_node *cm_node) · 372 unmodified lines
2247 if (cm_node->listener) {2264 if (cm_node->listener) {
2248 i40iw_dec_refcnt_listen(cm_core, cm_node->listener, 0, true);2265 i40iw_dec_refcnt_listen(cm_core, cm_node->listener, 0, true);
2249 } else {2266 } else {
2250 if (!i40iw_listen_port_in_use(cm_core, cm_node->loc_port) &&2267 if (!i40iw_port_in_use(cm_core, cm_node->loc_port, true) && cm_node->apbvt_set) {
2251 cm_node->apbvt_set) {
2252 i40iw_manage_apbvt(cm_node->iwdev,2268 i40iw_manage_apbvt(cm_node->iwdev,
2253 cm_node->loc_port,2269 cm_node->loc_port,
2254 I40IW_MANAGE_APBVT_DEL);2270 I40IW_MANAGE_APBVT_DEL);
2255 i40iw_get_addr_info(cm_node, &nfo);2271 cm_node->apbvt_set = 0;
2256 if (cm_node->qhash_set) {2272 }
2257 i40iw_manage_qhash(cm_node->iwdev,2273 i40iw_get_addr_info(cm_node, &nfo);
2258 &nfo,2274 if (cm_node->qhash_set) {
2259 I40IW_QHASH_TYPE_TCP_ESTABLISHED,2275 i40iw_manage_qhash(cm_node->iwdev,
2260 I40IW_QHASH_MANAGE_TYPE_DELETE,2276 &nfo,
2261 NULL,2277 I40IW_QHASH_TYPE_TCP_ESTABLISHED,
2262 false);2278 I40IW_QHASH_MANAGE_TYPE_DELETE,
2263 cm_node->qhash_set = 0;2279 NULL,
2264 }2280 false);
2281 cm_node->qhash_set = 0;
2265 }2282 }
2266 }2283 }
2267 2284
@@ -3255,7 +3272,8 @@ static void i40iw_init_tcp_ctx(struct i40iw_cm_node *cm_node, · 987 unmodified lines
3255 tcp_info->snd_mss = cpu_to_le32(((u32)cm_node->tcp_cntxt.mss));3272 tcp_info->snd_mss = cpu_to_le32(((u32)cm_node->tcp_cntxt.mss));
3256 if (cm_node->vlan_id < VLAN_TAG_PRESENT) {3273 if (cm_node->vlan_id < VLAN_TAG_PRESENT) {
3257 tcp_info->insert_vlan_tag = true;3274 tcp_info->insert_vlan_tag = true;
3258 tcp_info->vlan_tag = cpu_to_le16(cm_node->vlan_id);3275 tcp_info->vlan_tag = cpu_to_le16(((u16)cm_node->user_pri << I40IW_VLAN_PRIO_SHIFT) |
3276 cm_node->vlan_id);
3259 }3277 }
3260 if (cm_node->ipv4) {3278 if (cm_node->ipv4) {
3261 tcp_info->src_port = cpu_to_le16(cm_node->loc_port);3279 tcp_info->src_port = cpu_to_le16(cm_node->loc_port);
@@ -3737,10 +3755,8 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 475 unmodified lines
3737 struct sockaddr_in *raddr;3755 struct sockaddr_in *raddr;
3738 struct sockaddr_in6 *laddr6;3756 struct sockaddr_in6 *laddr6;
3739 struct sockaddr_in6 *raddr6;3757 struct sockaddr_in6 *raddr6;
3740 bool qhash_set = false;3758 int ret = 0;
3741 int apbvt_set = 0;3759 unsigned long flags;
3742 int err = 0;
3743 enum i40iw_status_code status;
3744 3760
3745 ibqp = i40iw_get_qp(cm_id->device, conn_param->qpn);3761 ibqp = i40iw_get_qp(cm_id->device, conn_param->qpn);
3746 if (!ibqp)3762 if (!ibqp)
@@ -3789,32 +3805,6 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 42 unmodified lines
3789 cm_info.user_pri = rt_tos2priority(cm_id->tos);3805 cm_info.user_pri = rt_tos2priority(cm_id->tos);
3790 i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_DCB, "%s TOS:[%d] UP:[%d]\n",3806 i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_DCB, "%s TOS:[%d] UP:[%d]\n",
3791 __func__, cm_id->tos, cm_info.user_pri);3807 __func__, cm_id->tos, cm_info.user_pri);
3792 if ((cm_info.ipv4 && (laddr->sin_addr.s_addr != raddr->sin_addr.s_addr)) ||
3793 (!cm_info.ipv4 && memcmp(laddr6->sin6_addr.in6_u.u6_addr32,
3794 raddr6->sin6_addr.in6_u.u6_addr32,
3795 sizeof(laddr6->sin6_addr.in6_u.u6_addr32)))) {
3796 status = i40iw_manage_qhash(iwdev,
3797 &cm_info,
3798 I40IW_QHASH_TYPE_TCP_ESTABLISHED,
3799 I40IW_QHASH_MANAGE_TYPE_ADD,
3800 NULL,
3801 true);
3802 if (status)
3803 return -EINVAL;
3804 qhash_set = true;
3805 }
3806 status = i40iw_manage_apbvt(iwdev, cm_info.loc_port, I40IW_MANAGE_APBVT_ADD);
3807 if (status) {
3808 i40iw_manage_qhash(iwdev,
3809 &cm_info,
3810 I40IW_QHASH_TYPE_TCP_ESTABLISHED,
3811 I40IW_QHASH_MANAGE_TYPE_DELETE,
3812 NULL,
3813 false);
3814 return -EINVAL;
3815 }
3816
3817 apbvt_set = 1;
3818 cm_id->add_ref(cm_id);3808 cm_id->add_ref(cm_id);
3819 cm_node = i40iw_create_cm_node(&iwdev->cm_core, iwdev,3809 cm_node = i40iw_create_cm_node(&iwdev->cm_core, iwdev,
3820 conn_param->private_data_len,3810 conn_param->private_data_len,
@@ -3822,17 +3812,40 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 1 unmodified line
3822 &cm_info);3812 &cm_info);
3823 3813
3824 if (IS_ERR(cm_node)) {3814 if (IS_ERR(cm_node)) {
3825 err = PTR_ERR(cm_node);3815 ret = PTR_ERR(cm_node);
3826 goto err_out;3816 cm_id->rem_ref(cm_id);
3817 return ret;
3818 }
3819
3820 if ((cm_info.ipv4 && (laddr->sin_addr.s_addr != raddr->sin_addr.s_addr)) ||
3821 (!cm_info.ipv4 && memcmp(laddr6->sin6_addr.in6_u.u6_addr32,
3822 raddr6->sin6_addr.in6_u.u6_addr32,
3823 sizeof(laddr6->sin6_addr.in6_u.u6_addr32)))) {
3824 if (i40iw_manage_qhash(iwdev, &cm_info, I40IW_QHASH_TYPE_TCP_ESTABLISHED,
3825 I40IW_QHASH_MANAGE_TYPE_ADD, NULL, true)) {
3826 ret = -EINVAL;
3827 goto err;
3828 }
3829 cm_node->qhash_set = true;
3827 }3830 }
3828 3831
3832 spin_lock_irqsave(&iwdev->cm_core.ht_lock, flags);
3833 if (!test_and_set_bit(cm_info.loc_port, iwdev->cm_core.active_side_ports)) {
3834 spin_unlock_irqrestore(&iwdev->cm_core.ht_lock, flags);
3835 if (i40iw_manage_apbvt(iwdev, cm_info.loc_port, I40IW_MANAGE_APBVT_ADD)) {
3836 ret = -EINVAL;
3837 goto err;
3838 }
3839 } else {
3840 spin_unlock_irqrestore(&iwdev->cm_core.ht_lock, flags);
3841 }
3842
3843 cm_node->apbvt_set = true;
3829 i40iw_record_ird_ord(cm_node, (u16)conn_param->ird, (u16)conn_param->ord);3844 i40iw_record_ird_ord(cm_node, (u16)conn_param->ird, (u16)conn_param->ord);
3830 if (cm_node->send_rdma0_op == SEND_RDMA_READ_ZERO &&3845 if (cm_node->send_rdma0_op == SEND_RDMA_READ_ZERO &&
3831 !cm_node->ord_size)3846 !cm_node->ord_size)
3832 cm_node->ord_size = 1;3847 cm_node->ord_size = 1;
3833 3848
3834 cm_node->apbvt_set = apbvt_set;
3835 cm_node->qhash_set = qhash_set;
3836 iwqp->cm_node = cm_node;3849 iwqp->cm_node = cm_node;
3837 cm_node->iwqp = iwqp;3850 cm_node->iwqp = iwqp;
3838 iwqp->cm_id = cm_id;3851 iwqp->cm_id = cm_id;
@@ -3840,11 +3853,9 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 1 unmodified line
3840 3853
3841 if (cm_node->state != I40IW_CM_STATE_OFFLOADED) {3854 if (cm_node->state != I40IW_CM_STATE_OFFLOADED) {
3842 cm_node->state = I40IW_CM_STATE_SYN_SENT;3855 cm_node->state = I40IW_CM_STATE_SYN_SENT;
3843 err = i40iw_send_syn(cm_node, 0);3856 ret = i40iw_send_syn(cm_node, 0);
3844 if (err) {3857 if (ret)
3845 i40iw_rem_ref_cm_node(cm_node);3858 goto err;
3846 goto err_out;
3847 }
3848 }3859 }
3849 3860
3850 i40iw_debug(cm_node->dev,3861 i40iw_debug(cm_node->dev,
@@ -3853,9 +3864,10 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) · 2 unmodified lines
3853 cm_node->rem_port,3864 cm_node->rem_port,
3854 cm_node,3865 cm_node,
3855 cm_node->cm_id);3866 cm_node->cm_id);
3867
3856 return 0;3868 return 0;
3857 3869
3858err_out:3870err:
3859 if (cm_info.ipv4)3871 if (cm_info.ipv4)
3860 i40iw_debug(&iwdev->sc_dev,3872 i40iw_debug(&iwdev->sc_dev,
3861 I40IW_DEBUG_CM,3873 I40IW_DEBUG_CM,
@@ -3867,22 +3879,10 @@ err_out: · 5 unmodified lines
3867 "Api - connect() FAILED: dest addr=%pI6",3879 "Api - connect() FAILED: dest addr=%pI6",
3868 cm_info.rem_addr);3880 cm_info.rem_addr);
3869 3881
3870 if (qhash_set)3882 i40iw_rem_ref_cm_node(cm_node);
3871 i40iw_manage_qhash(iwdev,
3872 &cm_info,
3873 I40IW_QHASH_TYPE_TCP_ESTABLISHED,
3874 I40IW_QHASH_MANAGE_TYPE_DELETE,
3875 NULL,
3876 false);
3877
3878 if (apbvt_set && !i40iw_listen_port_in_use(&iwdev->cm_core,
3879 cm_info.loc_port))
3880 i40iw_manage_apbvt(iwdev,
3881 cm_info.loc_port,
3882 I40IW_MANAGE_APBVT_DEL);
3883 cm_id->rem_ref(cm_id);3883 cm_id->rem_ref(cm_id);
3884 iwdev->cm_core.stats_connect_errs++;3884 iwdev->cm_core.stats_connect_errs++;
3885 return err;3885 return ret;
3886}3886}
3887 3887
3888/**3888/**
drivers/infiniband/hw/i40iw/i40iw_cm.h+5−0
@@ -71,6 +71,9 @@ · 70 unmodified lines
71#define I40IW_HW_IRD_SETTING_32 3271#define I40IW_HW_IRD_SETTING_32 32
72#define I40IW_HW_IRD_SETTING_64 6472#define I40IW_HW_IRD_SETTING_64 64
73 73
74#define MAX_PORTS 65536
75#define I40IW_VLAN_PRIO_SHIFT 13
76
74enum ietf_mpa_flags {77enum ietf_mpa_flags {
75 IETF_MPA_FLAGS_MARKERS = 0x80, /* receive Markers */78 IETF_MPA_FLAGS_MARKERS = 0x80, /* receive Markers */
76 IETF_MPA_FLAGS_CRC = 0x40, /* receive Markers */79 IETF_MPA_FLAGS_CRC = 0x40, /* receive Markers */
@@ -411,6 +414,8 @@ struct i40iw_cm_core { · 334 unmodified lines
411 spinlock_t ht_lock; /* manage hash table */414 spinlock_t ht_lock; /* manage hash table */
412 spinlock_t listen_list_lock; /* listen list */415 spinlock_t listen_list_lock; /* listen list */
413 416
417 unsigned long active_side_ports[BITS_TO_LONGS(MAX_PORTS)];
418
414 u64 stats_nodes_created;419 u64 stats_nodes_created;
415 u64 stats_nodes_destroyed;420 u64 stats_nodes_destroyed;
416 u64 stats_listen_created;421 u64 stats_listen_created;
drivers/infiniband/hw/i40iw/i40iw_ctrl.c+1−1
@@ -48,7 +48,7 @@ · 47 unmodified lines
48 * @wqe: cqp wqe for header48 * @wqe: cqp wqe for header
49 * @header: header for the cqp wqe49 * @header: header for the cqp wqe
50 */50 */
51static inline void i40iw_insert_wqe_hdr(u64 *wqe, u64 header)51void i40iw_insert_wqe_hdr(u64 *wqe, u64 header)
52{52{
53 wmb(); /* make sure WQE is populated before polarity is set */53 wmb(); /* make sure WQE is populated before polarity is set */
54 set_64bit_val(wqe, 24, header);54 set_64bit_val(wqe, 24, header);
drivers/infiniband/hw/i40iw/i40iw_main.c+23−16
@@ -99,8 +99,6 @@ static struct notifier_block i40iw_net_notifier = { · 98 unmodified lines
99 .notifier_call = i40iw_net_event99 .notifier_call = i40iw_net_event
100};100};
101 101
102static atomic_t i40iw_notifiers_registered;
103
104/**102/**
105 * i40iw_find_i40e_handler - find a handler given a client info103 * i40iw_find_i40e_handler - find a handler given a client info
106 * @ldev: pointer to a client info104 * @ldev: pointer to a client info
@@ -1376,11 +1374,20 @@ error: · 1269 unmodified lines
1376 */1374 */
1377static void i40iw_register_notifiers(void)1375static void i40iw_register_notifiers(void)
1378{1376{
1379 if (atomic_inc_return(&i40iw_notifiers_registered) == 1) {1377 register_inetaddr_notifier(&i40iw_inetaddr_notifier);
1380 register_inetaddr_notifier(&i40iw_inetaddr_notifier);1378 register_inet6addr_notifier(&i40iw_inetaddr6_notifier);
1381 register_inet6addr_notifier(&i40iw_inetaddr6_notifier);1379 register_netevent_notifier(&i40iw_net_notifier);
1382 register_netevent_notifier(&i40iw_net_notifier);1380}
1383 }1381
1382/**
1383 * i40iw_unregister_notifiers - unregister tcp ip notifiers
1384 */
1385
1386static void i40iw_unregister_notifiers(void)
1387{
1388 unregister_netevent_notifier(&i40iw_net_notifier);
1389 unregister_inetaddr_notifier(&i40iw_inetaddr_notifier);
1390 unregister_inet6addr_notifier(&i40iw_inetaddr6_notifier);
1384}1391}
1385 1392
1386/**1393/**
@@ -1400,6 +1407,11 @@ static enum i40iw_status_code i40iw_save_msix_info(struct i40iw_device *iwdev, · 13 unmodified lines
1400 u32 i;1407 u32 i;
1401 u32 size;1408 u32 size;
1402 1409
1410 if (!ldev->msix_count) {
1411 i40iw_pr_err("No MSI-X vectors\n");
1412 return I40IW_ERR_CONFIG;
1413 }
1414
1403 iwdev->msix_count = ldev->msix_count;1415 iwdev->msix_count = ldev->msix_count;
1404 1416
1405 size = sizeof(struct i40iw_msix_vector) * iwdev->msix_count;1417 size = sizeof(struct i40iw_msix_vector) * iwdev->msix_count;
@@ -1462,12 +1474,6 @@ static void i40iw_deinit_device(struct i40iw_device *iwdev) · 56 unmodified lines
1462 if (!iwdev->reset)1474 if (!iwdev->reset)
1463 i40iw_del_macip_entry(iwdev, (u8)iwdev->mac_ip_table_idx);1475 i40iw_del_macip_entry(iwdev, (u8)iwdev->mac_ip_table_idx);
1464 /* fallthrough */1476 /* fallthrough */
1465 case INET_NOTIFIER:
1466 if (!atomic_dec_return(&i40iw_notifiers_registered)) {
1467 unregister_netevent_notifier(&i40iw_net_notifier);
1468 unregister_inetaddr_notifier(&i40iw_inetaddr_notifier);
1469 unregister_inet6addr_notifier(&i40iw_inetaddr6_notifier);
1470 }
1471 /* fallthrough */1477 /* fallthrough */
1472 case PBLE_CHUNK_MEM:1478 case PBLE_CHUNK_MEM:
1473 i40iw_destroy_pble_pool(dev, iwdev->pble_rsrc);1479 i40iw_destroy_pble_pool(dev, iwdev->pble_rsrc);
@@ -1550,7 +1556,7 @@ static enum i40iw_status_code i40iw_setup_init_state(struct i40iw_handler *hdl, · 76 unmodified lines
1550 1556
1551 status = i40iw_save_msix_info(iwdev, ldev);1557 status = i40iw_save_msix_info(iwdev, ldev);
1552 if (status)1558 if (status)
1553 goto exit;1559 return status;
1554 iwdev->hw.dev_context = (void *)ldev->pcidev;1560 iwdev->hw.dev_context = (void *)ldev->pcidev;
1555 iwdev->hw.hw_addr = ldev->hw_addr;1561 iwdev->hw.hw_addr = ldev->hw_addr;
1556 status = i40iw_allocate_dma_mem(&iwdev->hw,1562 status = i40iw_allocate_dma_mem(&iwdev->hw,
@@ -1667,8 +1673,6 @@ static int i40iw_open(struct i40e_info *ldev, struct i40e_client *client) · 110 unmodified lines
1667 break;1673 break;
1668 iwdev->init_state = PBLE_CHUNK_MEM;1674 iwdev->init_state = PBLE_CHUNK_MEM;
1669 iwdev->virtchnl_wq = alloc_ordered_workqueue("iwvch", WQ_MEM_RECLAIM);1675 iwdev->virtchnl_wq = alloc_ordered_workqueue("iwvch", WQ_MEM_RECLAIM);
1670 i40iw_register_notifiers();
1671 iwdev->init_state = INET_NOTIFIER;
1672 status = i40iw_add_mac_ip(iwdev);1676 status = i40iw_add_mac_ip(iwdev);
1673 if (status)1677 if (status)
1674 break;1678 break;
@@ -2018,6 +2022,8 @@ static int __init i40iw_init_module(void) · 343 unmodified lines
2018 i40iw_client.type = I40E_CLIENT_IWARP;2022 i40iw_client.type = I40E_CLIENT_IWARP;
2019 spin_lock_init(&i40iw_handler_lock);2023 spin_lock_init(&i40iw_handler_lock);
2020 ret = i40e_register_client(&i40iw_client);2024 ret = i40e_register_client(&i40iw_client);
2025 i40iw_register_notifiers();
2026
2021 return ret;2027 return ret;
2022}2028}
2023 2029
@@ -2029,6 +2035,7 @@ static int __init i40iw_init_module(void) · 5 unmodified lines
2029 */2035 */
2030static void __exit i40iw_exit_module(void)2036static void __exit i40iw_exit_module(void)
2031{2037{
2038 i40iw_unregister_notifiers();
2032 i40e_unregister_client(&i40iw_client);2039 i40e_unregister_client(&i40iw_client);
2033}2040}
2034 2041
drivers/infiniband/hw/i40iw/i40iw_p.h+2−0
@@ -59,6 +59,8 @@ enum i40iw_status_code i40iw_sc_mr_fast_register(struct i40iw_sc_qp *qp, · 58 unmodified lines
59 struct i40iw_fast_reg_stag_info *info,59 struct i40iw_fast_reg_stag_info *info,
60 bool post_sq);60 bool post_sq);
61 61
62void i40iw_insert_wqe_hdr(u64 *wqe, u64 header);
63
62/* HMC/FPM functions */64/* HMC/FPM functions */
63enum i40iw_status_code i40iw_sc_init_iw_hmc(struct i40iw_sc_dev *dev,65enum i40iw_status_code i40iw_sc_init_iw_hmc(struct i40iw_sc_dev *dev,
64 u8 hmc_fn_id);66 u8 hmc_fn_id);
drivers/infiniband/hw/i40iw/i40iw_puda.c+4−7
@@ -123,12 +123,11 @@ static void i40iw_puda_post_recvbuf(struct i40iw_puda_rsrc *rsrc, u32 wqe_idx, · 122 unmodified lines
123 get_64bit_val(wqe, 24, &offset24);123 get_64bit_val(wqe, 24, &offset24);
124 124
125 offset24 = (offset24) ? 0 : LS_64(1, I40IWQPSQ_VALID);125 offset24 = (offset24) ? 0 : LS_64(1, I40IWQPSQ_VALID);
126 set_64bit_val(wqe, 24, offset24);
127 126
128 set_64bit_val(wqe, 0, buf->mem.pa);127 set_64bit_val(wqe, 0, buf->mem.pa);
129 set_64bit_val(wqe, 8,128 set_64bit_val(wqe, 8,
130 LS_64(buf->mem.size, I40IWQPSQ_FRAG_LEN));129 LS_64(buf->mem.size, I40IWQPSQ_FRAG_LEN));
131 set_64bit_val(wqe, 24, offset24);130 i40iw_insert_wqe_hdr(wqe, offset24);
132}131}
133 132
134/**133/**
@@ -409,9 +408,7 @@ enum i40iw_status_code i40iw_puda_send(struct i40iw_sc_qp *qp, · 274 unmodified lines
409 set_64bit_val(wqe, 8, LS_64(info->len, I40IWQPSQ_FRAG_LEN));408 set_64bit_val(wqe, 8, LS_64(info->len, I40IWQPSQ_FRAG_LEN));
410 set_64bit_val(wqe, 16, header[0]);409 set_64bit_val(wqe, 16, header[0]);
411 410
412 /* Ensure all data is written before writing valid bit */411 i40iw_insert_wqe_hdr(wqe, header[1]);
413 wmb();
414 set_64bit_val(wqe, 24, header[1]);
415 412
416 i40iw_debug_buf(qp->dev, I40IW_DEBUG_PUDA, "PUDA SEND WQE", wqe, 32);413 i40iw_debug_buf(qp->dev, I40IW_DEBUG_PUDA, "PUDA SEND WQE", wqe, 32);
417 i40iw_qp_post_wr(&qp->qp_uk);414 i40iw_qp_post_wr(&qp->qp_uk);
@@ -539,7 +536,7 @@ static enum i40iw_status_code i40iw_puda_qp_wqe(struct i40iw_sc_dev *dev, struct · 121 unmodified lines
539 LS_64(2, I40IW_CQPSQ_QP_NEXTIWSTATE) |536 LS_64(2, I40IW_CQPSQ_QP_NEXTIWSTATE) |
540 LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);537 LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);
541 538
542 set_64bit_val(wqe, 24, header);539 i40iw_insert_wqe_hdr(wqe, header);
543 540
544 i40iw_debug_buf(cqp->dev, I40IW_DEBUG_PUDA, "PUDA CQE", wqe, 32);541 i40iw_debug_buf(cqp->dev, I40IW_DEBUG_PUDA, "PUDA CQE", wqe, 32);
545 i40iw_sc_cqp_post_sq(cqp);542 i40iw_sc_cqp_post_sq(cqp);
@@ -655,7 +652,7 @@ static enum i40iw_status_code i40iw_puda_cq_wqe(struct i40iw_sc_dev *dev, struct · 109 unmodified lines
655 LS_64(1, I40IW_CQPSQ_CQ_ENCEQEMASK) |652 LS_64(1, I40IW_CQPSQ_CQ_ENCEQEMASK) |
656 LS_64(1, I40IW_CQPSQ_CQ_CEQIDVALID) |653 LS_64(1, I40IW_CQPSQ_CQ_CEQIDVALID) |
657 LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);654 LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);
658 set_64bit_val(wqe, 24, header);655 i40iw_insert_wqe_hdr(wqe, header);
659 656
660 i40iw_debug_buf(dev, I40IW_DEBUG_PUDA, "PUDA CQE",657 i40iw_debug_buf(dev, I40IW_DEBUG_PUDA, "PUDA CQE",
661 wqe, I40IW_CQP_WQE_SIZE * 8);658 wqe, I40IW_CQP_WQE_SIZE * 8);
drivers/infiniband/hw/i40iw/i40iw_utils.c+3−3
@@ -160,7 +160,7 @@ int i40iw_inetaddr_event(struct notifier_block *notifier, · 159 unmodified lines
160 return NOTIFY_DONE;160 return NOTIFY_DONE;
161 161
162 iwdev = &hdl->device;162 iwdev = &hdl->device;
163 if (iwdev->init_state < INET_NOTIFIER)163 if (iwdev->init_state < IP_ADDR_REGISTERED || iwdev->closing)
164 return NOTIFY_DONE;164 return NOTIFY_DONE;
165 165
166 netdev = iwdev->ldev->netdev;166 netdev = iwdev->ldev->netdev;
@@ -217,7 +217,7 @@ int i40iw_inet6addr_event(struct notifier_block *notifier, · 50 unmodified lines
217 return NOTIFY_DONE;217 return NOTIFY_DONE;
218 218
219 iwdev = &hdl->device;219 iwdev = &hdl->device;
220 if (iwdev->init_state < INET_NOTIFIER)220 if (iwdev->init_state < IP_ADDR_REGISTERED || iwdev->closing)
221 return NOTIFY_DONE;221 return NOTIFY_DONE;
222 222
223 netdev = iwdev->ldev->netdev;223 netdev = iwdev->ldev->netdev;
@@ -266,7 +266,7 @@ int i40iw_net_event(struct notifier_block *notifier, unsigned long event, void * · 42 unmodified lines
266 if (!iwhdl)266 if (!iwhdl)
267 return NOTIFY_DONE;267 return NOTIFY_DONE;
268 iwdev = &iwhdl->device;268 iwdev = &iwhdl->device;
269 if (iwdev->init_state < INET_NOTIFIER)269 if (iwdev->init_state < IP_ADDR_REGISTERED || iwdev->closing)
270 return NOTIFY_DONE;270 return NOTIFY_DONE;
271 p = (__be32 *)neigh->primary_key;271 p = (__be32 *)neigh->primary_key;
272 i40iw_copy_ip_ntohl(local_ipaddr, p);272 i40iw_copy_ip_ntohl(local_ipaddr, p);
drivers/infiniband/hw/i40iw/i40iw_verbs.c+14−0
@@ -826,12 +826,14 @@ static int i40iw_query_qp(struct ib_qp *ibqp, · 825 unmodified lines
826 attr->cap.max_inline_data = I40IW_MAX_INLINE_DATA_SIZE;826 attr->cap.max_inline_data = I40IW_MAX_INLINE_DATA_SIZE;
827 attr->cap.max_send_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;827 attr->cap.max_send_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
828 attr->cap.max_recv_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;828 attr->cap.max_recv_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
829 attr->port_num = 1;
829 init_attr->event_handler = iwqp->ibqp.event_handler;830 init_attr->event_handler = iwqp->ibqp.event_handler;
830 init_attr->qp_context = iwqp->ibqp.qp_context;831 init_attr->qp_context = iwqp->ibqp.qp_context;
831 init_attr->send_cq = iwqp->ibqp.send_cq;832 init_attr->send_cq = iwqp->ibqp.send_cq;
832 init_attr->recv_cq = iwqp->ibqp.recv_cq;833 init_attr->recv_cq = iwqp->ibqp.recv_cq;
833 init_attr->srq = iwqp->ibqp.srq;834 init_attr->srq = iwqp->ibqp.srq;
834 init_attr->cap = attr->cap;835 init_attr->cap = attr->cap;
836 init_attr->port_num = 1;
835 return 0;837 return 0;
836}838}
837 839
@@ -1027,7 +1029,19 @@ int i40iw_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 189 unmodified lines
1027 iwqp->hw_tcp_state = I40IW_TCP_STATE_CLOSED;1029 iwqp->hw_tcp_state = I40IW_TCP_STATE_CLOSED;
1028 iwqp->last_aeq = I40IW_AE_RESET_SENT;1030 iwqp->last_aeq = I40IW_AE_RESET_SENT;
1029 spin_unlock_irqrestore(&iwqp->lock, flags);1031 spin_unlock_irqrestore(&iwqp->lock, flags);
1032 i40iw_cm_disconn(iwqp);
1030 }1033 }
1034 } else {
1035 spin_lock_irqsave(&iwqp->lock, flags);
1036 if (iwqp->cm_id) {
1037 if (atomic_inc_return(&iwqp->close_timer_started) == 1) {
1038 iwqp->cm_id->add_ref(iwqp->cm_id);
1039 i40iw_schedule_cm_timer(iwqp->cm_node,
1040 (struct i40iw_puda_buf *)iwqp,
1041 I40IW_TIMER_TYPE_CLOSE, 1, 0);
1042 }
1043 }
1044 spin_unlock_irqrestore(&iwqp->lock, flags);
1031 }1045 }
1032 }1046 }
1033 return 0;1047 return 0;
drivers/infiniband/hw/mlx5/main.c+10−10
@@ -778,13 +778,13 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, · 777 unmodified lines
778 }778 }
779 779
780 if (MLX5_CAP_GEN(mdev, tag_matching)) {780 if (MLX5_CAP_GEN(mdev, tag_matching)) {
781 props->xrq_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;781 props->tm_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;
782 props->xrq_caps.max_num_tags =782 props->tm_caps.max_num_tags =
783 (1 << MLX5_CAP_GEN(mdev, log_tag_matching_list_sz)) - 1;783 (1 << MLX5_CAP_GEN(mdev, log_tag_matching_list_sz)) - 1;
784 props->xrq_caps.flags = IB_TM_CAP_RC;784 props->tm_caps.flags = IB_TM_CAP_RC;
785 props->xrq_caps.max_ops =785 props->tm_caps.max_ops =
786 1 << MLX5_CAP_GEN(mdev, log_max_qp_sz);786 1 << MLX5_CAP_GEN(mdev, log_max_qp_sz);
787 props->xrq_caps.max_sge = MLX5_TM_MAX_SGE;787 props->tm_caps.max_sge = MLX5_TM_MAX_SGE;
788 }788 }
789 789
790 if (field_avail(typeof(resp), cqe_comp_caps, uhw->outlen)) {790 if (field_avail(typeof(resp), cqe_comp_caps, uhw->outlen)) {
@@ -3837,11 +3837,13 @@ static int delay_drop_debugfs_init(struct mlx5_ib_dev *dev) · 3046 unmodified lines
3837 if (!dbg)3837 if (!dbg)
3838 return -ENOMEM;3838 return -ENOMEM;
3839 3839
3840 dev->delay_drop.dbg = dbg;
3841
3840 dbg->dir_debugfs =3842 dbg->dir_debugfs =
3841 debugfs_create_dir("delay_drop",3843 debugfs_create_dir("delay_drop",
3842 dev->mdev->priv.dbg_root);3844 dev->mdev->priv.dbg_root);
3843 if (!dbg->dir_debugfs)3845 if (!dbg->dir_debugfs)
3844 return -ENOMEM;3846 goto out_debugfs;
3845 3847
3846 dbg->events_cnt_debugfs =3848 dbg->events_cnt_debugfs =
3847 debugfs_create_atomic_t("num_timeout_events", 0400,3849 debugfs_create_atomic_t("num_timeout_events", 0400,
@@ -3865,8 +3867,6 @@ static int delay_drop_debugfs_init(struct mlx5_ib_dev *dev) · 17 unmodified lines
3865 if (!dbg->timeout_debugfs)3867 if (!dbg->timeout_debugfs)
3866 goto out_debugfs;3868 goto out_debugfs;
3867 3869
3868 dev->delay_drop.dbg = dbg;
3869
3870 return 0;3870 return 0;
3871 3871
3872out_debugfs:3872out_debugfs:
@@ -4174,9 +4174,9 @@ err_bfreg: · 301 unmodified lines
4174err_uar_page:4174err_uar_page:
4175 mlx5_put_uars_page(dev->mdev, dev->mdev->priv.uar);4175 mlx5_put_uars_page(dev->mdev, dev->mdev->priv.uar);
4176 4176
4177err_cnt:
4178 mlx5_ib_cleanup_cong_debugfs(dev);
4179err_cong:4177err_cong:
4178 mlx5_ib_cleanup_cong_debugfs(dev);
4179err_cnt:
4180 if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt))4180 if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt))
4181 mlx5_ib_dealloc_counters(dev);4181 mlx5_ib_dealloc_counters(dev);
4182 4182
drivers/infiniband/hw/mlx5/mem.c+17−30
@@ -50,13 +50,9 @@ void mlx5_ib_cont_pages(struct ib_umem *umem, u64 addr, · 49 unmodified lines
50{50{
51 unsigned long tmp;51 unsigned long tmp;
52 unsigned long m;52 unsigned long m;
53 int i, k;53 u64 base = ~0, p = 0;
54 u64 base = 0;54 u64 len, pfn;
55 int p = 0;55 int i = 0;
56 int skip;
57 int mask;
58 u64 len;
59 u64 pfn;
60 struct scatterlist *sg;56 struct scatterlist *sg;
61 int entry;57 int entry;
62 unsigned long page_shift = umem->page_shift;58 unsigned long page_shift = umem->page_shift;
@@ -76,33 +72,24 @@ void mlx5_ib_cont_pages(struct ib_umem *umem, u64 addr, · 13 unmodified lines
76 m = find_first_bit(&tmp, BITS_PER_LONG);72 m = find_first_bit(&tmp, BITS_PER_LONG);
77 if (max_page_shift)73 if (max_page_shift)
78 m = min_t(unsigned long, max_page_shift - page_shift, m);74 m = min_t(unsigned long, max_page_shift - page_shift, m);
79 skip = 1 << m;75
80 mask = skip - 1;
81 i = 0;
82 for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {76 for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
83 len = sg_dma_len(sg) >> page_shift;77 len = sg_dma_len(sg) >> page_shift;
84 pfn = sg_dma_address(sg) >> page_shift;78 pfn = sg_dma_address(sg) >> page_shift;
85 for (k = 0; k < len; k++) {79 if (base + p != pfn) {
86 if (!(i & mask)) {80 /* If either the offset or the new
87 tmp = (unsigned long)pfn;81 * base are unaligned update m
88 m = min_t(unsigned long, m, find_first_bit(&tmp, BITS_PER_LONG));82 */
89 skip = 1 << m;83 tmp = (unsigned long)(pfn | p);
90 mask = skip - 1;84 if (!IS_ALIGNED(tmp, 1 << m))
91 base = pfn;85 m = find_first_bit(&tmp, BITS_PER_LONG);
92 p = 0;86
93 } else {87 base = pfn;
94 if (base + p != pfn) {88 p = 0;
95 tmp = (unsigned long)p;
96 m = find_first_bit(&tmp, BITS_PER_LONG);
97 skip = 1 << m;
98 mask = skip - 1;
99 base = pfn;
100 p = 0;
101 }
102 }
103 p++;
104 i++;
105 }89 }
90
91 p += len;
92 i += len;
106 }93 }
107 94
108 if (i) {95 if (i) {
drivers/infiniband/hw/mlx5/mr.c+17−10
@@ -47,7 +47,8 @@ enum { · 46 unmodified lines
47 47
48#define MLX5_UMR_ALIGN 204848#define MLX5_UMR_ALIGN 2048
49 49
50static int clean_mr(struct mlx5_ib_mr *mr);50static int clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
51static int dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
51static int mr_cache_max_order(struct mlx5_ib_dev *dev);52static int mr_cache_max_order(struct mlx5_ib_dev *dev);
52static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);53static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
53 54
@@ -1270,8 +1271,9 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, · 1216 unmodified lines
1270 1271
1271 err = mlx5_ib_update_xlt(mr, 0, ncont, page_shift,1272 err = mlx5_ib_update_xlt(mr, 0, ncont, page_shift,
1272 update_xlt_flags);1273 update_xlt_flags);
1274
1273 if (err) {1275 if (err) {
1274 mlx5_ib_dereg_mr(&mr->ibmr);1276 dereg_mr(dev, mr);
1275 return ERR_PTR(err);1277 return ERR_PTR(err);
1276 }1278 }
1277 }1279 }
@@ -1356,7 +1358,7 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, · 78 unmodified lines
1356 err = mr_umem_get(pd, addr, len, access_flags, &mr->umem,1358 err = mr_umem_get(pd, addr, len, access_flags, &mr->umem,
1357 &npages, &page_shift, &ncont, &order);1359 &npages, &page_shift, &ncont, &order);
1358 if (err < 0) {1360 if (err < 0) {
1359 clean_mr(mr);1361 clean_mr(dev, mr);
1360 return err;1362 return err;
1361 }1363 }
1362 }1364 }
@@ -1410,7 +1412,7 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, · 47 unmodified lines
1410 if (err) {1412 if (err) {
1411 mlx5_ib_warn(dev, "Failed to rereg UMR\n");1413 mlx5_ib_warn(dev, "Failed to rereg UMR\n");
1412 ib_umem_release(mr->umem);1414 ib_umem_release(mr->umem);
1413 clean_mr(mr);1415 clean_mr(dev, mr);
1414 return err;1416 return err;
1415 }1417 }
1416 }1418 }
@@ -1469,9 +1471,8 @@ mlx5_free_priv_descs(struct mlx5_ib_mr *mr) · 52 unmodified lines
1469 }1471 }
1470}1472}
1471 1473
1472static int clean_mr(struct mlx5_ib_mr *mr)1474static int clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1473{1475{
1474 struct mlx5_ib_dev *dev = to_mdev(mr->ibmr.device);
1475 int allocated_from_cache = mr->allocated_from_cache;1476 int allocated_from_cache = mr->allocated_from_cache;
1476 int err;1477 int err;
1477 1478
@@ -1507,10 +1508,8 @@ static int clean_mr(struct mlx5_ib_mr *mr) · 29 unmodified lines
1507 return 0;1508 return 0;
1508}1509}
1509 1510
1510int mlx5_ib_dereg_mr(struct ib_mr *ibmr)1511static int dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1511{1512{
1512 struct mlx5_ib_dev *dev = to_mdev(ibmr->device);
1513 struct mlx5_ib_mr *mr = to_mmr(ibmr);
1514 int npages = mr->npages;1513 int npages = mr->npages;
1515 struct ib_umem *umem = mr->umem;1514 struct ib_umem *umem = mr->umem;
1516 1515
@@ -1539,7 +1538,7 @@ int mlx5_ib_dereg_mr(struct ib_mr *ibmr) · 22 unmodified lines
1539 }1538 }
1540#endif1539#endif
1541 1540
1542 clean_mr(mr);1541 clean_mr(dev, mr);
1543 1542
1544 if (umem) {1543 if (umem) {
1545 ib_umem_release(umem);1544 ib_umem_release(umem);
@@ -1549,6 +1548,14 @@ int mlx5_ib_dereg_mr(struct ib_mr *ibmr) · 3 unmodified lines
1549 return 0;1548 return 0;
1550}1549}
1551 1550
1551int mlx5_ib_dereg_mr(struct ib_mr *ibmr)
1552{
1553 struct mlx5_ib_dev *dev = to_mdev(ibmr->device);
1554 struct mlx5_ib_mr *mr = to_mmr(ibmr);
1555
1556 return dereg_mr(dev, mr);
1557}
1558
1552struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd,1559struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd,
1553 enum ib_mr_type mr_type,1560 enum ib_mr_type mr_type,
1554 u32 max_num_sg)1561 u32 max_num_sg)
drivers/infiniband/hw/nes/nes_verbs.c+2−2
@@ -3232,7 +3232,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, · 3231 unmodified lines
3232 mr->ibmr.iova);3232 mr->ibmr.iova);
3233 set_wqe_32bit_value(wqe->wqe_words,3233 set_wqe_32bit_value(wqe->wqe_words,
3234 NES_IWARP_SQ_FMR_WQE_LENGTH_LOW_IDX,3234 NES_IWARP_SQ_FMR_WQE_LENGTH_LOW_IDX,
3235 mr->ibmr.length);3235 lower_32_bits(mr->ibmr.length));
3236 set_wqe_32bit_value(wqe->wqe_words,3236 set_wqe_32bit_value(wqe->wqe_words,
3237 NES_IWARP_SQ_FMR_WQE_LENGTH_HIGH_IDX, 0);3237 NES_IWARP_SQ_FMR_WQE_LENGTH_HIGH_IDX, 0);
3238 set_wqe_32bit_value(wqe->wqe_words,3238 set_wqe_32bit_value(wqe->wqe_words,
@@ -3274,7 +3274,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, · 35 unmodified lines
3274 mr->npages * 8);3274 mr->npages * 8);
3275 3275
3276 nes_debug(NES_DBG_IW_TX, "SQ_REG_MR: iova_start: %llx, "3276 nes_debug(NES_DBG_IW_TX, "SQ_REG_MR: iova_start: %llx, "
3277 "length: %d, rkey: %0x, pgl_paddr: %llx, "3277 "length: %lld, rkey: %0x, pgl_paddr: %llx, "
3278 "page_list_len: %u, wqe_misc: %x\n",3278 "page_list_len: %u, wqe_misc: %x\n",
3279 (unsigned long long) mr->ibmr.iova,3279 (unsigned long long) mr->ibmr.iova,
3280 mr->ibmr.length,3280 mr->ibmr.length,
drivers/infiniband/hw/ocrdma/ocrdma_hw.c+3−0
@@ -252,7 +252,10 @@ static int ocrdma_get_mbx_errno(u32 status) · 251 unmodified lines
252 case OCRDMA_MBX_ADDI_STATUS_INSUFFICIENT_RESOURCES:252 case OCRDMA_MBX_ADDI_STATUS_INSUFFICIENT_RESOURCES:
253 err_num = -EAGAIN;253 err_num = -EAGAIN;
254 break;254 break;
255 default:
256 err_num = -EFAULT;
255 }257 }
258 break;
256 default:259 default:
257 err_num = -EFAULT;260 err_num = -EFAULT;
258 }261 }
drivers/infiniband/hw/qedr/qedr.h+1−1
@@ -387,7 +387,7 @@ struct qedr_qp { · 386 unmodified lines
387 u8 wqe_size;387 u8 wqe_size;
388 388
389 u8 smac[ETH_ALEN];389 u8 smac[ETH_ALEN];
390 u16 vlan_id;390 u16 vlan;
391 int rc;391 int rc;
392 } *rqe_wr_id;392 } *rqe_wr_id;
393 393
drivers/infiniband/hw/qedr/qedr_cm.c+9−3
@@ -105,7 +105,7 @@ void qedr_ll2_complete_rx_packet(void *cxt, · 104 unmodified lines
105 105
106 qp->rqe_wr_id[qp->rq.gsi_cons].rc = data->u.data_length_error ?106 qp->rqe_wr_id[qp->rq.gsi_cons].rc = data->u.data_length_error ?
107 -EINVAL : 0;107 -EINVAL : 0;
108 qp->rqe_wr_id[qp->rq.gsi_cons].vlan_id = data->vlan;108 qp->rqe_wr_id[qp->rq.gsi_cons].vlan = data->vlan;
109 /* note: length stands for data length i.e. GRH is excluded */109 /* note: length stands for data length i.e. GRH is excluded */
110 qp->rqe_wr_id[qp->rq.gsi_cons].sg_list[0].length =110 qp->rqe_wr_id[qp->rq.gsi_cons].sg_list[0].length =
111 data->length.data_length;111 data->length.data_length;
@@ -694,6 +694,7 @@ int qedr_gsi_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) · 582 unmodified lines
694 struct qedr_cq *cq = get_qedr_cq(ibcq);694 struct qedr_cq *cq = get_qedr_cq(ibcq);
695 struct qedr_qp *qp = dev->gsi_qp;695 struct qedr_qp *qp = dev->gsi_qp;
696 unsigned long flags;696 unsigned long flags;
697 u16 vlan_id;
697 int i = 0;698 int i = 0;
698 699
699 spin_lock_irqsave(&cq->cq_lock, flags);700 spin_lock_irqsave(&cq->cq_lock, flags);
@@ -712,9 +713,14 @@ int qedr_gsi_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) · 12 unmodified lines
712 wc[i].wc_flags |= IB_WC_GRH | IB_WC_IP_CSUM_OK;713 wc[i].wc_flags |= IB_WC_GRH | IB_WC_IP_CSUM_OK;
713 ether_addr_copy(wc[i].smac, qp->rqe_wr_id[qp->rq.cons].smac);714 ether_addr_copy(wc[i].smac, qp->rqe_wr_id[qp->rq.cons].smac);
714 wc[i].wc_flags |= IB_WC_WITH_SMAC;715 wc[i].wc_flags |= IB_WC_WITH_SMAC;
715 if (qp->rqe_wr_id[qp->rq.cons].vlan_id) {716
717 vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan &
718 VLAN_VID_MASK;
719 if (vlan_id) {
716 wc[i].wc_flags |= IB_WC_WITH_VLAN;720 wc[i].wc_flags |= IB_WC_WITH_VLAN;
717 wc[i].vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan_id;721 wc[i].vlan_id = vlan_id;
722 wc[i].sl = (qp->rqe_wr_id[qp->rq.cons].vlan &
723 VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
718 }724 }
719 725
720 qedr_inc_sw_cons(&qp->rq);726 qedr_inc_sw_cons(&qp->rq);
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h+28−3
@@ -416,9 +416,34 @@ static inline enum ib_wc_status pvrdma_wc_status_to_ib( · 415 unmodified lines
416 return (enum ib_wc_status)status;416 return (enum ib_wc_status)status;
417}417}
418 418
419static inline int pvrdma_wc_opcode_to_ib(int opcode)419static inline int pvrdma_wc_opcode_to_ib(unsigned int opcode)
420{420{
421 return opcode;421 switch (opcode) {
422 case PVRDMA_WC_SEND:
423 return IB_WC_SEND;
424 case PVRDMA_WC_RDMA_WRITE:
425 return IB_WC_RDMA_WRITE;
426 case PVRDMA_WC_RDMA_READ:
427 return IB_WC_RDMA_READ;
428 case PVRDMA_WC_COMP_SWAP:
429 return IB_WC_COMP_SWAP;
430 case PVRDMA_WC_FETCH_ADD:
431 return IB_WC_FETCH_ADD;
432 case PVRDMA_WC_LOCAL_INV:
433 return IB_WC_LOCAL_INV;
434 case PVRDMA_WC_FAST_REG_MR:
435 return IB_WC_REG_MR;
436 case PVRDMA_WC_MASKED_COMP_SWAP:
437 return IB_WC_MASKED_COMP_SWAP;
438 case PVRDMA_WC_MASKED_FETCH_ADD:
439 return IB_WC_MASKED_FETCH_ADD;
440 case PVRDMA_WC_RECV:
441 return IB_WC_RECV;
442 case PVRDMA_WC_RECV_RDMA_WITH_IMM:
443 return IB_WC_RECV_RDMA_WITH_IMM;
444 default:
445 return IB_WC_SEND;
446 }
422}447}
423 448
424static inline int pvrdma_wc_flags_to_ib(int flags)449static inline int pvrdma_wc_flags_to_ib(int flags)
drivers/infiniband/ulp/ipoib/ipoib_cm.c+11−5
@@ -823,12 +823,18 @@ void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc) · 822 unmodified lines
823 wc->status != IB_WC_WR_FLUSH_ERR) {823 wc->status != IB_WC_WR_FLUSH_ERR) {
824 struct ipoib_neigh *neigh;824 struct ipoib_neigh *neigh;
825 825
826 if (wc->status != IB_WC_RNR_RETRY_EXC_ERR)826 /* IB_WC[_RNR]_RETRY_EXC_ERR error is part of the life cycle,
827 ipoib_warn(priv, "failed cm send event (status=%d, wrid=%d vend_err %x)\n",827 * so don't make waves.
828 wc->status, wr_id, wc->vendor_err);828 */
829 if (wc->status == IB_WC_RNR_RETRY_EXC_ERR ||
830 wc->status == IB_WC_RETRY_EXC_ERR)
831 ipoib_dbg(priv,
832 "%s: failed cm send event (status=%d, wrid=%d vend_err 0x%x)\n",
833 __func__, wc->status, wr_id, wc->vendor_err);
829 else834 else
830 ipoib_dbg(priv, "failed cm send event (status=%d, wrid=%d vend_err %x)\n",835 ipoib_warn(priv,
831 wc->status, wr_id, wc->vendor_err);836 "%s: failed cm send event (status=%d, wrid=%d vend_err 0x%x)\n",
837 __func__, wc->status, wr_id, wc->vendor_err);
832 838
833 spin_lock_irqsave(&priv->lock, flags);839 spin_lock_irqsave(&priv->lock, flags);
834 neigh = tx->neigh;840 neigh = tx->neigh;
drivers/infiniband/ulp/ipoib/ipoib_ib.c+0−13
@@ -1000,19 +1000,6 @@ static inline int update_parent_pkey(struct ipoib_dev_priv *priv) · 999 unmodified lines
1000 */1000 */
1001 priv->dev->broadcast[8] = priv->pkey >> 8;1001 priv->dev->broadcast[8] = priv->pkey >> 8;
1002 priv->dev->broadcast[9] = priv->pkey & 0xff;1002 priv->dev->broadcast[9] = priv->pkey & 0xff;
1003
1004 /*
1005 * Update the broadcast address in the priv->broadcast object,
1006 * in case it already exists, otherwise no one will do that.
1007 */
1008 if (priv->broadcast) {
1009 spin_lock_irq(&priv->lock);
1010 memcpy(priv->broadcast->mcmember.mgid.raw,
1011 priv->dev->broadcast + 4,
1012 sizeof(union ib_gid));
1013 spin_unlock_irq(&priv->lock);
1014 }
1015
1016 return 0;1003 return 0;
1017 }1004 }
1018 1005
drivers/infiniband/ulp/ipoib/ipoib_main.c+11−4
@@ -2180,6 +2180,7 @@ static struct net_device *ipoib_add_port(const char *format, · 2179 unmodified lines
2180{2180{
2181 struct ipoib_dev_priv *priv;2181 struct ipoib_dev_priv *priv;
2182 struct ib_port_attr attr;2182 struct ib_port_attr attr;
2183 struct rdma_netdev *rn;
2183 int result = -ENOMEM;2184 int result = -ENOMEM;
2184 2185
2185 priv = ipoib_intf_alloc(hca, port, format);2186 priv = ipoib_intf_alloc(hca, port, format);
@@ -2279,7 +2280,8 @@ register_failed: · 93 unmodified lines
2279 ipoib_dev_cleanup(priv->dev);2280 ipoib_dev_cleanup(priv->dev);
2280 2281
2281device_init_failed:2282device_init_failed:
2282 free_netdev(priv->dev);2283 rn = netdev_priv(priv->dev);
2284 rn->free_rdma_netdev(priv->dev);
2283 kfree(priv);2285 kfree(priv);
2284 2286
2285alloc_mem_failed:2287alloc_mem_failed:
@@ -2328,7 +2330,7 @@ static void ipoib_remove_one(struct ib_device *device, void *client_data) · 42 unmodified lines
2328 return;2330 return;
2329 2331
2330 list_for_each_entry_safe(priv, tmp, dev_list, list) {2332 list_for_each_entry_safe(priv, tmp, dev_list, list) {
2331 struct rdma_netdev *rn = netdev_priv(priv->dev);2333 struct rdma_netdev *parent_rn = netdev_priv(priv->dev);
2332 2334
2333 ib_unregister_event_handler(&priv->event_handler);2335 ib_unregister_event_handler(&priv->event_handler);
2334 flush_workqueue(ipoib_workqueue);2336 flush_workqueue(ipoib_workqueue);
@@ -2350,10 +2352,15 @@ static void ipoib_remove_one(struct ib_device *device, void *client_data) · 15 unmodified lines
2350 unregister_netdev(priv->dev);2352 unregister_netdev(priv->dev);
2351 mutex_unlock(&priv->sysfs_mutex);2353 mutex_unlock(&priv->sysfs_mutex);
2352 2354
2353 rn->free_rdma_netdev(priv->dev);2355 parent_rn->free_rdma_netdev(priv->dev);
2356
2357 list_for_each_entry_safe(cpriv, tcpriv, &priv->child_intfs, list) {
2358 struct rdma_netdev *child_rn;
2354 2359
2355 list_for_each_entry_safe(cpriv, tcpriv, &priv->child_intfs, list)2360 child_rn = netdev_priv(cpriv->dev);
2361 child_rn->free_rdma_netdev(cpriv->dev);
2356 kfree(cpriv);2362 kfree(cpriv);
2363 }
2357 2364
2358 kfree(priv);2365 kfree(priv);
2359 }2366 }
drivers/infiniband/ulp/ipoib/ipoib_vlan.c+22−8
@@ -141,14 +141,17 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) · 140 unmodified lines
141 return restart_syscall();141 return restart_syscall();
142 }142 }
143 143
144 priv = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name);144 if (!down_write_trylock(&ppriv->vlan_rwsem)) {
145 if (!priv) {
146 rtnl_unlock();145 rtnl_unlock();
147 mutex_unlock(&ppriv->sysfs_mutex);146 mutex_unlock(&ppriv->sysfs_mutex);
148 return -ENOMEM;147 return restart_syscall();
149 }148 }
150 149
151 down_write(&ppriv->vlan_rwsem);150 priv = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name);
151 if (!priv) {
152 result = -ENOMEM;
153 goto out;
154 }
152 155
153 /*156 /*
154 * First ensure this isn't a duplicate. We check the parent device and157 * First ensure this isn't a duplicate. We check the parent device and
@@ -175,8 +178,11 @@ out: · 20 unmodified lines
175 rtnl_unlock();178 rtnl_unlock();
176 mutex_unlock(&ppriv->sysfs_mutex);179 mutex_unlock(&ppriv->sysfs_mutex);
177 180
178 if (result) {181 if (result && priv) {
179 free_netdev(priv->dev);182 struct rdma_netdev *rn;
183
184 rn = netdev_priv(priv->dev);
185 rn->free_rdma_netdev(priv->dev);
180 kfree(priv);186 kfree(priv);
181 }187 }
182 188
@@ -204,7 +210,12 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey) · 21 unmodified lines
204 return restart_syscall();210 return restart_syscall();
205 }211 }
206 212
207 down_write(&ppriv->vlan_rwsem);213 if (!down_write_trylock(&ppriv->vlan_rwsem)) {
214 rtnl_unlock();
215 mutex_unlock(&ppriv->sysfs_mutex);
216 return restart_syscall();
217 }
218
208 list_for_each_entry_safe(priv, tpriv, &ppriv->child_intfs, list) {219 list_for_each_entry_safe(priv, tpriv, &ppriv->child_intfs, list) {
209 if (priv->pkey == pkey &&220 if (priv->pkey == pkey &&
210 priv->child_type == IPOIB_LEGACY_CHILD) {221 priv->child_type == IPOIB_LEGACY_CHILD) {
@@ -224,7 +235,10 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey) · 13 unmodified lines
224 mutex_unlock(&ppriv->sysfs_mutex);235 mutex_unlock(&ppriv->sysfs_mutex);
225 236
226 if (dev) {237 if (dev) {
227 free_netdev(dev);238 struct rdma_netdev *rn;
239
240 rn = netdev_priv(dev);
241 rn->free_rdma_netdev(priv->dev);
228 kfree(priv);242 kfree(priv);
229 return 0;243 return 0;
230 }244 }
drivers/infiniband/ulp/iser/iser_memory.c+1−1
@@ -154,7 +154,7 @@ static void iser_dump_page_vec(struct iser_page_vec *page_vec) · 153 unmodified lines
154{154{
155 int i;155 int i;
156 156
157 iser_err("page vec npages %d data length %d\n",157 iser_err("page vec npages %d data length %lld\n",
158 page_vec->npages, page_vec->fake_mr.length);158 page_vec->npages, page_vec->fake_mr.length);
159 for (i = 0; i < page_vec->npages; i++)159 for (i = 0; i < page_vec->npages; i++)
160 iser_err("vec[%d]: %llx\n", i, page_vec->pages[i]);160 iser_err("vec[%d]: %llx\n", i, page_vec->pages[i]);
drivers/input/ff-core.c+10−3
@@ -237,9 +237,15 @@ int input_ff_erase(struct input_dev *dev, int effect_id, struct file *file) · 236 unmodified lines
237EXPORT_SYMBOL_GPL(input_ff_erase);237EXPORT_SYMBOL_GPL(input_ff_erase);
238 238
239/*239/*
240 * flush_effects - erase all effects owned by a file handle240 * input_ff_flush - erase all effects owned by a file handle
241 * @dev: input device to erase effect from
242 * @file: purported owner of the effects
243 *
244 * This function erases all force-feedback effects associated with
245 * the given owner from specified device. Note that @file may be %NULL,
246 * in which case all effects will be erased.
241 */247 */
242static int flush_effects(struct input_dev *dev, struct file *file)248int input_ff_flush(struct input_dev *dev, struct file *file)
243{249{
244 struct ff_device *ff = dev->ff;250 struct ff_device *ff = dev->ff;
245 int i;251 int i;
@@ -255,6 +261,7 @@ static int flush_effects(struct input_dev *dev, struct file *file) · 9 unmodified lines
255 261
256 return 0;262 return 0;
257}263}
264EXPORT_SYMBOL_GPL(input_ff_flush);
258 265
259/**266/**
260 * input_ff_event() - generic handler for force-feedback events267 * input_ff_event() - generic handler for force-feedback events
@@ -343,7 +350,7 @@ int input_ff_create(struct input_dev *dev, unsigned int max_effects) · 82 unmodified lines
343 mutex_init(&ff->mutex);350 mutex_init(&ff->mutex);
344 351
345 dev->ff = ff;352 dev->ff = ff;
346 dev->flush = flush_effects;353 dev->flush = input_ff_flush;
347 dev->event = input_ff_event;354 dev->event = input_ff_event;
348 __set_bit(EV_FF, dev->evbit);355 __set_bit(EV_FF, dev->evbit);
349 356
drivers/input/misc/uinput.c+39−18
@@ -98,14 +98,15 @@ static int uinput_request_reserve_slot(struct uinput_device *udev, · 97 unmodified lines
98 uinput_request_alloc_id(udev, request));98 uinput_request_alloc_id(udev, request));
99}99}
100 100
101static void uinput_request_done(struct uinput_device *udev,101static void uinput_request_release_slot(struct uinput_device *udev,
102 struct uinput_request *request)102 unsigned int id)
103{103{
104 /* Mark slot as available */104 /* Mark slot as available */
105 udev->requests[request->id] = NULL;105 spin_lock(&udev->requests_lock);
106 wake_up(&udev->requests_waitq);106 udev->requests[id] = NULL;
107 spin_unlock(&udev->requests_lock);
107 108
108 complete(&request->done);109 wake_up(&udev->requests_waitq);
109}110}
110 111
111static int uinput_request_send(struct uinput_device *udev,112static int uinput_request_send(struct uinput_device *udev,
@@ -138,20 +139,22 @@ static int uinput_request_send(struct uinput_device *udev, · 26 unmodified lines
138static int uinput_request_submit(struct uinput_device *udev,139static int uinput_request_submit(struct uinput_device *udev,
139 struct uinput_request *request)140 struct uinput_request *request)
140{141{
141 int error;142 int retval;
142 143
143 error = uinput_request_reserve_slot(udev, request);144 retval = uinput_request_reserve_slot(udev, request);
144 if (error)145 if (retval)
145 return error;146 return retval;
146 147
147 error = uinput_request_send(udev, request);148 retval = uinput_request_send(udev, request);
148 if (error) {149 if (retval)
149 uinput_request_done(udev, request);150 goto out;
150 return error;
151 }
152 151
153 wait_for_completion(&request->done);152 wait_for_completion(&request->done);
154 return request->retval;153 retval = request->retval;
154
155 out:
156 uinput_request_release_slot(udev, request->id);
157 return retval;
155}158}
156 159
157/*160/*
@@ -169,7 +172,7 @@ static void uinput_flush_requests(struct uinput_device *udev) · 11 unmodified lines
169 request = udev->requests[i];172 request = udev->requests[i];
170 if (request) {173 if (request) {
171 request->retval = -ENODEV;174 request->retval = -ENODEV;
172 uinput_request_done(udev, request);175 complete(&request->done);
173 }176 }
174 }177 }
175 178
@@ -230,6 +233,18 @@ static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id) · 54 unmodified lines
230 return uinput_request_submit(udev, &request);233 return uinput_request_submit(udev, &request);
231}234}
232 235
236static int uinput_dev_flush(struct input_dev *dev, struct file *file)
237{
238 /*
239 * If we are called with file == NULL that means we are tearing
240 * down the device, and therefore we can not handle FF erase
241 * requests: either we are handling UI_DEV_DESTROY (and holding
242 * the udev->mutex), or the file descriptor is closed and there is
243 * nobody on the other side anymore.
244 */
245 return file ? input_ff_flush(dev, file) : 0;
246}
247
233static void uinput_destroy_device(struct uinput_device *udev)248static void uinput_destroy_device(struct uinput_device *udev)
234{249{
235 const char *name, *phys;250 const char *name, *phys;
@@ -297,6 +312,12 @@ static int uinput_create_device(struct uinput_device *udev) · 61 unmodified lines
297 dev->ff->playback = uinput_dev_playback;312 dev->ff->playback = uinput_dev_playback;
298 dev->ff->set_gain = uinput_dev_set_gain;313 dev->ff->set_gain = uinput_dev_set_gain;
299 dev->ff->set_autocenter = uinput_dev_set_autocenter;314 dev->ff->set_autocenter = uinput_dev_set_autocenter;
315 /*
316 * The standard input_ff_flush() implementation does
317 * not quite work for uinput as we can't reasonably
318 * handle FF requests during device teardown.
319 */
320 dev->flush = uinput_dev_flush;
300 }321 }
301 322
302 error = input_register_device(udev->dev);323 error = input_register_device(udev->dev);
@@ -939,7 +960,7 @@ static long uinput_ioctl_handler(struct file *file, unsigned int cmd, · 636 unmodified lines
939 }960 }
940 961
941 req->retval = ff_up.retval;962 req->retval = ff_up.retval;
942 uinput_request_done(udev, req);963 complete(&req->done);
943 goto out;964 goto out;
944 965
945 case UI_END_FF_ERASE:966 case UI_END_FF_ERASE:
@@ -955,7 +976,7 @@ static long uinput_ioctl_handler(struct file *file, unsigned int cmd, · 9 unmodified lines
955 }976 }
956 977
957 req->retval = ff_erase.retval;978 req->retval = ff_erase.retval;
958 uinput_request_done(udev, req);979 complete(&req->done);
959 goto out;980 goto out;
960 }981 }
961 982
drivers/input/mouse/elan_i2c_i2c.c+1−1
@@ -598,7 +598,7 @@ static int elan_i2c_write_fw_block(struct i2c_client *client, · 597 unmodified lines
598 }598 }
599 599
600 /* Wait for F/W to update one page ROM data. */600 /* Wait for F/W to update one page ROM data. */
601 msleep(20);601 msleep(35);
602 602
603 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_CTRL_CMD, val);603 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_CTRL_CMD, val);
604 if (error) {604 if (error) {
drivers/iommu/Kconfig+3−2
@@ -278,7 +278,7 @@ config EXYNOS_IOMMU_DEBUG · 277 unmodified lines
278config IPMMU_VMSA278config IPMMU_VMSA
279 bool "Renesas VMSA-compatible IPMMU"279 bool "Renesas VMSA-compatible IPMMU"
280 depends on ARM || IOMMU_DMA280 depends on ARM || IOMMU_DMA
281 depends on ARCH_RENESAS || COMPILE_TEST281 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
282 select IOMMU_API282 select IOMMU_API
283 select IOMMU_IO_PGTABLE_LPAE283 select IOMMU_IO_PGTABLE_LPAE
284 select ARM_DMA_USE_IOMMU284 select ARM_DMA_USE_IOMMU
@@ -373,7 +373,8 @@ config MTK_IOMMU_V1 · 88 unmodified lines
373config QCOM_IOMMU373config QCOM_IOMMU
374 # Note: iommu drivers cannot (yet?) be built as modules374 # Note: iommu drivers cannot (yet?) be built as modules
375 bool "Qualcomm IOMMU Support"375 bool "Qualcomm IOMMU Support"
376 depends on ARCH_QCOM || COMPILE_TEST376 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
377 depends on HAS_DMA
377 select IOMMU_API378 select IOMMU_API
378 select IOMMU_IO_PGTABLE_LPAE379 select IOMMU_IO_PGTABLE_LPAE
379 select ARM_DMA_USE_IOMMU380 select ARM_DMA_USE_IOMMU
drivers/iommu/amd_iommu_init.c+4−4
@@ -874,7 +874,7 @@ static bool copy_device_table(void) · 873 unmodified lines
874 hi = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET + 4);874 hi = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET + 4);
875 entry = (((u64) hi) << 32) + lo;875 entry = (((u64) hi) << 32) + lo;
876 if (last_entry && last_entry != entry) {876 if (last_entry && last_entry != entry) {
877 pr_err("IOMMU:%d should use the same dev table as others!/n",877 pr_err("IOMMU:%d should use the same dev table as others!\n",
878 iommu->index);878 iommu->index);
879 return false;879 return false;
880 }880 }
@@ -882,7 +882,7 @@ static bool copy_device_table(void) · 1 unmodified line
882 882
883 old_devtb_size = ((entry & ~PAGE_MASK) + 1) << 12;883 old_devtb_size = ((entry & ~PAGE_MASK) + 1) << 12;
884 if (old_devtb_size != dev_table_size) {884 if (old_devtb_size != dev_table_size) {
885 pr_err("The device table size of IOMMU:%d is not expected!/n",885 pr_err("The device table size of IOMMU:%d is not expected!\n",
886 iommu->index);886 iommu->index);
887 return false;887 return false;
888 }888 }
@@ -890,7 +890,7 @@ static bool copy_device_table(void) · 1 unmodified line
890 890
891 old_devtb_phys = entry & PAGE_MASK;891 old_devtb_phys = entry & PAGE_MASK;
892 if (old_devtb_phys >= 0x100000000ULL) {892 if (old_devtb_phys >= 0x100000000ULL) {
893 pr_err("The address of old device table is above 4G, not trustworthy!/n");893 pr_err("The address of old device table is above 4G, not trustworthy!\n");
894 return false;894 return false;
895 }895 }
896 old_devtb = memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB);896 old_devtb = memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB);
@@ -901,7 +901,7 @@ static bool copy_device_table(void) · 4 unmodified lines
901 old_dev_tbl_cpy = (void *)__get_free_pages(gfp_flag,901 old_dev_tbl_cpy = (void *)__get_free_pages(gfp_flag,
902 get_order(dev_table_size));902 get_order(dev_table_size));
903 if (old_dev_tbl_cpy == NULL) {903 if (old_dev_tbl_cpy == NULL) {
904 pr_err("Failed to allocate memory for copying old device table!/n");904 pr_err("Failed to allocate memory for copying old device table!\n");
905 return false;905 return false;
906 }906 }
907 907
drivers/iommu/dmar.c+1−1
@@ -497,7 +497,7 @@ static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg) · 496 unmodified lines
497#define dmar_parse_one_rhsa dmar_res_noop497#define dmar_parse_one_rhsa dmar_res_noop
498#endif498#endif
499 499
500static void __init500static void
501dmar_table_print_dmar_entry(struct acpi_dmar_header *header)501dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
502{502{
503 struct acpi_dmar_hardware_unit *drhd;503 struct acpi_dmar_hardware_unit *drhd;
drivers/iommu/io-pgtable-arm-v7s.c+1−1
@@ -245,7 +245,7 @@ static void __arm_v7s_free_table(void *table, int lvl, · 244 unmodified lines
245static void __arm_v7s_pte_sync(arm_v7s_iopte *ptep, int num_entries,245static void __arm_v7s_pte_sync(arm_v7s_iopte *ptep, int num_entries,
246 struct io_pgtable_cfg *cfg)246 struct io_pgtable_cfg *cfg)
247{247{
248 if (!(cfg->quirks & IO_PGTABLE_QUIRK_NO_DMA))248 if (cfg->quirks & IO_PGTABLE_QUIRK_NO_DMA)
249 return;249 return;
250 250
251 dma_sync_single_for_device(cfg->iommu_dev, __arm_v7s_dma_addr(ptep),251 dma_sync_single_for_device(cfg->iommu_dev, __arm_v7s_dma_addr(ptep),
drivers/iommu/mtk_iommu.c+2−1
@@ -371,7 +371,8 @@ static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova, · 370 unmodified lines
371 int ret;371 int ret;
372 372
373 spin_lock_irqsave(&dom->pgtlock, flags);373 spin_lock_irqsave(&dom->pgtlock, flags);
374 ret = dom->iop->map(dom->iop, iova, paddr, size, prot);374 ret = dom->iop->map(dom->iop, iova, paddr & DMA_BIT_MASK(32),
375 size, prot);
375 spin_unlock_irqrestore(&dom->pgtlock, flags);376 spin_unlock_irqrestore(&dom->pgtlock, flags);
376 377
377 return ret;378 return ret;
drivers/iommu/of_iommu.c+1−4
@@ -157,10 +157,7 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) · 156 unmodified lines
157 157
158 err = of_iommu_xlate(info->dev, &iommu_spec);158 err = of_iommu_xlate(info->dev, &iommu_spec);
159 of_node_put(iommu_spec.np);159 of_node_put(iommu_spec.np);
160 if (err)160 return err;
161 return err;
162
163 return info->np == pdev->bus->dev.of_node;
164}161}
165 162
166const struct iommu_ops *of_iommu_configure(struct device *dev,163const struct iommu_ops *of_iommu_configure(struct device *dev,
drivers/irqchip/irq-gic-v3.c+4−4
@@ -1042,7 +1042,7 @@ static int get_cpu_number(struct device_node *dn) · 1041 unmodified lines
1042{1042{
1043 const __be32 *cell;1043 const __be32 *cell;
1044 u64 hwid;1044 u64 hwid;
1045 int i;1045 int cpu;
1046 1046
1047 cell = of_get_property(dn, "reg", NULL);1047 cell = of_get_property(dn, "reg", NULL);
1048 if (!cell)1048 if (!cell)
@@ -1056,9 +1056,9 @@ static int get_cpu_number(struct device_node *dn) · 7 unmodified lines
1056 if (hwid & ~MPIDR_HWID_BITMASK)1056 if (hwid & ~MPIDR_HWID_BITMASK)
1057 return -1;1057 return -1;
1058 1058
1059 for (i = 0; i < num_possible_cpus(); i++)1059 for_each_possible_cpu(cpu)
1060 if (cpu_logical_map(i) == hwid)1060 if (cpu_logical_map(cpu) == hwid)
1061 return i;1061 return cpu;
1062 1062
1063 return -1;1063 return -1;
1064}1064}
drivers/irqchip/irq-gic-v4.c+9−3
@@ -173,7 +173,9 @@ int its_map_vlpi(int irq, struct its_vlpi_map *map) · 172 unmodified lines
173{173{
174 struct its_cmd_info info = {174 struct its_cmd_info info = {
175 .cmd_type = MAP_VLPI,175 .cmd_type = MAP_VLPI,
176 .map = map,176 {
177 .map = map,
178 },
177 };179 };
178 180
179 /*181 /*
@@ -189,7 +191,9 @@ int its_get_vlpi(int irq, struct its_vlpi_map *map) · 9 unmodified lines
189{191{
190 struct its_cmd_info info = {192 struct its_cmd_info info = {
191 .cmd_type = GET_VLPI,193 .cmd_type = GET_VLPI,
192 .map = map,194 {
195 .map = map,
196 },
193 };197 };
194 198
195 return irq_set_vcpu_affinity(irq, &info);199 return irq_set_vcpu_affinity(irq, &info);
@@ -205,7 +209,9 @@ int its_prop_update_vlpi(int irq, u8 config, bool inv) · 9 unmodified lines
205{209{
206 struct its_cmd_info info = {210 struct its_cmd_info info = {
207 .cmd_type = inv ? PROP_UPDATE_AND_INV_VLPI : PROP_UPDATE_VLPI,211 .cmd_type = inv ? PROP_UPDATE_AND_INV_VLPI : PROP_UPDATE_VLPI,
208 .config = config,212 {
213 .config = config,
214 },
209 };215 };
210 216
211 return irq_set_vcpu_affinity(irq, &info);217 return irq_set_vcpu_affinity(irq, &info);
drivers/irqchip/irq-mips-gic.c+11−8
@@ -169,20 +169,19 @@ static void gic_mask_irq(struct irq_data *d) · 168 unmodified lines
169{169{
170 unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);170 unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
171 171
172 write_gic_rmask(BIT(intr));172 write_gic_rmask(intr);
173 gic_clear_pcpu_masks(intr);173 gic_clear_pcpu_masks(intr);
174}174}
175 175
176static void gic_unmask_irq(struct irq_data *d)176static void gic_unmask_irq(struct irq_data *d)
177{177{
178 struct cpumask *affinity = irq_data_get_affinity_mask(d);
179 unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);178 unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
180 unsigned int cpu;179 unsigned int cpu;
181 180
182 write_gic_smask(BIT(intr));181 write_gic_smask(intr);
183 182
184 gic_clear_pcpu_masks(intr);183 gic_clear_pcpu_masks(intr);
185 cpu = cpumask_first_and(affinity, cpu_online_mask);184 cpu = cpumask_first(irq_data_get_effective_affinity_mask(d));
186 set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));185 set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));
187}186}
188 187
@@ -420,13 +419,17 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq, · 231 unmodified lines
420 irq_hw_number_t hw, unsigned int cpu)419 irq_hw_number_t hw, unsigned int cpu)
421{420{
422 int intr = GIC_HWIRQ_TO_SHARED(hw);421 int intr = GIC_HWIRQ_TO_SHARED(hw);
422 struct irq_data *data;
423 unsigned long flags;423 unsigned long flags;
424 424
425 data = irq_get_irq_data(virq);
426
425 spin_lock_irqsave(&gic_lock, flags);427 spin_lock_irqsave(&gic_lock, flags);
426 write_gic_map_pin(intr, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin);428 write_gic_map_pin(intr, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin);
427 write_gic_map_vp(intr, BIT(mips_cm_vp_id(cpu)));429 write_gic_map_vp(intr, BIT(mips_cm_vp_id(cpu)));
428 gic_clear_pcpu_masks(intr);430 gic_clear_pcpu_masks(intr);
429 set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));431 set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));
432 irq_data_update_effective_affinity(data, cpumask_of(cpu));
430 spin_unlock_irqrestore(&gic_lock, flags);433 spin_unlock_irqrestore(&gic_lock, flags);
431 434
432 return 0;435 return 0;
@@ -645,7 +648,7 @@ static int __init gic_of_init(struct device_node *node, · 212 unmodified lines
645 648
646 /* Find the first available CPU vector. */649 /* Find the first available CPU vector. */
647 i = 0;650 i = 0;
648 reserved = (C_SW0 | C_SW1) >> __fls(C_SW0);651 reserved = (C_SW0 | C_SW1) >> __ffs(C_SW0);
649 while (!of_property_read_u32_index(node, "mti,reserved-cpu-vectors",652 while (!of_property_read_u32_index(node, "mti,reserved-cpu-vectors",
650 i++, &cpu_vec))653 i++, &cpu_vec))
651 reserved |= BIT(cpu_vec);654 reserved |= BIT(cpu_vec);
@@ -684,11 +687,11 @@ static int __init gic_of_init(struct device_node *node, · 32 unmodified lines
684 687
685 gicconfig = read_gic_config();688 gicconfig = read_gic_config();
686 gic_shared_intrs = gicconfig & GIC_CONFIG_NUMINTERRUPTS;689 gic_shared_intrs = gicconfig & GIC_CONFIG_NUMINTERRUPTS;
687 gic_shared_intrs >>= __fls(GIC_CONFIG_NUMINTERRUPTS);690 gic_shared_intrs >>= __ffs(GIC_CONFIG_NUMINTERRUPTS);
688 gic_shared_intrs = (gic_shared_intrs + 1) * 8;691 gic_shared_intrs = (gic_shared_intrs + 1) * 8;
689 692
690 gic_vpes = gicconfig & GIC_CONFIG_PVPS;693 gic_vpes = gicconfig & GIC_CONFIG_PVPS;
691 gic_vpes >>= __fls(GIC_CONFIG_PVPS);694 gic_vpes >>= __ffs(GIC_CONFIG_PVPS);
692 gic_vpes = gic_vpes + 1;695 gic_vpes = gic_vpes + 1;
693 696
694 if (cpu_has_veic) {697 if (cpu_has_veic) {
@@ -767,7 +770,7 @@ static int __init gic_of_init(struct device_node *node, · 72 unmodified lines
767 for (i = 0; i < gic_shared_intrs; i++) {770 for (i = 0; i < gic_shared_intrs; i++) {
768 change_gic_pol(i, GIC_POL_ACTIVE_HIGH);771 change_gic_pol(i, GIC_POL_ACTIVE_HIGH);
769 change_gic_trig(i, GIC_TRIG_LEVEL);772 change_gic_trig(i, GIC_TRIG_LEVEL);
770 write_gic_rmask(BIT(i));773 write_gic_rmask(i);
771 }774 }
772 775
773 for (i = 0; i < gic_vpes; i++) {776 for (i = 0; i < gic_vpes; i++) {
drivers/isdn/i4l/isdn_ppp.c+25−12
@@ -825,7 +825,6 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) · 824 unmodified lines
825 isdn_net_local *lp;825 isdn_net_local *lp;
826 struct ippp_struct *is;826 struct ippp_struct *is;
827 int proto;827 int proto;
828 unsigned char protobuf[4];
829 828
830 is = file->private_data;829 is = file->private_data;
831 830
@@ -839,24 +838,28 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) · 7 unmodified lines
839 if (!lp)838 if (!lp)
840 printk(KERN_DEBUG "isdn_ppp_write: lp == NULL\n");839 printk(KERN_DEBUG "isdn_ppp_write: lp == NULL\n");
841 else {840 else {
842 /*841 if (lp->isdn_device < 0 || lp->isdn_channel < 0) {
843 * Don't reset huptimer for842 unsigned char protobuf[4];
844 * LCP packets. (Echo requests).843 /*
845 */844 * Don't reset huptimer for
846 if (copy_from_user(protobuf, buf, 4))845 * LCP packets. (Echo requests).
847 return -EFAULT;846 */
848 proto = PPP_PROTOCOL(protobuf);847 if (copy_from_user(protobuf, buf, 4))
849 if (proto != PPP_LCP)848 return -EFAULT;
850 lp->huptimer = 0;849
850 proto = PPP_PROTOCOL(protobuf);
851 if (proto != PPP_LCP)
852 lp->huptimer = 0;
851 853
852 if (lp->isdn_device < 0 || lp->isdn_channel < 0)
853 return 0;854 return 0;
855 }
854 856
855 if ((dev->drv[lp->isdn_device]->flags & DRV_FLAG_RUNNING) &&857 if ((dev->drv[lp->isdn_device]->flags & DRV_FLAG_RUNNING) &&
856 lp->dialstate == 0 &&858 lp->dialstate == 0 &&
857 (lp->flags & ISDN_NET_CONNECTED)) {859 (lp->flags & ISDN_NET_CONNECTED)) {
858 unsigned short hl;860 unsigned short hl;
859 struct sk_buff *skb;861 struct sk_buff *skb;
862 unsigned char *cpy_buf;
860 /*863 /*
861 * we need to reserve enough space in front of864 * we need to reserve enough space in front of
862 * sk_buff. old call to dev_alloc_skb only reserved865 * sk_buff. old call to dev_alloc_skb only reserved
@@ -869,11 +872,21 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) · 6 unmodified lines
869 return count;872 return count;
870 }873 }
871 skb_reserve(skb, hl);874 skb_reserve(skb, hl);
872 if (copy_from_user(skb_put(skb, count), buf, count))875 cpy_buf = skb_put(skb, count);
876 if (copy_from_user(cpy_buf, buf, count))
873 {877 {
874 kfree_skb(skb);878 kfree_skb(skb);
875 return -EFAULT;879 return -EFAULT;
876 }880 }
881
882 /*
883 * Don't reset huptimer for
884 * LCP packets. (Echo requests).
885 */
886 proto = PPP_PROTOCOL(cpy_buf);
887 if (proto != PPP_LCP)
888 lp->huptimer = 0;
889
877 if (is->debug & 0x40) {890 if (is->debug & 0x40) {
878 printk(KERN_DEBUG "ppp xmit: len %d\n", (int) skb->len);891 printk(KERN_DEBUG "ppp xmit: len %d\n", (int) skb->len);
879 isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot);892 isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot);
drivers/leds/leds-as3645a.c+26−3
@@ -112,6 +112,10 @@ · 111 unmodified lines
112#define AS_PEAK_mA_TO_REG(a) \112#define AS_PEAK_mA_TO_REG(a) \
113 ((min_t(u32, AS_PEAK_mA_MAX, a) - 1250) / 250)113 ((min_t(u32, AS_PEAK_mA_MAX, a) - 1250) / 250)
114 114
115/* LED numbers for Devicetree */
116#define AS_LED_FLASH 0
117#define AS_LED_INDICATOR 1
118
115enum as_mode {119enum as_mode {
116 AS_MODE_EXT_TORCH = 0 << AS_CONTROL_MODE_SETTING_SHIFT,120 AS_MODE_EXT_TORCH = 0 << AS_CONTROL_MODE_SETTING_SHIFT,
117 AS_MODE_INDICATOR = 1 << AS_CONTROL_MODE_SETTING_SHIFT,121 AS_MODE_INDICATOR = 1 << AS_CONTROL_MODE_SETTING_SHIFT,
@@ -491,10 +495,29 @@ static int as3645a_parse_node(struct as3645a *flash, · 373 unmodified lines
491 struct device_node *node)495 struct device_node *node)
492{496{
493 struct as3645a_config *cfg = &flash->cfg;497 struct as3645a_config *cfg = &flash->cfg;
498 struct device_node *child;
494 const char *name;499 const char *name;
495 int rval;500 int rval;
496 501
497 flash->flash_node = of_get_child_by_name(node, "flash");502 for_each_child_of_node(node, child) {
503 u32 id = 0;
504
505 of_property_read_u32(child, "reg", &id);
506
507 switch (id) {
508 case AS_LED_FLASH:
509 flash->flash_node = of_node_get(child);
510 break;
511 case AS_LED_INDICATOR:
512 flash->indicator_node = of_node_get(child);
513 break;
514 default:
515 dev_warn(&flash->client->dev,
516 "unknown LED %u encountered, ignoring\n", id);
517 break;
518 }
519 }
520
498 if (!flash->flash_node) {521 if (!flash->flash_node) {
499 dev_err(&flash->client->dev, "can't find flash node\n");522 dev_err(&flash->client->dev, "can't find flash node\n");
500 return -ENODEV;523 return -ENODEV;
@@ -534,11 +557,10 @@ static int as3645a_parse_node(struct as3645a *flash, · 33 unmodified lines
534 of_property_read_u32(flash->flash_node, "voltage-reference",557 of_property_read_u32(flash->flash_node, "voltage-reference",
535 &cfg->voltage_reference);558 &cfg->voltage_reference);
536 559
537 of_property_read_u32(flash->flash_node, "peak-current-limit",560 of_property_read_u32(flash->flash_node, "ams,input-max-microamp",
538 &cfg->peak);561 &cfg->peak);
539 cfg->peak = AS_PEAK_mA_TO_REG(cfg->peak);562 cfg->peak = AS_PEAK_mA_TO_REG(cfg->peak);
540 563
541 flash->indicator_node = of_get_child_by_name(node, "indicator");
542 if (!flash->indicator_node) {564 if (!flash->indicator_node) {
543 dev_warn(&flash->client->dev,565 dev_warn(&flash->client->dev,
544 "can't find indicator node\n");566 "can't find indicator node\n");
@@ -721,6 +743,7 @@ static int as3645a_remove(struct i2c_client *client) · 176 unmodified lines
721 as3645a_set_control(flash, AS_MODE_EXT_TORCH, false);743 as3645a_set_control(flash, AS_MODE_EXT_TORCH, false);
722 744
723 v4l2_flash_release(flash->vf);745 v4l2_flash_release(flash->vf);
746 v4l2_flash_release(flash->vfind);
724 747
725 led_classdev_flash_unregister(&flash->fled);748 led_classdev_flash_unregister(&flash->fled);
726 led_classdev_unregister(&flash->iled_cdev);749 led_classdev_unregister(&flash->iled_cdev);
drivers/md/bcache/closure.c+2−2
@@ -64,7 +64,7 @@ EXPORT_SYMBOL(closure_put); · 63 unmodified lines
64void __closure_wake_up(struct closure_waitlist *wait_list)64void __closure_wake_up(struct closure_waitlist *wait_list)
65{65{
66 struct llist_node *list;66 struct llist_node *list;
67 struct closure *cl;67 struct closure *cl, *t;
68 struct llist_node *reverse = NULL;68 struct llist_node *reverse = NULL;
69 69
70 list = llist_del_all(&wait_list->list);70 list = llist_del_all(&wait_list->list);
@@ -73,7 +73,7 @@ void __closure_wake_up(struct closure_waitlist *wait_list) · 2 unmodified lines
73 reverse = llist_reverse_order(list);73 reverse = llist_reverse_order(list);
74 74
75 /* Then do the wakeups */75 /* Then do the wakeups */
76 llist_for_each_entry(cl, reverse, list) {76 llist_for_each_entry_safe(cl, t, reverse, list) {
77 closure_set_waiting(cl, 0);77 closure_set_waiting(cl, 0);
78 closure_sub(cl, CLOSURE_WAITING + 1);78 closure_sub(cl, CLOSURE_WAITING + 1);
79 }79 }
drivers/md/dm-core.h+1−0
@@ -149,5 +149,6 @@ static inline bool dm_message_test_buffer_overflow(char *result, unsigned maxlen · 148 unmodified lines
149 149
150extern atomic_t dm_global_event_nr;150extern atomic_t dm_global_event_nr;
151extern wait_queue_head_t dm_global_eventq;151extern wait_queue_head_t dm_global_eventq;
152void dm_issue_global_event(void);
152 153
153#endif154#endif
drivers/md/dm-crypt.c+5−0
@@ -2466,6 +2466,7 @@ static int crypt_ctr_cipher_old(struct dm_target *ti, char *cipher_in, char *key · 2465 unmodified lines
2466 kfree(cipher_api);2466 kfree(cipher_api);
2467 return ret;2467 return ret;
2468 }2468 }
2469 kfree(cipher_api);
2469 2470
2470 return 0;2471 return 0;
2471bad_mem:2472bad_mem:
@@ -2584,6 +2585,10 @@ static int crypt_ctr_optional(struct dm_target *ti, unsigned int argc, char **ar · 112 unmodified lines
2584 ti->error = "Invalid feature value for sector_size";2585 ti->error = "Invalid feature value for sector_size";
2585 return -EINVAL;2586 return -EINVAL;
2586 }2587 }
2588 if (ti->len & ((cc->sector_size >> SECTOR_SHIFT) - 1)) {
2589 ti->error = "Device size is not multiple of sector_size feature";
2590 return -EINVAL;
2591 }
2587 cc->sector_shift = __ffs(cc->sector_size) - SECTOR_SHIFT;2592 cc->sector_shift = __ffs(cc->sector_size) - SECTOR_SHIFT;
2588 } else if (!strcasecmp(opt_string, "iv_large_sectors"))2593 } else if (!strcasecmp(opt_string, "iv_large_sectors"))
2589 set_bit(CRYPT_IV_LARGE_SECTORS, &cc->cipher_flags);2594 set_bit(CRYPT_IV_LARGE_SECTORS, &cc->cipher_flags);
drivers/md/dm-ioctl.c+24−13
@@ -477,9 +477,13 @@ static int remove_all(struct file *filp, struct dm_ioctl *param, size_t param_si · 476 unmodified lines
477 * Round up the ptr to an 8-byte boundary.477 * Round up the ptr to an 8-byte boundary.
478 */478 */
479#define ALIGN_MASK 7479#define ALIGN_MASK 7
480static inline size_t align_val(size_t val)
481{
482 return (val + ALIGN_MASK) & ~ALIGN_MASK;
483}
480static inline void *align_ptr(void *ptr)484static inline void *align_ptr(void *ptr)
481{485{
482 return (void *) (((size_t) (ptr + ALIGN_MASK)) & ~ALIGN_MASK);486 return (void *)align_val((size_t)ptr);
483}487}
484 488
485/*489/*
@@ -505,7 +509,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ · 19 unmodified lines
505 struct hash_cell *hc;509 struct hash_cell *hc;
506 size_t len, needed = 0;510 size_t len, needed = 0;
507 struct gendisk *disk;511 struct gendisk *disk;
508 struct dm_name_list *nl, *old_nl = NULL;512 struct dm_name_list *orig_nl, *nl, *old_nl = NULL;
509 uint32_t *event_nr;513 uint32_t *event_nr;
510 514
511 down_write(&_hash_lock);515 down_write(&_hash_lock);
@@ -516,17 +520,15 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ · 4 unmodified lines
516 */520 */
517 for (i = 0; i < NUM_BUCKETS; i++) {521 for (i = 0; i < NUM_BUCKETS; i++) {
518 list_for_each_entry (hc, _name_buckets + i, name_list) {522 list_for_each_entry (hc, _name_buckets + i, name_list) {
519 needed += sizeof(struct dm_name_list);523 needed += align_val(offsetof(struct dm_name_list, name) + strlen(hc->name) + 1);
520 needed += strlen(hc->name) + 1;524 needed += align_val(sizeof(uint32_t));
521 needed += ALIGN_MASK;
522 needed += (sizeof(uint32_t) + ALIGN_MASK) & ~ALIGN_MASK;
523 }525 }
524 }526 }
525 527
526 /*528 /*
527 * Grab our output buffer.529 * Grab our output buffer.
528 */530 */
529 nl = get_result_buffer(param, param_size, &len);531 nl = orig_nl = get_result_buffer(param, param_size, &len);
530 if (len < needed) {532 if (len < needed) {
531 param->flags |= DM_BUFFER_FULL_FLAG;533 param->flags |= DM_BUFFER_FULL_FLAG;
532 goto out;534 goto out;
@@ -549,11 +551,16 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ · 16 unmodified lines
549 strcpy(nl->name, hc->name);551 strcpy(nl->name, hc->name);
550 552
551 old_nl = nl;553 old_nl = nl;
552 event_nr = align_ptr(((void *) (nl + 1)) + strlen(hc->name) + 1);554 event_nr = align_ptr(nl->name + strlen(hc->name) + 1);
553 *event_nr = dm_get_event_nr(hc->md);555 *event_nr = dm_get_event_nr(hc->md);
554 nl = align_ptr(event_nr + 1);556 nl = align_ptr(event_nr + 1);
555 }557 }
556 }558 }
559 /*
560 * If mismatch happens, security may be compromised due to buffer
561 * overflow, so it's better to crash.
562 */
563 BUG_ON((char *)nl - (char *)orig_nl != needed);
557 564
558 out:565 out:
559 up_write(&_hash_lock);566 up_write(&_hash_lock);
@@ -1621,7 +1628,8 @@ static int target_message(struct file *filp, struct dm_ioctl *param, size_t para · 1061 unmodified lines
1621 * which has a variable size, is not used by the function processing1628 * which has a variable size, is not used by the function processing
1622 * the ioctl.1629 * the ioctl.
1623 */1630 */
1624#define IOCTL_FLAGS_NO_PARAMS 11631#define IOCTL_FLAGS_NO_PARAMS 1
1632#define IOCTL_FLAGS_ISSUE_GLOBAL_EVENT 2
1625 1633
1626/*-----------------------------------------------------------------1634/*-----------------------------------------------------------------
1627 * Implementation of open/close/ioctl on the special char1635 * Implementation of open/close/ioctl on the special char
@@ -1635,12 +1643,12 @@ static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags) · 7 unmodified lines
1635 ioctl_fn fn;1643 ioctl_fn fn;
1636 } _ioctls[] = {1644 } _ioctls[] = {
1637 {DM_VERSION_CMD, 0, NULL}, /* version is dealt with elsewhere */1645 {DM_VERSION_CMD, 0, NULL}, /* version is dealt with elsewhere */
1638 {DM_REMOVE_ALL_CMD, IOCTL_FLAGS_NO_PARAMS, remove_all},1646 {DM_REMOVE_ALL_CMD, IOCTL_FLAGS_NO_PARAMS | IOCTL_FLAGS_ISSUE_GLOBAL_EVENT, remove_all},
1639 {DM_LIST_DEVICES_CMD, 0, list_devices},1647 {DM_LIST_DEVICES_CMD, 0, list_devices},
1640 1648
1641 {DM_DEV_CREATE_CMD, IOCTL_FLAGS_NO_PARAMS, dev_create},1649 {DM_DEV_CREATE_CMD, IOCTL_FLAGS_NO_PARAMS | IOCTL_FLAGS_ISSUE_GLOBAL_EVENT, dev_create},
1642 {DM_DEV_REMOVE_CMD, IOCTL_FLAGS_NO_PARAMS, dev_remove},1650 {DM_DEV_REMOVE_CMD, IOCTL_FLAGS_NO_PARAMS | IOCTL_FLAGS_ISSUE_GLOBAL_EVENT, dev_remove},
1643 {DM_DEV_RENAME_CMD, 0, dev_rename},1651 {DM_DEV_RENAME_CMD, IOCTL_FLAGS_ISSUE_GLOBAL_EVENT, dev_rename},
1644 {DM_DEV_SUSPEND_CMD, IOCTL_FLAGS_NO_PARAMS, dev_suspend},1652 {DM_DEV_SUSPEND_CMD, IOCTL_FLAGS_NO_PARAMS, dev_suspend},
1645 {DM_DEV_STATUS_CMD, IOCTL_FLAGS_NO_PARAMS, dev_status},1653 {DM_DEV_STATUS_CMD, IOCTL_FLAGS_NO_PARAMS, dev_status},
1646 {DM_DEV_WAIT_CMD, 0, dev_wait},1654 {DM_DEV_WAIT_CMD, 0, dev_wait},
@@ -1869,6 +1877,9 @@ static int ctl_ioctl(struct file *file, uint command, struct dm_ioctl __user *us · 222 unmodified lines
1869 unlikely(ioctl_flags & IOCTL_FLAGS_NO_PARAMS))1877 unlikely(ioctl_flags & IOCTL_FLAGS_NO_PARAMS))
1870 DMERR("ioctl %d tried to output some data but has IOCTL_FLAGS_NO_PARAMS set", cmd);1878 DMERR("ioctl %d tried to output some data but has IOCTL_FLAGS_NO_PARAMS set", cmd);
1871 1879
1880 if (!r && ioctl_flags & IOCTL_FLAGS_ISSUE_GLOBAL_EVENT)
1881 dm_issue_global_event();
1882
1872 /*1883 /*
1873 * Copy the results back to userland.1884 * Copy the results back to userland.
1874 */1885 */
drivers/md/dm-raid.c+7−6
@@ -3238,7 +3238,7 @@ static int raid_map(struct dm_target *ti, struct bio *bio) · 3237 unmodified lines
3238 if (unlikely(bio_end_sector(bio) > mddev->array_sectors))3238 if (unlikely(bio_end_sector(bio) > mddev->array_sectors))
3239 return DM_MAPIO_REQUEUE;3239 return DM_MAPIO_REQUEUE;
3240 3240
3241 mddev->pers->make_request(mddev, bio);3241 md_handle_request(mddev, bio);
3242 3242
3243 return DM_MAPIO_SUBMITTED;3243 return DM_MAPIO_SUBMITTED;
3244}3244}
@@ -3297,11 +3297,10 @@ static const char *__raid_dev_status(struct raid_set *rs, struct md_rdev *rdev, · 52 unmodified lines
3297static sector_t rs_get_progress(struct raid_set *rs,3297static sector_t rs_get_progress(struct raid_set *rs,
3298 sector_t resync_max_sectors, bool *array_in_sync)3298 sector_t resync_max_sectors, bool *array_in_sync)
3299{3299{
3300 sector_t r, recovery_cp, curr_resync_completed;3300 sector_t r, curr_resync_completed;
3301 struct mddev *mddev = &rs->md;3301 struct mddev *mddev = &rs->md;
3302 3302
3303 curr_resync_completed = mddev->curr_resync_completed ?: mddev->recovery_cp;3303 curr_resync_completed = mddev->curr_resync_completed ?: mddev->recovery_cp;
3304 recovery_cp = mddev->recovery_cp;
3305 *array_in_sync = false;3304 *array_in_sync = false;
3306 3305
3307 if (rs_is_raid0(rs)) {3306 if (rs_is_raid0(rs)) {
@@ -3330,9 +3329,11 @@ static sector_t rs_get_progress(struct raid_set *rs, · 22 unmodified lines
3330 } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))3329 } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
3331 r = curr_resync_completed;3330 r = curr_resync_completed;
3332 else3331 else
3333 r = recovery_cp;3332 r = mddev->recovery_cp;
3334 3333
3335 if (r == MaxSector) {3334 if ((r == MaxSector) ||
3335 (test_bit(MD_RECOVERY_DONE, &mddev->recovery) &&
3336 (mddev->curr_resync_completed == resync_max_sectors))) {
3336 /*3337 /*
3337 * Sync complete.3338 * Sync complete.
3338 */3339 */
@@ -3892,7 +3893,7 @@ static void raid_resume(struct dm_target *ti) · 553 unmodified lines
3892 3893
3893static struct target_type raid_target = {3894static struct target_type raid_target = {
3894 .name = "raid",3895 .name = "raid",
3895 .version = {1, 12, 1},3896 .version = {1, 13, 0},
3896 .module = THIS_MODULE,3897 .module = THIS_MODULE,
3897 .ctr = raid_ctr,3898 .ctr = raid_ctr,
3898 .dtr = raid_dtr,3899 .dtr = raid_dtr,
drivers/md/dm.c+8−2
@@ -52,6 +52,12 @@ static struct workqueue_struct *deferred_remove_workqueue; · 51 unmodified lines
52atomic_t dm_global_event_nr = ATOMIC_INIT(0);52atomic_t dm_global_event_nr = ATOMIC_INIT(0);
53DECLARE_WAIT_QUEUE_HEAD(dm_global_eventq);53DECLARE_WAIT_QUEUE_HEAD(dm_global_eventq);
54 54
55void dm_issue_global_event(void)
56{
57 atomic_inc(&dm_global_event_nr);
58 wake_up(&dm_global_eventq);
59}
60
55/*61/*
56 * One of these is allocated per bio.62 * One of these is allocated per bio.
57 */63 */
@@ -1865,9 +1871,8 @@ static void event_callback(void *context) · 1807 unmodified lines
1865 dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);1871 dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);
1866 1872
1867 atomic_inc(&md->event_nr);1873 atomic_inc(&md->event_nr);
1868 atomic_inc(&dm_global_event_nr);
1869 wake_up(&md->eventq);1874 wake_up(&md->eventq);
1870 wake_up(&dm_global_eventq);1875 dm_issue_global_event();
1871}1876}
1872 1877
1873/*1878/*
@@ -2283,6 +2288,7 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table) · 409 unmodified lines
2283 }2288 }
2284 2289
2285 map = __bind(md, table, &limits);2290 map = __bind(md, table, &limits);
2291 dm_issue_global_event();
2286 2292
2287out:2293out:
2288 mutex_unlock(&md->suspend_lock);2294 mutex_unlock(&md->suspend_lock);
drivers/md/md.c+43−29
@@ -266,6 +266,37 @@ static DEFINE_SPINLOCK(all_mddevs_lock); · 265 unmodified lines
266 * call has finished, the bio has been linked into some internal structure266 * call has finished, the bio has been linked into some internal structure
267 * and so is visible to ->quiesce(), so we don't need the refcount any more.267 * and so is visible to ->quiesce(), so we don't need the refcount any more.
268 */268 */
269void md_handle_request(struct mddev *mddev, struct bio *bio)
270{
271check_suspended:
272 rcu_read_lock();
273 if (mddev->suspended) {
274 DEFINE_WAIT(__wait);
275 for (;;) {
276 prepare_to_wait(&mddev->sb_wait, &__wait,
277 TASK_UNINTERRUPTIBLE);
278 if (!mddev->suspended)
279 break;
280 rcu_read_unlock();
281 schedule();
282 rcu_read_lock();
283 }
284 finish_wait(&mddev->sb_wait, &__wait);
285 }
286 atomic_inc(&mddev->active_io);
287 rcu_read_unlock();
288
289 if (!mddev->pers->make_request(mddev, bio)) {
290 atomic_dec(&mddev->active_io);
291 wake_up(&mddev->sb_wait);
292 goto check_suspended;
293 }
294
295 if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
296 wake_up(&mddev->sb_wait);
297}
298EXPORT_SYMBOL(md_handle_request);
299
269static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)300static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)
270{301{
271 const int rw = bio_data_dir(bio);302 const int rw = bio_data_dir(bio);
@@ -285,23 +316,6 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio) · 13 unmodified lines
285 bio_endio(bio);316 bio_endio(bio);
286 return BLK_QC_T_NONE;317 return BLK_QC_T_NONE;
287 }318 }
288check_suspended:
289 rcu_read_lock();
290 if (mddev->suspended) {
291 DEFINE_WAIT(__wait);
292 for (;;) {
293 prepare_to_wait(&mddev->sb_wait, &__wait,
294 TASK_UNINTERRUPTIBLE);
295 if (!mddev->suspended)
296 break;
297 rcu_read_unlock();
298 schedule();
299 rcu_read_lock();
300 }
301 finish_wait(&mddev->sb_wait, &__wait);
302 }
303 atomic_inc(&mddev->active_io);
304 rcu_read_unlock();
305 319
306 /*320 /*
307 * save the sectors now since our bio can321 * save the sectors now since our bio can
@@ -310,20 +324,14 @@ check_suspended: · 2 unmodified lines
310 sectors = bio_sectors(bio);324 sectors = bio_sectors(bio);
311 /* bio could be mergeable after passing to underlayer */325 /* bio could be mergeable after passing to underlayer */
312 bio->bi_opf &= ~REQ_NOMERGE;326 bio->bi_opf &= ~REQ_NOMERGE;
313 if (!mddev->pers->make_request(mddev, bio)) {327
314 atomic_dec(&mddev->active_io);328 md_handle_request(mddev, bio);
315 wake_up(&mddev->sb_wait);
316 goto check_suspended;
317 }
318 329
319 cpu = part_stat_lock();330 cpu = part_stat_lock();
320 part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);331 part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
321 part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], sectors);332 part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], sectors);
322 part_stat_unlock();333 part_stat_unlock();
323 334
324 if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
325 wake_up(&mddev->sb_wait);
326
327 return BLK_QC_T_NONE;335 return BLK_QC_T_NONE;
328}336}
329 337
@@ -439,16 +447,22 @@ static void md_submit_flush_data(struct work_struct *ws) · 109 unmodified lines
439 struct mddev *mddev = container_of(ws, struct mddev, flush_work);447 struct mddev *mddev = container_of(ws, struct mddev, flush_work);
440 struct bio *bio = mddev->flush_bio;448 struct bio *bio = mddev->flush_bio;
441 449
450 /*
451 * must reset flush_bio before calling into md_handle_request to avoid a
452 * deadlock, because other bios passed md_handle_request suspend check
453 * could wait for this and below md_handle_request could wait for those
454 * bios because of suspend check
455 */
456 mddev->flush_bio = NULL;
457 wake_up(&mddev->sb_wait);
458
442 if (bio->bi_iter.bi_size == 0)459 if (bio->bi_iter.bi_size == 0)
443 /* an empty barrier - all done */460 /* an empty barrier - all done */
444 bio_endio(bio);461 bio_endio(bio);
445 else {462 else {
446 bio->bi_opf &= ~REQ_PREFLUSH;463 bio->bi_opf &= ~REQ_PREFLUSH;
447 mddev->pers->make_request(mddev, bio);464 md_handle_request(mddev, bio);
448 }465 }
449
450 mddev->flush_bio = NULL;
451 wake_up(&mddev->sb_wait);
452}466}
453 467
454void md_flush_request(struct mddev *mddev, struct bio *bio)468void md_flush_request(struct mddev *mddev, struct bio *bio)
drivers/md/md.h+1−0
@@ -692,6 +692,7 @@ extern void md_stop_writes(struct mddev *mddev); · 691 unmodified lines
692extern int md_rdev_init(struct md_rdev *rdev);692extern int md_rdev_init(struct md_rdev *rdev);
693extern void md_rdev_clear(struct md_rdev *rdev);693extern void md_rdev_clear(struct md_rdev *rdev);
694 694
695extern void md_handle_request(struct mddev *mddev, struct bio *bio);
695extern void mddev_suspend(struct mddev *mddev);696extern void mddev_suspend(struct mddev *mddev);
696extern void mddev_resume(struct mddev *mddev);697extern void mddev_resume(struct mddev *mddev);
697extern struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,698extern struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,
drivers/md/raid5.c+15−5
@@ -811,6 +811,14 @@ static void stripe_add_to_batch_list(struct r5conf *conf, struct stripe_head *sh · 810 unmodified lines
811 spin_unlock(&head->batch_head->batch_lock);811 spin_unlock(&head->batch_head->batch_lock);
812 goto unlock_out;812 goto unlock_out;
813 }813 }
814 /*
815 * We must assign batch_head of this stripe within the
816 * batch_lock, otherwise clear_batch_ready of batch head
817 * stripe could clear BATCH_READY bit of this stripe and
818 * this stripe->batch_head doesn't get assigned, which
819 * could confuse clear_batch_ready for this stripe
820 */
821 sh->batch_head = head->batch_head;
814 822
815 /*823 /*
816 * at this point, head's BATCH_READY could be cleared, but we824 * at this point, head's BATCH_READY could be cleared, but we
@@ -818,8 +826,6 @@ static void stripe_add_to_batch_list(struct r5conf *conf, struct stripe_head *sh · 1 unmodified line
818 */826 */
819 list_add(&sh->batch_list, &head->batch_list);827 list_add(&sh->batch_list, &head->batch_list);
820 spin_unlock(&head->batch_head->batch_lock);828 spin_unlock(&head->batch_head->batch_lock);
821
822 sh->batch_head = head->batch_head;
823 } else {829 } else {
824 head->batch_head = head;830 head->batch_head = head;
825 sh->batch_head = head->batch_head;831 sh->batch_head = head->batch_head;
@@ -4599,7 +4605,8 @@ static void break_stripe_batch_list(struct stripe_head *head_sh, · 3773 unmodified lines
4599 4605
4600 set_mask_bits(&sh->state, ~(STRIPE_EXPAND_SYNC_FLAGS |4606 set_mask_bits(&sh->state, ~(STRIPE_EXPAND_SYNC_FLAGS |
4601 (1 << STRIPE_PREREAD_ACTIVE) |4607 (1 << STRIPE_PREREAD_ACTIVE) |
4602 (1 << STRIPE_DEGRADED)),4608 (1 << STRIPE_DEGRADED) |
4609 (1 << STRIPE_ON_UNPLUG_LIST)),
4603 head_sh->state & (1 << STRIPE_INSYNC));4610 head_sh->state & (1 << STRIPE_INSYNC));
4604 4611
4605 sh->check_state = head_sh->check_state;4612 sh->check_state = head_sh->check_state;
@@ -6568,14 +6575,17 @@ static ssize_t · 1962 unmodified lines
6568raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)6575raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
6569{6576{
6570 struct r5conf *conf;6577 struct r5conf *conf;
6571 unsigned long new;6578 unsigned int new;
6572 int err;6579 int err;
6573 struct r5worker_group *new_groups, *old_groups;6580 struct r5worker_group *new_groups, *old_groups;
6574 int group_cnt, worker_cnt_per_group;6581 int group_cnt, worker_cnt_per_group;
6575 6582
6576 if (len >= PAGE_SIZE)6583 if (len >= PAGE_SIZE)
6577 return -EINVAL;6584 return -EINVAL;
6578 if (kstrtoul(page, 10, &new))6585 if (kstrtouint(page, 10, &new))
6586 return -EINVAL;
6587 /* 8192 should be big enough */
6588 if (new > 8192)
6579 return -EINVAL;6589 return -EINVAL;
6580 6590
6581 err = mddev_lock(mddev);6591 err = mddev_lock(mddev);
drivers/media/rc/ir-sharp-decoder.c+1−1
@@ -245,5 +245,5 @@ module_init(ir_sharp_decode_init); · 244 unmodified lines
245module_exit(ir_sharp_decode_exit);245module_exit(ir_sharp_decode_exit);
246 246
247MODULE_LICENSE("GPL");247MODULE_LICENSE("GPL");
248MODULE_AUTHOR("James Hogan <james.hogan@imgtec.com>");248MODULE_AUTHOR("James Hogan <jhogan@kernel.org>");
249MODULE_DESCRIPTION("Sharp IR protocol decoder");249MODULE_DESCRIPTION("Sharp IR protocol decoder");
drivers/misc/cxl/cxllib.c+11−2
@@ -219,8 +219,17 @@ int cxllib_handle_fault(struct mm_struct *mm, u64 addr, u64 size, u64 flags) · 218 unmodified lines
219 219
220 down_read(&mm->mmap_sem);220 down_read(&mm->mmap_sem);
221 221
222 for (dar = addr; dar < addr + size; dar += page_size) {222 vma = find_vma(mm, addr);
223 if (!vma || dar < vma->vm_start || dar > vma->vm_end) {223 if (!vma) {
224 pr_err("Can't find vma for addr %016llx\n", addr);
225 rc = -EFAULT;
226 goto out;
227 }
228 /* get the size of the pages allocated */
229 page_size = vma_kernel_pagesize(vma);
230
231 for (dar = (addr & ~(page_size - 1)); dar < (addr + size); dar += page_size) {
232 if (dar < vma->vm_start || dar >= vma->vm_end) {
224 vma = find_vma(mm, addr);233 vma = find_vma(mm, addr);
225 if (!vma) {234 if (!vma) {
226 pr_err("Can't find vma for addr %016llx\n", addr);235 pr_err("Can't find vma for addr %016llx\n", addr);
drivers/mmc/core/block.c+0−3
@@ -1634,8 +1634,6 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq, · 1633 unmodified lines
1634 }1634 }
1635 1635
1636 mqrq->areq.mrq = &brq->mrq;1636 mqrq->areq.mrq = &brq->mrq;
1637
1638 mmc_queue_bounce_pre(mqrq);
1639}1637}
1640 1638
1641static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,1639static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
@@ -1829,7 +1827,6 @@ static void mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *new_req) · 187 unmodified lines
1829 brq = &mq_rq->brq;1827 brq = &mq_rq->brq;
1830 old_req = mmc_queue_req_to_req(mq_rq);1828 old_req = mmc_queue_req_to_req(mq_rq);
1831 type = rq_data_dir(old_req) == READ ? MMC_BLK_READ : MMC_BLK_WRITE;1829 type = rq_data_dir(old_req) == READ ? MMC_BLK_READ : MMC_BLK_WRITE;
1832 mmc_queue_bounce_post(mq_rq);
1833 1830
1834 switch (status) {1831 switch (status) {
1835 case MMC_BLK_SUCCESS:1832 case MMC_BLK_SUCCESS:
drivers/mmc/core/mmc.c+19−17
@@ -1286,6 +1286,23 @@ out_err: · 1285 unmodified lines
1286 return err;1286 return err;
1287}1287}
1288 1288
1289static void mmc_select_driver_type(struct mmc_card *card)
1290{
1291 int card_drv_type, drive_strength, drv_type;
1292
1293 card_drv_type = card->ext_csd.raw_driver_strength |
1294 mmc_driver_type_mask(0);
1295
1296 drive_strength = mmc_select_drive_strength(card,
1297 card->ext_csd.hs200_max_dtr,
1298 card_drv_type, &drv_type);
1299
1300 card->drive_strength = drive_strength;
1301
1302 if (drv_type)
1303 mmc_set_driver_type(card->host, drv_type);
1304}
1305
1289static int mmc_select_hs400es(struct mmc_card *card)1306static int mmc_select_hs400es(struct mmc_card *card)
1290{1307{
1291 struct mmc_host *host = card->host;1308 struct mmc_host *host = card->host;
@@ -1341,6 +1358,8 @@ static int mmc_select_hs400es(struct mmc_card *card) · 49 unmodified lines
1341 goto out_err;1358 goto out_err;
1342 }1359 }
1343 1360
1361 mmc_select_driver_type(card);
1362
1344 /* Switch card to HS400 */1363 /* Switch card to HS400 */
1345 val = EXT_CSD_TIMING_HS400 |1364 val = EXT_CSD_TIMING_HS400 |
1346 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;1365 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
@@ -1374,23 +1393,6 @@ out_err: · 27 unmodified lines
1374 return err;1393 return err;
1375}1394}
1376 1395
1377static void mmc_select_driver_type(struct mmc_card *card)
1378{
1379 int card_drv_type, drive_strength, drv_type;
1380
1381 card_drv_type = card->ext_csd.raw_driver_strength |
1382 mmc_driver_type_mask(0);
1383
1384 drive_strength = mmc_select_drive_strength(card,
1385 card->ext_csd.hs200_max_dtr,
1386 card_drv_type, &drv_type);
1387
1388 card->drive_strength = drive_strength;
1389
1390 if (drv_type)
1391 mmc_set_driver_type(card->host, drv_type);
1392}
1393
1394/*1396/*
1395 * For device supporting HS200 mode, the following sequence1397 * For device supporting HS200 mode, the following sequence
1396 * should be done before executing the tuning process.1398 * should be done before executing the tuning process.
drivers/mmc/core/queue.c+9−111
@@ -23,8 +23,6 @@ · 22 unmodified lines
23#include "core.h"23#include "core.h"
24#include "card.h"24#include "card.h"
25 25
26#define MMC_QUEUE_BOUNCESZ 65536
27
28/*26/*
29 * Prepare a MMC request. This just filters out odd stuff.27 * Prepare a MMC request. This just filters out odd stuff.
30 */28 */
@@ -150,26 +148,6 @@ static void mmc_queue_setup_discard(struct request_queue *q, · 119 unmodified lines
150 queue_flag_set_unlocked(QUEUE_FLAG_SECERASE, q);148 queue_flag_set_unlocked(QUEUE_FLAG_SECERASE, q);
151}149}
152 150
153static unsigned int mmc_queue_calc_bouncesz(struct mmc_host *host)
154{
155 unsigned int bouncesz = MMC_QUEUE_BOUNCESZ;
156
157 if (host->max_segs != 1 || (host->caps & MMC_CAP_NO_BOUNCE_BUFF))
158 return 0;
159
160 if (bouncesz > host->max_req_size)
161 bouncesz = host->max_req_size;
162 if (bouncesz > host->max_seg_size)
163 bouncesz = host->max_seg_size;
164 if (bouncesz > host->max_blk_count * 512)
165 bouncesz = host->max_blk_count * 512;
166
167 if (bouncesz <= 512)
168 return 0;
169
170 return bouncesz;
171}
172
173/**151/**
174 * mmc_init_request() - initialize the MMC-specific per-request data152 * mmc_init_request() - initialize the MMC-specific per-request data
175 * @q: the request queue153 * @q: the request queue
@@ -184,26 +162,9 @@ static int mmc_init_request(struct request_queue *q, struct request *req, · 8 unmodified lines
184 struct mmc_card *card = mq->card;162 struct mmc_card *card = mq->card;
185 struct mmc_host *host = card->host;163 struct mmc_host *host = card->host;
186 164
187 if (card->bouncesz) {165 mq_rq->sg = mmc_alloc_sg(host->max_segs, gfp);
188 mq_rq->bounce_buf = kmalloc(card->bouncesz, gfp);166 if (!mq_rq->sg)
189 if (!mq_rq->bounce_buf)167 return -ENOMEM;
190 return -ENOMEM;
191 if (card->bouncesz > 512) {
192 mq_rq->sg = mmc_alloc_sg(1, gfp);
193 if (!mq_rq->sg)
194 return -ENOMEM;
195 mq_rq->bounce_sg = mmc_alloc_sg(card->bouncesz / 512,
196 gfp);
197 if (!mq_rq->bounce_sg)
198 return -ENOMEM;
199 }
200 } else {
201 mq_rq->bounce_buf = NULL;
202 mq_rq->bounce_sg = NULL;
203 mq_rq->sg = mmc_alloc_sg(host->max_segs, gfp);
204 if (!mq_rq->sg)
205 return -ENOMEM;
206 }
207 168
208 return 0;169 return 0;
209}170}
@@ -212,13 +173,6 @@ static void mmc_exit_request(struct request_queue *q, struct request *req) · 2 unmodified lines
212{173{
213 struct mmc_queue_req *mq_rq = req_to_mmc_queue_req(req);174 struct mmc_queue_req *mq_rq = req_to_mmc_queue_req(req);
214 175
215 /* It is OK to kfree(NULL) so this will be smooth */
216 kfree(mq_rq->bounce_sg);
217 mq_rq->bounce_sg = NULL;
218
219 kfree(mq_rq->bounce_buf);
220 mq_rq->bounce_buf = NULL;
221
222 kfree(mq_rq->sg);176 kfree(mq_rq->sg);
223 mq_rq->sg = NULL;177 mq_rq->sg = NULL;
224}178}
@@ -265,18 +219,11 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, · 40 unmodified lines
265 if (mmc_can_erase(card))219 if (mmc_can_erase(card))
266 mmc_queue_setup_discard(mq->queue, card);220 mmc_queue_setup_discard(mq->queue, card);
267 221
268 card->bouncesz = mmc_queue_calc_bouncesz(host);222 blk_queue_bounce_limit(mq->queue, limit);
269 if (card->bouncesz) {223 blk_queue_max_hw_sectors(mq->queue,
270 blk_queue_max_hw_sectors(mq->queue, card->bouncesz / 512);224 min(host->max_blk_count, host->max_req_size / 512));
271 blk_queue_max_segments(mq->queue, card->bouncesz / 512);225 blk_queue_max_segments(mq->queue, host->max_segs);
272 blk_queue_max_segment_size(mq->queue, card->bouncesz);226 blk_queue_max_segment_size(mq->queue, host->max_seg_size);
273 } else {
274 blk_queue_bounce_limit(mq->queue, limit);
275 blk_queue_max_hw_sectors(mq->queue,
276 min(host->max_blk_count, host->max_req_size / 512));
277 blk_queue_max_segments(mq->queue, host->max_segs);
278 blk_queue_max_segment_size(mq->queue, host->max_seg_size);
279 }
280 227
281 sema_init(&mq->thread_sem, 1);228 sema_init(&mq->thread_sem, 1);
282 229
@@ -365,56 +312,7 @@ void mmc_queue_resume(struct mmc_queue *mq) · 82 unmodified lines
365 */312 */
366unsigned int mmc_queue_map_sg(struct mmc_queue *mq, struct mmc_queue_req *mqrq)313unsigned int mmc_queue_map_sg(struct mmc_queue *mq, struct mmc_queue_req *mqrq)
367{314{
368 unsigned int sg_len;
369 size_t buflen;
370 struct scatterlist *sg;
371 struct request *req = mmc_queue_req_to_req(mqrq);315 struct request *req = mmc_queue_req_to_req(mqrq);
372 int i;
373
374 if (!mqrq->bounce_buf)
375 return blk_rq_map_sg(mq->queue, req, mqrq->sg);
376
377 sg_len = blk_rq_map_sg(mq->queue, req, mqrq->bounce_sg);
378
379 mqrq->bounce_sg_len = sg_len;
380
381 buflen = 0;
382 for_each_sg(mqrq->bounce_sg, sg, sg_len, i)
383 buflen += sg->length;
384
385 sg_init_one(mqrq->sg, mqrq->bounce_buf, buflen);
386
387 return 1;
388}
389
390/*
391 * If writing, bounce the data to the buffer before the request
392 * is sent to the host driver
393 */
394void mmc_queue_bounce_pre(struct mmc_queue_req *mqrq)
395{
396 if (!mqrq->bounce_buf)
397 return;
398
399 if (rq_data_dir(mmc_queue_req_to_req(mqrq)) != WRITE)
400 return;
401
402 sg_copy_to_buffer(mqrq->bounce_sg, mqrq->bounce_sg_len,
403 mqrq->bounce_buf, mqrq->sg[0].length);
404}
405
406/*
407 * If reading, bounce the data from the buffer after the request
408 * has been handled by the host driver
409 */
410void mmc_queue_bounce_post(struct mmc_queue_req *mqrq)
411{
412 if (!mqrq->bounce_buf)
413 return;
414
415 if (rq_data_dir(mmc_queue_req_to_req(mqrq)) != READ)
416 return;
417 316
418 sg_copy_from_buffer(mqrq->bounce_sg, mqrq->bounce_sg_len,317 return blk_rq_map_sg(mq->queue, req, mqrq->sg);
419 mqrq->bounce_buf, mqrq->sg[0].length);
420}318}
drivers/mmc/core/queue.h+0−6
@@ -49,9 +49,6 @@ enum mmc_drv_op { · 48 unmodified lines
49struct mmc_queue_req {49struct mmc_queue_req {
50 struct mmc_blk_request brq;50 struct mmc_blk_request brq;
51 struct scatterlist *sg;51 struct scatterlist *sg;
52 char *bounce_buf;
53 struct scatterlist *bounce_sg;
54 unsigned int bounce_sg_len;
55 struct mmc_async_req areq;52 struct mmc_async_req areq;
56 enum mmc_drv_op drv_op;53 enum mmc_drv_op drv_op;
57 int drv_op_result;54 int drv_op_result;
@@ -81,11 +78,8 @@ extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, · 23 unmodified lines
81extern void mmc_cleanup_queue(struct mmc_queue *);78extern void mmc_cleanup_queue(struct mmc_queue *);
82extern void mmc_queue_suspend(struct mmc_queue *);79extern void mmc_queue_suspend(struct mmc_queue *);
83extern void mmc_queue_resume(struct mmc_queue *);80extern void mmc_queue_resume(struct mmc_queue *);
84
85extern unsigned int mmc_queue_map_sg(struct mmc_queue *,81extern unsigned int mmc_queue_map_sg(struct mmc_queue *,
86 struct mmc_queue_req *);82 struct mmc_queue_req *);
87extern void mmc_queue_bounce_pre(struct mmc_queue_req *);
88extern void mmc_queue_bounce_post(struct mmc_queue_req *);
89 83
90extern int mmc_access_rpmb(struct mmc_queue *);84extern int mmc_access_rpmb(struct mmc_queue *);
91 85
drivers/mmc/host/Kconfig+1−1
@@ -5,7 +5,7 @@ · 4 unmodified lines
5comment "MMC/SD/SDIO Host Controller Drivers"5comment "MMC/SD/SDIO Host Controller Drivers"
6 6
7config MMC_DEBUG7config MMC_DEBUG
8 bool "MMC host drivers debugginG"8 bool "MMC host drivers debugging"
9 depends on MMC != n9 depends on MMC != n
10 help10 help
11 This is an option for use by developers; most people should11 This is an option for use by developers; most people should
drivers/mmc/host/cavium-thunderx.c+5−1
@@ -7,6 +7,7 @@ · 6 unmodified lines
7 *7 *
8 * Copyright (C) 2016 Cavium Inc.8 * Copyright (C) 2016 Cavium Inc.
9 */9 */
10#include <linux/device.h>
10#include <linux/dma-mapping.h>11#include <linux/dma-mapping.h>
11#include <linux/interrupt.h>12#include <linux/interrupt.h>
12#include <linux/mmc/mmc.h>13#include <linux/mmc/mmc.h>
@@ -149,8 +150,11 @@ error: · 136 unmodified lines
149 for (i = 0; i < CAVIUM_MAX_MMC; i++) {150 for (i = 0; i < CAVIUM_MAX_MMC; i++) {
150 if (host->slot[i])151 if (host->slot[i])
151 cvm_mmc_of_slot_remove(host->slot[i]);152 cvm_mmc_of_slot_remove(host->slot[i]);
152 if (host->slot_pdev[i])153 if (host->slot_pdev[i]) {
154 get_device(&host->slot_pdev[i]->dev);
153 of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);155 of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);
156 put_device(&host->slot_pdev[i]->dev);
157 }
154 }158 }
155 clk_disable_unprepare(host->clk);159 clk_disable_unprepare(host->clk);
156 return ret;160 return ret;
drivers/mmc/host/cavium.c+1−1
@@ -1038,7 +1038,7 @@ int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host) · 1037 unmodified lines
1038 */1038 */
1039 mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |1039 mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
1040 MMC_CAP_ERASE | MMC_CAP_CMD23 | MMC_CAP_POWER_OFF_CARD |1040 MMC_CAP_ERASE | MMC_CAP_CMD23 | MMC_CAP_POWER_OFF_CARD |
1041 MMC_CAP_3_3V_DDR | MMC_CAP_NO_BOUNCE_BUFF;1041 MMC_CAP_3_3V_DDR;
1042 1042
1043 if (host->use_sg)1043 if (host->use_sg)
1044 mmc->max_segs = 16;1044 mmc->max_segs = 16;
drivers/mmc/host/meson-gx-mmc.c+22−4
@@ -531,8 +531,7 @@ static int meson_mmc_clk_init(struct meson_host *host) · 530 unmodified lines
531 div->shift = __ffs(CLK_DIV_MASK);531 div->shift = __ffs(CLK_DIV_MASK);
532 div->width = __builtin_popcountl(CLK_DIV_MASK);532 div->width = __builtin_popcountl(CLK_DIV_MASK);
533 div->hw.init = &init;533 div->hw.init = &init;
534 div->flags = (CLK_DIVIDER_ONE_BASED |534 div->flags = CLK_DIVIDER_ONE_BASED;
535 CLK_DIVIDER_ROUND_CLOSEST);
536 535
537 clk = devm_clk_register(host->dev, &div->hw);536 clk = devm_clk_register(host->dev, &div->hw);
538 if (WARN_ON(IS_ERR(clk)))537 if (WARN_ON(IS_ERR(clk)))
@@ -717,6 +716,22 @@ static int meson_mmc_clk_phase_tuning(struct mmc_host *mmc, u32 opcode, · 178 unmodified lines
717static int meson_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)716static int meson_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
718{717{
719 struct meson_host *host = mmc_priv(mmc);718 struct meson_host *host = mmc_priv(mmc);
719 int ret;
720
721 /*
722 * If this is the initial tuning, try to get a sane Rx starting
723 * phase before doing the actual tuning.
724 */
725 if (!mmc->doing_retune) {
726 ret = meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk);
727
728 if (ret)
729 return ret;
730 }
731
732 ret = meson_mmc_clk_phase_tuning(mmc, opcode, host->tx_clk);
733 if (ret)
734 return ret;
720 735
721 return meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk);736 return meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk);
722}737}
@@ -746,6 +761,11 @@ static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) · 23 unmodified lines
746 case MMC_POWER_UP:761 case MMC_POWER_UP:
747 if (!IS_ERR(mmc->supply.vmmc))762 if (!IS_ERR(mmc->supply.vmmc))
748 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);763 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);
764
765 /* Reset phases */
766 clk_set_phase(host->rx_clk, 0);
767 clk_set_phase(host->tx_clk, 270);
768
749 break;769 break;
750 770
751 case MMC_POWER_ON:771 case MMC_POWER_ON:
@@ -759,8 +779,6 @@ static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) · 7 unmodified lines
759 host->vqmmc_enabled = true;779 host->vqmmc_enabled = true;
760 }780 }
761 781
762 /* Reset rx phase */
763 clk_set_phase(host->rx_clk, 0);
764 break;782 break;
765 }783 }
766 784
drivers/mmc/host/pxamci.c+1−5
@@ -702,11 +702,7 @@ static int pxamci_probe(struct platform_device *pdev) · 701 unmodified lines
702 702
703 pxamci_init_ocr(host);703 pxamci_init_ocr(host);
704 704
705 /*705 mmc->caps = 0;
706 * This architecture used to disable bounce buffers through its
707 * defconfig, now it is done at runtime as a host property.
708 */
709 mmc->caps = MMC_CAP_NO_BOUNCE_BUFF;
710 host->cmdat = 0;706 host->cmdat = 0;
711 if (!cpu_is_pxa25x()) {707 if (!cpu_is_pxa25x()) {
712 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ;708 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ;
drivers/mmc/host/sdhci-pci-core.c+15−0
@@ -392,6 +392,7 @@ static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = { · 391 unmodified lines
392 392
393enum {393enum {
394 INTEL_DSM_FNS = 0,394 INTEL_DSM_FNS = 0,
395 INTEL_DSM_V18_SWITCH = 3,
395 INTEL_DSM_DRV_STRENGTH = 9,396 INTEL_DSM_DRV_STRENGTH = 9,
396 INTEL_DSM_D3_RETUNE = 10,397 INTEL_DSM_D3_RETUNE = 10,
397};398};
@@ -557,6 +558,19 @@ static void intel_hs400_enhanced_strobe(struct mmc_host *mmc, · 159 unmodified lines
557 sdhci_writel(host, val, INTEL_HS400_ES_REG);558 sdhci_writel(host, val, INTEL_HS400_ES_REG);
558}559}
559 560
561static void sdhci_intel_voltage_switch(struct sdhci_host *host)
562{
563 struct sdhci_pci_slot *slot = sdhci_priv(host);
564 struct intel_host *intel_host = sdhci_pci_priv(slot);
565 struct device *dev = &slot->chip->pdev->dev;
566 u32 result = 0;
567 int err;
568
569 err = intel_dsm(intel_host, dev, INTEL_DSM_V18_SWITCH, &result);
570 pr_debug("%s: %s DSM error %d result %u\n",
571 mmc_hostname(host->mmc), __func__, err, result);
572}
573
560static const struct sdhci_ops sdhci_intel_byt_ops = {574static const struct sdhci_ops sdhci_intel_byt_ops = {
561 .set_clock = sdhci_set_clock,575 .set_clock = sdhci_set_clock,
562 .set_power = sdhci_intel_set_power,576 .set_power = sdhci_intel_set_power,
@@ -565,6 +579,7 @@ static const struct sdhci_ops sdhci_intel_byt_ops = { · 2 unmodified lines
565 .reset = sdhci_reset,579 .reset = sdhci_reset,
566 .set_uhs_signaling = sdhci_set_uhs_signaling,580 .set_uhs_signaling = sdhci_set_uhs_signaling,
567 .hw_reset = sdhci_pci_hw_reset,581 .hw_reset = sdhci_pci_hw_reset,
582 .voltage_switch = sdhci_intel_voltage_switch,
568};583};
569 584
570static void byt_read_dsm(struct sdhci_pci_slot *slot)585static void byt_read_dsm(struct sdhci_pci_slot *slot)
drivers/mmc/host/sdhci-xenon.c+20−4
@@ -466,6 +466,7 @@ static int xenon_probe(struct platform_device *pdev) · 465 unmodified lines
466{466{
467 struct sdhci_pltfm_host *pltfm_host;467 struct sdhci_pltfm_host *pltfm_host;
468 struct sdhci_host *host;468 struct sdhci_host *host;
469 struct xenon_priv *priv;
469 int err;470 int err;
470 471
471 host = sdhci_pltfm_init(pdev, &sdhci_xenon_pdata,472 host = sdhci_pltfm_init(pdev, &sdhci_xenon_pdata,
@@ -474,6 +475,7 @@ static int xenon_probe(struct platform_device *pdev) · 2 unmodified lines
474 return PTR_ERR(host);475 return PTR_ERR(host);
475 476
476 pltfm_host = sdhci_priv(host);477 pltfm_host = sdhci_priv(host);
478 priv = sdhci_pltfm_priv(pltfm_host);
477 479
478 /*480 /*
479 * Link Xenon specific mmc_host_ops function,481 * Link Xenon specific mmc_host_ops function,
@@ -491,9 +493,20 @@ static int xenon_probe(struct platform_device *pdev) · 11 unmodified lines
491 if (err)493 if (err)
492 goto free_pltfm;494 goto free_pltfm;
493 495
496 priv->axi_clk = devm_clk_get(&pdev->dev, "axi");
497 if (IS_ERR(priv->axi_clk)) {
498 err = PTR_ERR(priv->axi_clk);
499 if (err == -EPROBE_DEFER)
500 goto err_clk;
501 } else {
502 err = clk_prepare_enable(priv->axi_clk);
503 if (err)
504 goto err_clk;
505 }
506
494 err = mmc_of_parse(host->mmc);507 err = mmc_of_parse(host->mmc);
495 if (err)508 if (err)
496 goto err_clk;509 goto err_clk_axi;
497 510
498 sdhci_get_of_property(pdev);511 sdhci_get_of_property(pdev);
499 512
@@ -502,11 +515,11 @@ static int xenon_probe(struct platform_device *pdev) · 2 unmodified lines
502 /* Xenon specific dt parse */515 /* Xenon specific dt parse */
503 err = xenon_probe_dt(pdev);516 err = xenon_probe_dt(pdev);
504 if (err)517 if (err)
505 goto err_clk;518 goto err_clk_axi;
506 519
507 err = xenon_sdhc_prepare(host);520 err = xenon_sdhc_prepare(host);
508 if (err)521 if (err)
509 goto err_clk;522 goto err_clk_axi;
510 523
511 pm_runtime_get_noresume(&pdev->dev);524 pm_runtime_get_noresume(&pdev->dev);
512 pm_runtime_set_active(&pdev->dev);525 pm_runtime_set_active(&pdev->dev);
@@ -527,6 +540,8 @@ remove_sdhc: · 14 unmodified lines
527 pm_runtime_disable(&pdev->dev);540 pm_runtime_disable(&pdev->dev);
528 pm_runtime_put_noidle(&pdev->dev);541 pm_runtime_put_noidle(&pdev->dev);
529 xenon_sdhc_unprepare(host);542 xenon_sdhc_unprepare(host);
543err_clk_axi:
544 clk_disable_unprepare(priv->axi_clk);
530err_clk:545err_clk:
531 clk_disable_unprepare(pltfm_host->clk);546 clk_disable_unprepare(pltfm_host->clk);
532free_pltfm:547free_pltfm:
@@ -538,6 +553,7 @@ static int xenon_remove(struct platform_device *pdev) · 5 unmodified lines
538{553{
539 struct sdhci_host *host = platform_get_drvdata(pdev);554 struct sdhci_host *host = platform_get_drvdata(pdev);
540 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);555 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
556 struct xenon_priv *priv = sdhci_pltfm_priv(pltfm_host);
541 557
542 pm_runtime_get_sync(&pdev->dev);558 pm_runtime_get_sync(&pdev->dev);
543 pm_runtime_disable(&pdev->dev);559 pm_runtime_disable(&pdev->dev);
@@ -546,7 +562,7 @@ static int xenon_remove(struct platform_device *pdev) · 2 unmodified lines
546 sdhci_remove_host(host, 0);562 sdhci_remove_host(host, 0);
547 563
548 xenon_sdhc_unprepare(host);564 xenon_sdhc_unprepare(host);
549 565 clk_disable_unprepare(priv->axi_clk);
550 clk_disable_unprepare(pltfm_host->clk);566 clk_disable_unprepare(pltfm_host->clk);
551 567
552 sdhci_pltfm_free(pdev);568 sdhci_pltfm_free(pdev);
drivers/mmc/host/sdhci-xenon.h+1−0
@@ -83,6 +83,7 @@ struct xenon_priv { · 82 unmodified lines
83 unsigned char bus_width;83 unsigned char bus_width;
84 unsigned char timing;84 unsigned char timing;
85 unsigned int clock;85 unsigned int clock;
86 struct clk *axi_clk;
86 87
87 int phy_type;88 int phy_type;
88 /*89 /*
drivers/mmc/host/tmio_mmc_core.c+0−47
@@ -129,50 +129,6 @@ static int tmio_mmc_next_sg(struct tmio_mmc_host *host) · 128 unmodified lines
129 129
130#define CMDREQ_TIMEOUT 5000130#define CMDREQ_TIMEOUT 5000
131 131
132#ifdef CONFIG_MMC_DEBUG
133
134#define STATUS_TO_TEXT(a, status, i) \
135 do { \
136 if ((status) & TMIO_STAT_##a) { \
137 if ((i)++) \
138 printk(KERN_DEBUG " | "); \
139 printk(KERN_DEBUG #a); \
140 } \
141 } while (0)
142
143static void pr_debug_status(u32 status)
144{
145 int i = 0;
146
147 pr_debug("status: %08x = ", status);
148 STATUS_TO_TEXT(CARD_REMOVE, status, i);
149 STATUS_TO_TEXT(CARD_INSERT, status, i);
150 STATUS_TO_TEXT(SIGSTATE, status, i);
151 STATUS_TO_TEXT(WRPROTECT, status, i);
152 STATUS_TO_TEXT(CARD_REMOVE_A, status, i);
153 STATUS_TO_TEXT(CARD_INSERT_A, status, i);
154 STATUS_TO_TEXT(SIGSTATE_A, status, i);
155 STATUS_TO_TEXT(CMD_IDX_ERR, status, i);
156 STATUS_TO_TEXT(STOPBIT_ERR, status, i);
157 STATUS_TO_TEXT(ILL_FUNC, status, i);
158 STATUS_TO_TEXT(CMD_BUSY, status, i);
159 STATUS_TO_TEXT(CMDRESPEND, status, i);
160 STATUS_TO_TEXT(DATAEND, status, i);
161 STATUS_TO_TEXT(CRCFAIL, status, i);
162 STATUS_TO_TEXT(DATATIMEOUT, status, i);
163 STATUS_TO_TEXT(CMDTIMEOUT, status, i);
164 STATUS_TO_TEXT(RXOVERFLOW, status, i);
165 STATUS_TO_TEXT(TXUNDERRUN, status, i);
166 STATUS_TO_TEXT(RXRDY, status, i);
167 STATUS_TO_TEXT(TXRQ, status, i);
168 STATUS_TO_TEXT(ILL_ACCESS, status, i);
169 printk("\n");
170}
171
172#else
173#define pr_debug_status(s) do { } while (0)
174#endif
175
176static void tmio_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)132static void tmio_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
177{133{
178 struct tmio_mmc_host *host = mmc_priv(mmc);134 struct tmio_mmc_host *host = mmc_priv(mmc);
@@ -762,9 +718,6 @@ irqreturn_t tmio_mmc_irq(int irq, void *devid) · 583 unmodified lines
762 status = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);718 status = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);
763 ireg = status & TMIO_MASK_IRQ & ~host->sdcard_irq_mask;719 ireg = status & TMIO_MASK_IRQ & ~host->sdcard_irq_mask;
764 720
765 pr_debug_status(status);
766 pr_debug_status(ireg);
767
768 /* Clear the status except the interrupt status */721 /* Clear the status except the interrupt status */
769 sd_ctrl_write32_as_16_and_16(host, CTL_STATUS, TMIO_MASK_IRQ);722 sd_ctrl_write32_as_16_and_16(host, CTL_STATUS, TMIO_MASK_IRQ);
770 723
drivers/mtd/mtdpart.c+8−0
@@ -581,6 +581,14 @@ static struct mtd_part *allocate_partition(struct mtd_info *parent, · 580 unmodified lines
581 slave->mtd.erasesize = parent->erasesize;581 slave->mtd.erasesize = parent->erasesize;
582 }582 }
583 583
584 /*
585 * Slave erasesize might differ from the master one if the master
586 * exposes several regions with different erasesize. Adjust
587 * wr_alignment accordingly.
588 */
589 if (!(slave->mtd.flags & MTD_NO_ERASE))
590 wr_alignment = slave->mtd.erasesize;
591
584 tmp = slave->offset;592 tmp = slave->offset;
585 remainder = do_div(tmp, wr_alignment);593 remainder = do_div(tmp, wr_alignment);
586 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) {594 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) {
drivers/mtd/nand/atmel/pmecc.c+1−1
@@ -363,7 +363,7 @@ atmel_pmecc_create_user(struct atmel_pmecc *pmecc, · 362 unmodified lines
363 size += (req->ecc.strength + 1) * sizeof(u16);363 size += (req->ecc.strength + 1) * sizeof(u16);
364 /* Reserve space for mu, dmu and delta. */364 /* Reserve space for mu, dmu and delta. */
365 size = ALIGN(size, sizeof(s32));365 size = ALIGN(size, sizeof(s32));
366 size += (req->ecc.strength + 1) * sizeof(s32);366 size += (req->ecc.strength + 1) * sizeof(s32) * 3;
367 367
368 user = kzalloc(size, GFP_KERNEL);368 user = kzalloc(size, GFP_KERNEL);
369 if (!user)369 if (!user)
drivers/mtd/nand/lpc32xx_mlc.c+2−1
@@ -707,7 +707,7 @@ static int lpc32xx_nand_probe(struct platform_device *pdev) · 706 unmodified lines
707 }707 }
708 res = clk_prepare_enable(host->clk);708 res = clk_prepare_enable(host->clk);
709 if (res)709 if (res)
710 goto err_exit1;710 goto err_put_clk;
711 711
712 nand_chip->cmd_ctrl = lpc32xx_nand_cmd_ctrl;712 nand_chip->cmd_ctrl = lpc32xx_nand_cmd_ctrl;
713 nand_chip->dev_ready = lpc32xx_nand_device_ready;713 nand_chip->dev_ready = lpc32xx_nand_device_ready;
@@ -814,6 +814,7 @@ err_exit3: · 100 unmodified lines
814 dma_release_channel(host->dma_chan);814 dma_release_channel(host->dma_chan);
815err_exit2:815err_exit2:
816 clk_disable_unprepare(host->clk);816 clk_disable_unprepare(host->clk);
817err_put_clk:
817 clk_put(host->clk);818 clk_put(host->clk);
818err_exit1:819err_exit1:
819 lpc32xx_wp_enable(host);820 lpc32xx_wp_enable(host);
drivers/mtd/nand/nand_base.c+1−2
@@ -2668,7 +2668,7 @@ static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, · 2667 unmodified lines
2668static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,2668static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
2669 struct mtd_oob_ops *ops)2669 struct mtd_oob_ops *ops)
2670{2670{
2671 int chipnr, realpage, page, blockmask, column;2671 int chipnr, realpage, page, column;
2672 struct nand_chip *chip = mtd_to_nand(mtd);2672 struct nand_chip *chip = mtd_to_nand(mtd);
2673 uint32_t writelen = ops->len;2673 uint32_t writelen = ops->len;
2674 2674
@@ -2704,7 +2704,6 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to, · 29 unmodified lines
2704 2704
2705 realpage = (int)(to >> chip->page_shift);2705 realpage = (int)(to >> chip->page_shift);
2706 page = realpage & chip->pagemask;2706 page = realpage & chip->pagemask;
2707 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
2708 2707
2709 /* Invalidate the page cache, when we write to the cached page */2708 /* Invalidate the page cache, when we write to the cached page */
2710 if (to <= ((loff_t)chip->pagebuf << chip->page_shift) &&2709 if (to <= ((loff_t)chip->pagebuf << chip->page_shift) &&
drivers/mtd/spi-nor/spi-nor.c+42−3
@@ -1784,7 +1784,7 @@ spi_nor_set_pp_settings(struct spi_nor_pp_command *pp, · 1783 unmodified lines
1784 * @nor: pointer to a 'struct spi_nor'1784 * @nor: pointer to a 'struct spi_nor'
1785 * @addr: offset in the SFDP area to start reading data from1785 * @addr: offset in the SFDP area to start reading data from
1786 * @len: number of bytes to read1786 * @len: number of bytes to read
1787 * @buf: buffer where the SFDP data are copied into1787 * @buf: buffer where the SFDP data are copied into (dma-safe memory)
1788 *1788 *
1789 * Whatever the actual numbers of bytes for address and dummy cycles are1789 * Whatever the actual numbers of bytes for address and dummy cycles are
1790 * for (Fast) Read commands, the Read SFDP (5Ah) instruction is always1790 * for (Fast) Read commands, the Read SFDP (5Ah) instruction is always
@@ -1829,6 +1829,36 @@ read_err: · 38 unmodified lines
1829 return ret;1829 return ret;
1830}1830}
1831 1831
1832/**
1833 * spi_nor_read_sfdp_dma_unsafe() - read Serial Flash Discoverable Parameters.
1834 * @nor: pointer to a 'struct spi_nor'
1835 * @addr: offset in the SFDP area to start reading data from
1836 * @len: number of bytes to read
1837 * @buf: buffer where the SFDP data are copied into
1838 *
1839 * Wrap spi_nor_read_sfdp() using a kmalloc'ed bounce buffer as @buf is now not
1840 * guaranteed to be dma-safe.
1841 *
1842 * Return: -ENOMEM if kmalloc() fails, the return code of spi_nor_read_sfdp()
1843 * otherwise.
1844 */
1845static int spi_nor_read_sfdp_dma_unsafe(struct spi_nor *nor, u32 addr,
1846 size_t len, void *buf)
1847{
1848 void *dma_safe_buf;
1849 int ret;
1850
1851 dma_safe_buf = kmalloc(len, GFP_KERNEL);
1852 if (!dma_safe_buf)
1853 return -ENOMEM;
1854
1855 ret = spi_nor_read_sfdp(nor, addr, len, dma_safe_buf);
1856 memcpy(buf, dma_safe_buf, len);
1857 kfree(dma_safe_buf);
1858
1859 return ret;
1860}
1861
1832struct sfdp_parameter_header {1862struct sfdp_parameter_header {
1833 u8 id_lsb;1863 u8 id_lsb;
1834 u8 minor;1864 u8 minor;
@@ -2101,7 +2131,7 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, · 266 unmodified lines
2101 bfpt_header->length * sizeof(u32));2131 bfpt_header->length * sizeof(u32));
2102 addr = SFDP_PARAM_HEADER_PTP(bfpt_header);2132 addr = SFDP_PARAM_HEADER_PTP(bfpt_header);
2103 memset(&bfpt, 0, sizeof(bfpt));2133 memset(&bfpt, 0, sizeof(bfpt));
2104 err = spi_nor_read_sfdp(nor, addr, len, &bfpt);2134 err = spi_nor_read_sfdp_dma_unsafe(nor, addr, len, &bfpt);
2105 if (err < 0)2135 if (err < 0)
2106 return err;2136 return err;
2107 2137
@@ -2127,6 +2157,15 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, · 19 unmodified lines
2127 params->size = bfpt.dwords[BFPT_DWORD(2)];2157 params->size = bfpt.dwords[BFPT_DWORD(2)];
2128 if (params->size & BIT(31)) {2158 if (params->size & BIT(31)) {
2129 params->size &= ~BIT(31);2159 params->size &= ~BIT(31);
2160
2161 /*
2162 * Prevent overflows on params->size. Anyway, a NOR of 2^64
2163 * bits is unlikely to exist so this error probably means
2164 * the BFPT we are reading is corrupted/wrong.
2165 */
2166 if (params->size > 63)
2167 return -EINVAL;
2168
2130 params->size = 1ULL << params->size;2169 params->size = 1ULL << params->size;
2131 } else {2170 } else {
2132 params->size++;2171 params->size++;
@@ -2243,7 +2282,7 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor, · 110 unmodified lines
2243 int i, err;2282 int i, err;
2244 2283
2245 /* Get the SFDP header. */2284 /* Get the SFDP header. */
2246 err = spi_nor_read_sfdp(nor, 0, sizeof(header), &header);2285 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(header), &header);
2247 if (err < 0)2286 if (err < 0)
2248 return err;2287 return err;
2249 2288
drivers/net/dsa/mv88e6xxx/chip.c+6−0
@@ -1100,6 +1100,10 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port, · 1099 unmodified lines
1100 };1100 };
1101 int i, err;1101 int i, err;
1102 1102
1103 /* DSA and CPU ports have to be members of multiple vlans */
1104 if (dsa_is_dsa_port(ds, port) || dsa_is_cpu_port(ds, port))
1105 return 0;
1106
1103 if (!vid_begin)1107 if (!vid_begin)
1104 return -EOPNOTSUPP;1108 return -EOPNOTSUPP;
1105 1109
@@ -3947,7 +3951,9 @@ static void mv88e6xxx_remove(struct mdio_device *mdiodev) · 2841 unmodified lines
3947 if (chip->irq > 0) {3951 if (chip->irq > 0) {
3948 if (chip->info->g2_irqs > 0)3952 if (chip->info->g2_irqs > 0)
3949 mv88e6xxx_g2_irq_free(chip);3953 mv88e6xxx_g2_irq_free(chip);
3954 mutex_lock(&chip->reg_lock);
3950 mv88e6xxx_g1_irq_free(chip);3955 mv88e6xxx_g1_irq_free(chip);
3956 mutex_unlock(&chip->reg_lock);
3951 }3957 }
3952}3958}
3953 3959
drivers/net/ethernet/aquantia/atlantic/aq_cfg.h+4−0
@@ -51,6 +51,10 @@ · 50 unmodified lines
51 51
52#define AQ_CFG_SKB_FRAGS_MAX 32U52#define AQ_CFG_SKB_FRAGS_MAX 32U
53 53
54/* Number of descriptors available in one ring to resume this ring queue
55 */
56#define AQ_CFG_RESTART_DESC_THRES (AQ_CFG_SKB_FRAGS_MAX * 2)
57
54#define AQ_CFG_NAPI_WEIGHT 64U58#define AQ_CFG_NAPI_WEIGHT 64U
55 59
56#define AQ_CFG_MULTICAST_ADDRESS_MAX 32U60#define AQ_CFG_MULTICAST_ADDRESS_MAX 32U
drivers/net/ethernet/aquantia/atlantic/aq_nic.c+68−77
@@ -119,6 +119,35 @@ int aq_nic_cfg_start(struct aq_nic_s *self) · 118 unmodified lines
119 return 0;119 return 0;
120}120}
121 121
122static int aq_nic_update_link_status(struct aq_nic_s *self)
123{
124 int err = self->aq_hw_ops.hw_get_link_status(self->aq_hw);
125
126 if (err)
127 return err;
128
129 if (self->link_status.mbps != self->aq_hw->aq_link_status.mbps)
130 pr_info("%s: link change old %d new %d\n",
131 AQ_CFG_DRV_NAME, self->link_status.mbps,
132 self->aq_hw->aq_link_status.mbps);
133
134 self->link_status = self->aq_hw->aq_link_status;
135 if (!netif_carrier_ok(self->ndev) && self->link_status.mbps) {
136 aq_utils_obj_set(&self->header.flags,
137 AQ_NIC_FLAG_STARTED);
138 aq_utils_obj_clear(&self->header.flags,
139 AQ_NIC_LINK_DOWN);
140 netif_carrier_on(self->ndev);
141 netif_tx_wake_all_queues(self->ndev);
142 }
143 if (netif_carrier_ok(self->ndev) && !self->link_status.mbps) {
144 netif_carrier_off(self->ndev);
145 netif_tx_disable(self->ndev);
146 aq_utils_obj_set(&self->header.flags, AQ_NIC_LINK_DOWN);
147 }
148 return 0;
149}
150
122static void aq_nic_service_timer_cb(unsigned long param)151static void aq_nic_service_timer_cb(unsigned long param)
123{152{
124 struct aq_nic_s *self = (struct aq_nic_s *)param;153 struct aq_nic_s *self = (struct aq_nic_s *)param;
@@ -131,26 +160,13 @@ static void aq_nic_service_timer_cb(unsigned long param) · 6 unmodified lines
131 if (aq_utils_obj_test(&self->header.flags, AQ_NIC_FLAGS_IS_NOT_READY))160 if (aq_utils_obj_test(&self->header.flags, AQ_NIC_FLAGS_IS_NOT_READY))
132 goto err_exit;161 goto err_exit;
133 162
134 err = self->aq_hw_ops.hw_get_link_status(self->aq_hw);163 err = aq_nic_update_link_status(self);
135 if (err < 0)164 if (err)
136 goto err_exit;165 goto err_exit;
137 166
138 self->link_status = self->aq_hw->aq_link_status;
139
140 self->aq_hw_ops.hw_interrupt_moderation_set(self->aq_hw,167 self->aq_hw_ops.hw_interrupt_moderation_set(self->aq_hw,
141 self->aq_nic_cfg.is_interrupt_moderation);168 self->aq_nic_cfg.is_interrupt_moderation);
142 169
143 if (self->link_status.mbps) {
144 aq_utils_obj_set(&self->header.flags,
145 AQ_NIC_FLAG_STARTED);
146 aq_utils_obj_clear(&self->header.flags,
147 AQ_NIC_LINK_DOWN);
148 netif_carrier_on(self->ndev);
149 } else {
150 netif_carrier_off(self->ndev);
151 aq_utils_obj_set(&self->header.flags, AQ_NIC_LINK_DOWN);
152 }
153
154 memset(&stats_rx, 0U, sizeof(struct aq_ring_stats_rx_s));170 memset(&stats_rx, 0U, sizeof(struct aq_ring_stats_rx_s));
155 memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s));171 memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s));
156 for (i = AQ_DIMOF(self->aq_vec); i--;) {172 for (i = AQ_DIMOF(self->aq_vec); i--;) {
@@ -214,7 +230,6 @@ struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops, · 57 unmodified lines
214 SET_NETDEV_DEV(ndev, dev);230 SET_NETDEV_DEV(ndev, dev);
215 231
216 ndev->if_port = port;232 ndev->if_port = port;
217 ndev->min_mtu = ETH_MIN_MTU;
218 self->ndev = ndev;233 self->ndev = ndev;
219 234
220 self->aq_pci_func = aq_pci_func;235 self->aq_pci_func = aq_pci_func;
@@ -241,7 +256,6 @@ err_exit: · 20 unmodified lines
241int aq_nic_ndev_register(struct aq_nic_s *self)256int aq_nic_ndev_register(struct aq_nic_s *self)
242{257{
243 int err = 0;258 int err = 0;
244 unsigned int i = 0U;
245 259
246 if (!self->ndev) {260 if (!self->ndev) {
247 err = -EINVAL;261 err = -EINVAL;
@@ -263,8 +277,7 @@ int aq_nic_ndev_register(struct aq_nic_s *self) · 15 unmodified lines
263 277
264 netif_carrier_off(self->ndev);278 netif_carrier_off(self->ndev);
265 279
266 for (i = AQ_CFG_VECS_MAX; i--;)280 netif_tx_disable(self->ndev);
267 aq_nic_ndev_queue_stop(self, i);
268 281
269 err = register_netdev(self->ndev);282 err = register_netdev(self->ndev);
270 if (err < 0)283 if (err < 0)
@@ -283,6 +296,7 @@ int aq_nic_ndev_init(struct aq_nic_s *self) · 12 unmodified lines
283 self->ndev->features = aq_hw_caps->hw_features;296 self->ndev->features = aq_hw_caps->hw_features;
284 self->ndev->priv_flags = aq_hw_caps->hw_priv_flags;297 self->ndev->priv_flags = aq_hw_caps->hw_priv_flags;
285 self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN;298 self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN;
299 self->ndev->max_mtu = self->aq_hw_caps.mtu - ETH_FCS_LEN - ETH_HLEN;
286 300
287 return 0;301 return 0;
288}302}
@@ -318,12 +332,8 @@ struct aq_nic_s *aq_nic_alloc_hot(struct net_device *ndev) · 29 unmodified lines
318 err = -EINVAL;332 err = -EINVAL;
319 goto err_exit;333 goto err_exit;
320 }334 }
321 if (netif_running(ndev)) {335 if (netif_running(ndev))
322 unsigned int i;336 netif_tx_disable(ndev);
323
324 for (i = AQ_CFG_VECS_MAX; i--;)
325 netif_stop_subqueue(ndev, i);
326 }
327 337
328 for (self->aq_vecs = 0; self->aq_vecs < self->aq_nic_cfg.vecs;338 for (self->aq_vecs = 0; self->aq_vecs < self->aq_nic_cfg.vecs;
329 self->aq_vecs++) {339 self->aq_vecs++) {
@@ -383,16 +393,6 @@ err_exit: · 53 unmodified lines
383 return err;393 return err;
384}394}
385 395
386void aq_nic_ndev_queue_start(struct aq_nic_s *self, unsigned int idx)
387{
388 netif_start_subqueue(self->ndev, idx);
389}
390
391void aq_nic_ndev_queue_stop(struct aq_nic_s *self, unsigned int idx)
392{
393 netif_stop_subqueue(self->ndev, idx);
394}
395
396int aq_nic_start(struct aq_nic_s *self)396int aq_nic_start(struct aq_nic_s *self)
397{397{
398 struct aq_vec_s *aq_vec = NULL;398 struct aq_vec_s *aq_vec = NULL;
@@ -451,10 +451,6 @@ int aq_nic_start(struct aq_nic_s *self) · 52 unmodified lines
451 goto err_exit;451 goto err_exit;
452 }452 }
453 453
454 for (i = 0U, aq_vec = self->aq_vec[0];
455 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
456 aq_nic_ndev_queue_start(self, i);
457
458 err = netif_set_real_num_tx_queues(self->ndev, self->aq_vecs);454 err = netif_set_real_num_tx_queues(self->ndev, self->aq_vecs);
459 if (err < 0)455 if (err < 0)
460 goto err_exit;456 goto err_exit;
@@ -463,6 +459,8 @@ int aq_nic_start(struct aq_nic_s *self) · 2 unmodified lines
463 if (err < 0)459 if (err < 0)
464 goto err_exit;460 goto err_exit;
465 461
462 netif_tx_start_all_queues(self->ndev);
463
466err_exit:464err_exit:
467 return err;465 return err;
468}466}
@@ -475,6 +473,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self, · 6 unmodified lines
475 unsigned int nr_frags = skb_shinfo(skb)->nr_frags;473 unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
476 unsigned int frag_count = 0U;474 unsigned int frag_count = 0U;
477 unsigned int dx = ring->sw_tail;475 unsigned int dx = ring->sw_tail;
476 struct aq_ring_buff_s *first = NULL;
478 struct aq_ring_buff_s *dx_buff = &ring->buff_ring[dx];477 struct aq_ring_buff_s *dx_buff = &ring->buff_ring[dx];
479 478
480 if (unlikely(skb_is_gso(skb))) {479 if (unlikely(skb_is_gso(skb))) {
@@ -485,6 +484,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self, · 4 unmodified lines
485 dx_buff->len_l4 = tcp_hdrlen(skb);484 dx_buff->len_l4 = tcp_hdrlen(skb);
486 dx_buff->mss = skb_shinfo(skb)->gso_size;485 dx_buff->mss = skb_shinfo(skb)->gso_size;
487 dx_buff->is_txc = 1U;486 dx_buff->is_txc = 1U;
487 dx_buff->eop_index = 0xffffU;
488 488
489 dx_buff->is_ipv6 =489 dx_buff->is_ipv6 =
490 (ip_hdr(skb)->version == 6) ? 1U : 0U;490 (ip_hdr(skb)->version == 6) ? 1U : 0U;
@@ -504,6 +504,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self, · 13 unmodified lines
504 if (unlikely(dma_mapping_error(aq_nic_get_dev(self), dx_buff->pa)))504 if (unlikely(dma_mapping_error(aq_nic_get_dev(self), dx_buff->pa)))
505 goto exit;505 goto exit;
506 506
507 first = dx_buff;
507 dx_buff->len_pkt = skb->len;508 dx_buff->len_pkt = skb->len;
508 dx_buff->is_sop = 1U;509 dx_buff->is_sop = 1U;
509 dx_buff->is_mapped = 1U;510 dx_buff->is_mapped = 1U;
@@ -532,40 +533,46 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self, · 22 unmodified lines
532 533
533 for (; nr_frags--; ++frag_count) {534 for (; nr_frags--; ++frag_count) {
534 unsigned int frag_len = 0U;535 unsigned int frag_len = 0U;
536 unsigned int buff_offset = 0U;
537 unsigned int buff_size = 0U;
535 dma_addr_t frag_pa;538 dma_addr_t frag_pa;
536 skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_count];539 skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_count];
537 540
538 frag_len = skb_frag_size(frag);541 frag_len = skb_frag_size(frag);
539 frag_pa = skb_frag_dma_map(aq_nic_get_dev(self), frag, 0,
540 frag_len, DMA_TO_DEVICE);
541 542
542 if (unlikely(dma_mapping_error(aq_nic_get_dev(self), frag_pa)))543 while (frag_len) {
543 goto mapping_error;544 if (frag_len > AQ_CFG_TX_FRAME_MAX)
545 buff_size = AQ_CFG_TX_FRAME_MAX;
546 else
547 buff_size = frag_len;
548
549 frag_pa = skb_frag_dma_map(aq_nic_get_dev(self),
550 frag,
551 buff_offset,
552 buff_size,
553 DMA_TO_DEVICE);
554
555 if (unlikely(dma_mapping_error(aq_nic_get_dev(self),
556 frag_pa)))
557 goto mapping_error;
544 558
545 while (frag_len > AQ_CFG_TX_FRAME_MAX) {
546 dx = aq_ring_next_dx(ring, dx);559 dx = aq_ring_next_dx(ring, dx);
547 dx_buff = &ring->buff_ring[dx];560 dx_buff = &ring->buff_ring[dx];
548 561
549 dx_buff->flags = 0U;562 dx_buff->flags = 0U;
550 dx_buff->len = AQ_CFG_TX_FRAME_MAX;563 dx_buff->len = buff_size;
551 dx_buff->pa = frag_pa;564 dx_buff->pa = frag_pa;
552 dx_buff->is_mapped = 1U;565 dx_buff->is_mapped = 1U;
566 dx_buff->eop_index = 0xffffU;
567
568 frag_len -= buff_size;
569 buff_offset += buff_size;
553 570
554 frag_len -= AQ_CFG_TX_FRAME_MAX;
555 frag_pa += AQ_CFG_TX_FRAME_MAX;
556 ++ret;571 ++ret;
557 }572 }
558
559 dx = aq_ring_next_dx(ring, dx);
560 dx_buff = &ring->buff_ring[dx];
561
562 dx_buff->flags = 0U;
563 dx_buff->len = frag_len;
564 dx_buff->pa = frag_pa;
565 dx_buff->is_mapped = 1U;
566 ++ret;
567 }573 }
568 574
575 first->eop_index = dx;
569 dx_buff->is_eop = 1U;576 dx_buff->is_eop = 1U;
570 dx_buff->skb = skb;577 dx_buff->skb = skb;
571 goto exit;578 goto exit;
@@ -602,7 +609,6 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb) · 30 unmodified lines
602 unsigned int vec = skb->queue_mapping % self->aq_nic_cfg.vecs;609 unsigned int vec = skb->queue_mapping % self->aq_nic_cfg.vecs;
603 unsigned int tc = 0U;610 unsigned int tc = 0U;
604 int err = NETDEV_TX_OK;611 int err = NETDEV_TX_OK;
605 bool is_nic_in_bad_state;
606 612
607 frags = skb_shinfo(skb)->nr_frags + 1;613 frags = skb_shinfo(skb)->nr_frags + 1;
608 614
@@ -613,13 +619,10 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb) · 4 unmodified lines
613 goto err_exit;619 goto err_exit;
614 }620 }
615 621
616 is_nic_in_bad_state = aq_utils_obj_test(&self->header.flags,622 aq_ring_update_queue_state(ring);
617 AQ_NIC_FLAGS_IS_NOT_TX_READY) ||
618 (aq_ring_avail_dx(ring) <
619 AQ_CFG_SKB_FRAGS_MAX);
620 623
621 if (is_nic_in_bad_state) {624 /* Above status update may stop the queue. Check this. */
622 aq_nic_ndev_queue_stop(self, ring->idx);625 if (__netif_subqueue_stopped(self->ndev, ring->idx)) {
623 err = NETDEV_TX_BUSY;626 err = NETDEV_TX_BUSY;
624 goto err_exit;627 goto err_exit;
625 }628 }
@@ -631,9 +634,6 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb) · 5 unmodified lines
631 ring,634 ring,
632 frags);635 frags);
633 if (err >= 0) {636 if (err >= 0) {
634 if (aq_ring_avail_dx(ring) < AQ_CFG_SKB_FRAGS_MAX + 1)
635 aq_nic_ndev_queue_stop(self, ring->idx);
636
637 ++ring->stats.tx.packets;637 ++ring->stats.tx.packets;
638 ring->stats.tx.bytes += skb->len;638 ring->stats.tx.bytes += skb->len;
639 }639 }
@@ -693,16 +693,9 @@ int aq_nic_set_multicast_list(struct aq_nic_s *self, struct net_device *ndev) · 53 unmodified lines
693 693
694int aq_nic_set_mtu(struct aq_nic_s *self, int new_mtu)694int aq_nic_set_mtu(struct aq_nic_s *self, int new_mtu)
695{695{
696 int err = 0;
697
698 if (new_mtu > self->aq_hw_caps.mtu) {
699 err = -EINVAL;
700 goto err_exit;
701 }
702 self->aq_nic_cfg.mtu = new_mtu;696 self->aq_nic_cfg.mtu = new_mtu;
703 697
704err_exit:698 return 0;
705 return err;
706}699}
707 700
708int aq_nic_set_mac(struct aq_nic_s *self, struct net_device *ndev)701int aq_nic_set_mac(struct aq_nic_s *self, struct net_device *ndev)
@@ -905,9 +898,7 @@ int aq_nic_stop(struct aq_nic_s *self) · 196 unmodified lines
905 struct aq_vec_s *aq_vec = NULL;898 struct aq_vec_s *aq_vec = NULL;
906 unsigned int i = 0U;899 unsigned int i = 0U;
907 900
908 for (i = 0U, aq_vec = self->aq_vec[0];901 netif_tx_disable(self->ndev);
909 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
910 aq_nic_ndev_queue_stop(self, i);
911 902
912 del_timer_sync(&self->service_timer);903 del_timer_sync(&self->service_timer);
913 904
drivers/net/ethernet/aquantia/atlantic/aq_nic.h+0−2
@@ -83,8 +83,6 @@ struct net_device *aq_nic_get_ndev(struct aq_nic_s *self); · 82 unmodified lines
83int aq_nic_init(struct aq_nic_s *self);83int aq_nic_init(struct aq_nic_s *self);
84int aq_nic_cfg_start(struct aq_nic_s *self);84int aq_nic_cfg_start(struct aq_nic_s *self);
85int aq_nic_ndev_register(struct aq_nic_s *self);85int aq_nic_ndev_register(struct aq_nic_s *self);
86void aq_nic_ndev_queue_start(struct aq_nic_s *self, unsigned int idx);
87void aq_nic_ndev_queue_stop(struct aq_nic_s *self, unsigned int idx);
88void aq_nic_ndev_free(struct aq_nic_s *self);86void aq_nic_ndev_free(struct aq_nic_s *self);
89int aq_nic_start(struct aq_nic_s *self);87int aq_nic_start(struct aq_nic_s *self);
90int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb);88int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb);
drivers/net/ethernet/aquantia/atlantic/aq_ring.c+45−8
@@ -104,6 +104,38 @@ int aq_ring_init(struct aq_ring_s *self) · 103 unmodified lines
104 return 0;104 return 0;
105}105}
106 106
107static inline bool aq_ring_dx_in_range(unsigned int h, unsigned int i,
108 unsigned int t)
109{
110 return (h < t) ? ((h < i) && (i < t)) : ((h < i) || (i < t));
111}
112
113void aq_ring_update_queue_state(struct aq_ring_s *ring)
114{
115 if (aq_ring_avail_dx(ring) <= AQ_CFG_SKB_FRAGS_MAX)
116 aq_ring_queue_stop(ring);
117 else if (aq_ring_avail_dx(ring) > AQ_CFG_RESTART_DESC_THRES)
118 aq_ring_queue_wake(ring);
119}
120
121void aq_ring_queue_wake(struct aq_ring_s *ring)
122{
123 struct net_device *ndev = aq_nic_get_ndev(ring->aq_nic);
124
125 if (__netif_subqueue_stopped(ndev, ring->idx)) {
126 netif_wake_subqueue(ndev, ring->idx);
127 ring->stats.tx.queue_restarts++;
128 }
129}
130
131void aq_ring_queue_stop(struct aq_ring_s *ring)
132{
133 struct net_device *ndev = aq_nic_get_ndev(ring->aq_nic);
134
135 if (!__netif_subqueue_stopped(ndev, ring->idx))
136 netif_stop_subqueue(ndev, ring->idx);
137}
138
107void aq_ring_tx_clean(struct aq_ring_s *self)139void aq_ring_tx_clean(struct aq_ring_s *self)
108{140{
109 struct device *dev = aq_nic_get_dev(self->aq_nic);141 struct device *dev = aq_nic_get_dev(self->aq_nic);
@@ -113,23 +145,28 @@ void aq_ring_tx_clean(struct aq_ring_s *self) · 3 unmodified lines
113 struct aq_ring_buff_s *buff = &self->buff_ring[self->sw_head];145 struct aq_ring_buff_s *buff = &self->buff_ring[self->sw_head];
114 146
115 if (likely(buff->is_mapped)) {147 if (likely(buff->is_mapped)) {
116 if (unlikely(buff->is_sop))148 if (unlikely(buff->is_sop)) {
149 if (!buff->is_eop &&
150 buff->eop_index != 0xffffU &&
151 (!aq_ring_dx_in_range(self->sw_head,
152 buff->eop_index,
153 self->hw_head)))
154 break;
155
117 dma_unmap_single(dev, buff->pa, buff->len,156 dma_unmap_single(dev, buff->pa, buff->len,
118 DMA_TO_DEVICE);157 DMA_TO_DEVICE);
119 else158 } else {
120 dma_unmap_page(dev, buff->pa, buff->len,159 dma_unmap_page(dev, buff->pa, buff->len,
121 DMA_TO_DEVICE);160 DMA_TO_DEVICE);
161 }
122 }162 }
123 163
124 if (unlikely(buff->is_eop))164 if (unlikely(buff->is_eop))
125 dev_kfree_skb_any(buff->skb);165 dev_kfree_skb_any(buff->skb);
126 }
127}
128 166
129static inline unsigned int aq_ring_dx_in_range(unsigned int h, unsigned int i,167 buff->pa = 0U;
130 unsigned int t)168 buff->eop_index = 0xffffU;
131{169 }
132 return (h < t) ? ((h < i) && (i < t)) : ((h < i) || (i < t));
133}170}
134 171
135#define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info))172#define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
drivers/net/ethernet/aquantia/atlantic/aq_ring.h+8−2
@@ -65,7 +65,7 @@ struct __packed aq_ring_buff_s { · 64 unmodified lines
65 };65 };
66 union {66 union {
67 struct {67 struct {
68 u32 len:16;68 u16 len;
69 u32 is_ip_cso:1;69 u32 is_ip_cso:1;
70 u32 is_udp_cso:1;70 u32 is_udp_cso:1;
71 u32 is_tcp_cso:1;71 u32 is_tcp_cso:1;
@@ -77,8 +77,10 @@ struct __packed aq_ring_buff_s { · 5 unmodified lines
77 u32 is_cleaned:1;77 u32 is_cleaned:1;
78 u32 is_error:1;78 u32 is_error:1;
79 u32 rsvd3:6;79 u32 rsvd3:6;
80 u16 eop_index;
81 u16 rsvd4;
80 };82 };
81 u32 flags;83 u64 flags;
82 };84 };
83};85};
84 86
@@ -94,6 +96,7 @@ struct aq_ring_stats_tx_s { · 9 unmodified lines
94 u64 errors;96 u64 errors;
95 u64 packets;97 u64 packets;
96 u64 bytes;98 u64 bytes;
99 u64 queue_restarts;
97};100};
98 101
99union aq_ring_stats_s {102union aq_ring_stats_s {
@@ -147,6 +150,9 @@ struct aq_ring_s *aq_ring_rx_alloc(struct aq_ring_s *self, · 47 unmodified lines
147int aq_ring_init(struct aq_ring_s *self);150int aq_ring_init(struct aq_ring_s *self);
148void aq_ring_rx_deinit(struct aq_ring_s *self);151void aq_ring_rx_deinit(struct aq_ring_s *self);
149void aq_ring_free(struct aq_ring_s *self);152void aq_ring_free(struct aq_ring_s *self);
153void aq_ring_update_queue_state(struct aq_ring_s *ring);
154void aq_ring_queue_wake(struct aq_ring_s *ring);
155void aq_ring_queue_stop(struct aq_ring_s *ring);
150void aq_ring_tx_clean(struct aq_ring_s *self);156void aq_ring_tx_clean(struct aq_ring_s *self);
151int aq_ring_rx_clean(struct aq_ring_s *self,157int aq_ring_rx_clean(struct aq_ring_s *self,
152 struct napi_struct *napi,158 struct napi_struct *napi,
drivers/net/ethernet/aquantia/atlantic/aq_vec.c+2−6
@@ -59,12 +59,7 @@ static int aq_vec_poll(struct napi_struct *napi, int budget) · 58 unmodified lines
59 if (ring[AQ_VEC_TX_ID].sw_head !=59 if (ring[AQ_VEC_TX_ID].sw_head !=
60 ring[AQ_VEC_TX_ID].hw_head) {60 ring[AQ_VEC_TX_ID].hw_head) {
61 aq_ring_tx_clean(&ring[AQ_VEC_TX_ID]);61 aq_ring_tx_clean(&ring[AQ_VEC_TX_ID]);
62 62 aq_ring_update_queue_state(&ring[AQ_VEC_TX_ID]);
63 if (aq_ring_avail_dx(&ring[AQ_VEC_TX_ID]) >
64 AQ_CFG_SKB_FRAGS_MAX) {
65 aq_nic_ndev_queue_start(self->aq_nic,
66 ring[AQ_VEC_TX_ID].idx);
67 }
68 was_tx_cleaned = true;63 was_tx_cleaned = true;
69 }64 }
70 65
@@ -364,6 +359,7 @@ void aq_vec_add_stats(struct aq_vec_s *self, · 293 unmodified lines
364 stats_tx->packets += tx->packets;359 stats_tx->packets += tx->packets;
365 stats_tx->bytes += tx->bytes;360 stats_tx->bytes += tx->bytes;
366 stats_tx->errors += tx->errors;361 stats_tx->errors += tx->errors;
362 stats_tx->queue_restarts += tx->queue_restarts;
367 }363 }
368}364}
369 365
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h+1−1
@@ -16,7 +16,7 @@ · 15 unmodified lines
16 16
17#include "../aq_common.h"17#include "../aq_common.h"
18 18
19#define HW_ATL_B0_MTU_JUMBO (16000U)19#define HW_ATL_B0_MTU_JUMBO 16352U
20#define HW_ATL_B0_MTU 1514U20#define HW_ATL_B0_MTU 1514U
21 21
22#define HW_ATL_B0_TX_RINGS 4U22#define HW_ATL_B0_TX_RINGS 4U
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c+1−2
@@ -351,8 +351,7 @@ int hw_atl_utils_mpi_get_link_status(struct aq_hw_s *self) · 350 unmodified lines
351 break;351 break;
352 352
353 default:353 default:
354 link_status->mbps = 0U;354 return -EBUSY;
355 break;
356 }355 }
357 }356 }
358 357
drivers/net/ethernet/broadcom/bcmsysport.c+32−20
@@ -432,6 +432,27 @@ static void bcm_sysport_update_mib_counters(struct bcm_sysport_priv *priv) · 431 unmodified lines
432 netif_dbg(priv, hw, priv->netdev, "updated MIB counters\n");432 netif_dbg(priv, hw, priv->netdev, "updated MIB counters\n");
433}433}
434 434
435static void bcm_sysport_update_tx_stats(struct bcm_sysport_priv *priv,
436 u64 *tx_bytes, u64 *tx_packets)
437{
438 struct bcm_sysport_tx_ring *ring;
439 u64 bytes = 0, packets = 0;
440 unsigned int start;
441 unsigned int q;
442
443 for (q = 0; q < priv->netdev->num_tx_queues; q++) {
444 ring = &priv->tx_rings[q];
445 do {
446 start = u64_stats_fetch_begin_irq(&priv->syncp);
447 bytes = ring->bytes;
448 packets = ring->packets;
449 } while (u64_stats_fetch_retry_irq(&priv->syncp, start));
450
451 *tx_bytes += bytes;
452 *tx_packets += packets;
453 }
454}
455
435static void bcm_sysport_get_stats(struct net_device *dev,456static void bcm_sysport_get_stats(struct net_device *dev,
436 struct ethtool_stats *stats, u64 *data)457 struct ethtool_stats *stats, u64 *data)
437{458{
@@ -439,11 +460,16 @@ static void bcm_sysport_get_stats(struct net_device *dev, · 1 unmodified line
439 struct bcm_sysport_stats64 *stats64 = &priv->stats64;460 struct bcm_sysport_stats64 *stats64 = &priv->stats64;
440 struct u64_stats_sync *syncp = &priv->syncp;461 struct u64_stats_sync *syncp = &priv->syncp;
441 struct bcm_sysport_tx_ring *ring;462 struct bcm_sysport_tx_ring *ring;
463 u64 tx_bytes = 0, tx_packets = 0;
442 unsigned int start;464 unsigned int start;
443 int i, j;465 int i, j;
444 466
445 if (netif_running(dev))467 if (netif_running(dev)) {
446 bcm_sysport_update_mib_counters(priv);468 bcm_sysport_update_mib_counters(priv);
469 bcm_sysport_update_tx_stats(priv, &tx_bytes, &tx_packets);
470 stats64->tx_bytes = tx_bytes;
471 stats64->tx_packets = tx_packets;
472 }
447 473
448 for (i = 0, j = 0; i < BCM_SYSPORT_STATS_LEN; i++) {474 for (i = 0, j = 0; i < BCM_SYSPORT_STATS_LEN; i++) {
449 const struct bcm_sysport_stats *s;475 const struct bcm_sysport_stats *s;
@@ -461,12 +487,13 @@ static void bcm_sysport_get_stats(struct net_device *dev, · 11 unmodified lines
461 continue;487 continue;
462 p += s->stat_offset;488 p += s->stat_offset;
463 489
464 if (s->stat_sizeof == sizeof(u64))490 if (s->stat_sizeof == sizeof(u64) &&
491 s->type == BCM_SYSPORT_STAT_NETDEV64) {
465 do {492 do {
466 start = u64_stats_fetch_begin_irq(syncp);493 start = u64_stats_fetch_begin_irq(syncp);
467 data[i] = *(u64 *)p;494 data[i] = *(u64 *)p;
468 } while (u64_stats_fetch_retry_irq(syncp, start));495 } while (u64_stats_fetch_retry_irq(syncp, start));
469 else496 } else
470 data[i] = *(u32 *)p;497 data[i] = *(u32 *)p;
471 j++;498 j++;
472 }499 }
@@ -1716,27 +1743,12 @@ static void bcm_sysport_get_stats64(struct net_device *dev, · 1243 unmodified lines
1716{1743{
1717 struct bcm_sysport_priv *priv = netdev_priv(dev);1744 struct bcm_sysport_priv *priv = netdev_priv(dev);
1718 struct bcm_sysport_stats64 *stats64 = &priv->stats64;1745 struct bcm_sysport_stats64 *stats64 = &priv->stats64;
1719 struct bcm_sysport_tx_ring *ring;
1720 u64 tx_packets = 0, tx_bytes = 0;
1721 unsigned int start;1746 unsigned int start;
1722 unsigned int q;
1723 1747
1724 netdev_stats_to_stats64(stats, &dev->stats);1748 netdev_stats_to_stats64(stats, &dev->stats);
1725 1749
1726 for (q = 0; q < dev->num_tx_queues; q++) {1750 bcm_sysport_update_tx_stats(priv, &stats->tx_bytes,
1727 ring = &priv->tx_rings[q];1751 &stats->tx_packets);
1728 do {
1729 start = u64_stats_fetch_begin_irq(&priv->syncp);
1730 tx_bytes = ring->bytes;
1731 tx_packets = ring->packets;
1732 } while (u64_stats_fetch_retry_irq(&priv->syncp, start));
1733
1734 stats->tx_bytes += tx_bytes;
1735 stats->tx_packets += tx_packets;
1736 }
1737
1738 stats64->tx_bytes = stats->tx_bytes;
1739 stats64->tx_packets = stats->tx_packets;
1740 1752
1741 do {1753 do {
1742 start = u64_stats_fetch_begin_irq(&priv->syncp);1754 start = u64_stats_fetch_begin_irq(&priv->syncp);
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c+4−0
@@ -750,6 +750,10 @@ int bnxt_tc_setup_flower(struct bnxt *bp, u16 src_fid, · 749 unmodified lines
750{750{
751 int rc = 0;751 int rc = 0;
752 752
753 if (!is_classid_clsact_ingress(cls_flower->common.classid) ||
754 cls_flower->common.chain_index)
755 return -EOPNOTSUPP;
756
753 switch (cls_flower->command) {757 switch (cls_flower->command) {
754 case TC_CLSFLOWER_REPLACE:758 case TC_CLSFLOWER_REPLACE:
755 rc = bnxt_tc_add_flow(bp, src_fid, cls_flower);759 rc = bnxt_tc_add_flow(bp, src_fid, cls_flower);
drivers/net/ethernet/broadcom/cnic.c+1−1
@@ -1278,7 +1278,7 @@ static int cnic_alloc_bnx2x_resc(struct cnic_dev *dev) · 1277 unmodified lines
1278 1278
1279 ret = cnic_alloc_dma(dev, kwq_16_dma, pages, 0);1279 ret = cnic_alloc_dma(dev, kwq_16_dma, pages, 0);
1280 if (ret)1280 if (ret)
1281 return -ENOMEM;1281 goto error;
1282 1282
1283 n = CNIC_PAGE_SIZE / CNIC_KWQ16_DATA_SIZE;1283 n = CNIC_PAGE_SIZE / CNIC_KWQ16_DATA_SIZE;
1284 for (i = 0, j = 0; i < cp->max_cid_space; i++) {1284 for (i = 0, j = 0; i < cp->max_cid_space; i++) {
drivers/net/ethernet/freescale/fec.h+2−2
@@ -374,8 +374,8 @@ struct bufdesc_ex { · 373 unmodified lines
374#define FEC_ENET_TS_AVAIL ((uint)0x00010000)374#define FEC_ENET_TS_AVAIL ((uint)0x00010000)
375#define FEC_ENET_TS_TIMER ((uint)0x00008000)375#define FEC_ENET_TS_TIMER ((uint)0x00008000)
376 376
377#define FEC_DEFAULT_IMASK (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII | FEC_ENET_TS_TIMER)377#define FEC_DEFAULT_IMASK (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII)
378#define FEC_NAPI_IMASK (FEC_ENET_MII | FEC_ENET_TS_TIMER)378#define FEC_NAPI_IMASK FEC_ENET_MII
379#define FEC_RX_DISABLED_IMASK (FEC_DEFAULT_IMASK & (~FEC_ENET_RXF))379#define FEC_RX_DISABLED_IMASK (FEC_DEFAULT_IMASK & (~FEC_ENET_RXF))
380 380
381/* ENET interrupt coalescing macro define */381/* ENET interrupt coalescing macro define */
drivers/net/ethernet/freescale/fec_main.c+4−4
@@ -1559,14 +1559,14 @@ fec_enet_collect_events(struct fec_enet_private *fep, uint int_events) · 1558 unmodified lines
1559 if (int_events == 0)1559 if (int_events == 0)
1560 return false;1560 return false;
1561 1561
1562 if (int_events & FEC_ENET_RXF)1562 if (int_events & FEC_ENET_RXF_0)
1563 fep->work_rx |= (1 << 2);1563 fep->work_rx |= (1 << 2);
1564 if (int_events & FEC_ENET_RXF_1)1564 if (int_events & FEC_ENET_RXF_1)
1565 fep->work_rx |= (1 << 0);1565 fep->work_rx |= (1 << 0);
1566 if (int_events & FEC_ENET_RXF_2)1566 if (int_events & FEC_ENET_RXF_2)
1567 fep->work_rx |= (1 << 1);1567 fep->work_rx |= (1 << 1);
1568 1568
1569 if (int_events & FEC_ENET_TXF)1569 if (int_events & FEC_ENET_TXF_0)
1570 fep->work_tx |= (1 << 2);1570 fep->work_tx |= (1 << 2);
1571 if (int_events & FEC_ENET_TXF_1)1571 if (int_events & FEC_ENET_TXF_1)
1572 fep->work_tx |= (1 << 0);1572 fep->work_tx |= (1 << 0);
@@ -1604,8 +1604,8 @@ fec_enet_interrupt(int irq, void *dev_id) · 31 unmodified lines
1604 }1604 }
1605 1605
1606 if (fep->ptp_clock)1606 if (fep->ptp_clock)
1607 fec_ptp_check_pps_event(fep);1607 if (fec_ptp_check_pps_event(fep))
1608 1608 ret = IRQ_HANDLED;
1609 return ret;1609 return ret;
1610}1610}
1611 1611
drivers/net/ethernet/hisilicon/hns3/hnae3.c+9−34
@@ -37,20 +37,15 @@ static bool hnae3_client_match(enum hnae3_client_type client_type, · 36 unmodified lines
37}37}
38 38
39static int hnae3_match_n_instantiate(struct hnae3_client *client,39static int hnae3_match_n_instantiate(struct hnae3_client *client,
40 struct hnae3_ae_dev *ae_dev,40 struct hnae3_ae_dev *ae_dev, bool is_reg)
41 bool is_reg, bool *matched)
42{41{
43 int ret;42 int ret;
44 43
45 *matched = false;
46
47 /* check if this client matches the type of ae_dev */44 /* check if this client matches the type of ae_dev */
48 if (!(hnae3_client_match(client->type, ae_dev->dev_type) &&45 if (!(hnae3_client_match(client->type, ae_dev->dev_type) &&
49 hnae_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B))) {46 hnae_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B))) {
50 return 0;47 return 0;
51 }48 }
52 /* there is a match of client and dev */
53 *matched = true;
54 49
55 /* now, (un-)instantiate client by calling lower layer */50 /* now, (un-)instantiate client by calling lower layer */
56 if (is_reg) {51 if (is_reg) {
@@ -69,7 +64,6 @@ int hnae3_register_client(struct hnae3_client *client) · 12 unmodified lines
69{64{
70 struct hnae3_client *client_tmp;65 struct hnae3_client *client_tmp;
71 struct hnae3_ae_dev *ae_dev;66 struct hnae3_ae_dev *ae_dev;
72 bool matched;
73 int ret = 0;67 int ret = 0;
74 68
75 mutex_lock(&hnae3_common_lock);69 mutex_lock(&hnae3_common_lock);
@@ -86,7 +80,7 @@ int hnae3_register_client(struct hnae3_client *client) · 10 unmodified lines
86 /* if the client could not be initialized on current port, for80 /* if the client could not be initialized on current port, for
87 * any error reasons, move on to next available port81 * any error reasons, move on to next available port
88 */82 */
89 ret = hnae3_match_n_instantiate(client, ae_dev, true, &matched);83 ret = hnae3_match_n_instantiate(client, ae_dev, true);
90 if (ret)84 if (ret)
91 dev_err(&ae_dev->pdev->dev,85 dev_err(&ae_dev->pdev->dev,
92 "match and instantiation failed for port\n");86 "match and instantiation failed for port\n");
@@ -102,12 +96,11 @@ EXPORT_SYMBOL(hnae3_register_client); · 9 unmodified lines
102void hnae3_unregister_client(struct hnae3_client *client)96void hnae3_unregister_client(struct hnae3_client *client)
103{97{
104 struct hnae3_ae_dev *ae_dev;98 struct hnae3_ae_dev *ae_dev;
105 bool matched;
106 99
107 mutex_lock(&hnae3_common_lock);100 mutex_lock(&hnae3_common_lock);
108 /* un-initialize the client on every matched port */101 /* un-initialize the client on every matched port */
109 list_for_each_entry(ae_dev, &hnae3_ae_dev_list, node) {102 list_for_each_entry(ae_dev, &hnae3_ae_dev_list, node) {
110 hnae3_match_n_instantiate(client, ae_dev, false, &matched);103 hnae3_match_n_instantiate(client, ae_dev, false);
111 }104 }
112 105
113 list_del(&client->node);106 list_del(&client->node);
@@ -124,7 +117,6 @@ int hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo) · 10 unmodified lines
124 const struct pci_device_id *id;117 const struct pci_device_id *id;
125 struct hnae3_ae_dev *ae_dev;118 struct hnae3_ae_dev *ae_dev;
126 struct hnae3_client *client;119 struct hnae3_client *client;
127 bool matched;
128 int ret = 0;120 int ret = 0;
129 121
130 mutex_lock(&hnae3_common_lock);122 mutex_lock(&hnae3_common_lock);
@@ -151,13 +143,10 @@ int hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo) · 20 unmodified lines
151 * initialize the figure out client instance143 * initialize the figure out client instance
152 */144 */
153 list_for_each_entry(client, &hnae3_client_list, node) {145 list_for_each_entry(client, &hnae3_client_list, node) {
154 ret = hnae3_match_n_instantiate(client, ae_dev, true,146 ret = hnae3_match_n_instantiate(client, ae_dev, true);
155 &matched);
156 if (ret)147 if (ret)
157 dev_err(&ae_dev->pdev->dev,148 dev_err(&ae_dev->pdev->dev,
158 "match and instantiation failed\n");149 "match and instantiation failed\n");
159 if (matched)
160 break;
161 }150 }
162 }151 }
163 152
@@ -175,7 +164,6 @@ void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo) · 11 unmodified lines
175 const struct pci_device_id *id;164 const struct pci_device_id *id;
176 struct hnae3_ae_dev *ae_dev;165 struct hnae3_ae_dev *ae_dev;
177 struct hnae3_client *client;166 struct hnae3_client *client;
178 bool matched;
179 167
180 mutex_lock(&hnae3_common_lock);168 mutex_lock(&hnae3_common_lock);
181 /* Check if there are matched ae_dev */169 /* Check if there are matched ae_dev */
@@ -187,12 +175,8 @@ void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo) · 5 unmodified lines
187 /* check the client list for the match with this ae_dev type and175 /* check the client list for the match with this ae_dev type and
188 * un-initialize the figure out client instance176 * un-initialize the figure out client instance
189 */177 */
190 list_for_each_entry(client, &hnae3_client_list, node) {178 list_for_each_entry(client, &hnae3_client_list, node)
191 hnae3_match_n_instantiate(client, ae_dev, false,179 hnae3_match_n_instantiate(client, ae_dev, false);
192 &matched);
193 if (matched)
194 break;
195 }
196 180
197 ae_algo->ops->uninit_ae_dev(ae_dev);181 ae_algo->ops->uninit_ae_dev(ae_dev);
198 hnae_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);182 hnae_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);
@@ -212,7 +196,6 @@ int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev) · 13 unmodified lines
212 const struct pci_device_id *id;196 const struct pci_device_id *id;
213 struct hnae3_ae_algo *ae_algo;197 struct hnae3_ae_algo *ae_algo;
214 struct hnae3_client *client;198 struct hnae3_client *client;
215 bool matched;
216 int ret = 0;199 int ret = 0;
217 200
218 mutex_lock(&hnae3_common_lock);201 mutex_lock(&hnae3_common_lock);
@@ -246,13 +229,10 @@ int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev) · 27 unmodified lines
246 * initialize the figure out client instance229 * initialize the figure out client instance
247 */230 */
248 list_for_each_entry(client, &hnae3_client_list, node) {231 list_for_each_entry(client, &hnae3_client_list, node) {
249 ret = hnae3_match_n_instantiate(client, ae_dev, true,232 ret = hnae3_match_n_instantiate(client, ae_dev, true);
250 &matched);
251 if (ret)233 if (ret)
252 dev_err(&ae_dev->pdev->dev,234 dev_err(&ae_dev->pdev->dev,
253 "match and instantiation failed\n");235 "match and instantiation failed\n");
254 if (matched)
255 break;
256 }236 }
257 237
258out_err:238out_err:
@@ -270,7 +250,6 @@ void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev) · 11 unmodified lines
270 const struct pci_device_id *id;250 const struct pci_device_id *id;
271 struct hnae3_ae_algo *ae_algo;251 struct hnae3_ae_algo *ae_algo;
272 struct hnae3_client *client;252 struct hnae3_client *client;
273 bool matched;
274 253
275 mutex_lock(&hnae3_common_lock);254 mutex_lock(&hnae3_common_lock);
276 /* Check if there are matched ae_algo */255 /* Check if there are matched ae_algo */
@@ -279,12 +258,8 @@ void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev) · 2 unmodified lines
279 if (!id)258 if (!id)
280 continue;259 continue;
281 260
282 list_for_each_entry(client, &hnae3_client_list, node) {261 list_for_each_entry(client, &hnae3_client_list, node)
283 hnae3_match_n_instantiate(client, ae_dev, false,262 hnae3_match_n_instantiate(client, ae_dev, false);
284 &matched);
285 if (matched)
286 break;
287 }
288 263
289 ae_algo->ops->uninit_ae_dev(ae_dev);264 ae_algo->ops->uninit_ae_dev(ae_dev);
290 hnae_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);265 hnae_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);
drivers/net/ethernet/hisilicon/hns3/hnae3.h+13−2
@@ -49,7 +49,17 @@ · 48 unmodified lines
49#define HNAE3_CLASS_NAME_SIZE 1649#define HNAE3_CLASS_NAME_SIZE 16
50 50
51#define HNAE3_DEV_INITED_B 0x051#define HNAE3_DEV_INITED_B 0x0
52#define HNAE_DEV_SUPPORT_ROCE_B 0x152#define HNAE3_DEV_SUPPORT_ROCE_B 0x1
53#define HNAE3_DEV_SUPPORT_DCB_B 0x2
54
55#define HNAE3_DEV_SUPPORT_ROCE_DCB_BITS (BIT(HNAE3_DEV_SUPPORT_DCB_B) |\
56 BIT(HNAE3_DEV_SUPPORT_ROCE_B))
57
58#define hnae3_dev_roce_supported(hdev) \
59 hnae_get_bit(hdev->ae_dev->flag, HNAE3_DEV_SUPPORT_ROCE_B)
60
61#define hnae3_dev_dcb_supported(hdev) \
62 hnae_get_bit(hdev->ae_dev->flag, HNAE3_DEV_SUPPORT_DCB_B)
53 63
54#define ring_ptr_move_fw(ring, p) \64#define ring_ptr_move_fw(ring, p) \
55 ((ring)->p = ((ring)->p + 1) % (ring)->desc_num)65 ((ring)->p = ((ring)->p + 1) % (ring)->desc_num)
@@ -366,12 +376,12 @@ struct hnae3_ae_algo { · 310 unmodified lines
366struct hnae3_tc_info {376struct hnae3_tc_info {
367 u16 tqp_offset; /* TQP offset from base TQP */377 u16 tqp_offset; /* TQP offset from base TQP */
368 u16 tqp_count; /* Total TQPs */378 u16 tqp_count; /* Total TQPs */
369 u8 up; /* user priority */
370 u8 tc; /* TC index */379 u8 tc; /* TC index */
371 bool enable; /* If this TC is enable or not */380 bool enable; /* If this TC is enable or not */
372};381};
373 382
374#define HNAE3_MAX_TC 8383#define HNAE3_MAX_TC 8
384#define HNAE3_MAX_USER_PRIO 8
375struct hnae3_knic_private_info {385struct hnae3_knic_private_info {
376 struct net_device *netdev; /* Set by KNIC client when init instance */386 struct net_device *netdev; /* Set by KNIC client when init instance */
377 u16 rss_size; /* Allocated RSS queues */387 u16 rss_size; /* Allocated RSS queues */
@@ -379,6 +389,7 @@ struct hnae3_knic_private_info { · 1 unmodified line
379 u16 num_desc;389 u16 num_desc;
380 390
381 u8 num_tc; /* Total number of enabled TCs */391 u8 num_tc; /* Total number of enabled TCs */
392 u8 prio_tc[HNAE3_MAX_USER_PRIO]; /* TC indexed by prio */
382 struct hnae3_tc_info tc_info[HNAE3_MAX_TC]; /* Idx of array is HW TC */393 struct hnae3_tc_info tc_info[HNAE3_MAX_TC]; /* Idx of array is HW TC */
383 394
384 u16 num_tqps; /* total number of TQPs in this handle */395 u16 num_tqps; /* total number of TQPs in this handle */
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h+9−3
@@ -238,7 +238,7 @@ struct hclge_tqp_map { · 237 unmodified lines
238 u8 rsv[18];238 u8 rsv[18];
239};239};
240 240
241#define HCLGE_VECTOR_ELEMENTS_PER_CMD 11241#define HCLGE_VECTOR_ELEMENTS_PER_CMD 10
242 242
243enum hclge_int_type {243enum hclge_int_type {
244 HCLGE_INT_TX,244 HCLGE_INT_TX,
@@ -252,8 +252,12 @@ struct hclge_ctrl_vector_chain { · 7 unmodified lines
252#define HCLGE_INT_TYPE_S 0252#define HCLGE_INT_TYPE_S 0
253#define HCLGE_INT_TYPE_M 0x3253#define HCLGE_INT_TYPE_M 0x3
254#define HCLGE_TQP_ID_S 2254#define HCLGE_TQP_ID_S 2
255#define HCLGE_TQP_ID_M (0x3fff << HCLGE_TQP_ID_S)255#define HCLGE_TQP_ID_M (0x7ff << HCLGE_TQP_ID_S)
256#define HCLGE_INT_GL_IDX_S 13
257#define HCLGE_INT_GL_IDX_M (0x3 << HCLGE_INT_GL_IDX_S)
256 __le16 tqp_type_and_id[HCLGE_VECTOR_ELEMENTS_PER_CMD];258 __le16 tqp_type_and_id[HCLGE_VECTOR_ELEMENTS_PER_CMD];
259 u8 vfid;
260 u8 rsv;
257};261};
258 262
259#define HCLGE_TC_NUM 8263#define HCLGE_TC_NUM 8
@@ -266,7 +270,8 @@ struct hclge_tx_buff_alloc { · 6 unmodified lines
266 270
267struct hclge_rx_priv_buff {271struct hclge_rx_priv_buff {
268 __le16 buf_num[HCLGE_TC_NUM];272 __le16 buf_num[HCLGE_TC_NUM];
269 u8 rsv[8];273 __le16 shared_buf;
274 u8 rsv[6];
270};275};
271 276
272struct hclge_query_version {277struct hclge_query_version {
@@ -684,6 +689,7 @@ struct hclge_reset_tqp_queue { · 411 unmodified lines
684#define HCLGE_DEFAULT_TX_BUF 0x4000 /* 16k bytes */689#define HCLGE_DEFAULT_TX_BUF 0x4000 /* 16k bytes */
685#define HCLGE_TOTAL_PKT_BUF 0x108000 /* 1.03125M bytes */690#define HCLGE_TOTAL_PKT_BUF 0x108000 /* 1.03125M bytes */
686#define HCLGE_DEFAULT_DV 0xA000 /* 40k byte */691#define HCLGE_DEFAULT_DV 0xA000 /* 40k byte */
692#define HCLGE_DEFAULT_NON_DCB_DV 0x7800 /* 30K byte */
687 693
688#define HCLGE_TYPE_CRQ 0694#define HCLGE_TYPE_CRQ 0
689#define HCLGE_TYPE_CSQ 1695#define HCLGE_TYPE_CSQ 1
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c+105−79
@@ -46,17 +46,7 @@ static const struct pci_device_id ae_algo_pci_tbl[] = { · 45 unmodified lines
46 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},46 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},
47 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},47 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},
48 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},48 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},
49 /* Required last entry */49 /* required last entry */
50 {0, }
51};
52
53static const struct pci_device_id roce_pci_tbl[] = {
54 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA), 0},
55 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC), 0},
56 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},
57 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},
58 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},
59 /* Required last entry */
60 {0, }50 {0, }
61};51};
62 52
@@ -894,7 +884,7 @@ static int hclge_query_pf_resource(struct hclge_dev *hdev) · 831 unmodified lines
894 hdev->num_tqps = __le16_to_cpu(req->tqp_num);884 hdev->num_tqps = __le16_to_cpu(req->tqp_num);
895 hdev->pkt_buf_size = __le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S;885 hdev->pkt_buf_size = __le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S;
896 886
897 if (hnae_get_bit(hdev->ae_dev->flag, HNAE_DEV_SUPPORT_ROCE_B)) {887 if (hnae3_dev_roce_supported(hdev)) {
898 hdev->num_roce_msix =888 hdev->num_roce_msix =
899 hnae_get_field(__le16_to_cpu(req->pf_intr_vector_number),889 hnae_get_field(__le16_to_cpu(req->pf_intr_vector_number),
900 HCLGE_PF_VEC_NUM_M, HCLGE_PF_VEC_NUM_S);890 HCLGE_PF_VEC_NUM_M, HCLGE_PF_VEC_NUM_S);
@@ -1063,9 +1053,9 @@ static int hclge_configure(struct hclge_dev *hdev) · 162 unmodified lines
1063 hdev->base_tqp_pid = 0;1053 hdev->base_tqp_pid = 0;
1064 hdev->rss_size_max = 1;1054 hdev->rss_size_max = 1;
1065 hdev->rx_buf_len = cfg.rx_buf_len;1055 hdev->rx_buf_len = cfg.rx_buf_len;
1066 for (i = 0; i < ETH_ALEN; i++)1056 ether_addr_copy(hdev->hw.mac.mac_addr, cfg.mac_addr);
1067 hdev->hw.mac.mac_addr[i] = cfg.mac_addr[i];
1068 hdev->hw.mac.media_type = cfg.media_type;1057 hdev->hw.mac.media_type = cfg.media_type;
1058 hdev->hw.mac.phy_addr = cfg.phy_addr;
1069 hdev->num_desc = cfg.tqp_desc_num;1059 hdev->num_desc = cfg.tqp_desc_num;
1070 hdev->tm_info.num_pg = 1;1060 hdev->tm_info.num_pg = 1;
1071 hdev->tm_info.num_tc = cfg.tc_num;1061 hdev->tm_info.num_tc = cfg.tc_num;
@@ -1454,7 +1444,11 @@ static bool hclge_is_rx_buf_ok(struct hclge_dev *hdev, u32 rx_all) · 382 unmodified lines
1454 tc_num = hclge_get_tc_num(hdev);1444 tc_num = hclge_get_tc_num(hdev);
1455 pfc_enable_num = hclge_get_pfc_enalbe_num(hdev);1445 pfc_enable_num = hclge_get_pfc_enalbe_num(hdev);
1456 1446
1457 shared_buf_min = 2 * hdev->mps + HCLGE_DEFAULT_DV;1447 if (hnae3_dev_dcb_supported(hdev))
1448 shared_buf_min = 2 * hdev->mps + HCLGE_DEFAULT_DV;
1449 else
1450 shared_buf_min = 2 * hdev->mps + HCLGE_DEFAULT_NON_DCB_DV;
1451
1458 shared_buf_tc = pfc_enable_num * hdev->mps +1452 shared_buf_tc = pfc_enable_num * hdev->mps +
1459 (tc_num - pfc_enable_num) * hdev->mps / 2 +1453 (tc_num - pfc_enable_num) * hdev->mps / 2 +
1460 hdev->mps;1454 hdev->mps;
@@ -1495,6 +1489,16 @@ int hclge_rx_buffer_calc(struct hclge_dev *hdev, u32 tx_size) · 34 unmodified lines
1495 struct hclge_priv_buf *priv;1489 struct hclge_priv_buf *priv;
1496 int i;1490 int i;
1497 1491
1492 /* When DCB is not supported, rx private
1493 * buffer is not allocated.
1494 */
1495 if (!hnae3_dev_dcb_supported(hdev)) {
1496 if (!hclge_is_rx_buf_ok(hdev, rx_all))
1497 return -ENOMEM;
1498
1499 return 0;
1500 }
1501
1498 /* step 1, try to alloc private buffer for all enabled tc */1502 /* step 1, try to alloc private buffer for all enabled tc */
1499 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {1503 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1500 priv = &hdev->priv_buf[i];1504 priv = &hdev->priv_buf[i];
@@ -1510,6 +1514,11 @@ int hclge_rx_buffer_calc(struct hclge_dev *hdev, u32 tx_size) · 9 unmodified lines
1510 priv->wl.high = 2 * hdev->mps;1514 priv->wl.high = 2 * hdev->mps;
1511 priv->buf_size = priv->wl.high;1515 priv->buf_size = priv->wl.high;
1512 }1516 }
1517 } else {
1518 priv->enable = 0;
1519 priv->wl.low = 0;
1520 priv->wl.high = 0;
1521 priv->buf_size = 0;
1513 }1522 }
1514 }1523 }
1515 1524
@@ -1522,8 +1531,15 @@ int hclge_rx_buffer_calc(struct hclge_dev *hdev, u32 tx_size) · 6 unmodified lines
1522 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {1531 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1523 priv = &hdev->priv_buf[i];1532 priv = &hdev->priv_buf[i];
1524 1533
1525 if (hdev->hw_tc_map & BIT(i))1534 priv->enable = 0;
1526 priv->enable = 1;1535 priv->wl.low = 0;
1536 priv->wl.high = 0;
1537 priv->buf_size = 0;
1538
1539 if (!(hdev->hw_tc_map & BIT(i)))
1540 continue;
1541
1542 priv->enable = 1;
1527 1543
1528 if (hdev->tm_info.hw_pfc_map & BIT(i)) {1544 if (hdev->tm_info.hw_pfc_map & BIT(i)) {
1529 priv->wl.low = 128;1545 priv->wl.low = 128;
@@ -1616,6 +1632,10 @@ static int hclge_rx_priv_buf_alloc(struct hclge_dev *hdev) · 86 unmodified lines
1616 cpu_to_le16(true << HCLGE_TC0_PRI_BUF_EN_B);1632 cpu_to_le16(true << HCLGE_TC0_PRI_BUF_EN_B);
1617 }1633 }
1618 1634
1635 req->shared_buf =
1636 cpu_to_le16((hdev->s_buf.buf_size >> HCLGE_BUF_UNIT_S) |
1637 (1 << HCLGE_TC0_PRI_BUF_EN_B));
1638
1619 ret = hclge_cmd_send(&hdev->hw, &desc, 1);1639 ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1620 if (ret) {1640 if (ret) {
1621 dev_err(&hdev->pdev->dev,1641 dev_err(&hdev->pdev->dev,
@@ -1782,18 +1802,22 @@ int hclge_buffer_alloc(struct hclge_dev *hdev) · 160 unmodified lines
1782 return ret;1802 return ret;
1783 }1803 }
1784 1804
1785 ret = hclge_rx_priv_wl_config(hdev);1805 if (hnae3_dev_dcb_supported(hdev)) {
1786 if (ret) {1806 ret = hclge_rx_priv_wl_config(hdev);
1787 dev_err(&hdev->pdev->dev,1807 if (ret) {
1788 "could not configure rx private waterline %d\n", ret);1808 dev_err(&hdev->pdev->dev,
1789 return ret;1809 "could not configure rx private waterline %d\n",
1790 }1810 ret);
1811 return ret;
1812 }
1791 1813
1792 ret = hclge_common_thrd_config(hdev);1814 ret = hclge_common_thrd_config(hdev);
1793 if (ret) {1815 if (ret) {
1794 dev_err(&hdev->pdev->dev,1816 dev_err(&hdev->pdev->dev,
1795 "could not configure common threshold %d\n", ret);1817 "could not configure common threshold %d\n",
1796 return ret;1818 ret);
1819 return ret;
1820 }
1797 }1821 }
1798 1822
1799 ret = hclge_common_wl_config(hdev);1823 ret = hclge_common_wl_config(hdev);
@@ -2582,6 +2606,7 @@ static int hclge_rss_init_hw(struct hclge_dev *hdev) · 782 unmodified lines
2582 u16 tc_valid[HCLGE_MAX_TC_NUM];2606 u16 tc_valid[HCLGE_MAX_TC_NUM];
2583 u16 tc_size[HCLGE_MAX_TC_NUM];2607 u16 tc_size[HCLGE_MAX_TC_NUM];
2584 u32 *rss_indir = NULL;2608 u32 *rss_indir = NULL;
2609 u16 rss_size = 0, roundup_size;
2585 const u8 *key;2610 const u8 *key;
2586 int i, ret, j;2611 int i, ret, j;
2587 2612
@@ -2596,7 +2621,13 @@ static int hclge_rss_init_hw(struct hclge_dev *hdev) · 8 unmodified lines
2596 for (j = 0; j < hdev->num_vmdq_vport + 1; j++) {2621 for (j = 0; j < hdev->num_vmdq_vport + 1; j++) {
2597 for (i = 0; i < HCLGE_RSS_IND_TBL_SIZE; i++) {2622 for (i = 0; i < HCLGE_RSS_IND_TBL_SIZE; i++) {
2598 vport[j].rss_indirection_tbl[i] =2623 vport[j].rss_indirection_tbl[i] =
2599 i % hdev->rss_size_max;2624 i % vport[j].alloc_rss_size;
2625
2626 /* vport 0 is for PF */
2627 if (j != 0)
2628 continue;
2629
2630 rss_size = vport[j].alloc_rss_size;
2600 rss_indir[i] = vport[j].rss_indirection_tbl[i];2631 rss_indir[i] = vport[j].rss_indirection_tbl[i];
2601 }2632 }
2602 }2633 }
@@ -2613,42 +2644,32 @@ static int hclge_rss_init_hw(struct hclge_dev *hdev) · 10 unmodified lines
2613 if (ret)2644 if (ret)
2614 goto err;2645 goto err;
2615 2646
2647 /* Each TC have the same queue size, and tc_size set to hardware is
2648 * the log2 of roundup power of two of rss_size, the acutal queue
2649 * size is limited by indirection table.
2650 */
2651 if (rss_size > HCLGE_RSS_TC_SIZE_7 || rss_size == 0) {
2652 dev_err(&hdev->pdev->dev,
2653 "Configure rss tc size failed, invalid TC_SIZE = %d\n",
2654 rss_size);
2655 ret = -EINVAL;
2656 goto err;
2657 }
2658
2659 roundup_size = roundup_pow_of_two(rss_size);
2660 roundup_size = ilog2(roundup_size);
2661
2616 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {2662 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2617 if (hdev->hw_tc_map & BIT(i))2663 tc_valid[i] = 0;
2618 tc_valid[i] = 1;
2619 else
2620 tc_valid[i] = 0;
2621 2664
2622 switch (hdev->rss_size_max) {2665 if (!(hdev->hw_tc_map & BIT(i)))
2623 case HCLGE_RSS_TC_SIZE_0:2666 continue;
2624 tc_size[i] = 0;2667
2625 break;2668 tc_valid[i] = 1;
2626 case HCLGE_RSS_TC_SIZE_1:2669 tc_size[i] = roundup_size;
2627 tc_size[i] = 1;2670 tc_offset[i] = rss_size * i;
2628 break;
2629 case HCLGE_RSS_TC_SIZE_2:
2630 tc_size[i] = 2;
2631 break;
2632 case HCLGE_RSS_TC_SIZE_3:
2633 tc_size[i] = 3;
2634 break;
2635 case HCLGE_RSS_TC_SIZE_4:
2636 tc_size[i] = 4;
2637 break;
2638 case HCLGE_RSS_TC_SIZE_5:
2639 tc_size[i] = 5;
2640 break;
2641 case HCLGE_RSS_TC_SIZE_6:
2642 tc_size[i] = 6;
2643 break;
2644 case HCLGE_RSS_TC_SIZE_7:
2645 tc_size[i] = 7;
2646 break;
2647 default:
2648 break;
2649 }
2650 tc_offset[i] = hdev->rss_size_max * i;
2651 }2671 }
2672
2652 ret = hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);2673 ret = hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);
2653 2674
2654err:2675err:
@@ -2679,7 +2700,11 @@ int hclge_map_vport_ring_to_vector(struct hclge_vport *vport, int vector_id, · 24 unmodified lines
2679 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));2700 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
2680 hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,2701 hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,
2681 HCLGE_TQP_ID_S, node->tqp_index);2702 HCLGE_TQP_ID_S, node->tqp_index);
2703 hnae_set_field(req->tqp_type_and_id[i], HCLGE_INT_GL_IDX_M,
2704 HCLGE_INT_GL_IDX_S,
2705 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
2682 req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);2706 req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);
2707 req->vfid = vport->vport_id;
2683 2708
2684 if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {2709 if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
2685 req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;2710 req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;
@@ -2763,8 +2788,12 @@ static int hclge_unmap_ring_from_vector( · 77 unmodified lines
2763 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));2788 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
2764 hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,2789 hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,
2765 HCLGE_TQP_ID_S, node->tqp_index);2790 HCLGE_TQP_ID_S, node->tqp_index);
2791 hnae_set_field(req->tqp_type_and_id[i], HCLGE_INT_GL_IDX_M,
2792 HCLGE_INT_GL_IDX_S,
2793 hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
2766 2794
2767 req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);2795 req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);
2796 req->vfid = vport->vport_id;
2768 2797
2769 if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {2798 if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
2770 req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;2799 req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;
@@ -2778,7 +2807,7 @@ static int hclge_unmap_ring_from_vector( · 7 unmodified lines
2778 }2807 }
2779 i = 0;2808 i = 0;
2780 hclge_cmd_setup_basic_desc(&desc,2809 hclge_cmd_setup_basic_desc(&desc,
2781 HCLGE_OPC_ADD_RING_TO_VECTOR,2810 HCLGE_OPC_DEL_RING_TO_VECTOR,
2782 false);2811 false);
2783 req->int_vector_id = vector_id;2812 req->int_vector_id = vector_id;
2784 }2813 }
@@ -3665,6 +3694,7 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev) · 880 unmodified lines
3665{3694{
3666#define HCLGE_VLAN_TYPE_VF_TABLE 03695#define HCLGE_VLAN_TYPE_VF_TABLE 0
3667#define HCLGE_VLAN_TYPE_PORT_TABLE 13696#define HCLGE_VLAN_TYPE_PORT_TABLE 1
3697 struct hnae3_handle *handle;
3668 int ret;3698 int ret;
3669 3699
3670 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_VLAN_TYPE_VF_TABLE,3700 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_VLAN_TYPE_VF_TABLE,
@@ -3674,8 +3704,11 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev) · 3 unmodified lines
3674 3704
3675 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_VLAN_TYPE_PORT_TABLE,3705 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_VLAN_TYPE_PORT_TABLE,
3676 true);3706 true);
3707 if (ret)
3708 return ret;
3677 3709
3678 return ret;3710 handle = &hdev->vport[0].nic;
3711 return hclge_set_port_vlan_filter(handle, htons(ETH_P_8021Q), 0, false);
3679}3712}
3680 3713
3681static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu)3714static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu)
@@ -3920,8 +3953,7 @@ static int hclge_init_client_instance(struct hnae3_client *client, · 238 unmodified lines
3920 goto err;3953 goto err;
3921 3954
3922 if (hdev->roce_client &&3955 if (hdev->roce_client &&
3923 hnae_get_bit(hdev->ae_dev->flag,3956 hnae3_dev_roce_supported(hdev)) {
3924 HNAE_DEV_SUPPORT_ROCE_B)) {
3925 struct hnae3_client *rc = hdev->roce_client;3957 struct hnae3_client *rc = hdev->roce_client;
3926 3958
3927 ret = hclge_init_roce_base_info(vport);3959 ret = hclge_init_roce_base_info(vport);
@@ -3944,8 +3976,7 @@ static int hclge_init_client_instance(struct hnae3_client *client, · 16 unmodified lines
3944 3976
3945 break;3977 break;
3946 case HNAE3_CLIENT_ROCE:3978 case HNAE3_CLIENT_ROCE:
3947 if (hnae_get_bit(hdev->ae_dev->flag,3979 if (hnae3_dev_roce_supported(hdev)) {
3948 HNAE_DEV_SUPPORT_ROCE_B)) {
3949 hdev->roce_client = client;3980 hdev->roce_client = client;
3950 vport->roce.client = client;3981 vport->roce.client = client;
3951 }3982 }
@@ -4057,7 +4088,6 @@ static void hclge_pci_uninit(struct hclge_dev *hdev) · 105 unmodified lines
4057static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)4088static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
4058{4089{
4059 struct pci_dev *pdev = ae_dev->pdev;4090 struct pci_dev *pdev = ae_dev->pdev;
4060 const struct pci_device_id *id;
4061 struct hclge_dev *hdev;4091 struct hclge_dev *hdev;
4062 int ret;4092 int ret;
4063 4093
@@ -4072,10 +4102,6 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) · 8 unmodified lines
4072 hdev->ae_dev = ae_dev;4102 hdev->ae_dev = ae_dev;
4073 ae_dev->priv = hdev;4103 ae_dev->priv = hdev;
4074 4104
4075 id = pci_match_id(roce_pci_tbl, ae_dev->pdev);
4076 if (id)
4077 hnae_set_bit(ae_dev->flag, HNAE_DEV_SUPPORT_ROCE_B, 1);
4078
4079 ret = hclge_pci_init(hdev);4105 ret = hclge_pci_init(hdev);
4080 if (ret) {4106 if (ret) {
4081 dev_err(&pdev->dev, "PCI init failed\n");4107 dev_err(&pdev->dev, "PCI init failed\n");
@@ -4138,12 +4164,6 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) · 56 unmodified lines
4138 return ret;4164 return ret;
4139 }4165 }
4140 4166
4141 ret = hclge_rss_init_hw(hdev);
4142 if (ret) {
4143 dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
4144 return ret;
4145 }
4146
4147 ret = hclge_init_vlan_config(hdev);4167 ret = hclge_init_vlan_config(hdev);
4148 if (ret) {4168 if (ret) {
4149 dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);4169 dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);
@@ -4156,6 +4176,12 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) · 6 unmodified lines
4156 return ret;4176 return ret;
4157 }4177 }
4158 4178
4179 ret = hclge_rss_init_hw(hdev);
4180 if (ret) {
4181 dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
4182 return ret;
4183 }
4184
4159 setup_timer(&hdev->service_timer, hclge_service_timer,4185 setup_timer(&hdev->service_timer, hclge_service_timer,
4160 (unsigned long)hdev);4186 (unsigned long)hdev);
4161 INIT_WORK(&hdev->service_task, hclge_service_task);4187 INIT_WORK(&hdev->service_task, hclge_service_task);
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h+2−1
@@ -176,7 +176,6 @@ struct hclge_pg_info { · 175 unmodified lines
176struct hclge_tc_info {176struct hclge_tc_info {
177 u8 tc_id;177 u8 tc_id;
178 u8 tc_sch_mode; /* 0: sp; 1: dwrr */178 u8 tc_sch_mode; /* 0: sp; 1: dwrr */
179 u8 up;
180 u8 pgid;179 u8 pgid;
181 u32 bw_limit;180 u32 bw_limit;
182};181};
@@ -197,6 +196,7 @@ struct hclge_tm_info { · 14 unmodified lines
197 u8 num_tc;196 u8 num_tc;
198 u8 num_pg; /* It must be 1 if vNET-Base schd */197 u8 num_pg; /* It must be 1 if vNET-Base schd */
199 u8 pg_dwrr[HCLGE_PG_NUM];198 u8 pg_dwrr[HCLGE_PG_NUM];
199 u8 prio_tc[HNAE3_MAX_USER_PRIO];
200 struct hclge_pg_info pg_info[HCLGE_PG_NUM];200 struct hclge_pg_info pg_info[HCLGE_PG_NUM];
201 struct hclge_tc_info tc_info[HNAE3_MAX_TC];201 struct hclge_tc_info tc_info[HNAE3_MAX_TC];
202 enum hclge_fc_mode fc_mode;202 enum hclge_fc_mode fc_mode;
@@ -477,6 +477,7 @@ struct hclge_vport { · 274 unmodified lines
477 u8 rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */477 u8 rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */
478 /* User configured lookup table entries */478 /* User configured lookup table entries */
479 u8 rss_indirection_tbl[HCLGE_RSS_IND_TBL_SIZE];479 u8 rss_indirection_tbl[HCLGE_RSS_IND_TBL_SIZE];
480 u16 alloc_rss_size;
480 481
481 u16 qs_offset;482 u16 qs_offset;
482 u16 bw_limit; /* VSI BW Limit (0 = disabled) */483 u16 bw_limit; /* VSI BW Limit (0 = disabled) */
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c+24−17
@@ -128,9 +128,7 @@ static int hclge_fill_pri_array(struct hclge_dev *hdev, u8 *pri, u8 pri_id) · 127 unmodified lines
128{128{
129 u8 tc;129 u8 tc;
130 130
131 for (tc = 0; tc < hdev->tm_info.num_tc; tc++)131 tc = hdev->tm_info.prio_tc[pri_id];
132 if (hdev->tm_info.tc_info[tc].up == pri_id)
133 break;
134 132
135 if (tc >= hdev->tm_info.num_tc)133 if (tc >= hdev->tm_info.num_tc)
136 return -EINVAL;134 return -EINVAL;
@@ -158,7 +156,7 @@ static int hclge_up_to_tc_map(struct hclge_dev *hdev) · 21 unmodified lines
158 156
159 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PRI_TO_TC_MAPPING, false);157 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PRI_TO_TC_MAPPING, false);
160 158
161 for (pri_id = 0; pri_id < hdev->tm_info.num_tc; pri_id++) {159 for (pri_id = 0; pri_id < HNAE3_MAX_USER_PRIO; pri_id++) {
162 ret = hclge_fill_pri_array(hdev, pri, pri_id);160 ret = hclge_fill_pri_array(hdev, pri, pri_id);
163 if (ret)161 if (ret)
164 return ret;162 return ret;
@@ -280,11 +278,11 @@ static int hclge_tm_pg_shapping_cfg(struct hclge_dev *hdev, · 115 unmodified lines
280 278
281 shap_cfg_cmd->pg_id = pg_id;279 shap_cfg_cmd->pg_id = pg_id;
282 280
283 hclge_tm_set_feild(shap_cfg_cmd->pg_shapping_para, IR_B, ir_b);281 hclge_tm_set_field(shap_cfg_cmd->pg_shapping_para, IR_B, ir_b);
284 hclge_tm_set_feild(shap_cfg_cmd->pg_shapping_para, IR_U, ir_u);282 hclge_tm_set_field(shap_cfg_cmd->pg_shapping_para, IR_U, ir_u);
285 hclge_tm_set_feild(shap_cfg_cmd->pg_shapping_para, IR_S, ir_s);283 hclge_tm_set_field(shap_cfg_cmd->pg_shapping_para, IR_S, ir_s);
286 hclge_tm_set_feild(shap_cfg_cmd->pg_shapping_para, BS_B, bs_b);284 hclge_tm_set_field(shap_cfg_cmd->pg_shapping_para, BS_B, bs_b);
287 hclge_tm_set_feild(shap_cfg_cmd->pg_shapping_para, BS_S, bs_s);285 hclge_tm_set_field(shap_cfg_cmd->pg_shapping_para, BS_S, bs_s);
288 286
289 return hclge_cmd_send(&hdev->hw, &desc, 1);287 return hclge_cmd_send(&hdev->hw, &desc, 1);
290}288}
@@ -307,11 +305,11 @@ static int hclge_tm_pri_shapping_cfg(struct hclge_dev *hdev, · 16 unmodified lines
307 305
308 shap_cfg_cmd->pri_id = pri_id;306 shap_cfg_cmd->pri_id = pri_id;
309 307
310 hclge_tm_set_feild(shap_cfg_cmd->pri_shapping_para, IR_B, ir_b);308 hclge_tm_set_field(shap_cfg_cmd->pri_shapping_para, IR_B, ir_b);
311 hclge_tm_set_feild(shap_cfg_cmd->pri_shapping_para, IR_U, ir_u);309 hclge_tm_set_field(shap_cfg_cmd->pri_shapping_para, IR_U, ir_u);
312 hclge_tm_set_feild(shap_cfg_cmd->pri_shapping_para, IR_S, ir_s);310 hclge_tm_set_field(shap_cfg_cmd->pri_shapping_para, IR_S, ir_s);
313 hclge_tm_set_feild(shap_cfg_cmd->pri_shapping_para, BS_B, bs_b);311 hclge_tm_set_field(shap_cfg_cmd->pri_shapping_para, BS_B, bs_b);
314 hclge_tm_set_feild(shap_cfg_cmd->pri_shapping_para, BS_S, bs_s);312 hclge_tm_set_field(shap_cfg_cmd->pri_shapping_para, BS_S, bs_s);
315 313
316 return hclge_cmd_send(&hdev->hw, &desc, 1);314 return hclge_cmd_send(&hdev->hw, &desc, 1);
317}315}
@@ -397,6 +395,7 @@ static void hclge_tm_vport_tc_info_update(struct hclge_vport *vport) · 79 unmodified lines
397 kinfo->num_tqps / kinfo->num_tc);395 kinfo->num_tqps / kinfo->num_tc);
398 vport->qs_offset = hdev->tm_info.num_tc * vport->vport_id;396 vport->qs_offset = hdev->tm_info.num_tc * vport->vport_id;
399 vport->dwrr = 100; /* 100 percent as init */397 vport->dwrr = 100; /* 100 percent as init */
398 vport->alloc_rss_size = kinfo->rss_size;
400 399
401 for (i = 0; i < kinfo->num_tc; i++) {400 for (i = 0; i < kinfo->num_tc; i++) {
402 if (hdev->hw_tc_map & BIT(i)) {401 if (hdev->hw_tc_map & BIT(i)) {
@@ -404,16 +403,17 @@ static void hclge_tm_vport_tc_info_update(struct hclge_vport *vport) · 1 unmodified line
404 kinfo->tc_info[i].tqp_offset = i * kinfo->rss_size;403 kinfo->tc_info[i].tqp_offset = i * kinfo->rss_size;
405 kinfo->tc_info[i].tqp_count = kinfo->rss_size;404 kinfo->tc_info[i].tqp_count = kinfo->rss_size;
406 kinfo->tc_info[i].tc = i;405 kinfo->tc_info[i].tc = i;
407 kinfo->tc_info[i].up = hdev->tm_info.tc_info[i].up;
408 } else {406 } else {
409 /* Set to default queue if TC is disable */407 /* Set to default queue if TC is disable */
410 kinfo->tc_info[i].enable = false;408 kinfo->tc_info[i].enable = false;
411 kinfo->tc_info[i].tqp_offset = 0;409 kinfo->tc_info[i].tqp_offset = 0;
412 kinfo->tc_info[i].tqp_count = 1;410 kinfo->tc_info[i].tqp_count = 1;
413 kinfo->tc_info[i].tc = 0;411 kinfo->tc_info[i].tc = 0;
414 kinfo->tc_info[i].up = 0;
415 }412 }
416 }413 }
414
415 memcpy(kinfo->prio_tc, hdev->tm_info.prio_tc,
416 FIELD_SIZEOF(struct hnae3_knic_private_info, prio_tc));
417}417}
418 418
419static void hclge_tm_vport_info_update(struct hclge_dev *hdev)419static void hclge_tm_vport_info_update(struct hclge_dev *hdev)
@@ -435,12 +435,15 @@ static void hclge_tm_tc_info_init(struct hclge_dev *hdev) · 15 unmodified lines
435 for (i = 0; i < hdev->tm_info.num_tc; i++) {435 for (i = 0; i < hdev->tm_info.num_tc; i++) {
436 hdev->tm_info.tc_info[i].tc_id = i;436 hdev->tm_info.tc_info[i].tc_id = i;
437 hdev->tm_info.tc_info[i].tc_sch_mode = HCLGE_SCH_MODE_DWRR;437 hdev->tm_info.tc_info[i].tc_sch_mode = HCLGE_SCH_MODE_DWRR;
438 hdev->tm_info.tc_info[i].up = i;
439 hdev->tm_info.tc_info[i].pgid = 0;438 hdev->tm_info.tc_info[i].pgid = 0;
440 hdev->tm_info.tc_info[i].bw_limit =439 hdev->tm_info.tc_info[i].bw_limit =
441 hdev->tm_info.pg_info[0].bw_limit;440 hdev->tm_info.pg_info[0].bw_limit;
442 }441 }
443 442
443 for (i = 0; i < HNAE3_MAX_USER_PRIO; i++)
444 hdev->tm_info.prio_tc[i] =
445 (i >= hdev->tm_info.num_tc) ? 0 : i;
446
444 hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE;447 hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE;
445}448}
446 449
@@ -976,6 +979,10 @@ int hclge_pause_setup_hw(struct hclge_dev *hdev) · 529 unmodified lines
976 if (ret)979 if (ret)
977 return ret;980 return ret;
978 981
982 /* Only DCB-supported dev supports qset back pressure setting */
983 if (!hnae3_dev_dcb_supported(hdev))
984 return 0;
985
979 for (i = 0; i < hdev->tm_info.num_tc; i++) {986 for (i = 0; i < hdev->tm_info.num_tc; i++) {
980 ret = hclge_tm_qs_bp_cfg(hdev, i);987 ret = hclge_tm_qs_bp_cfg(hdev, i);
981 if (ret)988 if (ret)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h+2−2
@@ -94,10 +94,10 @@ struct hclge_bp_to_qs_map_cmd { · 93 unmodified lines
94 u32 rsvd1;94 u32 rsvd1;
95};95};
96 96
97#define hclge_tm_set_feild(dest, string, val) \97#define hclge_tm_set_field(dest, string, val) \
98 hnae_set_field((dest), (HCLGE_TM_SHAP_##string##_MSK), \98 hnae_set_field((dest), (HCLGE_TM_SHAP_##string##_MSK), \
99 (HCLGE_TM_SHAP_##string##_LSH), val)99 (HCLGE_TM_SHAP_##string##_LSH), val)
100#define hclge_tm_get_feild(src, string) \100#define hclge_tm_get_field(src, string) \
101 hnae_get_field((src), (HCLGE_TM_SHAP_##string##_MSK), \101 hnae_get_field((src), (HCLGE_TM_SHAP_##string##_MSK), \
102 (HCLGE_TM_SHAP_##string##_LSH))102 (HCLGE_TM_SHAP_##string##_LSH))
103 103
drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c+15−8
@@ -41,11 +41,16 @@ static struct hnae3_client client; · 40 unmodified lines
41static const struct pci_device_id hns3_pci_tbl[] = {41static const struct pci_device_id hns3_pci_tbl[] = {
42 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_GE), 0},42 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_GE), 0},
43 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE), 0},43 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE), 0},
44 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA), 0},44 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA),
45 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC), 0},45 HNAE3_DEV_SUPPORT_ROCE_DCB_BITS},
46 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},46 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC),
47 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},47 HNAE3_DEV_SUPPORT_ROCE_DCB_BITS},
48 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},48 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA),
49 HNAE3_DEV_SUPPORT_ROCE_DCB_BITS},
50 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC),
51 HNAE3_DEV_SUPPORT_ROCE_DCB_BITS},
52 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC),
53 HNAE3_DEV_SUPPORT_ROCE_DCB_BITS},
49 /* required last entry */54 /* required last entry */
50 {0, }55 {0, }
51};56};
@@ -1348,6 +1353,7 @@ static int hns3_probe(struct pci_dev *pdev, const struct pci_device_id *ent) · 1296 unmodified lines
1348 }1353 }
1349 1354
1350 ae_dev->pdev = pdev;1355 ae_dev->pdev = pdev;
1356 ae_dev->flag = ent->driver_data;
1351 ae_dev->dev_type = HNAE3_DEV_KNIC;1357 ae_dev->dev_type = HNAE3_DEV_KNIC;
1352 pci_set_drvdata(pdev, ae_dev);1358 pci_set_drvdata(pdev, ae_dev);
1353 1359
@@ -2705,10 +2711,11 @@ static void hns3_init_mac_addr(struct net_device *netdev) · 1351 unmodified lines
2705 eth_hw_addr_random(netdev);2711 eth_hw_addr_random(netdev);
2706 dev_warn(priv->dev, "using random MAC address %pM\n",2712 dev_warn(priv->dev, "using random MAC address %pM\n",
2707 netdev->dev_addr);2713 netdev->dev_addr);
2708 /* Also copy this new MAC address into hdev */
2709 if (h->ae_algo->ops->set_mac_addr)
2710 h->ae_algo->ops->set_mac_addr(h, netdev->dev_addr);
2711 }2714 }
2715
2716 if (h->ae_algo->ops->set_mac_addr)
2717 h->ae_algo->ops->set_mac_addr(h, netdev->dev_addr);
2718
2712}2719}
2713 2720
2714static void hns3_nic_set_priv_ops(struct net_device *netdev)2721static void hns3_nic_set_priv_ops(struct net_device *netdev)
drivers/net/ethernet/ibm/emac/mal.c+1−2
@@ -402,7 +402,7 @@ static int mal_poll(struct napi_struct *napi, int budget) · 401 unmodified lines
402 unsigned long flags;402 unsigned long flags;
403 403
404 MAL_DBG2(mal, "poll(%d)" NL, budget);404 MAL_DBG2(mal, "poll(%d)" NL, budget);
405 again:405
406 /* Process TX skbs */406 /* Process TX skbs */
407 list_for_each(l, &mal->poll_list) {407 list_for_each(l, &mal->poll_list) {
408 struct mal_commac *mc =408 struct mal_commac *mc =
@@ -451,7 +451,6 @@ static int mal_poll(struct napi_struct *napi, int budget) · 42 unmodified lines
451 spin_lock_irqsave(&mal->lock, flags);451 spin_lock_irqsave(&mal->lock, flags);
452 mal_disable_eob_irq(mal);452 mal_disable_eob_irq(mal);
453 spin_unlock_irqrestore(&mal->lock, flags);453 spin_unlock_irqrestore(&mal->lock, flags);
454 goto again;
455 }454 }
456 mc->ops->poll_tx(mc->dev);455 mc->ops->poll_tx(mc->dev);
457 }456 }
drivers/net/ethernet/marvell/mvpp2.c+35−11
@@ -333,7 +333,7 @@ · 332 unmodified lines
333#define MVPP2_GMAC_INBAND_AN_MASK BIT(0)333#define MVPP2_GMAC_INBAND_AN_MASK BIT(0)
334#define MVPP2_GMAC_FLOW_CTRL_MASK GENMASK(2, 1)334#define MVPP2_GMAC_FLOW_CTRL_MASK GENMASK(2, 1)
335#define MVPP2_GMAC_PCS_ENABLE_MASK BIT(3)335#define MVPP2_GMAC_PCS_ENABLE_MASK BIT(3)
336#define MVPP2_GMAC_PORT_RGMII_MASK BIT(4)336#define MVPP2_GMAC_INTERNAL_CLK_MASK BIT(4)
337#define MVPP2_GMAC_DISABLE_PADDING BIT(5)337#define MVPP2_GMAC_DISABLE_PADDING BIT(5)
338#define MVPP2_GMAC_PORT_RESET_MASK BIT(6)338#define MVPP2_GMAC_PORT_RESET_MASK BIT(6)
339#define MVPP2_GMAC_AUTONEG_CONFIG 0xc339#define MVPP2_GMAC_AUTONEG_CONFIG 0xc
@@ -676,6 +676,7 @@ enum mvpp2_tag_type { · 336 unmodified lines
676#define MVPP2_PRS_RI_L3_MCAST BIT(15)676#define MVPP2_PRS_RI_L3_MCAST BIT(15)
677#define MVPP2_PRS_RI_L3_BCAST (BIT(15) | BIT(16))677#define MVPP2_PRS_RI_L3_BCAST (BIT(15) | BIT(16))
678#define MVPP2_PRS_RI_IP_FRAG_MASK 0x20000678#define MVPP2_PRS_RI_IP_FRAG_MASK 0x20000
679#define MVPP2_PRS_RI_IP_FRAG_TRUE BIT(17)
679#define MVPP2_PRS_RI_UDF3_MASK 0x300000680#define MVPP2_PRS_RI_UDF3_MASK 0x300000
680#define MVPP2_PRS_RI_UDF3_RX_SPECIAL BIT(21)681#define MVPP2_PRS_RI_UDF3_RX_SPECIAL BIT(21)
681#define MVPP2_PRS_RI_L4_PROTO_MASK 0x1c00000682#define MVPP2_PRS_RI_L4_PROTO_MASK 0x1c00000
@@ -792,6 +793,7 @@ struct mvpp2 { · 110 unmodified lines
792 struct clk *pp_clk;793 struct clk *pp_clk;
793 struct clk *gop_clk;794 struct clk *gop_clk;
794 struct clk *mg_clk;795 struct clk *mg_clk;
796 struct clk *axi_clk;
795 797
796 /* List of pointers to port structures */798 /* List of pointers to port structures */
797 struct mvpp2_port **port_list;799 struct mvpp2_port **port_list;
@@ -2315,7 +2317,7 @@ static int mvpp2_prs_ip4_proto(struct mvpp2 *priv, unsigned short proto, · 1517 unmodified lines
2315 (proto != IPPROTO_IGMP))2317 (proto != IPPROTO_IGMP))
2316 return -EINVAL;2318 return -EINVAL;
2317 2319
2318 /* Fragmented packet */2320 /* Not fragmented packet */
2319 tid = mvpp2_prs_tcam_first_free(priv, MVPP2_PE_FIRST_FREE_TID,2321 tid = mvpp2_prs_tcam_first_free(priv, MVPP2_PE_FIRST_FREE_TID,
2320 MVPP2_PE_LAST_FREE_TID);2322 MVPP2_PE_LAST_FREE_TID);
2321 if (tid < 0)2323 if (tid < 0)
@@ -2334,8 +2336,12 @@ static int mvpp2_prs_ip4_proto(struct mvpp2 *priv, unsigned short proto, · 12 unmodified lines
2334 MVPP2_PRS_SRAM_OP_SEL_UDF_ADD);2336 MVPP2_PRS_SRAM_OP_SEL_UDF_ADD);
2335 mvpp2_prs_sram_ai_update(&pe, MVPP2_PRS_IPV4_DIP_AI_BIT,2337 mvpp2_prs_sram_ai_update(&pe, MVPP2_PRS_IPV4_DIP_AI_BIT,
2336 MVPP2_PRS_IPV4_DIP_AI_BIT);2338 MVPP2_PRS_IPV4_DIP_AI_BIT);
2337 mvpp2_prs_sram_ri_update(&pe, ri | MVPP2_PRS_RI_IP_FRAG_MASK,2339 mvpp2_prs_sram_ri_update(&pe, ri, ri_mask | MVPP2_PRS_RI_IP_FRAG_MASK);
2338 ri_mask | MVPP2_PRS_RI_IP_FRAG_MASK);2340
2341 mvpp2_prs_tcam_data_byte_set(&pe, 2, 0x00,
2342 MVPP2_PRS_TCAM_PROTO_MASK_L);
2343 mvpp2_prs_tcam_data_byte_set(&pe, 3, 0x00,
2344 MVPP2_PRS_TCAM_PROTO_MASK);
2339 2345
2340 mvpp2_prs_tcam_data_byte_set(&pe, 5, proto, MVPP2_PRS_TCAM_PROTO_MASK);2346 mvpp2_prs_tcam_data_byte_set(&pe, 5, proto, MVPP2_PRS_TCAM_PROTO_MASK);
2341 mvpp2_prs_tcam_ai_update(&pe, 0, MVPP2_PRS_IPV4_DIP_AI_BIT);2347 mvpp2_prs_tcam_ai_update(&pe, 0, MVPP2_PRS_IPV4_DIP_AI_BIT);
@@ -2346,7 +2352,7 @@ static int mvpp2_prs_ip4_proto(struct mvpp2 *priv, unsigned short proto, · 4 unmodified lines
2346 mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_IP4);2352 mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_IP4);
2347 mvpp2_prs_hw_write(priv, &pe);2353 mvpp2_prs_hw_write(priv, &pe);
2348 2354
2349 /* Not fragmented packet */2355 /* Fragmented packet */
2350 tid = mvpp2_prs_tcam_first_free(priv, MVPP2_PE_FIRST_FREE_TID,2356 tid = mvpp2_prs_tcam_first_free(priv, MVPP2_PE_FIRST_FREE_TID,
2351 MVPP2_PE_LAST_FREE_TID);2357 MVPP2_PE_LAST_FREE_TID);
2352 if (tid < 0)2358 if (tid < 0)
@@ -2358,8 +2364,11 @@ static int mvpp2_prs_ip4_proto(struct mvpp2 *priv, unsigned short proto, · 5 unmodified lines
2358 pe.sram.word[MVPP2_PRS_SRAM_RI_CTRL_WORD] = 0x0;2364 pe.sram.word[MVPP2_PRS_SRAM_RI_CTRL_WORD] = 0x0;
2359 mvpp2_prs_sram_ri_update(&pe, ri, ri_mask);2365 mvpp2_prs_sram_ri_update(&pe, ri, ri_mask);
2360 2366
2361 mvpp2_prs_tcam_data_byte_set(&pe, 2, 0x00, MVPP2_PRS_TCAM_PROTO_MASK_L);2367 mvpp2_prs_sram_ri_update(&pe, ri | MVPP2_PRS_RI_IP_FRAG_TRUE,
2362 mvpp2_prs_tcam_data_byte_set(&pe, 3, 0x00, MVPP2_PRS_TCAM_PROTO_MASK);2368 ri_mask | MVPP2_PRS_RI_IP_FRAG_MASK);
2369
2370 mvpp2_prs_tcam_data_byte_set(&pe, 2, 0x00, 0x0);
2371 mvpp2_prs_tcam_data_byte_set(&pe, 3, 0x00, 0x0);
2363 2372
2364 /* Update shadow table and hw entry */2373 /* Update shadow table and hw entry */
2365 mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_IP4);2374 mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_IP4);
@@ -4591,7 +4600,6 @@ static void mvpp2_port_mii_gmac_configure(struct mvpp2_port *port) · 2225 unmodified lines
4591 val |= MVPP2_GMAC_INBAND_AN_MASK | MVPP2_GMAC_PCS_ENABLE_MASK;4600 val |= MVPP2_GMAC_INBAND_AN_MASK | MVPP2_GMAC_PCS_ENABLE_MASK;
4592 } else if (phy_interface_mode_is_rgmii(port->phy_interface)) {4601 } else if (phy_interface_mode_is_rgmii(port->phy_interface)) {
4593 val &= ~MVPP2_GMAC_PCS_ENABLE_MASK;4602 val &= ~MVPP2_GMAC_PCS_ENABLE_MASK;
4594 val |= MVPP2_GMAC_PORT_RGMII_MASK;
4595 }4603 }
4596 writel(val, port->base + MVPP2_GMAC_CTRL_2_REG);4604 writel(val, port->base + MVPP2_GMAC_CTRL_2_REG);
4597 4605
@@ -7496,7 +7504,7 @@ static void mvpp2_port_copy_mac_addr(struct net_device *dev, struct mvpp2 *priv, · 2898 unmodified lines
7496/* Ports initialization */7504/* Ports initialization */
7497static int mvpp2_port_probe(struct platform_device *pdev,7505static int mvpp2_port_probe(struct platform_device *pdev,
7498 struct device_node *port_node,7506 struct device_node *port_node,
7499 struct mvpp2 *priv)7507 struct mvpp2 *priv, int index)
7500{7508{
7501 struct device_node *phy_node;7509 struct device_node *phy_node;
7502 struct phy *comphy;7510 struct phy *comphy;
@@ -7670,7 +7678,7 @@ static int mvpp2_port_probe(struct platform_device *pdev, · 167 unmodified lines
7670 }7678 }
7671 netdev_info(dev, "Using %s mac address %pM\n", mac_from, dev->dev_addr);7679 netdev_info(dev, "Using %s mac address %pM\n", mac_from, dev->dev_addr);
7672 7680
7673 priv->port_list[id] = port;7681 priv->port_list[index] = port;
7674 return 0;7682 return 0;
7675 7683
7676err_free_port_pcpu:7684err_free_port_pcpu:
@@ -7963,6 +7971,18 @@ static int mvpp2_probe(struct platform_device *pdev) · 286 unmodified lines
7963 err = clk_prepare_enable(priv->mg_clk);7971 err = clk_prepare_enable(priv->mg_clk);
7964 if (err < 0)7972 if (err < 0)
7965 goto err_gop_clk;7973 goto err_gop_clk;
7974
7975 priv->axi_clk = devm_clk_get(&pdev->dev, "axi_clk");
7976 if (IS_ERR(priv->axi_clk)) {
7977 err = PTR_ERR(priv->axi_clk);
7978 if (err == -EPROBE_DEFER)
7979 goto err_gop_clk;
7980 priv->axi_clk = NULL;
7981 } else {
7982 err = clk_prepare_enable(priv->axi_clk);
7983 if (err < 0)
7984 goto err_gop_clk;
7985 }
7966 }7986 }
7967 7987
7968 /* Get system's tclk rate */7988 /* Get system's tclk rate */
@@ -8005,16 +8025,19 @@ static int mvpp2_probe(struct platform_device *pdev) · 36 unmodified lines
8005 }8025 }
8006 8026
8007 /* Initialize ports */8027 /* Initialize ports */
8028 i = 0;
8008 for_each_available_child_of_node(dn, port_node) {8029 for_each_available_child_of_node(dn, port_node) {
8009 err = mvpp2_port_probe(pdev, port_node, priv);8030 err = mvpp2_port_probe(pdev, port_node, priv, i);
8010 if (err < 0)8031 if (err < 0)
8011 goto err_mg_clk;8032 goto err_mg_clk;
8033 i++;
8012 }8034 }
8013 8035
8014 platform_set_drvdata(pdev, priv);8036 platform_set_drvdata(pdev, priv);
8015 return 0;8037 return 0;
8016 8038
8017err_mg_clk:8039err_mg_clk:
8040 clk_disable_unprepare(priv->axi_clk);
8018 if (priv->hw_version == MVPP22)8041 if (priv->hw_version == MVPP22)
8019 clk_disable_unprepare(priv->mg_clk);8042 clk_disable_unprepare(priv->mg_clk);
8020err_gop_clk:8043err_gop_clk:
@@ -8052,6 +8075,7 @@ static int mvpp2_remove(struct platform_device *pdev) · 31 unmodified lines
8052 aggr_txq->descs_dma);8075 aggr_txq->descs_dma);
8053 }8076 }
8054 8077
8078 clk_disable_unprepare(priv->axi_clk);
8055 clk_disable_unprepare(priv->mg_clk);8079 clk_disable_unprepare(priv->mg_clk);
8056 clk_disable_unprepare(priv->pp_clk);8080 clk_disable_unprepare(priv->pp_clk);
8057 clk_disable_unprepare(priv->gop_clk);8081 clk_disable_unprepare(priv->gop_clk);
drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h+2−2
@@ -139,7 +139,7 @@ TRACE_EVENT(mlx5_fs_del_fg, · 138 unmodified lines
139 {MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO, "NEXT_PRIO"}139 {MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO, "NEXT_PRIO"}
140 140
141TRACE_EVENT(mlx5_fs_set_fte,141TRACE_EVENT(mlx5_fs_set_fte,
142 TP_PROTO(const struct fs_fte *fte, bool new_fte),142 TP_PROTO(const struct fs_fte *fte, int new_fte),
143 TP_ARGS(fte, new_fte),143 TP_ARGS(fte, new_fte),
144 TP_STRUCT__entry(144 TP_STRUCT__entry(
145 __field(const struct fs_fte *, fte)145 __field(const struct fs_fte *, fte)
@@ -149,7 +149,7 @@ TRACE_EVENT(mlx5_fs_set_fte, · 3 unmodified lines
149 __field(u32, action)149 __field(u32, action)
150 __field(u32, flow_tag)150 __field(u32, flow_tag)
151 __field(u8, mask_enable)151 __field(u8, mask_enable)
152 __field(bool, new_fte)152 __field(int, new_fte)
153 __array(u32, mask_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))153 __array(u32, mask_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
154 __array(u32, mask_inner, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))154 __array(u32, mask_inner, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
155 __array(u32, mask_misc, MLX5_ST_SZ_DW(fte_match_set_misc))155 __array(u32, mask_misc, MLX5_ST_SZ_DW(fte_match_set_misc))
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c+2−2
@@ -291,7 +291,7 @@ void mlx5e_enable_vlan_filter(struct mlx5e_priv *priv) · 290 unmodified lines
291 priv->fs.vlan.filter_disabled = false;291 priv->fs.vlan.filter_disabled = false;
292 if (priv->netdev->flags & IFF_PROMISC)292 if (priv->netdev->flags & IFF_PROMISC)
293 return;293 return;
294 mlx5e_del_any_vid_rules(priv);294 mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_CTAG_VID, 0);
295}295}
296 296
297void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv)297void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv)
@@ -302,7 +302,7 @@ void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv) · 4 unmodified lines
302 priv->fs.vlan.filter_disabled = true;302 priv->fs.vlan.filter_disabled = true;
303 if (priv->netdev->flags & IFF_PROMISC)303 if (priv->netdev->flags & IFF_PROMISC)
304 return;304 return;
305 mlx5e_add_any_vid_rules(priv);305 mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_CTAG_VID, 0);
306}306}
307 307
308int mlx5e_vlan_rx_add_vid(struct net_device *dev, __always_unused __be16 proto,308int mlx5e_vlan_rx_add_vid(struct net_device *dev, __always_unused __be16 proto,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+5−8
@@ -184,7 +184,6 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv) · 183 unmodified lines
184 struct mlx5e_sw_stats temp, *s = &temp;184 struct mlx5e_sw_stats temp, *s = &temp;
185 struct mlx5e_rq_stats *rq_stats;185 struct mlx5e_rq_stats *rq_stats;
186 struct mlx5e_sq_stats *sq_stats;186 struct mlx5e_sq_stats *sq_stats;
187 u64 tx_offload_none = 0;
188 int i, j;187 int i, j;
189 188
190 memset(s, 0, sizeof(*s));189 memset(s, 0, sizeof(*s));
@@ -199,6 +198,7 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv) · 8 unmodified lines
199 s->rx_lro_bytes += rq_stats->lro_bytes;198 s->rx_lro_bytes += rq_stats->lro_bytes;
200 s->rx_csum_none += rq_stats->csum_none;199 s->rx_csum_none += rq_stats->csum_none;
201 s->rx_csum_complete += rq_stats->csum_complete;200 s->rx_csum_complete += rq_stats->csum_complete;
201 s->rx_csum_unnecessary += rq_stats->csum_unnecessary;
202 s->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;202 s->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;
203 s->rx_xdp_drop += rq_stats->xdp_drop;203 s->rx_xdp_drop += rq_stats->xdp_drop;
204 s->rx_xdp_tx += rq_stats->xdp_tx;204 s->rx_xdp_tx += rq_stats->xdp_tx;
@@ -229,14 +229,11 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv) · 24 unmodified lines
229 s->tx_queue_dropped += sq_stats->dropped;229 s->tx_queue_dropped += sq_stats->dropped;
230 s->tx_xmit_more += sq_stats->xmit_more;230 s->tx_xmit_more += sq_stats->xmit_more;
231 s->tx_csum_partial_inner += sq_stats->csum_partial_inner;231 s->tx_csum_partial_inner += sq_stats->csum_partial_inner;
232 tx_offload_none += sq_stats->csum_none;232 s->tx_csum_none += sq_stats->csum_none;
233 s->tx_csum_partial += sq_stats->csum_partial;
233 }234 }
234 }235 }
235 236
236 /* Update calculated offload counters */
237 s->tx_csum_partial = s->tx_packets - tx_offload_none - s->tx_csum_partial_inner;
238 s->rx_csum_unnecessary = s->rx_packets - s->rx_csum_none - s->rx_csum_complete;
239
240 s->link_down_events_phy = MLX5_GET(ppcnt_reg,237 s->link_down_events_phy = MLX5_GET(ppcnt_reg,
241 priv->stats.pport.phy_counters,238 priv->stats.pport.phy_counters,
242 counter_set.phys_layer_cntrs.link_down_events);239 counter_set.phys_layer_cntrs.link_down_events);
@@ -3333,8 +3330,8 @@ static int mlx5e_handle_feature(struct net_device *netdev, · 3090 unmodified lines
3333 3330
3334 err = feature_handler(netdev, enable);3331 err = feature_handler(netdev, enable);
3335 if (err) {3332 if (err) {
3336 netdev_err(netdev, "%s feature 0x%llx failed err %d\n",3333 netdev_err(netdev, "%s feature %pNF failed, err %d\n",
3337 enable ? "Enable" : "Disable", feature, err);3334 enable ? "Enable" : "Disable", &feature, err);
3338 return err;3335 return err;
3339 }3336 }
3340 3337
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+3−0
@@ -627,6 +627,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, · 626 unmodified lines
627 627
628 if (lro) {628 if (lro) {
629 skb->ip_summed = CHECKSUM_UNNECESSARY;629 skb->ip_summed = CHECKSUM_UNNECESSARY;
630 rq->stats.csum_unnecessary++;
630 return;631 return;
631 }632 }
632 633
@@ -644,7 +645,9 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, · 11 unmodified lines
644 skb->csum_level = 1;645 skb->csum_level = 1;
645 skb->encapsulation = 1;646 skb->encapsulation = 1;
646 rq->stats.csum_unnecessary_inner++;647 rq->stats.csum_unnecessary_inner++;
648 return;
647 }649 }
650 rq->stats.csum_unnecessary++;
648 return;651 return;
649 }652 }
650csum_none:653csum_none:
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h+6−0
@@ -68,6 +68,7 @@ struct mlx5e_sw_stats { · 67 unmodified lines
68 u64 rx_xdp_drop;68 u64 rx_xdp_drop;
69 u64 rx_xdp_tx;69 u64 rx_xdp_tx;
70 u64 rx_xdp_tx_full;70 u64 rx_xdp_tx_full;
71 u64 tx_csum_none;
71 u64 tx_csum_partial;72 u64 tx_csum_partial;
72 u64 tx_csum_partial_inner;73 u64 tx_csum_partial_inner;
73 u64 tx_queue_stopped;74 u64 tx_queue_stopped;
@@ -108,6 +109,7 @@ static const struct counter_desc sw_stats_desc[] = { · 34 unmodified lines
108 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },109 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },
109 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx) },110 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx) },
110 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx_full) },111 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx_full) },
112 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_none) },
111 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial) },113 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial) },
112 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial_inner) },114 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial_inner) },
113 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_stopped) },115 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_stopped) },
@@ -339,6 +341,7 @@ struct mlx5e_rq_stats { · 225 unmodified lines
339 u64 packets;341 u64 packets;
340 u64 bytes;342 u64 bytes;
341 u64 csum_complete;343 u64 csum_complete;
344 u64 csum_unnecessary;
342 u64 csum_unnecessary_inner;345 u64 csum_unnecessary_inner;
343 u64 csum_none;346 u64 csum_none;
344 u64 lro_packets;347 u64 lro_packets;
@@ -363,6 +366,7 @@ static const struct counter_desc rq_stats_desc[] = { · 18 unmodified lines
363 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },366 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },
364 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },367 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },
365 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },368 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },
369 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary) },
366 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },370 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },
367 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },371 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },
368 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, xdp_drop) },372 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, xdp_drop) },
@@ -392,6 +396,7 @@ struct mlx5e_sq_stats { · 23 unmodified lines
392 u64 tso_bytes;396 u64 tso_bytes;
393 u64 tso_inner_packets;397 u64 tso_inner_packets;
394 u64 tso_inner_bytes;398 u64 tso_inner_bytes;
399 u64 csum_partial;
395 u64 csum_partial_inner;400 u64 csum_partial_inner;
396 u64 nop;401 u64 nop;
397 /* less likely accessed in data path */402 /* less likely accessed in data path */
@@ -408,6 +413,7 @@ static const struct counter_desc sq_stats_desc[] = { · 10 unmodified lines
408 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_bytes) },413 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_bytes) },
409 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_packets) },414 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_packets) },
410 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_bytes) },415 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_bytes) },
416 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_partial) },
411 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_partial_inner) },417 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_partial_inner) },
412 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, nop) },418 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, nop) },
413 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_none) },419 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_none) },
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+83−8
@@ -1317,6 +1317,69 @@ static bool csum_offload_supported(struct mlx5e_priv *priv, u32 action, u32 upda · 1316 unmodified lines
1317 return true;1317 return true;
1318}1318}
1319 1319
1320static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
1321 struct tcf_exts *exts)
1322{
1323 const struct tc_action *a;
1324 bool modify_ip_header;
1325 LIST_HEAD(actions);
1326 u8 htype, ip_proto;
1327 void *headers_v;
1328 u16 ethertype;
1329 int nkeys, i;
1330
1331 headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);
1332 ethertype = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ethertype);
1333
1334 /* for non-IP we only re-write MACs, so we're okay */
1335 if (ethertype != ETH_P_IP && ethertype != ETH_P_IPV6)
1336 goto out_ok;
1337
1338 modify_ip_header = false;
1339 tcf_exts_to_list(exts, &actions);
1340 list_for_each_entry(a, &actions, list) {
1341 if (!is_tcf_pedit(a))
1342 continue;
1343
1344 nkeys = tcf_pedit_nkeys(a);
1345 for (i = 0; i < nkeys; i++) {
1346 htype = tcf_pedit_htype(a, i);
1347 if (htype == TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 ||
1348 htype == TCA_PEDIT_KEY_EX_HDR_TYPE_IP6) {
1349 modify_ip_header = true;
1350 break;
1351 }
1352 }
1353 }
1354
1355 ip_proto = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ip_protocol);
1356 if (modify_ip_header && ip_proto != IPPROTO_TCP && ip_proto != IPPROTO_UDP) {
1357 pr_info("can't offload re-write of ip proto %d\n", ip_proto);
1358 return false;
1359 }
1360
1361out_ok:
1362 return true;
1363}
1364
1365static bool actions_match_supported(struct mlx5e_priv *priv,
1366 struct tcf_exts *exts,
1367 struct mlx5e_tc_flow_parse_attr *parse_attr,
1368 struct mlx5e_tc_flow *flow)
1369{
1370 u32 actions;
1371
1372 if (flow->flags & MLX5E_TC_FLOW_ESWITCH)
1373 actions = flow->esw_attr->action;
1374 else
1375 actions = flow->nic_attr->action;
1376
1377 if (actions & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
1378 return modify_header_match_supported(&parse_attr->spec, exts);
1379
1380 return true;
1381}
1382
1320static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,1383static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
1321 struct mlx5e_tc_flow_parse_attr *parse_attr,1384 struct mlx5e_tc_flow_parse_attr *parse_attr,
1322 struct mlx5e_tc_flow *flow)1385 struct mlx5e_tc_flow *flow)
@@ -1378,6 +1441,9 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, · 55 unmodified lines
1378 return -EINVAL;1441 return -EINVAL;
1379 }1442 }
1380 1443
1444 if (!actions_match_supported(priv, exts, parse_attr, flow))
1445 return -EOPNOTSUPP;
1446
1381 return 0;1447 return 0;
1382}1448}
1383 1449
@@ -1564,7 +1630,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv, · 180 unmodified lines
1564 break;1630 break;
1565 default:1631 default:
1566 err = -EOPNOTSUPP;1632 err = -EOPNOTSUPP;
1567 goto out;1633 goto free_encap;
1568 }1634 }
1569 fl4.flowi4_tos = tun_key->tos;1635 fl4.flowi4_tos = tun_key->tos;
1570 fl4.daddr = tun_key->u.ipv4.dst;1636 fl4.daddr = tun_key->u.ipv4.dst;
@@ -1573,7 +1639,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv, · 2 unmodified lines
1573 err = mlx5e_route_lookup_ipv4(priv, mirred_dev, &out_dev,1639 err = mlx5e_route_lookup_ipv4(priv, mirred_dev, &out_dev,
1574 &fl4, &n, &ttl);1640 &fl4, &n, &ttl);
1575 if (err)1641 if (err)
1576 goto out;1642 goto free_encap;
1577 1643
1578 /* used by mlx5e_detach_encap to lookup a neigh hash table1644 /* used by mlx5e_detach_encap to lookup a neigh hash table
1579 * entry in the neigh hash table when a user deletes a rule1645 * entry in the neigh hash table when a user deletes a rule
@@ -1590,7 +1656,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv, · 10 unmodified lines
1590 */1656 */
1591 err = mlx5e_rep_encap_entry_attach(netdev_priv(out_dev), e);1657 err = mlx5e_rep_encap_entry_attach(netdev_priv(out_dev), e);
1592 if (err)1658 if (err)
1593 goto out;1659 goto free_encap;
1594 1660
1595 read_lock_bh(&n->lock);1661 read_lock_bh(&n->lock);
1596 nud_state = n->nud_state;1662 nud_state = n->nud_state;
@@ -1630,8 +1696,9 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv, · 33 unmodified lines
1630 1696
1631destroy_neigh_entry:1697destroy_neigh_entry:
1632 mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);1698 mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);
1633out:1699free_encap:
1634 kfree(encap_header);1700 kfree(encap_header);
1701out:
1635 if (n)1702 if (n)
1636 neigh_release(n);1703 neigh_release(n);
1637 return err;1704 return err;
@@ -1668,7 +1735,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv, · 30 unmodified lines
1668 break;1735 break;
1669 default:1736 default:
1670 err = -EOPNOTSUPP;1737 err = -EOPNOTSUPP;
1671 goto out;1738 goto free_encap;
1672 }1739 }
1673 1740
1674 fl6.flowlabel = ip6_make_flowinfo(RT_TOS(tun_key->tos), tun_key->label);1741 fl6.flowlabel = ip6_make_flowinfo(RT_TOS(tun_key->tos), tun_key->label);
@@ -1678,7 +1745,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv, · 3 unmodified lines
1678 err = mlx5e_route_lookup_ipv6(priv, mirred_dev, &out_dev,1745 err = mlx5e_route_lookup_ipv6(priv, mirred_dev, &out_dev,
1679 &fl6, &n, &ttl);1746 &fl6, &n, &ttl);
1680 if (err)1747 if (err)
1681 goto out;1748 goto free_encap;
1682 1749
1683 /* used by mlx5e_detach_encap to lookup a neigh hash table1750 /* used by mlx5e_detach_encap to lookup a neigh hash table
1684 * entry in the neigh hash table when a user deletes a rule1751 * entry in the neigh hash table when a user deletes a rule
@@ -1695,7 +1762,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv, · 10 unmodified lines
1695 */1762 */
1696 err = mlx5e_rep_encap_entry_attach(netdev_priv(out_dev), e);1763 err = mlx5e_rep_encap_entry_attach(netdev_priv(out_dev), e);
1697 if (err)1764 if (err)
1698 goto out;1765 goto free_encap;
1699 1766
1700 read_lock_bh(&n->lock);1767 read_lock_bh(&n->lock);
1701 nud_state = n->nud_state;1768 nud_state = n->nud_state;
@@ -1736,8 +1803,9 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv, · 34 unmodified lines
1736 1803
1737destroy_neigh_entry:1804destroy_neigh_entry:
1738 mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);1805 mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);
1739out:1806free_encap:
1740 kfree(encap_header);1807 kfree(encap_header);
1808out:
1741 if (n)1809 if (n)
1742 neigh_release(n);1810 neigh_release(n);
1743 return err;1811 return err;
@@ -1791,6 +1859,7 @@ vxlan_encap_offload_err: · 47 unmodified lines
1791 }1859 }
1792 }1860 }
1793 1861
1862 /* must verify if encap is valid or not */
1794 if (found)1863 if (found)
1795 goto attach_flow;1864 goto attach_flow;
1796 1865
@@ -1817,6 +1886,8 @@ attach_flow: · 20 unmodified lines
1817 *encap_dev = e->out_dev;1886 *encap_dev = e->out_dev;
1818 if (e->flags & MLX5_ENCAP_ENTRY_VALID)1887 if (e->flags & MLX5_ENCAP_ENTRY_VALID)
1819 attr->encap_id = e->encap_id;1888 attr->encap_id = e->encap_id;
1889 else
1890 err = -EAGAIN;
1820 1891
1821 return err;1892 return err;
1822 1893
@@ -1934,6 +2005,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, · 111 unmodified lines
1934 2005
1935 return -EINVAL;2006 return -EINVAL;
1936 }2007 }
2008
2009 if (!actions_match_supported(priv, exts, parse_attr, flow))
2010 return -EOPNOTSUPP;
2011
1937 return err;2012 return err;
1938}2013}
1939 2014
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c+1−0
@@ -193,6 +193,7 @@ mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct · 192 unmodified lines
193 sq->stats.csum_partial_inner++;193 sq->stats.csum_partial_inner++;
194 } else {194 } else {
195 eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;195 eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;
196 sq->stats.csum_partial++;
196 }197 }
197 } else198 } else
198 sq->stats.csum_none++;199 sq->stats.csum_none++;
drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.c+2−2
@@ -71,11 +71,11 @@ int mlx5_fpga_access_reg(struct mlx5_core_dev *dev, u8 size, u64 addr, · 70 unmodified lines
71 return 0;71 return 0;
72}72}
73 73
74int mlx5_fpga_caps(struct mlx5_core_dev *dev, u32 *caps)74int mlx5_fpga_caps(struct mlx5_core_dev *dev)
75{75{
76 u32 in[MLX5_ST_SZ_DW(fpga_cap)] = {0};76 u32 in[MLX5_ST_SZ_DW(fpga_cap)] = {0};
77 77
78 return mlx5_core_access_reg(dev, in, sizeof(in), caps,78 return mlx5_core_access_reg(dev, in, sizeof(in), dev->caps.fpga,
79 MLX5_ST_SZ_BYTES(fpga_cap),79 MLX5_ST_SZ_BYTES(fpga_cap),
80 MLX5_REG_FPGA_CAP, 0, 0);80 MLX5_REG_FPGA_CAP, 0, 0);
81}81}
drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.h+1−1
@@ -65,7 +65,7 @@ struct mlx5_fpga_qp_counters { · 64 unmodified lines
65 u64 rx_total_drop;65 u64 rx_total_drop;
66};66};
67 67
68int mlx5_fpga_caps(struct mlx5_core_dev *dev, u32 *caps);68int mlx5_fpga_caps(struct mlx5_core_dev *dev);
69int mlx5_fpga_query(struct mlx5_core_dev *dev, struct mlx5_fpga_query *query);69int mlx5_fpga_query(struct mlx5_core_dev *dev, struct mlx5_fpga_query *query);
70int mlx5_fpga_ctrl_op(struct mlx5_core_dev *dev, u8 op);70int mlx5_fpga_ctrl_op(struct mlx5_core_dev *dev, u8 op);
71int mlx5_fpga_access_reg(struct mlx5_core_dev *dev, u8 size, u64 addr,71int mlx5_fpga_access_reg(struct mlx5_core_dev *dev, u8 size, u64 addr,
drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c+1−2
@@ -139,8 +139,7 @@ int mlx5_fpga_device_start(struct mlx5_core_dev *mdev) · 138 unmodified lines
139 if (err)139 if (err)
140 goto out;140 goto out;
141 141
142 err = mlx5_fpga_caps(fdev->mdev,142 err = mlx5_fpga_caps(fdev->mdev);
143 fdev->mdev->caps.hca_cur[MLX5_CAP_FPGA]);
144 if (err)143 if (err)
145 goto out;144 goto out;
146 145
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c+8−0
@@ -293,6 +293,9 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev, · 292 unmodified lines
293 }293 }
294 294
295 if (fte->action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {295 if (fte->action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
296 int max_list_size = BIT(MLX5_CAP_FLOWTABLE_TYPE(dev,
297 log_max_flow_counter,
298 ft->type));
296 int list_size = 0;299 int list_size = 0;
297 300
298 list_for_each_entry(dst, &fte->node.children, node.list) {301 list_for_each_entry(dst, &fte->node.children, node.list) {
@@ -305,12 +308,17 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev, · 6 unmodified lines
305 in_dests += MLX5_ST_SZ_BYTES(dest_format_struct);308 in_dests += MLX5_ST_SZ_BYTES(dest_format_struct);
306 list_size++;309 list_size++;
307 }310 }
311 if (list_size > max_list_size) {
312 err = -EINVAL;
313 goto err_out;
314 }
308 315
309 MLX5_SET(flow_context, in_flow_context, flow_counter_list_size,316 MLX5_SET(flow_context, in_flow_context, flow_counter_list_size,
310 list_size);317 list_size);
311 }318 }
312 319
313 err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));320 err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
321err_out:
314 kvfree(in);322 kvfree(in);
315 return err;323 return err;
316}324}
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h+11−0
@@ -52,6 +52,7 @@ enum fs_flow_table_type { · 51 unmodified lines
52 FS_FT_FDB = 0X4,52 FS_FT_FDB = 0X4,
53 FS_FT_SNIFFER_RX = 0X5,53 FS_FT_SNIFFER_RX = 0X5,
54 FS_FT_SNIFFER_TX = 0X6,54 FS_FT_SNIFFER_TX = 0X6,
55 FS_FT_MAX_TYPE = FS_FT_SNIFFER_TX,
55};56};
56 57
57enum fs_flow_table_op_mod {58enum fs_flow_table_op_mod {
@@ -260,4 +261,14 @@ void mlx5_cleanup_fs(struct mlx5_core_dev *dev); · 202 unmodified lines
260#define fs_for_each_dst(pos, fte) \261#define fs_for_each_dst(pos, fte) \
261 fs_list_for_each_entry(pos, &(fte)->node.children)262 fs_list_for_each_entry(pos, &(fte)->node.children)
262 263
264#define MLX5_CAP_FLOWTABLE_TYPE(mdev, cap, type) ( \
265 (type == FS_FT_NIC_RX) ? MLX5_CAP_FLOWTABLE_NIC_RX(mdev, cap) : \
266 (type == FS_FT_ESW_EGRESS_ACL) ? MLX5_CAP_ESW_EGRESS_ACL(mdev, cap) : \
267 (type == FS_FT_ESW_INGRESS_ACL) ? MLX5_CAP_ESW_INGRESS_ACL(mdev, cap) : \
268 (type == FS_FT_FDB) ? MLX5_CAP_ESW_FLOWTABLE_FDB(mdev, cap) : \
269 (type == FS_FT_SNIFFER_RX) ? MLX5_CAP_FLOWTABLE_SNIFFER_RX(mdev, cap) : \
270 (type == FS_FT_SNIFFER_TX) ? MLX5_CAP_FLOWTABLE_SNIFFER_TX(mdev, cap) : \
271 (BUILD_BUG_ON_ZERO(FS_FT_SNIFFER_TX != FS_FT_MAX_TYPE))\
272 )
273
263#endif274#endif
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c+2−1
@@ -572,12 +572,13 @@ void mlx5_rdma_netdev_free(struct net_device *netdev) · 571 unmodified lines
572{572{
573 struct mlx5e_priv *priv = mlx5i_epriv(netdev);573 struct mlx5e_priv *priv = mlx5i_epriv(netdev);
574 const struct mlx5e_profile *profile = priv->profile;574 const struct mlx5e_profile *profile = priv->profile;
575 struct mlx5_core_dev *mdev = priv->mdev;
575 576
576 mlx5e_detach_netdev(priv);577 mlx5e_detach_netdev(priv);
577 profile->cleanup(priv);578 profile->cleanup(priv);
578 destroy_workqueue(priv->wq);579 destroy_workqueue(priv->wq);
579 free_netdev(netdev);580 free_netdev(netdev);
580 581
581 mlx5e_destroy_mdev_resources(priv->mdev);582 mlx5e_destroy_mdev_resources(mdev);
582}583}
583EXPORT_SYMBOL(mlx5_rdma_netdev_free);584EXPORT_SYMBOL(mlx5_rdma_netdev_free);
drivers/net/ethernet/mellanox/mlx5/core/sriov.c+1−1
@@ -109,7 +109,7 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs) · 108 unmodified lines
109 mlx5_core_warn(dev,109 mlx5_core_warn(dev,
110 "failed to restore VF %d settings, err %d\n",110 "failed to restore VF %d settings, err %d\n",
111 vf, err);111 vf, err);
112 continue;112 continue;
113 }113 }
114 }114 }
115 mlx5_core_dbg(dev, "successfully enabled VF* %d\n", vf);115 mlx5_core_dbg(dev, "successfully enabled VF* %d\n", vf);
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c+14−4
@@ -2723,6 +2723,7 @@ static void mlxsw_sp_nexthop_type_fini(struct mlxsw_sp *mlxsw_sp, · 2722 unmodified lines
2723 mlxsw_sp_nexthop_rif_fini(nh);2723 mlxsw_sp_nexthop_rif_fini(nh);
2724 break;2724 break;
2725 case MLXSW_SP_NEXTHOP_TYPE_IPIP:2725 case MLXSW_SP_NEXTHOP_TYPE_IPIP:
2726 mlxsw_sp_nexthop_rif_fini(nh);
2726 mlxsw_sp_nexthop_ipip_fini(mlxsw_sp, nh);2727 mlxsw_sp_nexthop_ipip_fini(mlxsw_sp, nh);
2727 break;2728 break;
2728 }2729 }
@@ -2742,7 +2743,11 @@ static int mlxsw_sp_nexthop4_type_init(struct mlxsw_sp *mlxsw_sp, · 13 unmodified lines
2742 router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev,2743 router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev,
2743 MLXSW_SP_L3_PROTO_IPV4)) {2744 MLXSW_SP_L3_PROTO_IPV4)) {
2744 nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP;2745 nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP;
2745 return mlxsw_sp_nexthop_ipip_init(mlxsw_sp, ipipt, nh, dev);2746 err = mlxsw_sp_nexthop_ipip_init(mlxsw_sp, ipipt, nh, dev);
2747 if (err)
2748 return err;
2749 mlxsw_sp_nexthop_rif_init(nh, &nh->ipip_entry->ol_lb->common);
2750 return 0;
2746 }2751 }
2747 2752
2748 nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH;2753 nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH;
@@ -4009,7 +4014,11 @@ static int mlxsw_sp_nexthop6_type_init(struct mlxsw_sp *mlxsw_sp, · 1260 unmodified lines
4009 router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev,4014 router->ipip_ops_arr[ipipt]->can_offload(mlxsw_sp, dev,
4010 MLXSW_SP_L3_PROTO_IPV6)) {4015 MLXSW_SP_L3_PROTO_IPV6)) {
4011 nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP;4016 nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP;
4012 return mlxsw_sp_nexthop_ipip_init(mlxsw_sp, ipipt, nh, dev);4017 err = mlxsw_sp_nexthop_ipip_init(mlxsw_sp, ipipt, nh, dev);
4018 if (err)
4019 return err;
4020 mlxsw_sp_nexthop_rif_init(nh, &nh->ipip_entry->ol_lb->common);
4021 return 0;
4013 }4022 }
4014 4023
4015 nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH;4024 nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH;
@@ -5068,6 +5077,7 @@ mlxsw_sp_rif_create(struct mlxsw_sp *mlxsw_sp, · 1052 unmodified lines
5068 vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN);5077 vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN);
5069 if (IS_ERR(vr))5078 if (IS_ERR(vr))
5070 return ERR_CAST(vr);5079 return ERR_CAST(vr);
5080 vr->rif_count++;
5071 5081
5072 err = mlxsw_sp_rif_index_alloc(mlxsw_sp, &rif_index);5082 err = mlxsw_sp_rif_index_alloc(mlxsw_sp, &rif_index);
5073 if (err)5083 if (err)
@@ -5099,7 +5109,6 @@ mlxsw_sp_rif_create(struct mlxsw_sp *mlxsw_sp, · 25 unmodified lines
5099 5109
5100 mlxsw_sp_rif_counters_alloc(rif);5110 mlxsw_sp_rif_counters_alloc(rif);
5101 mlxsw_sp->router->rifs[rif_index] = rif;5111 mlxsw_sp->router->rifs[rif_index] = rif;
5102 vr->rif_count++;
5103 5112
5104 return rif;5113 return rif;
5105 5114
@@ -5110,6 +5119,7 @@ err_fid_get: · 4 unmodified lines
5110 kfree(rif);5119 kfree(rif);
5111err_rif_alloc:5120err_rif_alloc:
5112err_rif_index_alloc:5121err_rif_index_alloc:
5122 vr->rif_count--;
5113 mlxsw_sp_vr_put(vr);5123 mlxsw_sp_vr_put(vr);
5114 return ERR_PTR(err);5124 return ERR_PTR(err);
5115}5125}
@@ -5124,7 +5134,6 @@ void mlxsw_sp_rif_destroy(struct mlxsw_sp_rif *rif) · 8 unmodified lines
5124 mlxsw_sp_router_rif_gone_sync(mlxsw_sp, rif);5134 mlxsw_sp_router_rif_gone_sync(mlxsw_sp, rif);
5125 vr = &mlxsw_sp->router->vrs[rif->vr_id];5135 vr = &mlxsw_sp->router->vrs[rif->vr_id];
5126 5136
5127 vr->rif_count--;
5128 mlxsw_sp->router->rifs[rif->rif_index] = NULL;5137 mlxsw_sp->router->rifs[rif->rif_index] = NULL;
5129 mlxsw_sp_rif_counters_free(rif);5138 mlxsw_sp_rif_counters_free(rif);
5130 ops->deconfigure(rif);5139 ops->deconfigure(rif);
@@ -5132,6 +5141,7 @@ void mlxsw_sp_rif_destroy(struct mlxsw_sp_rif *rif) · 1 unmodified line
5132 /* Loopback RIFs are not associated with a FID. */5141 /* Loopback RIFs are not associated with a FID. */
5133 mlxsw_sp_fid_put(fid);5142 mlxsw_sp_fid_put(fid);
5134 kfree(rif);5143 kfree(rif);
5144 vr->rif_count--;
5135 mlxsw_sp_vr_put(vr);5145 mlxsw_sp_vr_put(vr);
5136}5146}
5137 5147
drivers/net/ethernet/qualcomm/emac/emac-ethtool.c+30−0
@@ -88,6 +88,8 @@ static void emac_set_msglevel(struct net_device *netdev, u32 data) · 87 unmodified lines
88static int emac_get_sset_count(struct net_device *netdev, int sset)88static int emac_get_sset_count(struct net_device *netdev, int sset)
89{89{
90 switch (sset) {90 switch (sset) {
91 case ETH_SS_PRIV_FLAGS:
92 return 1;
91 case ETH_SS_STATS:93 case ETH_SS_STATS:
92 return EMAC_STATS_LEN;94 return EMAC_STATS_LEN;
93 default:95 default:
@@ -100,6 +102,10 @@ static void emac_get_strings(struct net_device *netdev, u32 stringset, u8 *data) · 6 unmodified lines
100 unsigned int i;102 unsigned int i;
101 103
102 switch (stringset) {104 switch (stringset) {
105 case ETH_SS_PRIV_FLAGS:
106 strcpy(data, "single-pause-mode");
107 break;
108
103 case ETH_SS_STATS:109 case ETH_SS_STATS:
104 for (i = 0; i < EMAC_STATS_LEN; i++) {110 for (i = 0; i < EMAC_STATS_LEN; i++) {
105 strlcpy(data, emac_ethtool_stat_strings[i],111 strlcpy(data, emac_ethtool_stat_strings[i],
@@ -230,6 +236,27 @@ static int emac_get_regs_len(struct net_device *netdev) · 124 unmodified lines
230 return EMAC_MAX_REG_SIZE * sizeof(u32);236 return EMAC_MAX_REG_SIZE * sizeof(u32);
231}237}
232 238
239#define EMAC_PRIV_ENABLE_SINGLE_PAUSE BIT(0)
240
241static int emac_set_priv_flags(struct net_device *netdev, u32 flags)
242{
243 struct emac_adapter *adpt = netdev_priv(netdev);
244
245 adpt->single_pause_mode = !!(flags & EMAC_PRIV_ENABLE_SINGLE_PAUSE);
246
247 if (netif_running(netdev))
248 return emac_reinit_locked(adpt);
249
250 return 0;
251}
252
253static u32 emac_get_priv_flags(struct net_device *netdev)
254{
255 struct emac_adapter *adpt = netdev_priv(netdev);
256
257 return adpt->single_pause_mode ? EMAC_PRIV_ENABLE_SINGLE_PAUSE : 0;
258}
259
233static const struct ethtool_ops emac_ethtool_ops = {260static const struct ethtool_ops emac_ethtool_ops = {
234 .get_link_ksettings = phy_ethtool_get_link_ksettings,261 .get_link_ksettings = phy_ethtool_get_link_ksettings,
235 .set_link_ksettings = phy_ethtool_set_link_ksettings,262 .set_link_ksettings = phy_ethtool_set_link_ksettings,
@@ -253,6 +280,9 @@ static const struct ethtool_ops emac_ethtool_ops = { · 17 unmodified lines
253 280
254 .get_regs_len = emac_get_regs_len,281 .get_regs_len = emac_get_regs_len,
255 .get_regs = emac_get_regs,282 .get_regs = emac_get_regs,
283
284 .set_priv_flags = emac_set_priv_flags,
285 .get_priv_flags = emac_get_priv_flags,
256};286};
257 287
258void emac_set_ethtool_ops(struct net_device *netdev)288void emac_set_ethtool_ops(struct net_device *netdev)
drivers/net/ethernet/qualcomm/emac/emac-mac.c+24−1
@@ -551,6 +551,28 @@ static void emac_mac_start(struct emac_adapter *adpt) · 550 unmodified lines
551 mac &= ~(HUGEN | VLAN_STRIP | TPAUSE | SIMR | HUGE | MULTI_ALL |551 mac &= ~(HUGEN | VLAN_STRIP | TPAUSE | SIMR | HUGE | MULTI_ALL |
552 DEBUG_MODE | SINGLE_PAUSE_MODE);552 DEBUG_MODE | SINGLE_PAUSE_MODE);
553 553
554 /* Enable single-pause-frame mode if requested.
555 *
556 * If enabled, the EMAC will send a single pause frame when the RX
557 * queue is full. This normally leads to packet loss because
558 * the pause frame disables the remote MAC only for 33ms (the quanta),
559 * and then the remote MAC continues sending packets even though
560 * the RX queue is still full.
561 *
562 * If disabled, the EMAC sends a pause frame every 31ms until the RX
563 * queue is no longer full. Normally, this is the preferred
564 * method of operation. However, when the system is hung (e.g.
565 * cores are halted), the EMAC interrupt handler is never called
566 * and so the RX queue fills up quickly and stays full. The resuling
567 * non-stop "flood" of pause frames sometimes has the effect of
568 * disabling nearby switches. In some cases, other nearby switches
569 * are also affected, shutting down the entire network.
570 *
571 * The user can enable or disable single-pause-frame mode
572 * via ethtool.
573 */
574 mac |= adpt->single_pause_mode ? SINGLE_PAUSE_MODE : 0;
575
554 writel_relaxed(csr1, adpt->csr + EMAC_EMAC_WRAPPER_CSR1);576 writel_relaxed(csr1, adpt->csr + EMAC_EMAC_WRAPPER_CSR1);
555 577
556 writel_relaxed(mac, adpt->base + EMAC_MAC_CTRL);578 writel_relaxed(mac, adpt->base + EMAC_MAC_CTRL);
@@ -876,7 +898,8 @@ static void emac_mac_rx_descs_refill(struct emac_adapter *adpt, · 319 unmodified lines
876 898
877 curr_rxbuf->dma_addr =899 curr_rxbuf->dma_addr =
878 dma_map_single(adpt->netdev->dev.parent, skb->data,900 dma_map_single(adpt->netdev->dev.parent, skb->data,
879 curr_rxbuf->length, DMA_FROM_DEVICE);901 adpt->rxbuf_size, DMA_FROM_DEVICE);
902
880 ret = dma_mapping_error(adpt->netdev->dev.parent,903 ret = dma_mapping_error(adpt->netdev->dev.parent,
881 curr_rxbuf->dma_addr);904 curr_rxbuf->dma_addr);
882 if (ret) {905 if (ret) {
drivers/net/ethernet/qualcomm/emac/emac.c+3−0
@@ -443,6 +443,9 @@ static void emac_init_adapter(struct emac_adapter *adpt) · 442 unmodified lines
443 443
444 /* default to automatic flow control */444 /* default to automatic flow control */
445 adpt->automatic = true;445 adpt->automatic = true;
446
447 /* Disable single-pause-frame mode by default */
448 adpt->single_pause_mode = false;
446}449}
447 450
448/* Get the clock */451/* Get the clock */
drivers/net/ethernet/qualcomm/emac/emac.h+3−0
@@ -363,6 +363,9 @@ struct emac_adapter { · 362 unmodified lines
363 bool tx_flow_control;363 bool tx_flow_control;
364 bool rx_flow_control;364 bool rx_flow_control;
365 365
366 /* True == use single-pause-frame mode. */
367 bool single_pause_mode;
368
366 /* Ring parameter */369 /* Ring parameter */
367 u8 tpd_burst;370 u8 tpd_burst;
368 u8 rfd_burst;371 u8 rfd_burst;
drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c+1−4
@@ -51,10 +51,7 @@ struct rmnet_walk_data { · 50 unmodified lines
51 51
52static int rmnet_is_real_dev_registered(const struct net_device *real_dev)52static int rmnet_is_real_dev_registered(const struct net_device *real_dev)
53{53{
54 rx_handler_func_t *rx_handler;54 return rcu_access_pointer(real_dev->rx_handler) == rmnet_rx_handler;
55
56 rx_handler = rcu_dereference(real_dev->rx_handler);
57 return (rx_handler == rmnet_rx_handler);
58}55}
59 56
60/* Needs rtnl lock */57/* Needs rtnl lock */
drivers/net/ethernet/realtek/8139too.c+3−2
@@ -2135,11 +2135,12 @@ static int rtl8139_poll(struct napi_struct *napi, int budget) · 2134 unmodified lines
2135 if (likely(RTL_R16(IntrStatus) & RxAckBits))2135 if (likely(RTL_R16(IntrStatus) & RxAckBits))
2136 work_done += rtl8139_rx(dev, tp, budget);2136 work_done += rtl8139_rx(dev, tp, budget);
2137 2137
2138 if (work_done < budget && napi_complete_done(napi, work_done)) {2138 if (work_done < budget) {
2139 unsigned long flags;2139 unsigned long flags;
2140 2140
2141 spin_lock_irqsave(&tp->lock, flags);2141 spin_lock_irqsave(&tp->lock, flags);
2142 RTL_W16_F(IntrMask, rtl8139_intr_mask);2142 if (napi_complete_done(napi, work_done))
2143 RTL_W16_F(IntrMask, rtl8139_intr_mask);
2143 spin_unlock_irqrestore(&tp->lock, flags);2144 spin_unlock_irqrestore(&tp->lock, flags);
2144 }2145 }
2145 spin_unlock(&tp->rx_lock);2146 spin_unlock(&tp->rx_lock);
drivers/net/ethernet/rocker/rocker_tlv.h+30−18
@@ -139,40 +139,52 @@ rocker_tlv_start(struct rocker_desc_info *desc_info) · 138 unmodified lines
139int rocker_tlv_put(struct rocker_desc_info *desc_info,139int rocker_tlv_put(struct rocker_desc_info *desc_info,
140 int attrtype, int attrlen, const void *data);140 int attrtype, int attrlen, const void *data);
141 141
142static inline int rocker_tlv_put_u8(struct rocker_desc_info *desc_info,142static inline int
143 int attrtype, u8 value)143rocker_tlv_put_u8(struct rocker_desc_info *desc_info, int attrtype, u8 value)
144{144{
145 return rocker_tlv_put(desc_info, attrtype, sizeof(u8), &value);145 u8 tmp = value; /* work around GCC PR81715 */
146
147 return rocker_tlv_put(desc_info, attrtype, sizeof(u8), &tmp);
146}148}
147 149
148static inline int rocker_tlv_put_u16(struct rocker_desc_info *desc_info,150static inline int
149 int attrtype, u16 value)151rocker_tlv_put_u16(struct rocker_desc_info *desc_info, int attrtype, u16 value)
150{152{
151 return rocker_tlv_put(desc_info, attrtype, sizeof(u16), &value);153 u16 tmp = value;
154
155 return rocker_tlv_put(desc_info, attrtype, sizeof(u16), &tmp);
152}156}
153 157
154static inline int rocker_tlv_put_be16(struct rocker_desc_info *desc_info,158static inline int
155 int attrtype, __be16 value)159rocker_tlv_put_be16(struct rocker_desc_info *desc_info, int attrtype, __be16 value)
156{160{
157 return rocker_tlv_put(desc_info, attrtype, sizeof(__be16), &value);161 __be16 tmp = value;
162
163 return rocker_tlv_put(desc_info, attrtype, sizeof(__be16), &tmp);
158}164}
159 165
160static inline int rocker_tlv_put_u32(struct rocker_desc_info *desc_info,166static inline int
161 int attrtype, u32 value)167rocker_tlv_put_u32(struct rocker_desc_info *desc_info, int attrtype, u32 value)
162{168{
163 return rocker_tlv_put(desc_info, attrtype, sizeof(u32), &value);169 u32 tmp = value;
170
171 return rocker_tlv_put(desc_info, attrtype, sizeof(u32), &tmp);
164}172}
165 173
166static inline int rocker_tlv_put_be32(struct rocker_desc_info *desc_info,174static inline int
167 int attrtype, __be32 value)175rocker_tlv_put_be32(struct rocker_desc_info *desc_info, int attrtype, __be32 value)
168{176{
169 return rocker_tlv_put(desc_info, attrtype, sizeof(__be32), &value);177 __be32 tmp = value;
178
179 return rocker_tlv_put(desc_info, attrtype, sizeof(__be32), &tmp);
170}180}
171 181
172static inline int rocker_tlv_put_u64(struct rocker_desc_info *desc_info,182static inline int
173 int attrtype, u64 value)183rocker_tlv_put_u64(struct rocker_desc_info *desc_info, int attrtype, u64 value)
174{184{
175 return rocker_tlv_put(desc_info, attrtype, sizeof(u64), &value);185 u64 tmp = value;
186
187 return rocker_tlv_put(desc_info, attrtype, sizeof(u64), &tmp);
176}188}
177 189
178static inline struct rocker_tlv *190static inline struct rocker_tlv *
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c+1−0
@@ -511,6 +511,7 @@ static struct platform_driver dwc_eth_dwmac_driver = { · 510 unmodified lines
511 .remove = dwc_eth_dwmac_remove,511 .remove = dwc_eth_dwmac_remove,
512 .driver = {512 .driver = {
513 .name = "dwc-eth-dwmac",513 .name = "dwc-eth-dwmac",
514 .pm = &stmmac_pltfr_pm_ops,
514 .of_match_table = dwc_eth_dwmac_match,515 .of_match_table = dwc_eth_dwmac_match,
515 },516 },
516};517};
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c+112−0
@@ -83,6 +83,117 @@ struct rk_priv_data { · 82 unmodified lines
83 (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \83 (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
84 ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))84 ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
85 85
86#define RK3128_GRF_MAC_CON0 0x0168
87#define RK3128_GRF_MAC_CON1 0x016c
88
89/* RK3128_GRF_MAC_CON0 */
90#define RK3128_GMAC_TXCLK_DLY_ENABLE GRF_BIT(14)
91#define RK3128_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(14)
92#define RK3128_GMAC_RXCLK_DLY_ENABLE GRF_BIT(15)
93#define RK3128_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(15)
94#define RK3128_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 7)
95#define RK3128_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 0)
96
97/* RK3128_GRF_MAC_CON1 */
98#define RK3128_GMAC_PHY_INTF_SEL_RGMII \
99 (GRF_BIT(6) | GRF_CLR_BIT(7) | GRF_CLR_BIT(8))
100#define RK3128_GMAC_PHY_INTF_SEL_RMII \
101 (GRF_CLR_BIT(6) | GRF_CLR_BIT(7) | GRF_BIT(8))
102#define RK3128_GMAC_FLOW_CTRL GRF_BIT(9)
103#define RK3128_GMAC_FLOW_CTRL_CLR GRF_CLR_BIT(9)
104#define RK3128_GMAC_SPEED_10M GRF_CLR_BIT(10)
105#define RK3128_GMAC_SPEED_100M GRF_BIT(10)
106#define RK3128_GMAC_RMII_CLK_25M GRF_BIT(11)
107#define RK3128_GMAC_RMII_CLK_2_5M GRF_CLR_BIT(11)
108#define RK3128_GMAC_CLK_125M (GRF_CLR_BIT(12) | GRF_CLR_BIT(13))
109#define RK3128_GMAC_CLK_25M (GRF_BIT(12) | GRF_BIT(13))
110#define RK3128_GMAC_CLK_2_5M (GRF_CLR_BIT(12) | GRF_BIT(13))
111#define RK3128_GMAC_RMII_MODE GRF_BIT(14)
112#define RK3128_GMAC_RMII_MODE_CLR GRF_CLR_BIT(14)
113
114static void rk3128_set_to_rgmii(struct rk_priv_data *bsp_priv,
115 int tx_delay, int rx_delay)
116{
117 struct device *dev = &bsp_priv->pdev->dev;
118
119 if (IS_ERR(bsp_priv->grf)) {
120 dev_err(dev, "Missing rockchip,grf property\n");
121 return;
122 }
123
124 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
125 RK3128_GMAC_PHY_INTF_SEL_RGMII |
126 RK3128_GMAC_RMII_MODE_CLR);
127 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON0,
128 DELAY_ENABLE(RK3128, tx_delay, rx_delay) |
129 RK3128_GMAC_CLK_RX_DL_CFG(rx_delay) |
130 RK3128_GMAC_CLK_TX_DL_CFG(tx_delay));
131}
132
133static void rk3128_set_to_rmii(struct rk_priv_data *bsp_priv)
134{
135 struct device *dev = &bsp_priv->pdev->dev;
136
137 if (IS_ERR(bsp_priv->grf)) {
138 dev_err(dev, "Missing rockchip,grf property\n");
139 return;
140 }
141
142 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
143 RK3128_GMAC_PHY_INTF_SEL_RMII | RK3128_GMAC_RMII_MODE);
144}
145
146static void rk3128_set_rgmii_speed(struct rk_priv_data *bsp_priv, int speed)
147{
148 struct device *dev = &bsp_priv->pdev->dev;
149
150 if (IS_ERR(bsp_priv->grf)) {
151 dev_err(dev, "Missing rockchip,grf property\n");
152 return;
153 }
154
155 if (speed == 10)
156 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
157 RK3128_GMAC_CLK_2_5M);
158 else if (speed == 100)
159 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
160 RK3128_GMAC_CLK_25M);
161 else if (speed == 1000)
162 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
163 RK3128_GMAC_CLK_125M);
164 else
165 dev_err(dev, "unknown speed value for RGMII! speed=%d", speed);
166}
167
168static void rk3128_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed)
169{
170 struct device *dev = &bsp_priv->pdev->dev;
171
172 if (IS_ERR(bsp_priv->grf)) {
173 dev_err(dev, "Missing rockchip,grf property\n");
174 return;
175 }
176
177 if (speed == 10) {
178 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
179 RK3128_GMAC_RMII_CLK_2_5M |
180 RK3128_GMAC_SPEED_10M);
181 } else if (speed == 100) {
182 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON1,
183 RK3128_GMAC_RMII_CLK_25M |
184 RK3128_GMAC_SPEED_100M);
185 } else {
186 dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
187 }
188}
189
190static const struct rk_gmac_ops rk3128_ops = {
191 .set_to_rgmii = rk3128_set_to_rgmii,
192 .set_to_rmii = rk3128_set_to_rmii,
193 .set_rgmii_speed = rk3128_set_rgmii_speed,
194 .set_rmii_speed = rk3128_set_rmii_speed,
195};
196
86#define RK3228_GRF_MAC_CON0 0x0900197#define RK3228_GRF_MAC_CON0 0x0900
87#define RK3228_GRF_MAC_CON1 0x0904198#define RK3228_GRF_MAC_CON1 0x0904
88 199
@@ -1313,6 +1424,7 @@ static int rk_gmac_resume(struct device *dev) · 1224 unmodified lines
1313static SIMPLE_DEV_PM_OPS(rk_gmac_pm_ops, rk_gmac_suspend, rk_gmac_resume);1424static SIMPLE_DEV_PM_OPS(rk_gmac_pm_ops, rk_gmac_suspend, rk_gmac_resume);
1314 1425
1315static const struct of_device_id rk_gmac_dwmac_match[] = {1426static const struct of_device_id rk_gmac_dwmac_match[] = {
1427 { .compatible = "rockchip,rk3128-gmac", .data = &rk3128_ops },
1316 { .compatible = "rockchip,rk3228-gmac", .data = &rk3228_ops },1428 { .compatible = "rockchip,rk3228-gmac", .data = &rk3228_ops },
1317 { .compatible = "rockchip,rk3288-gmac", .data = &rk3288_ops },1429 { .compatible = "rockchip,rk3288-gmac", .data = &rk3288_ops },
1318 { .compatible = "rockchip,rk3328-gmac", .data = &rk3328_ops },1430 { .compatible = "rockchip,rk3328-gmac", .data = &rk3328_ops },
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c+7−0
@@ -296,6 +296,7 @@ static void dwmac4_pmt(struct mac_device_info *hw, unsigned long mode) · 295 unmodified lines
296{296{
297 void __iomem *ioaddr = hw->pcsr;297 void __iomem *ioaddr = hw->pcsr;
298 unsigned int pmt = 0;298 unsigned int pmt = 0;
299 u32 config;
299 300
300 if (mode & WAKE_MAGIC) {301 if (mode & WAKE_MAGIC) {
301 pr_debug("GMAC: WOL Magic frame\n");302 pr_debug("GMAC: WOL Magic frame\n");
@@ -306,6 +307,12 @@ static void dwmac4_pmt(struct mac_device_info *hw, unsigned long mode) · 4 unmodified lines
306 pmt |= power_down | global_unicast | wake_up_frame_en;307 pmt |= power_down | global_unicast | wake_up_frame_en;
307 }308 }
308 309
310 if (pmt) {
311 /* The receiver must be enabled for WOL before powering down */
312 config = readl(ioaddr + GMAC_CONFIG);
313 config |= GMAC_CONFIG_RE;
314 writel(config, ioaddr + GMAC_CONFIG);
315 }
309 writel(pmt, ioaddr + GMAC_PMT);316 writel(pmt, ioaddr + GMAC_PMT);
310}317}
311 318
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c+1−0
@@ -315,6 +315,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, · 314 unmodified lines
315 { .compatible = "allwinner,sun8i-h3-emac" },315 { .compatible = "allwinner,sun8i-h3-emac" },
316 { .compatible = "allwinner,sun8i-v3s-emac" },316 { .compatible = "allwinner,sun8i-v3s-emac" },
317 { .compatible = "allwinner,sun50i-a64-emac" },317 { .compatible = "allwinner,sun50i-a64-emac" },
318 {},
318 };319 };
319 320
320 /* If phy-handle property is passed from DT, use it as the PHY */321 /* If phy-handle property is passed from DT, use it as the PHY */
drivers/net/hyperv/hyperv_net.h+2−0
@@ -150,6 +150,8 @@ struct netvsc_device_info { · 149 unmodified lines
150 u32 num_chn;150 u32 num_chn;
151 u32 send_sections;151 u32 send_sections;
152 u32 recv_sections;152 u32 recv_sections;
153 u32 send_section_size;
154 u32 recv_section_size;
153};155};
154 156
155enum rndis_device_state {157enum rndis_device_state {
drivers/net/hyperv/netvsc.c+2−5
@@ -76,9 +76,6 @@ static struct netvsc_device *alloc_net_device(void) · 75 unmodified lines
76 net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT;76 net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT;
77 net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT;77 net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT;
78 78
79 net_device->recv_section_size = NETVSC_RECV_SECTION_SIZE;
80 net_device->send_section_size = NETVSC_SEND_SECTION_SIZE;
81
82 init_completion(&net_device->channel_init_wait);79 init_completion(&net_device->channel_init_wait);
83 init_waitqueue_head(&net_device->subchan_open);80 init_waitqueue_head(&net_device->subchan_open);
84 INIT_WORK(&net_device->subchan_work, rndis_set_subchannel);81 INIT_WORK(&net_device->subchan_work, rndis_set_subchannel);
@@ -262,7 +259,7 @@ static int netvsc_init_buf(struct hv_device *device, · 177 unmodified lines
262 int ret = 0;259 int ret = 0;
263 260
264 /* Get receive buffer area. */261 /* Get receive buffer area. */
265 buf_size = device_info->recv_sections * net_device->recv_section_size;262 buf_size = device_info->recv_sections * device_info->recv_section_size;
266 buf_size = roundup(buf_size, PAGE_SIZE);263 buf_size = roundup(buf_size, PAGE_SIZE);
267 264
268 net_device->recv_buf = vzalloc(buf_size);265 net_device->recv_buf = vzalloc(buf_size);
@@ -344,7 +341,7 @@ static int netvsc_init_buf(struct hv_device *device, · 75 unmodified lines
344 goto cleanup;341 goto cleanup;
345 342
346 /* Now setup the send buffer. */343 /* Now setup the send buffer. */
347 buf_size = device_info->send_sections * net_device->send_section_size;344 buf_size = device_info->send_sections * device_info->send_section_size;
348 buf_size = round_up(buf_size, PAGE_SIZE);345 buf_size = round_up(buf_size, PAGE_SIZE);
349 346
350 net_device->send_buf = vzalloc(buf_size);347 net_device->send_buf = vzalloc(buf_size);
drivers/net/hyperv/netvsc_drv.c+8−0
@@ -848,7 +848,9 @@ static int netvsc_set_channels(struct net_device *net, · 847 unmodified lines
848 device_info.num_chn = count;848 device_info.num_chn = count;
849 device_info.ring_size = ring_size;849 device_info.ring_size = ring_size;
850 device_info.send_sections = nvdev->send_section_cnt;850 device_info.send_sections = nvdev->send_section_cnt;
851 device_info.send_section_size = nvdev->send_section_size;
851 device_info.recv_sections = nvdev->recv_section_cnt;852 device_info.recv_sections = nvdev->recv_section_cnt;
853 device_info.recv_section_size = nvdev->recv_section_size;
852 854
853 rndis_filter_device_remove(dev, nvdev);855 rndis_filter_device_remove(dev, nvdev);
854 856
@@ -963,7 +965,9 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) · 108 unmodified lines
963 device_info.ring_size = ring_size;965 device_info.ring_size = ring_size;
964 device_info.num_chn = nvdev->num_chn;966 device_info.num_chn = nvdev->num_chn;
965 device_info.send_sections = nvdev->send_section_cnt;967 device_info.send_sections = nvdev->send_section_cnt;
968 device_info.send_section_size = nvdev->send_section_size;
966 device_info.recv_sections = nvdev->recv_section_cnt;969 device_info.recv_sections = nvdev->recv_section_cnt;
970 device_info.recv_section_size = nvdev->recv_section_size;
967 971
968 rndis_filter_device_remove(hdev, nvdev);972 rndis_filter_device_remove(hdev, nvdev);
969 973
@@ -1485,7 +1489,9 @@ static int netvsc_set_ringparam(struct net_device *ndev, · 515 unmodified lines
1485 device_info.num_chn = nvdev->num_chn;1489 device_info.num_chn = nvdev->num_chn;
1486 device_info.ring_size = ring_size;1490 device_info.ring_size = ring_size;
1487 device_info.send_sections = new_tx;1491 device_info.send_sections = new_tx;
1492 device_info.send_section_size = nvdev->send_section_size;
1488 device_info.recv_sections = new_rx;1493 device_info.recv_sections = new_rx;
1494 device_info.recv_section_size = nvdev->recv_section_size;
1489 1495
1490 netif_device_detach(ndev);1496 netif_device_detach(ndev);
1491 was_opened = rndis_filter_opened(nvdev);1497 was_opened = rndis_filter_opened(nvdev);
@@ -1934,7 +1940,9 @@ static int netvsc_probe(struct hv_device *dev, · 442 unmodified lines
1934 device_info.ring_size = ring_size;1940 device_info.ring_size = ring_size;
1935 device_info.num_chn = VRSS_CHANNEL_DEFAULT;1941 device_info.num_chn = VRSS_CHANNEL_DEFAULT;
1936 device_info.send_sections = NETVSC_DEFAULT_TX;1942 device_info.send_sections = NETVSC_DEFAULT_TX;
1943 device_info.send_section_size = NETVSC_SEND_SECTION_SIZE;
1937 device_info.recv_sections = NETVSC_DEFAULT_RX;1944 device_info.recv_sections = NETVSC_DEFAULT_RX;
1945 device_info.recv_section_size = NETVSC_RECV_SECTION_SIZE;
1938 1946
1939 nvdev = rndis_filter_device_add(dev, &device_info);1947 nvdev = rndis_filter_device_add(dev, &device_info);
1940 if (IS_ERR(nvdev)) {1948 if (IS_ERR(nvdev)) {
drivers/net/phy/Kconfig+9−9
@@ -160,15 +160,6 @@ config MDIO_XGENE · 159 unmodified lines
160 160
161endif161endif
162 162
163menuconfig PHYLIB
164 tristate "PHY Device support and infrastructure"
165 depends on NETDEVICES
166 select MDIO_DEVICE
167 help
168 Ethernet controllers are usually attached to PHY
169 devices. This option provides infrastructure for
170 managing PHY devices.
171
172config PHYLINK163config PHYLINK
173 tristate164 tristate
174 depends on NETDEVICES165 depends on NETDEVICES
@@ -179,6 +170,15 @@ config PHYLINK · 4 unmodified lines
179 configuration links, PHYs, and Serdes links with MAC level170 configuration links, PHYs, and Serdes links with MAC level
180 autonegotiation modes.171 autonegotiation modes.
181 172
173menuconfig PHYLIB
174 tristate "PHY Device support and infrastructure"
175 depends on NETDEVICES
176 select MDIO_DEVICE
177 help
178 Ethernet controllers are usually attached to PHY
179 devices. This option provides infrastructure for
180 managing PHY devices.
181
182if PHYLIB182if PHYLIB
183 183
184config SWPHY184config SWPHY
drivers/net/phy/phy.c+2−1
@@ -373,7 +373,8 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev, · 372 unmodified lines
373 cmd->base.port = PORT_BNC;373 cmd->base.port = PORT_BNC;
374 else374 else
375 cmd->base.port = PORT_MII;375 cmd->base.port = PORT_MII;
376 376 cmd->base.transceiver = phy_is_internal(phydev) ?
377 XCVR_INTERNAL : XCVR_EXTERNAL;
377 cmd->base.phy_address = phydev->mdio.addr;378 cmd->base.phy_address = phydev->mdio.addr;
378 cmd->base.autoneg = phydev->autoneg;379 cmd->base.autoneg = phydev->autoneg;
379 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl;380 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl;
drivers/net/phy/phy_device.c+1−1
@@ -879,7 +879,7 @@ void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) · 878 unmodified lines
879{879{
880 const char *drv_name = phydev->drv ? phydev->drv->name : "unbound";880 const char *drv_name = phydev->drv ? phydev->drv->name : "unbound";
881 char *irq_str;881 char *irq_str;
882 char irq_num[4];882 char irq_num[8];
883 883
884 switch(phydev->irq) {884 switch(phydev->irq) {
885 case PHY_POLL:885 case PHY_POLL:
drivers/net/phy/xilinx_gmii2rgmii.c+1−1
@@ -44,7 +44,7 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) · 43 unmodified lines
44 priv->phy_drv->read_status(phydev);44 priv->phy_drv->read_status(phydev);
45 45
46 val = mdiobus_read(phydev->mdio.bus, priv->addr, XILINX_GMII2RGMII_REG);46 val = mdiobus_read(phydev->mdio.bus, priv->addr, XILINX_GMII2RGMII_REG);
47 val &= XILINX_GMII2RGMII_SPEED_MASK;47 val &= ~XILINX_GMII2RGMII_SPEED_MASK;
48 48
49 if (phydev->speed == SPEED_1000)49 if (phydev->speed == SPEED_1000)
50 val |= BMCR_SPEED1000;50 val |= BMCR_SPEED1000;
drivers/net/ppp/ppp_generic.c+1−1
@@ -120,7 +120,7 @@ struct ppp { · 119 unmodified lines
120 int n_channels; /* how many channels are attached 54 */120 int n_channels; /* how many channels are attached 54 */
121 spinlock_t rlock; /* lock for receive side 58 */121 spinlock_t rlock; /* lock for receive side 58 */
122 spinlock_t wlock; /* lock for transmit side 5c */122 spinlock_t wlock; /* lock for transmit side 5c */
123 int *xmit_recursion __percpu; /* xmit recursion detect */123 int __percpu *xmit_recursion; /* xmit recursion detect */
124 int mru; /* max receive unit 60 */124 int mru; /* max receive unit 60 */
125 unsigned int flags; /* control bits 64 */125 unsigned int flags; /* control bits 64 */
126 unsigned int xstate; /* transmit state bits 68 */126 unsigned int xstate; /* transmit state bits 68 */
drivers/net/tun.c+5−3
@@ -1496,11 +1496,13 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile, · 1495 unmodified lines
1496 switch (tun->flags & TUN_TYPE_MASK) {1496 switch (tun->flags & TUN_TYPE_MASK) {
1497 case IFF_TUN:1497 case IFF_TUN:
1498 if (tun->flags & IFF_NO_PI) {1498 if (tun->flags & IFF_NO_PI) {
1499 switch (skb->data[0] & 0xf0) {1499 u8 ip_version = skb->len ? (skb->data[0] >> 4) : 0;
1500 case 0x40:1500
1501 switch (ip_version) {
1502 case 4:
1501 pi.proto = htons(ETH_P_IP);1503 pi.proto = htons(ETH_P_IP);
1502 break;1504 break;
1503 case 0x60:1505 case 6:
1504 pi.proto = htons(ETH_P_IPV6);1506 pi.proto = htons(ETH_P_IPV6);
1505 break;1507 break;
1506 default:1508 default:
drivers/net/usb/cdc_ether.c+20−1
@@ -54,11 +54,19 @@ static int is_wireless_rndis(struct usb_interface_descriptor *desc) · 53 unmodified lines
54 desc->bInterfaceProtocol == 3);54 desc->bInterfaceProtocol == 3);
55}55}
56 56
57static int is_novatel_rndis(struct usb_interface_descriptor *desc)
58{
59 return (desc->bInterfaceClass == USB_CLASS_MISC &&
60 desc->bInterfaceSubClass == 4 &&
61 desc->bInterfaceProtocol == 1);
62}
63
57#else64#else
58 65
59#define is_rndis(desc) 066#define is_rndis(desc) 0
60#define is_activesync(desc) 067#define is_activesync(desc) 0
61#define is_wireless_rndis(desc) 068#define is_wireless_rndis(desc) 0
69#define is_novatel_rndis(desc) 0
62 70
63#endif71#endif
64 72
@@ -150,7 +158,8 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf) · 85 unmodified lines
150 */158 */
151 rndis = (is_rndis(&intf->cur_altsetting->desc) ||159 rndis = (is_rndis(&intf->cur_altsetting->desc) ||
152 is_activesync(&intf->cur_altsetting->desc) ||160 is_activesync(&intf->cur_altsetting->desc) ||
153 is_wireless_rndis(&intf->cur_altsetting->desc));161 is_wireless_rndis(&intf->cur_altsetting->desc) ||
162 is_novatel_rndis(&intf->cur_altsetting->desc));
154 163
155 memset(info, 0, sizeof(*info));164 memset(info, 0, sizeof(*info));
156 info->control = intf;165 info->control = intf;
@@ -547,6 +556,7 @@ static const struct driver_info wwan_info = { · 390 unmodified lines
547#define REALTEK_VENDOR_ID 0x0bda556#define REALTEK_VENDOR_ID 0x0bda
548#define SAMSUNG_VENDOR_ID 0x04e8557#define SAMSUNG_VENDOR_ID 0x04e8
549#define LENOVO_VENDOR_ID 0x17ef558#define LENOVO_VENDOR_ID 0x17ef
559#define LINKSYS_VENDOR_ID 0x13b1
550#define NVIDIA_VENDOR_ID 0x0955560#define NVIDIA_VENDOR_ID 0x0955
551#define HP_VENDOR_ID 0x03f0561#define HP_VENDOR_ID 0x03f0
552#define MICROSOFT_VENDOR_ID 0x045e562#define MICROSOFT_VENDOR_ID 0x045e
@@ -737,6 +747,15 @@ static const struct usb_device_id products[] = { · 184 unmodified lines
737 .driver_info = 0,747 .driver_info = 0,
738},748},
739 749
750#if IS_ENABLED(CONFIG_USB_RTL8152)
751/* Linksys USB3GIGV1 Ethernet Adapter */
752{
753 USB_DEVICE_AND_INTERFACE_INFO(LINKSYS_VENDOR_ID, 0x0041, USB_CLASS_COMM,
754 USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
755 .driver_info = 0,
756},
757#endif
758
740/* ThinkPad USB-C Dock (based on Realtek RTL8153) */759/* ThinkPad USB-C Dock (based on Realtek RTL8153) */
741{760{
742 USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM,761 USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM,
drivers/net/usb/lan78xx.c+24−10
@@ -1265,30 +1265,45 @@ static int lan78xx_ethtool_get_eeprom(struct net_device *netdev, · 1264 unmodified lines
1265 struct ethtool_eeprom *ee, u8 *data)1265 struct ethtool_eeprom *ee, u8 *data)
1266{1266{
1267 struct lan78xx_net *dev = netdev_priv(netdev);1267 struct lan78xx_net *dev = netdev_priv(netdev);
1268 int ret;
1269
1270 ret = usb_autopm_get_interface(dev->intf);
1271 if (ret)
1272 return ret;
1268 1273
1269 ee->magic = LAN78XX_EEPROM_MAGIC;1274 ee->magic = LAN78XX_EEPROM_MAGIC;
1270 1275
1271 return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);1276 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
1277
1278 usb_autopm_put_interface(dev->intf);
1279
1280 return ret;
1272}1281}
1273 1282
1274static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,1283static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
1275 struct ethtool_eeprom *ee, u8 *data)1284 struct ethtool_eeprom *ee, u8 *data)
1276{1285{
1277 struct lan78xx_net *dev = netdev_priv(netdev);1286 struct lan78xx_net *dev = netdev_priv(netdev);
1287 int ret;
1288
1289 ret = usb_autopm_get_interface(dev->intf);
1290 if (ret)
1291 return ret;
1278 1292
1279 /* Allow entire eeprom update only */1293 /* Invalid EEPROM_INDICATOR at offset zero will result in a failure
1280 if ((ee->magic == LAN78XX_EEPROM_MAGIC) &&1294 * to load data from EEPROM
1281 (ee->offset == 0) &&1295 */
1282 (ee->len == 512) &&1296 if (ee->magic == LAN78XX_EEPROM_MAGIC)
1283 (data[0] == EEPROM_INDICATOR))1297 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1284 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1285 else if ((ee->magic == LAN78XX_OTP_MAGIC) &&1298 else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
1286 (ee->offset == 0) &&1299 (ee->offset == 0) &&
1287 (ee->len == 512) &&1300 (ee->len == 512) &&
1288 (data[0] == OTP_INDICATOR_1))1301 (data[0] == OTP_INDICATOR_1))
1289 return lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);1302 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);
1303
1304 usb_autopm_put_interface(dev->intf);
1290 1305
1291 return -EINVAL;1306 return ret;
1292}1307}
1293 1308
1294static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,1309static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
@@ -2434,7 +2449,6 @@ static int lan78xx_reset(struct lan78xx_net *dev) · 1139 unmodified lines
2434 /* LAN7801 only has RGMII mode */2449 /* LAN7801 only has RGMII mode */
2435 if (dev->chipid == ID_REV_CHIP_ID_7801_)2450 if (dev->chipid == ID_REV_CHIP_ID_7801_)
2436 buf &= ~MAC_CR_GMII_EN_;2451 buf &= ~MAC_CR_GMII_EN_;
2437 buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
2438 ret = lan78xx_write_reg(dev, MAC_CR, buf);2452 ret = lan78xx_write_reg(dev, MAC_CR, buf);
2439 2453
2440 ret = lan78xx_read_reg(dev, MAC_TX, &buf);2454 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
drivers/net/usb/r8152.c+2−0
@@ -613,6 +613,7 @@ enum rtl8152_flags { · 612 unmodified lines
613#define VENDOR_ID_MICROSOFT 0x045e613#define VENDOR_ID_MICROSOFT 0x045e
614#define VENDOR_ID_SAMSUNG 0x04e8614#define VENDOR_ID_SAMSUNG 0x04e8
615#define VENDOR_ID_LENOVO 0x17ef615#define VENDOR_ID_LENOVO 0x17ef
616#define VENDOR_ID_LINKSYS 0x13b1
616#define VENDOR_ID_NVIDIA 0x0955617#define VENDOR_ID_NVIDIA 0x0955
617 618
618#define MCU_TYPE_PLA 0x0100619#define MCU_TYPE_PLA 0x0100
@@ -5316,6 +5317,7 @@ static const struct usb_device_id rtl8152_table[] = { · 4697 unmodified lines
5316 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)},5317 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)},
5317 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)},5318 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)},
5318 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)},5319 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)},
5320 {REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041)},
5319 {REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)},5321 {REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)},
5320 {}5322 {}
5321};5323};
drivers/net/usb/rndis_host.c+4−0
@@ -632,6 +632,10 @@ static const struct usb_device_id products [] = { · 631 unmodified lines
632 /* RNDIS for tethering */632 /* RNDIS for tethering */
633 USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),633 USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
634 .driver_info = (unsigned long) &rndis_info,634 .driver_info = (unsigned long) &rndis_info,
635}, {
636 /* Novatel Verizon USB730L */
637 USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
638 .driver_info = (unsigned long) &rndis_info,
635},639},
636 { }, // END640 { }, // END
637};641};
drivers/net/wireless/ath/ath10k/pci.c+2−5
@@ -3396,9 +3396,7 @@ static void ath10k_pci_remove(struct pci_dev *pdev) · 3395 unmodified lines
3396 3396
3397MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table);3397MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table);
3398 3398
3399#ifdef CONFIG_PM3399static __maybe_unused int ath10k_pci_pm_suspend(struct device *dev)
3400
3401static int ath10k_pci_pm_suspend(struct device *dev)
3402{3400{
3403 struct ath10k *ar = dev_get_drvdata(dev);3401 struct ath10k *ar = dev_get_drvdata(dev);
3404 int ret;3402 int ret;
@@ -3414,7 +3412,7 @@ static int ath10k_pci_pm_suspend(struct device *dev) · 9 unmodified lines
3414 return ret;3412 return ret;
3415}3413}
3416 3414
3417static int ath10k_pci_pm_resume(struct device *dev)3415static __maybe_unused int ath10k_pci_pm_resume(struct device *dev)
3418{3416{
3419 struct ath10k *ar = dev_get_drvdata(dev);3417 struct ath10k *ar = dev_get_drvdata(dev);
3420 int ret;3418 int ret;
@@ -3433,7 +3431,6 @@ static int ath10k_pci_pm_resume(struct device *dev) · 12 unmodified lines
3433static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops,3431static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops,
3434 ath10k_pci_pm_suspend,3432 ath10k_pci_pm_suspend,
3435 ath10k_pci_pm_resume);3433 ath10k_pci_pm_resume);
3436#endif
3437 3434
3438static struct pci_driver ath10k_pci_driver = {3435static struct pci_driver ath10k_pci_driver = {
3439 .name = "ath10k_pci",3436 .name = "ath10k_pci",
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c+19−18
@@ -980,7 +980,7 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, · 979 unmodified lines
980 980
981 eth_broadcast_addr(params_le->bssid);981 eth_broadcast_addr(params_le->bssid);
982 params_le->bss_type = DOT11_BSSTYPE_ANY;982 params_le->bss_type = DOT11_BSSTYPE_ANY;
983 params_le->scan_type = 0;983 params_le->scan_type = BRCMF_SCANTYPE_ACTIVE;
984 params_le->channel_num = 0;984 params_le->channel_num = 0;
985 params_le->nprobes = cpu_to_le32(-1);985 params_le->nprobes = cpu_to_le32(-1);
986 params_le->active_time = cpu_to_le32(-1);986 params_le->active_time = cpu_to_le32(-1);
@@ -988,12 +988,9 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, · 1 unmodified line
988 params_le->home_time = cpu_to_le32(-1);988 params_le->home_time = cpu_to_le32(-1);
989 memset(&params_le->ssid_le, 0, sizeof(params_le->ssid_le));989 memset(&params_le->ssid_le, 0, sizeof(params_le->ssid_le));
990 990
991 /* if request is null exit so it will be all channel broadcast scan */
992 if (!request)
993 return;
994
995 n_ssids = request->n_ssids;991 n_ssids = request->n_ssids;
996 n_channels = request->n_channels;992 n_channels = request->n_channels;
993
997 /* Copy channel array if applicable */994 /* Copy channel array if applicable */
998 brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n",995 brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n",
999 n_channels);996 n_channels);
@@ -1030,16 +1027,8 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, · 30 unmodified lines
1030 ptr += sizeof(ssid_le);1027 ptr += sizeof(ssid_le);
1031 }1028 }
1032 } else {1029 } else {
1033 brcmf_dbg(SCAN, "Broadcast scan %p\n", request->ssids);1030 brcmf_dbg(SCAN, "Performing passive scan\n");
1034 if ((request->ssids) && request->ssids->ssid_len) {1031 params_le->scan_type = BRCMF_SCANTYPE_PASSIVE;
1035 brcmf_dbg(SCAN, "SSID %s len=%d\n",
1036 params_le->ssid_le.SSID,
1037 request->ssids->ssid_len);
1038 params_le->ssid_le.SSID_len =
1039 cpu_to_le32(request->ssids->ssid_len);
1040 memcpy(&params_le->ssid_le.SSID, request->ssids->ssid,
1041 request->ssids->ssid_len);
1042 }
1043 }1032 }
1044 /* Adding mask to channel numbers */1033 /* Adding mask to channel numbers */
1045 params_le->channel_num =1034 params_le->channel_num =
@@ -3162,6 +3151,7 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp, · 2116 unmodified lines
3162 struct brcmf_cfg80211_info *cfg = ifp->drvr->config;3151 struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
3163 s32 status;3152 s32 status;
3164 struct brcmf_escan_result_le *escan_result_le;3153 struct brcmf_escan_result_le *escan_result_le;
3154 u32 escan_buflen;
3165 struct brcmf_bss_info_le *bss_info_le;3155 struct brcmf_bss_info_le *bss_info_le;
3166 struct brcmf_bss_info_le *bss = NULL;3156 struct brcmf_bss_info_le *bss = NULL;
3167 u32 bi_length;3157 u32 bi_length;
@@ -3181,11 +3171,23 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp, · 13 unmodified lines
3181 3171
3182 if (status == BRCMF_E_STATUS_PARTIAL) {3172 if (status == BRCMF_E_STATUS_PARTIAL) {
3183 brcmf_dbg(SCAN, "ESCAN Partial result\n");3173 brcmf_dbg(SCAN, "ESCAN Partial result\n");
3174 if (e->datalen < sizeof(*escan_result_le)) {
3175 brcmf_err("invalid event data length\n");
3176 goto exit;
3177 }
3184 escan_result_le = (struct brcmf_escan_result_le *) data;3178 escan_result_le = (struct brcmf_escan_result_le *) data;
3185 if (!escan_result_le) {3179 if (!escan_result_le) {
3186 brcmf_err("Invalid escan result (NULL pointer)\n");3180 brcmf_err("Invalid escan result (NULL pointer)\n");
3187 goto exit;3181 goto exit;
3188 }3182 }
3183 escan_buflen = le32_to_cpu(escan_result_le->buflen);
3184 if (escan_buflen > BRCMF_ESCAN_BUF_SIZE ||
3185 escan_buflen > e->datalen ||
3186 escan_buflen < sizeof(*escan_result_le)) {
3187 brcmf_err("Invalid escan buffer length: %d\n",
3188 escan_buflen);
3189 goto exit;
3190 }
3189 if (le16_to_cpu(escan_result_le->bss_count) != 1) {3191 if (le16_to_cpu(escan_result_le->bss_count) != 1) {
3190 brcmf_err("Invalid bss_count %d: ignoring\n",3192 brcmf_err("Invalid bss_count %d: ignoring\n",
3191 escan_result_le->bss_count);3193 escan_result_le->bss_count);
@@ -3202,9 +3204,8 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp, · 10 unmodified lines
3202 }3204 }
3203 3205
3204 bi_length = le32_to_cpu(bss_info_le->length);3206 bi_length = le32_to_cpu(bss_info_le->length);
3205 if (bi_length != (le32_to_cpu(escan_result_le->buflen) -3207 if (bi_length != escan_buflen - WL_ESCAN_RESULTS_FIXED_SIZE) {
3206 WL_ESCAN_RESULTS_FIXED_SIZE)) {3208 brcmf_err("Ignoring invalid bss_info length: %d\n",
3207 brcmf_err("Invalid bss_info length %d: ignoring\n",
3208 bi_length);3209 bi_length);
3209 goto exit;3210 goto exit;
3210 }3211 }
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h+5−0
@@ -45,6 +45,11 @@ · 44 unmodified lines
45#define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff45#define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff
46#define BRCMF_SCAN_PARAMS_NSSID_SHIFT 1646#define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16
47 47
48/* scan type definitions */
49#define BRCMF_SCANTYPE_DEFAULT 0xFF
50#define BRCMF_SCANTYPE_ACTIVE 0
51#define BRCMF_SCANTYPE_PASSIVE 1
52
48#define BRCMF_WSEC_MAX_PSK_LEN 3253#define BRCMF_WSEC_MAX_PSK_LEN 32
49#define BRCMF_WSEC_PASSPHRASE BIT(0)54#define BRCMF_WSEC_PASSPHRASE BIT(0)
50 55
drivers/net/wireless/intel/iwlwifi/mvm/d3.c+1−1
@@ -2167,7 +2167,7 @@ out: · 2166 unmodified lines
2167 * 1. We are not using a unified image2167 * 1. We are not using a unified image
2168 * 2. We are using a unified image but had an error while exiting D32168 * 2. We are using a unified image but had an error while exiting D3
2169 */2169 */
2170 set_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status);2170 set_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status);
2171 set_bit(IWL_MVM_STATUS_D3_RECONFIG, &mvm->status);2171 set_bit(IWL_MVM_STATUS_D3_RECONFIG, &mvm->status);
2172 /*2172 /*
2173 * When switching images we return 1, which causes mac802112173 * When switching images we return 1, which causes mac80211
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c+59−3
@@ -1546,6 +1546,11 @@ static void iwl_mvm_mc_iface_iterator(void *_data, u8 *mac, · 1545 unmodified lines
1546 struct iwl_mvm_mc_iter_data *data = _data;1546 struct iwl_mvm_mc_iter_data *data = _data;
1547 struct iwl_mvm *mvm = data->mvm;1547 struct iwl_mvm *mvm = data->mvm;
1548 struct iwl_mcast_filter_cmd *cmd = mvm->mcast_filter_cmd;1548 struct iwl_mcast_filter_cmd *cmd = mvm->mcast_filter_cmd;
1549 struct iwl_host_cmd hcmd = {
1550 .id = MCAST_FILTER_CMD,
1551 .flags = CMD_ASYNC,
1552 .dataflags[0] = IWL_HCMD_DFL_NOCOPY,
1553 };
1549 int ret, len;1554 int ret, len;
1550 1555
1551 /* if we don't have free ports, mcast frames will be dropped */1556 /* if we don't have free ports, mcast frames will be dropped */
@@ -1560,7 +1565,10 @@ static void iwl_mvm_mc_iface_iterator(void *_data, u8 *mac, · 8 unmodified lines
1560 memcpy(cmd->bssid, vif->bss_conf.bssid, ETH_ALEN);1565 memcpy(cmd->bssid, vif->bss_conf.bssid, ETH_ALEN);
1561 len = roundup(sizeof(*cmd) + cmd->count * ETH_ALEN, 4);1566 len = roundup(sizeof(*cmd) + cmd->count * ETH_ALEN, 4);
1562 1567
1563 ret = iwl_mvm_send_cmd_pdu(mvm, MCAST_FILTER_CMD, CMD_ASYNC, len, cmd);1568 hcmd.len[0] = len;
1569 hcmd.data[0] = cmd;
1570
1571 ret = iwl_mvm_send_cmd(mvm, &hcmd);
1564 if (ret)1572 if (ret)
1565 IWL_ERR(mvm, "mcast filter cmd error. ret=%d\n", ret);1573 IWL_ERR(mvm, "mcast filter cmd error. ret=%d\n", ret);
1566}1574}
@@ -1635,6 +1643,12 @@ static void iwl_mvm_configure_filter(struct ieee80211_hw *hw, · 68 unmodified lines
1635 if (!cmd)1643 if (!cmd)
1636 goto out;1644 goto out;
1637 1645
1646 if (changed_flags & FIF_ALLMULTI)
1647 cmd->pass_all = !!(*total_flags & FIF_ALLMULTI);
1648
1649 if (cmd->pass_all)
1650 cmd->count = 0;
1651
1638 iwl_mvm_recalc_multicast(mvm);1652 iwl_mvm_recalc_multicast(mvm);
1639out:1653out:
1640 mutex_unlock(&mvm->mutex);1654 mutex_unlock(&mvm->mutex);
@@ -2563,7 +2577,7 @@ static void iwl_mvm_purge_deferred_tx_frames(struct iwl_mvm *mvm, · 922 unmodified lines
2563 * queues, so we should never get a second deferred2577 * queues, so we should never get a second deferred
2564 * frame for the RA/TID.2578 * frame for the RA/TID.
2565 */2579 */
2566 iwl_mvm_start_mac_queues(mvm, info->hw_queue);2580 iwl_mvm_start_mac_queues(mvm, BIT(info->hw_queue));
2567 ieee80211_free_txskb(mvm->hw, skb);2581 ieee80211_free_txskb(mvm->hw, skb);
2568 }2582 }
2569 }2583 }
@@ -3975,6 +3989,43 @@ out_unlock: · 1405 unmodified lines
3975 return ret;3989 return ret;
3976}3990}
3977 3991
3992static void iwl_mvm_flush_no_vif(struct iwl_mvm *mvm, u32 queues, bool drop)
3993{
3994 if (drop) {
3995 if (iwl_mvm_has_new_tx_api(mvm))
3996 /* TODO new tx api */
3997 WARN_ONCE(1,
3998 "Need to implement flush TX queue\n");
3999 else
4000 iwl_mvm_flush_tx_path(mvm,
4001 iwl_mvm_flushable_queues(mvm) & queues,
4002 0);
4003 } else {
4004 if (iwl_mvm_has_new_tx_api(mvm)) {
4005 struct ieee80211_sta *sta;
4006 int i;
4007
4008 mutex_lock(&mvm->mutex);
4009
4010 for (i = 0; i < ARRAY_SIZE(mvm->fw_id_to_mac_id); i++) {
4011 sta = rcu_dereference_protected(
4012 mvm->fw_id_to_mac_id[i],
4013 lockdep_is_held(&mvm->mutex));
4014 if (IS_ERR_OR_NULL(sta))
4015 continue;
4016
4017 iwl_mvm_wait_sta_queues_empty(mvm,
4018 iwl_mvm_sta_from_mac80211(sta));
4019 }
4020
4021 mutex_unlock(&mvm->mutex);
4022 } else {
4023 iwl_trans_wait_tx_queues_empty(mvm->trans,
4024 queues);
4025 }
4026 }
4027}
4028
3978static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,4029static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,
3979 struct ieee80211_vif *vif, u32 queues, bool drop)4030 struct ieee80211_vif *vif, u32 queues, bool drop)
3980{4031{
@@ -3985,7 +4036,12 @@ static void iwl_mvm_mac_flush(struct ieee80211_hw *hw, · 4 unmodified lines
3985 int i;4036 int i;
3986 u32 msk = 0;4037 u32 msk = 0;
3987 4038
3988 if (!vif || vif->type != NL80211_IFTYPE_STATION)4039 if (!vif) {
4040 iwl_mvm_flush_no_vif(mvm, queues, drop);
4041 return;
4042 }
4043
4044 if (vif->type != NL80211_IFTYPE_STATION)
3989 return;4045 return;
3990 4046
3991 /* Make sure we're done with the deferred traffic before flushing */4047 /* Make sure we're done with the deferred traffic before flushing */
drivers/net/wireless/intel/iwlwifi/mvm/rs.c+2−1
@@ -661,7 +661,8 @@ static void rs_tl_turn_on_agg(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta, · 660 unmodified lines
661 (lq_sta->tx_agg_tid_en & BIT(tid)) &&661 (lq_sta->tx_agg_tid_en & BIT(tid)) &&
662 (tid_data->tx_count_last >= IWL_MVM_RS_AGG_START_THRESHOLD)) {662 (tid_data->tx_count_last >= IWL_MVM_RS_AGG_START_THRESHOLD)) {
663 IWL_DEBUG_RATE(mvm, "try to aggregate tid %d\n", tid);663 IWL_DEBUG_RATE(mvm, "try to aggregate tid %d\n", tid);
664 rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta);664 if (rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta) == 0)
665 tid_data->state = IWL_AGG_QUEUED;
665 }666 }
666}667}
667 668
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c+4−3
@@ -672,11 +672,12 @@ static bool iwl_mvm_reorder(struct iwl_mvm *mvm, · 671 unmodified lines
672 * If there was a significant jump in the nssn - adjust.672 * If there was a significant jump in the nssn - adjust.
673 * If the SN is smaller than the NSSN it might need to first go into673 * If the SN is smaller than the NSSN it might need to first go into
674 * the reorder buffer, in which case we just release up to it and the674 * the reorder buffer, in which case we just release up to it and the
675 * rest of the function will take of storing it and releasing up to the675 * rest of the function will take care of storing it and releasing up to
676 * nssn676 * the nssn
677 */677 */
678 if (!iwl_mvm_is_sn_less(nssn, buffer->head_sn + buffer->buf_size,678 if (!iwl_mvm_is_sn_less(nssn, buffer->head_sn + buffer->buf_size,
679 buffer->buf_size)) {679 buffer->buf_size) ||
680 !ieee80211_sn_less(sn, buffer->head_sn + buffer->buf_size)) {
680 u16 min_sn = ieee80211_sn_less(sn, nssn) ? sn : nssn;681 u16 min_sn = ieee80211_sn_less(sn, nssn) ? sn : nssn;
681 682
682 iwl_mvm_release_frames(mvm, sta, napi, buffer, min_sn);683 iwl_mvm_release_frames(mvm, sta, napi, buffer, min_sn);
drivers/net/wireless/intel/iwlwifi/mvm/scan.c+1−1
@@ -555,7 +555,7 @@ static int iwl_mvm_lmac_scan_abort(struct iwl_mvm *mvm) · 554 unmodified lines
555 struct iwl_host_cmd cmd = {555 struct iwl_host_cmd cmd = {
556 .id = SCAN_OFFLOAD_ABORT_CMD,556 .id = SCAN_OFFLOAD_ABORT_CMD,
557 };557 };
558 u32 status;558 u32 status = CAN_ABORT_STATUS;
559 559
560 ret = iwl_mvm_send_cmd_status(mvm, &cmd, &status);560 ret = iwl_mvm_send_cmd_status(mvm, &cmd, &status);
561 if (ret)561 if (ret)
drivers/net/wireless/intel/iwlwifi/mvm/sta.c+5−3
@@ -1285,7 +1285,7 @@ static int iwl_mvm_add_int_sta_common(struct iwl_mvm *mvm, · 1284 unmodified lines
1285{1285{
1286 struct iwl_mvm_add_sta_cmd cmd;1286 struct iwl_mvm_add_sta_cmd cmd;
1287 int ret;1287 int ret;
1288 u32 status;1288 u32 status = ADD_STA_SUCCESS;
1289 1289
1290 lockdep_assert_held(&mvm->mutex);1290 lockdep_assert_held(&mvm->mutex);
1291 1291
@@ -2385,8 +2385,10 @@ int iwl_mvm_sta_tx_agg_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif, · 1093 unmodified lines
2385 if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))2385 if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
2386 return -EINVAL;2386 return -EINVAL;
2387 2387
2388 if (mvmsta->tid_data[tid].state != IWL_AGG_OFF) {2388 if (mvmsta->tid_data[tid].state != IWL_AGG_QUEUED &&
2389 IWL_ERR(mvm, "Start AGG when state is not IWL_AGG_OFF %d!\n",2389 mvmsta->tid_data[tid].state != IWL_AGG_OFF) {
2390 IWL_ERR(mvm,
2391 "Start AGG when state is not IWL_AGG_QUEUED or IWL_AGG_OFF %d!\n",
2390 mvmsta->tid_data[tid].state);2392 mvmsta->tid_data[tid].state);
2391 return -ENXIO;2393 return -ENXIO;
2392 }2394 }
drivers/net/wireless/intel/iwlwifi/mvm/sta.h+2−0
@@ -281,6 +281,7 @@ struct iwl_mvm_vif; · 280 unmodified lines
281 * These states relate to a specific RA / TID.281 * These states relate to a specific RA / TID.
282 *282 *
283 * @IWL_AGG_OFF: aggregation is not used283 * @IWL_AGG_OFF: aggregation is not used
284 * @IWL_AGG_QUEUED: aggregation start work has been queued
284 * @IWL_AGG_STARTING: aggregation are starting (between start and oper)285 * @IWL_AGG_STARTING: aggregation are starting (between start and oper)
285 * @IWL_AGG_ON: aggregation session is up286 * @IWL_AGG_ON: aggregation session is up
286 * @IWL_EMPTYING_HW_QUEUE_ADDBA: establishing a BA session - waiting for the287 * @IWL_EMPTYING_HW_QUEUE_ADDBA: establishing a BA session - waiting for the
@@ -290,6 +291,7 @@ struct iwl_mvm_vif; · 3 unmodified lines
290 */291 */
291enum iwl_mvm_agg_state {292enum iwl_mvm_agg_state {
292 IWL_AGG_OFF = 0,293 IWL_AGG_OFF = 0,
294 IWL_AGG_QUEUED,
293 IWL_AGG_STARTING,295 IWL_AGG_STARTING,
294 IWL_AGG_ON,296 IWL_AGG_ON,
295 IWL_EMPTYING_HW_QUEUE_ADDBA,297 IWL_EMPTYING_HW_QUEUE_ADDBA,
drivers/net/wireless/intel/iwlwifi/mvm/tt.c+1−0
@@ -529,6 +529,7 @@ int iwl_mvm_ctdp_command(struct iwl_mvm *mvm, u32 op, u32 state) · 528 unmodified lines
529 529
530 lockdep_assert_held(&mvm->mutex);530 lockdep_assert_held(&mvm->mutex);
531 531
532 status = 0;
532 ret = iwl_mvm_send_cmd_pdu_status(mvm, WIDE_ID(PHY_OPS_GROUP,533 ret = iwl_mvm_send_cmd_pdu_status(mvm, WIDE_ID(PHY_OPS_GROUP,
533 CTDP_CONFIG_CMD),534 CTDP_CONFIG_CMD),
534 sizeof(cmd), &cmd, &status);535 sizeof(cmd), &cmd, &status);
drivers/net/wireless/intel/iwlwifi/mvm/tx.c+5−5
@@ -564,8 +564,8 @@ static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm, · 563 unmodified lines
564 case NL80211_IFTYPE_AP:564 case NL80211_IFTYPE_AP:
565 case NL80211_IFTYPE_ADHOC:565 case NL80211_IFTYPE_ADHOC:
566 /*566 /*
567 * Handle legacy hostapd as well, where station will be added567 * Non-bufferable frames use the broadcast station, thus they
568 * only just before sending the association response.568 * use the probe queue.
569 * Also take care of the case where we send a deauth to a569 * Also take care of the case where we send a deauth to a
570 * station that we don't have, or similarly an association570 * station that we don't have, or similarly an association
571 * response (with non-success status) for a station we can't571 * response (with non-success status) for a station we can't
@@ -573,9 +573,9 @@ static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm, · 1 unmodified line
573 * Also, disassociate frames might happen, particular with573 * Also, disassociate frames might happen, particular with
574 * reason 7 ("Class 3 frame received from nonassociated STA").574 * reason 7 ("Class 3 frame received from nonassociated STA").
575 */575 */
576 if (ieee80211_is_probe_resp(fc) || ieee80211_is_auth(fc) ||576 if (ieee80211_is_mgmt(fc) &&
577 ieee80211_is_deauth(fc) || ieee80211_is_assoc_resp(fc) ||577 (!ieee80211_is_bufferable_mmpdu(fc) ||
578 ieee80211_is_disassoc(fc))578 ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc)))
579 return mvm->probe_queue;579 return mvm->probe_queue;
580 if (info->hw_queue == info->control.vif->cab_queue)580 if (info->hw_queue == info->control.vif->cab_queue)
581 return mvmvif->cab_queue;581 return mvmvif->cab_queue;
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c+6−3
@@ -115,6 +115,8 @@ int qtnf_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev) · 114 unmodified lines
115 115
116 vif = qtnf_netdev_get_priv(wdev->netdev);116 vif = qtnf_netdev_get_priv(wdev->netdev);
117 117
118 qtnf_scan_done(vif->mac, true);
119
118 if (qtnf_cmd_send_del_intf(vif))120 if (qtnf_cmd_send_del_intf(vif))
119 pr_err("VIF%u.%u: failed to delete VIF\n", vif->mac->macid,121 pr_err("VIF%u.%u: failed to delete VIF\n", vif->mac->macid,
120 vif->vifid);122 vif->vifid);
@@ -335,6 +337,8 @@ static int qtnf_stop_ap(struct wiphy *wiphy, struct net_device *dev) · 214 unmodified lines
335 struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);337 struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
336 int ret;338 int ret;
337 339
340 qtnf_scan_done(vif->mac, true);
341
338 ret = qtnf_cmd_send_stop_ap(vif);342 ret = qtnf_cmd_send_stop_ap(vif);
339 if (ret) {343 if (ret) {
340 pr_err("VIF%u.%u: failed to stop AP operation in FW\n",344 pr_err("VIF%u.%u: failed to stop AP operation in FW\n",
@@ -570,8 +574,6 @@ qtnf_del_station(struct wiphy *wiphy, struct net_device *dev, · 229 unmodified lines
570 !qtnf_sta_list_lookup(&vif->sta_list, params->mac))574 !qtnf_sta_list_lookup(&vif->sta_list, params->mac))
571 return 0;575 return 0;
572 576
573 qtnf_scan_done(vif->mac, true);
574
575 ret = qtnf_cmd_send_del_sta(vif, params);577 ret = qtnf_cmd_send_del_sta(vif, params);
576 if (ret)578 if (ret)
577 pr_err("VIF%u.%u: failed to delete STA %pM\n",579 pr_err("VIF%u.%u: failed to delete STA %pM\n",
@@ -1134,8 +1136,9 @@ void qtnf_virtual_intf_cleanup(struct net_device *ndev) · 556 unmodified lines
1134 }1136 }
1135 1137
1136 vif->sta_state = QTNF_STA_DISCONNECTED;1138 vif->sta_state = QTNF_STA_DISCONNECTED;
1137 qtnf_scan_done(mac, true);
1138 }1139 }
1140
1141 qtnf_scan_done(mac, true);
1139}1142}
1140 1143
1141void qtnf_cfg80211_vif_reset(struct qtnf_vif *vif)1144void qtnf_cfg80211_vif_reset(struct qtnf_vif *vif)
drivers/net/wireless/quantenna/qtnfmac/cfg80211.h+3−0
@@ -34,6 +34,9 @@ static inline void qtnf_scan_done(struct qtnf_wmac *mac, bool aborted) · 33 unmodified lines
34 .aborted = aborted,34 .aborted = aborted,
35 };35 };
36 36
37 if (timer_pending(&mac->scan_timeout))
38 del_timer_sync(&mac->scan_timeout);
39
37 mutex_lock(&mac->mac_lock);40 mutex_lock(&mac->mac_lock);
38 41
39 if (mac->scan_req) {42 if (mac->scan_req) {
drivers/net/wireless/quantenna/qtnfmac/event.c+0−2
@@ -345,8 +345,6 @@ qtnf_event_handle_scan_complete(struct qtnf_wmac *mac, · 344 unmodified lines
345 return -EINVAL;345 return -EINVAL;
346 }346 }
347 347
348 if (timer_pending(&mac->scan_timeout))
349 del_timer_sync(&mac->scan_timeout);
350 qtnf_scan_done(mac, le32_to_cpu(status->flags) & QLINK_SCAN_ABORTED);348 qtnf_scan_done(mac, le32_to_cpu(status->flags) & QLINK_SCAN_ABORTED);
351 349
352 return 0;350 return 0;
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c+8−1
@@ -661,14 +661,18 @@ static int qtnf_pcie_data_tx(struct qtnf_bus *bus, struct sk_buff *skb) · 660 unmodified lines
661 struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);661 struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);
662 dma_addr_t txbd_paddr, skb_paddr;662 dma_addr_t txbd_paddr, skb_paddr;
663 struct qtnf_tx_bd *txbd;663 struct qtnf_tx_bd *txbd;
664 unsigned long flags;
664 int len, i;665 int len, i;
665 u32 info;666 u32 info;
666 int ret = 0;667 int ret = 0;
667 668
669 spin_lock_irqsave(&priv->tx0_lock, flags);
670
668 if (!qtnf_tx_queue_ready(priv)) {671 if (!qtnf_tx_queue_ready(priv)) {
669 if (skb->dev)672 if (skb->dev)
670 netif_stop_queue(skb->dev);673 netif_stop_queue(skb->dev);
671 674
675 spin_unlock_irqrestore(&priv->tx0_lock, flags);
672 return NETDEV_TX_BUSY;676 return NETDEV_TX_BUSY;
673 }677 }
674 678
@@ -717,8 +721,10 @@ tx_done: · 42 unmodified lines
717 dev_kfree_skb_any(skb);721 dev_kfree_skb_any(skb);
718 }722 }
719 723
720 qtnf_pcie_data_tx_reclaim(priv);
721 priv->tx_done_count++;724 priv->tx_done_count++;
725 spin_unlock_irqrestore(&priv->tx0_lock, flags);
726
727 qtnf_pcie_data_tx_reclaim(priv);
722 728
723 return NETDEV_TX_OK;729 return NETDEV_TX_OK;
724}730}
@@ -1247,6 +1253,7 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) · 522 unmodified lines
1247 strcpy(bus->fwname, QTN_PCI_PEARL_FW_NAME);1253 strcpy(bus->fwname, QTN_PCI_PEARL_FW_NAME);
1248 init_completion(&bus->request_firmware_complete);1254 init_completion(&bus->request_firmware_complete);
1249 mutex_init(&bus->bus_lock);1255 mutex_init(&bus->bus_lock);
1256 spin_lock_init(&pcie_priv->tx0_lock);
1250 spin_lock_init(&pcie_priv->irq_lock);1257 spin_lock_init(&pcie_priv->irq_lock);
1251 spin_lock_init(&pcie_priv->tx_reclaim_lock);1258 spin_lock_init(&pcie_priv->tx_reclaim_lock);
1252 1259
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h+2−0
@@ -34,6 +34,8 @@ struct qtnf_pcie_bus_priv { · 33 unmodified lines
34 34
35 /* lock for tx reclaim operations */35 /* lock for tx reclaim operations */
36 spinlock_t tx_reclaim_lock;36 spinlock_t tx_reclaim_lock;
37 /* lock for tx0 operations */
38 spinlock_t tx0_lock;
37 u8 msi_enabled;39 u8 msi_enabled;
38 int mps;40 int mps;
39 41
drivers/nvdimm/namespace_devs.c+9−0
@@ -1417,6 +1417,15 @@ static int btt_claim_class(struct device *dev) · 1416 unmodified lines
1417 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);1417 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
1418 struct nd_namespace_index *nsindex;1418 struct nd_namespace_index *nsindex;
1419 1419
1420 /*
1421 * If any of the DIMMs do not support labels the only
1422 * possible BTT format is v1.
1423 */
1424 if (!ndd) {
1425 loop_bitmask = 0;
1426 break;
1427 }
1428
1420 nsindex = to_namespace_index(ndd, ndd->ns_current);1429 nsindex = to_namespace_index(ndd, ndd->ns_current);
1421 if (nsindex == NULL)1430 if (nsindex == NULL)
1422 loop_bitmask |= 1;1431 loop_bitmask |= 1;
drivers/nvme/host/core.c+5−6
@@ -134,8 +134,6 @@ static inline bool nvme_req_needs_retry(struct request *req) · 133 unmodified lines
134 return false;134 return false;
135 if (nvme_req(req)->status & NVME_SC_DNR)135 if (nvme_req(req)->status & NVME_SC_DNR)
136 return false;136 return false;
137 if (jiffies - req->start_time >= req->timeout)
138 return false;
139 if (nvme_req(req)->retries >= nvme_max_retries)137 if (nvme_req(req)->retries >= nvme_max_retries)
140 return false;138 return false;
141 return true;139 return true;
@@ -2138,7 +2136,7 @@ static umode_t nvme_ns_attrs_are_visible(struct kobject *kobj, · 1996 unmodified lines
2138 struct nvme_ns *ns = nvme_get_ns_from_dev(dev);2136 struct nvme_ns *ns = nvme_get_ns_from_dev(dev);
2139 2137
2140 if (a == &dev_attr_uuid.attr) {2138 if (a == &dev_attr_uuid.attr) {
2141 if (uuid_is_null(&ns->uuid) ||2139 if (uuid_is_null(&ns->uuid) &&
2142 !memchr_inv(ns->nguid, 0, sizeof(ns->nguid)))2140 !memchr_inv(ns->nguid, 0, sizeof(ns->nguid)))
2143 return 0;2141 return 0;
2144 }2142 }
@@ -2590,7 +2588,7 @@ static void nvme_async_event_work(struct work_struct *work) · 445 unmodified lines
2590 container_of(work, struct nvme_ctrl, async_event_work);2588 container_of(work, struct nvme_ctrl, async_event_work);
2591 2589
2592 spin_lock_irq(&ctrl->lock);2590 spin_lock_irq(&ctrl->lock);
2593 while (ctrl->event_limit > 0) {2591 while (ctrl->state == NVME_CTRL_LIVE && ctrl->event_limit > 0) {
2594 int aer_idx = --ctrl->event_limit;2592 int aer_idx = --ctrl->event_limit;
2595 2593
2596 spin_unlock_irq(&ctrl->lock);2594 spin_unlock_irq(&ctrl->lock);
@@ -2677,7 +2675,8 @@ void nvme_complete_async_event(struct nvme_ctrl *ctrl, __le16 status, · 80 unmodified lines
2677 /*FALLTHRU*/2675 /*FALLTHRU*/
2678 case NVME_SC_ABORT_REQ:2676 case NVME_SC_ABORT_REQ:
2679 ++ctrl->event_limit;2677 ++ctrl->event_limit;
2680 queue_work(nvme_wq, &ctrl->async_event_work);2678 if (ctrl->state == NVME_CTRL_LIVE)
2679 queue_work(nvme_wq, &ctrl->async_event_work);
2681 break;2680 break;
2682 default:2681 default:
2683 break;2682 break;
@@ -2692,7 +2691,7 @@ void nvme_complete_async_event(struct nvme_ctrl *ctrl, __le16 status, · 8 unmodified lines
2692 nvme_queue_scan(ctrl);2691 nvme_queue_scan(ctrl);
2693 break;2692 break;
2694 case NVME_AER_NOTICE_FW_ACT_STARTING:2693 case NVME_AER_NOTICE_FW_ACT_STARTING:
2695 schedule_work(&ctrl->fw_act_work);2694 queue_work(nvme_wq, &ctrl->fw_act_work);
2696 break;2695 break;
2697 default:2696 default:
2698 dev_warn(ctrl->device, "async event result %08x\n", result);2697 dev_warn(ctrl->device, "async event result %08x\n", result);
drivers/nvme/host/fabrics.c+9−9
@@ -565,6 +565,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts, · 564 unmodified lines
565 opts->queue_size = NVMF_DEF_QUEUE_SIZE;565 opts->queue_size = NVMF_DEF_QUEUE_SIZE;
566 opts->nr_io_queues = num_online_cpus();566 opts->nr_io_queues = num_online_cpus();
567 opts->reconnect_delay = NVMF_DEF_RECONNECT_DELAY;567 opts->reconnect_delay = NVMF_DEF_RECONNECT_DELAY;
568 opts->kato = NVME_DEFAULT_KATO;
568 569
569 options = o = kstrdup(buf, GFP_KERNEL);570 options = o = kstrdup(buf, GFP_KERNEL);
570 if (!options)571 if (!options)
@@ -655,21 +656,22 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts, · 84 unmodified lines
655 goto out;656 goto out;
656 }657 }
657 658
658 if (opts->discovery_nqn) {
659 pr_err("Discovery controllers cannot accept keep_alive_tmo != 0\n");
660 ret = -EINVAL;
661 goto out;
662 }
663
664 if (token < 0) {659 if (token < 0) {
665 pr_err("Invalid keep_alive_tmo %d\n", token);660 pr_err("Invalid keep_alive_tmo %d\n", token);
666 ret = -EINVAL;661 ret = -EINVAL;
667 goto out;662 goto out;
668 } else if (token == 0) {663 } else if (token == 0 && !opts->discovery_nqn) {
669 /* Allowed for debug */664 /* Allowed for debug */
670 pr_warn("keep_alive_tmo 0 won't execute keep alives!!!\n");665 pr_warn("keep_alive_tmo 0 won't execute keep alives!!!\n");
671 }666 }
672 opts->kato = token;667 opts->kato = token;
668
669 if (opts->discovery_nqn && opts->kato) {
670 pr_err("Discovery controllers cannot accept KATO != 0\n");
671 ret = -EINVAL;
672 goto out;
673 }
674
673 break;675 break;
674 case NVMF_OPT_CTRL_LOSS_TMO:676 case NVMF_OPT_CTRL_LOSS_TMO:
675 if (match_int(args, &token)) {677 if (match_int(args, &token)) {
@@ -762,8 +764,6 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts, · 86 unmodified lines
762 uuid_copy(&opts->host->id, &hostid);764 uuid_copy(&opts->host->id, &hostid);
763 765
764out:766out:
765 if (!opts->discovery_nqn && !opts->kato)
766 opts->kato = NVME_DEFAULT_KATO;
767 kfree(options);767 kfree(options);
768 return ret;768 return ret;
769}769}
drivers/nvme/host/fc.c+11−10
@@ -1376,7 +1376,7 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req) · 1375 unmodified lines
1376 if (atomic_read(&op->state) == FCPOP_STATE_ABORTED)1376 if (atomic_read(&op->state) == FCPOP_STATE_ABORTED)
1377 status = cpu_to_le16((NVME_SC_ABORT_REQ | NVME_SC_DNR) << 1);1377 status = cpu_to_le16((NVME_SC_ABORT_REQ | NVME_SC_DNR) << 1);
1378 else if (freq->status)1378 else if (freq->status)
1379 status = cpu_to_le16(NVME_SC_FC_TRANSPORT_ERROR << 1);1379 status = cpu_to_le16(NVME_SC_INTERNAL << 1);
1380 1380
1381 /*1381 /*
1382 * For the linux implementation, if we have an unsuccesful1382 * For the linux implementation, if we have an unsuccesful
@@ -1404,7 +1404,7 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req) · 21 unmodified lines
1404 */1404 */
1405 if (freq->transferred_length !=1405 if (freq->transferred_length !=
1406 be32_to_cpu(op->cmd_iu.data_len)) {1406 be32_to_cpu(op->cmd_iu.data_len)) {
1407 status = cpu_to_le16(NVME_SC_FC_TRANSPORT_ERROR << 1);1407 status = cpu_to_le16(NVME_SC_INTERNAL << 1);
1408 goto done;1408 goto done;
1409 }1409 }
1410 result.u64 = 0;1410 result.u64 = 0;
@@ -1421,7 +1421,7 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req) · 10 unmodified lines
1421 freq->transferred_length ||1421 freq->transferred_length ||
1422 op->rsp_iu.status_code ||1422 op->rsp_iu.status_code ||
1423 sqe->common.command_id != cqe->command_id)) {1423 sqe->common.command_id != cqe->command_id)) {
1424 status = cpu_to_le16(NVME_SC_FC_TRANSPORT_ERROR << 1);1424 status = cpu_to_le16(NVME_SC_INTERNAL << 1);
1425 goto done;1425 goto done;
1426 }1426 }
1427 result = cqe->result;1427 result = cqe->result;
@@ -1429,7 +1429,7 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req) · 1 unmodified line
1429 break;1429 break;
1430 1430
1431 default:1431 default:
1432 status = cpu_to_le16(NVME_SC_FC_TRANSPORT_ERROR << 1);1432 status = cpu_to_le16(NVME_SC_INTERNAL << 1);
1433 goto done;1433 goto done;
1434 }1434 }
1435 1435
@@ -1989,16 +1989,17 @@ nvme_fc_start_fcp_op(struct nvme_fc_ctrl *ctrl, struct nvme_fc_queue *queue, · 553 unmodified lines
1989 * as well as those by FC-NVME spec.1989 * as well as those by FC-NVME spec.
1990 */1990 */
1991 WARN_ON_ONCE(sqe->common.metadata);1991 WARN_ON_ONCE(sqe->common.metadata);
1992 WARN_ON_ONCE(sqe->common.dptr.prp1);
1993 WARN_ON_ONCE(sqe->common.dptr.prp2);
1994 sqe->common.flags |= NVME_CMD_SGL_METABUF;1992 sqe->common.flags |= NVME_CMD_SGL_METABUF;
1995 1993
1996 /*1994 /*
1997 * format SQE DPTR field per FC-NVME rules1995 * format SQE DPTR field per FC-NVME rules:
1998 * type=data block descr; subtype=offset;1996 * type=0x5 Transport SGL Data Block Descriptor
1999 * offset is currently 0.1997 * subtype=0xA Transport-specific value
1998 * address=0
1999 * length=length of the data series
2000 */2000 */
2001 sqe->rw.dptr.sgl.type = NVME_SGL_FMT_OFFSET;2001 sqe->rw.dptr.sgl.type = (NVME_TRANSPORT_SGL_DATA_DESC << 4) |
2002 NVME_SGL_FMT_TRANSPORT_A;
2002 sqe->rw.dptr.sgl.length = cpu_to_le32(data_len);2003 sqe->rw.dptr.sgl.length = cpu_to_le32(data_len);
2003 sqe->rw.dptr.sgl.addr = 0;2004 sqe->rw.dptr.sgl.addr = 0;
2004 2005
drivers/nvme/host/pci.c+27−21
@@ -24,6 +24,7 @@ · 23 unmodified lines
24#include <linux/mm.h>24#include <linux/mm.h>
25#include <linux/module.h>25#include <linux/module.h>
26#include <linux/mutex.h>26#include <linux/mutex.h>
27#include <linux/once.h>
27#include <linux/pci.h>28#include <linux/pci.h>
28#include <linux/poison.h>29#include <linux/poison.h>
29#include <linux/t10-pi.h>30#include <linux/t10-pi.h>
@@ -93,7 +94,7 @@ struct nvme_dev { · 63 unmodified lines
93 struct mutex shutdown_lock;94 struct mutex shutdown_lock;
94 bool subsystem;95 bool subsystem;
95 void __iomem *cmb;96 void __iomem *cmb;
96 dma_addr_t cmb_dma_addr;97 pci_bus_addr_t cmb_bus_addr;
97 u64 cmb_size;98 u64 cmb_size;
98 u32 cmbsz;99 u32 cmbsz;
99 u32 cmbloc;100 u32 cmbloc;
@@ -540,6 +541,20 @@ static void nvme_dif_complete(u32 p, u32 v, struct t10_pi_tuple *pi) · 440 unmodified lines
540}541}
541#endif542#endif
542 543
544static void nvme_print_sgl(struct scatterlist *sgl, int nents)
545{
546 int i;
547 struct scatterlist *sg;
548
549 for_each_sg(sgl, sg, nents, i) {
550 dma_addr_t phys = sg_phys(sg);
551 pr_warn("sg[%d] phys_addr:%pad offset:%d length:%d "
552 "dma_address:%pad dma_length:%d\n",
553 i, &phys, sg->offset, sg->length, &sg_dma_address(sg),
554 sg_dma_len(sg));
555 }
556}
557
543static blk_status_t nvme_setup_prps(struct nvme_dev *dev, struct request *req)558static blk_status_t nvme_setup_prps(struct nvme_dev *dev, struct request *req)
544{559{
545 struct nvme_iod *iod = blk_mq_rq_to_pdu(req);560 struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
@@ -622,19 +637,10 @@ static blk_status_t nvme_setup_prps(struct nvme_dev *dev, struct request *req) · 76 unmodified lines
622 return BLK_STS_OK;637 return BLK_STS_OK;
623 638
624 bad_sgl:639 bad_sgl:
625 if (WARN_ONCE(1, "Invalid SGL for payload:%d nents:%d\n",640 WARN(DO_ONCE(nvme_print_sgl, iod->sg, iod->nents),
626 blk_rq_payload_bytes(req), iod->nents)) {641 "Invalid SGL for payload:%d nents:%d\n",
627 for_each_sg(iod->sg, sg, iod->nents, i) {642 blk_rq_payload_bytes(req), iod->nents);
628 dma_addr_t phys = sg_phys(sg);
629 pr_warn("sg[%d] phys_addr:%pad offset:%d length:%d "
630 "dma_address:%pad dma_length:%d\n", i, &phys,
631 sg->offset, sg->length,
632 &sg_dma_address(sg),
633 sg_dma_len(sg));
634 }
635 }
636 return BLK_STS_IOERR;643 return BLK_STS_IOERR;
637
638}644}
639 645
640static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,646static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
@@ -1220,7 +1226,7 @@ static int nvme_alloc_sq_cmds(struct nvme_dev *dev, struct nvme_queue *nvmeq, · 579 unmodified lines
1220 if (qid && dev->cmb && use_cmb_sqes && NVME_CMB_SQS(dev->cmbsz)) {1226 if (qid && dev->cmb && use_cmb_sqes && NVME_CMB_SQS(dev->cmbsz)) {
1221 unsigned offset = (qid - 1) * roundup(SQ_SIZE(depth),1227 unsigned offset = (qid - 1) * roundup(SQ_SIZE(depth),
1222 dev->ctrl.page_size);1228 dev->ctrl.page_size);
1223 nvmeq->sq_dma_addr = dev->cmb_dma_addr + offset;1229 nvmeq->sq_dma_addr = dev->cmb_bus_addr + offset;
1224 nvmeq->sq_cmds_io = dev->cmb + offset;1230 nvmeq->sq_cmds_io = dev->cmb + offset;
1225 } else {1231 } else {
1226 nvmeq->sq_cmds = dma_alloc_coherent(dev->dev, SQ_SIZE(depth),1232 nvmeq->sq_cmds = dma_alloc_coherent(dev->dev, SQ_SIZE(depth),
@@ -1313,11 +1319,11 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid) · 86 unmodified lines
1313 if (result < 0)1319 if (result < 0)
1314 goto release_cq;1320 goto release_cq;
1315 1321
1322 nvme_init_queue(nvmeq, qid);
1316 result = queue_request_irq(nvmeq);1323 result = queue_request_irq(nvmeq);
1317 if (result < 0)1324 if (result < 0)
1318 goto release_sq;1325 goto release_sq;
1319 1326
1320 nvme_init_queue(nvmeq, qid);
1321 return result;1327 return result;
1322 1328
1323 release_sq:1329 release_sq:
@@ -1464,6 +1470,7 @@ static int nvme_pci_configure_admin_queue(struct nvme_dev *dev) · 140 unmodified lines
1464 return result;1470 return result;
1465 1471
1466 nvmeq->cq_vector = 0;1472 nvmeq->cq_vector = 0;
1473 nvme_init_queue(nvmeq, 0);
1467 result = queue_request_irq(nvmeq);1474 result = queue_request_irq(nvmeq);
1468 if (result) {1475 if (result) {
1469 nvmeq->cq_vector = -1;1476 nvmeq->cq_vector = -1;
@@ -1520,7 +1527,7 @@ static void __iomem *nvme_map_cmb(struct nvme_dev *dev) · 50 unmodified lines
1520 resource_size_t bar_size;1527 resource_size_t bar_size;
1521 struct pci_dev *pdev = to_pci_dev(dev->dev);1528 struct pci_dev *pdev = to_pci_dev(dev->dev);
1522 void __iomem *cmb;1529 void __iomem *cmb;
1523 dma_addr_t dma_addr;1530 int bar;
1524 1531
1525 dev->cmbsz = readl(dev->bar + NVME_REG_CMBSZ);1532 dev->cmbsz = readl(dev->bar + NVME_REG_CMBSZ);
1526 if (!(NVME_CMB_SZ(dev->cmbsz)))1533 if (!(NVME_CMB_SZ(dev->cmbsz)))
@@ -1533,7 +1540,8 @@ static void __iomem *nvme_map_cmb(struct nvme_dev *dev) · 6 unmodified lines
1533 szu = (u64)1 << (12 + 4 * NVME_CMB_SZU(dev->cmbsz));1540 szu = (u64)1 << (12 + 4 * NVME_CMB_SZU(dev->cmbsz));
1534 size = szu * NVME_CMB_SZ(dev->cmbsz);1541 size = szu * NVME_CMB_SZ(dev->cmbsz);
1535 offset = szu * NVME_CMB_OFST(dev->cmbloc);1542 offset = szu * NVME_CMB_OFST(dev->cmbloc);
1536 bar_size = pci_resource_len(pdev, NVME_CMB_BIR(dev->cmbloc));1543 bar = NVME_CMB_BIR(dev->cmbloc);
1544 bar_size = pci_resource_len(pdev, bar);
1537 1545
1538 if (offset > bar_size)1546 if (offset > bar_size)
1539 return NULL;1547 return NULL;
@@ -1546,12 +1554,11 @@ static void __iomem *nvme_map_cmb(struct nvme_dev *dev) · 6 unmodified lines
1546 if (size > bar_size - offset)1554 if (size > bar_size - offset)
1547 size = bar_size - offset;1555 size = bar_size - offset;
1548 1556
1549 dma_addr = pci_resource_start(pdev, NVME_CMB_BIR(dev->cmbloc)) + offset;1557 cmb = ioremap_wc(pci_resource_start(pdev, bar) + offset, size);
1550 cmb = ioremap_wc(dma_addr, size);
1551 if (!cmb)1558 if (!cmb)
1552 return NULL;1559 return NULL;
1553 1560
1554 dev->cmb_dma_addr = dma_addr;1561 dev->cmb_bus_addr = pci_bus_address(pdev, bar) + offset;
1555 dev->cmb_size = size;1562 dev->cmb_size = size;
1556 return cmb;1563 return cmb;
1557}1564}
@@ -2156,7 +2163,6 @@ static void nvme_reset_work(struct work_struct *work) · 598 unmodified lines
2156 if (result)2163 if (result)
2157 goto out;2164 goto out;
2158 2165
2159 nvme_init_queue(dev->queues[0], 0);
2160 result = nvme_alloc_admin_tags(dev);2166 result = nvme_alloc_admin_tags(dev);
2161 if (result)2167 if (result)
2162 goto out;2168 goto out;
drivers/nvme/host/rdma.c+7−2
@@ -942,7 +942,12 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work) · 941 unmodified lines
942 }942 }
943 943
944 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);944 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
945 WARN_ON_ONCE(!changed);945 if (!changed) {
946 /* state change failure is ok if we're in DELETING state */
947 WARN_ON_ONCE(ctrl->ctrl.state != NVME_CTRL_DELETING);
948 return;
949 }
950
946 ctrl->ctrl.nr_reconnects = 0;951 ctrl->ctrl.nr_reconnects = 0;
947 952
948 nvme_start_ctrl(&ctrl->ctrl);953 nvme_start_ctrl(&ctrl->ctrl);
@@ -962,7 +967,7 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work) · 13 unmodified lines
962 struct nvme_rdma_ctrl *ctrl = container_of(work,967 struct nvme_rdma_ctrl *ctrl = container_of(work,
963 struct nvme_rdma_ctrl, err_work);968 struct nvme_rdma_ctrl, err_work);
964 969
965 nvme_stop_ctrl(&ctrl->ctrl);970 nvme_stop_keep_alive(&ctrl->ctrl);
966 971
967 if (ctrl->ctrl.queue_count > 1) {972 if (ctrl->ctrl.queue_count > 1) {
968 nvme_stop_queues(&ctrl->ctrl);973 nvme_stop_queues(&ctrl->ctrl);
drivers/nvme/target/core.c+5−4
@@ -390,10 +390,10 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status) · 389 unmodified lines
390 if (status)390 if (status)
391 nvmet_set_status(req, status);391 nvmet_set_status(req, status);
392 392
393 /* XXX: need to fill in something useful for sq_head */393 if (req->sq->size)
394 req->rsp->sq_head = 0;394 req->sq->sqhd = (req->sq->sqhd + 1) % req->sq->size;
395 if (likely(req->sq)) /* may happen during early failure */395 req->rsp->sq_head = cpu_to_le16(req->sq->sqhd);
396 req->rsp->sq_id = cpu_to_le16(req->sq->qid);396 req->rsp->sq_id = cpu_to_le16(req->sq->qid);
397 req->rsp->command_id = req->cmd->common.command_id;397 req->rsp->command_id = req->cmd->common.command_id;
398 398

9 more lines aren’t shown here.

drivers/nvme/target/fabrics-cmd.c+7−2

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

drivers/nvme/target/fc.c+14−10

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

drivers/nvme/target/fcloop.c+39−65

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

drivers/nvme/target/nvmet.h+1−0

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

drivers/nvmem/core.c+2−1

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

drivers/pci/endpoint/functions/pci-epf-test.c+6−7

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

drivers/pci/pci-sysfs.c+9−2

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

drivers/perf/arm_pmu_acpi.c+1−0

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

drivers/platform/x86/fujitsu-laptop.c+6−4

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

drivers/rapidio/devices/tsi721.c+7−0

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

drivers/rapidio/rio-access.c+5−35

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

drivers/reset/Kconfig+5−4

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

drivers/reset/Makefile+1−1

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

drivers/reset/reset-hsdk.crenamed from drivers/reset/reset-hsdk-v1.c+22−22

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

drivers/s390/block/dasd.c+9−3

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

drivers/s390/block/scm_blk.c+3−3

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

drivers/s390/cio/device.c+9−3

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

drivers/s390/cio/device.h+1−0

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

drivers/s390/cio/device_fsm.c+12−0

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

drivers/s390/cio/io_sch.h+2−0

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

drivers/scsi/aacraid/aachba.c+6−6

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

drivers/scsi/aacraid/aacraid.h+5−0

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

drivers/scsi/aacraid/linit.c+12−8

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

drivers/scsi/aacraid/src.c+2−0

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

drivers/scsi/arm/acornscsi.c+3−3

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

drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c+1−1

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

drivers/scsi/libiscsi.c+4−4

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

drivers/scsi/lpfc/lpfc_init.c+1−0

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

drivers/scsi/lpfc/lpfc_nvme.c+1−1

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

drivers/scsi/qla2xxx/qla_nvme.c+1−1

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

drivers/scsi/scsi_error.c+2−1

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

drivers/scsi/scsi_scan.c+3−0

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

drivers/scsi/scsi_transport_fc.c+4−12

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

drivers/scsi/scsi_transport_iscsi.c+1−17

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

drivers/scsi/sd.c+26−11

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

drivers/scsi/sg.c+36−28

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

drivers/staging/iio/adc/ad7192.c+1−3

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

drivers/staging/mt29f_spinand/mt29f_spinand.c+6−2

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

drivers/staging/pi433/rf69.c+3−6

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

drivers/staging/rtl8723bs/core/rtw_mlme.c+1−2

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

drivers/staging/rtl8723bs/os_dep/rtw_proc.c+2−0

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

drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c+2−2

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

drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c+7−6

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

drivers/staging/speakup/main.c+12−3

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

drivers/staging/unisys/visorbus/visorchipset.c+2−2

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

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c+4−2

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

drivers/tty/mxser.c+11−5

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

drivers/tty/serial/bcm63xx_uart.c+5−0

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

drivers/tty/serial/fsl_lpuart.c+17−23

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

drivers/tty/serial/sccnxp.c+11−2

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

drivers/usb/class/cdc-wdm.c+3−1

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

drivers/usb/core/config.c+12−4

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

drivers/usb/core/devio.c+10−1

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

drivers/usb/core/hub.c+1−1

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

drivers/usb/core/message.c+4−0

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

drivers/usb/dwc3/dwc3-of-simple.c+1−0

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

drivers/usb/dwc3/ep0.c+7−0

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

drivers/usb/gadget/function/f_fs.c+13−4

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

drivers/usb/gadget/function/f_mass_storage.c+7−20

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

drivers/usb/gadget/function/f_mass_storage.h+0−14

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

drivers/usb/gadget/function/f_printer.c+6−1

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

drivers/usb/gadget/function/u_fs.h+1−0

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

drivers/usb/gadget/legacy/inode.c+40−6

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

drivers/usb/gadget/legacy/mass_storage.c+3−23

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

drivers/usb/gadget/udc/Kconfig+1−0

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

drivers/usb/gadget/udc/atmel_usba_udc.c+3−1

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

drivers/usb/gadget/udc/core.c+1−2

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

drivers/usb/gadget/udc/dummy_hcd.c+54−11

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

drivers/usb/gadget/udc/renesas_usb3.c+15−4

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

drivers/usb/host/pci-quirks.c+5−5

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

drivers/usb/host/xhci-hub.c+10−4

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

drivers/usb/host/xhci-pci.c+0−12

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

drivers/usb/host/xhci-plat.c+10−6

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

drivers/usb/host/xhci.c+2−1

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

drivers/usb/host/xhci.h+6−4

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

drivers/usb/renesas_usbhs/fifo.c+18−3

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

drivers/usb/storage/transport.c+13−1

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

drivers/usb/storage/uas-detect.h+8−7

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

drivers/usb/storage/uas.c+5−5

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

drivers/usb/storage/unusual_devs.h+7−0

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

drivers/uwb/hwa-rc.c+2−0

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

drivers/uwb/uwbd.c+8−4

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

drivers/xen/xen-pciback/conf_space_header.c+10−1

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

drivers/xen/xenbus/xenbus_client.c+67−63

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

fs/binfmt_misc.c+26−30

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

fs/binfmt_script.c+9−8

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

fs/btrfs/compression.c+17−1

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

fs/btrfs/ctree.h+1−2

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

fs/btrfs/disk-io.c+8−1

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

fs/btrfs/extent_io.c+3−7

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

fs/btrfs/inode.c+22−5

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

fs/btrfs/ioctl.c+8−4

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

fs/btrfs/qgroup.c+2−4

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

fs/btrfs/relocation.c+1−1

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

fs/btrfs/send.c+1−1

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

fs/btrfs/tree-log.c+10−2

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

fs/btrfs/volumes.c+1−1

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

fs/ceph/mds_client.c+10−8

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

fs/ceph/mds_client.h+3−0

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

fs/ceph/snap.c+3−5

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

fs/cifs/cifs_debug.c+7−2

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

fs/cifs/cifsfs.c+3−1

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

fs/cifs/cifsfs.h+1−1

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

fs/cifs/cifsglob.h+6−0

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

fs/cifs/connect.c+25−7

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

fs/cifs/file.c+15−4

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

fs/cifs/inode.c+15−0

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

fs/cifs/smb2ops.c+42−0

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

fs/cifs/smb2pdu.c+93−18

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

fs/cifs/smb2pdu.h+1−1

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

fs/direct-io.c+43−6

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

fs/exec.c+1−1

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

fs/fcntl.c+1−1

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

fs/gfs2/glock.c+5−9

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

fs/iomap.c+23−20

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

fs/isofs/inode.c+2−0

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

fs/namespace.c+3−1

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

fs/overlayfs/copy_up.c+2−4

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

fs/overlayfs/dir.c+0−20

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

fs/overlayfs/namei.c+1−0

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

fs/overlayfs/overlayfs.h+1−0

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

fs/overlayfs/ovl_entry.h+3−0

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

fs/overlayfs/readdir.c+4−2

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

fs/overlayfs/super.c+19−8

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

fs/overlayfs/util.c+23−1

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

fs/proc/array.c+24−20

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

fs/quota/dquot.c+2−0

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

fs/quota/quota_v2.c+4−0

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

fs/read_write.c+2−2

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

fs/userfaultfd.c+56−10

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

fs/xattr.c+1−1

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

fs/xfs/libxfs/xfs_ag_resv.c+10−2

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

fs/xfs/libxfs/xfs_bmap.c+2−15

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

fs/xfs/xfs_aops.c+2−1

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

fs/xfs/xfs_bmap_util.c+35−3

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

fs/xfs/xfs_buf.c+0−2

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

fs/xfs/xfs_error.c+1−1

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

fs/xfs/xfs_file.c+21−18

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

fs/xfs/xfs_inode.c+5−3

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

fs/xfs/xfs_inode_item.c+1−1

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

fs/xfs/xfs_ioctl.c+2−1

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

fs/xfs/xfs_iomap.c+5−2

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

fs/xfs/xfs_iomap.h+1−1

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

fs/xfs/xfs_pnfs.c+1−1

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

fs/xfs/xfs_reflink.c+8−1

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

fs/xfs/xfs_super.c+10−0

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

include/acpi/acpi_bus.h+4−14

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

include/asm-generic/percpu.h+22−2

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

include/dt-bindings/reset/snps,hsdk-reset.h+17−0

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

include/dt-bindings/reset/snps,hsdk-v1-reset.h+0−17

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

include/linux/audit.h+1−5

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

include/linux/binfmts.h+1−1

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

include/linux/bitfield.h+1−1

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

include/linux/blkdev.h+1−0

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

include/linux/cpuhotplug.h+20−1

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

include/linux/device.h+1−3

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

include/linux/fs.h+1−1

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

include/linux/iio/adc/ad_sigma_delta.h+3−0

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

include/linux/input.h+1−0

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

include/linux/iommu.h+1−1

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

include/linux/irq.h+1−4

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

include/linux/key.h+2−0

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

include/linux/mlx5/device.h+2−3

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

include/linux/mlx5/driver.h+1−0

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

include/linux/mlx5/mlx5_ifc.h+2−1

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

include/linux/mm.h+1−1

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

include/linux/mmc/host.h+1−1

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

include/linux/mmu_notifier.h+5−0

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

include/linux/mmzone.h+8−2

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

include/linux/nmi.h+62−59

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

include/linux/nvme-fc-driver.h+8−5

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

include/linux/nvme.h+6−13

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

include/linux/of_platform.h+7−0

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

include/linux/pci.h+2−0

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

include/linux/sched.h+40−24

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

include/linux/sched/mm.h+6−0

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

include/linux/seccomp.h+2−1

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

include/linux/smpboot.h+2−2

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

include/linux/syscalls.h+8−4

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

include/linux/timer.h+14−0

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

include/linux/trace_events.h+1−0

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

include/net/dst.h+4−18

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

include/net/netlink.h+55−18

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

include/net/protocol.h+2−2

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

include/net/route.h+4−2

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

include/net/sock.h+1−1

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

include/net/tcp.h+1−2

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

include/net/udp.h+1−1

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

include/rdma/ib_verbs.h+3−3

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

include/scsi/scsi_device.h+1−0

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

include/scsi/scsi_devinfo.h+1−0

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

include/scsi/scsi_transport_iscsi.h+0−1

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

include/sound/hda_verbs.h+1−0

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

include/trace/events/sched.h+12−7

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

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

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

include/uapi/linux/dm-ioctl.h+2−2

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

include/uapi/linux/ethtool.h+5−1

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

include/uapi/linux/kfd_ioctl.h+86−86

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

include/uapi/linux/seccomp.h+15−8

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

include/uapi/linux/usb/ch9.h+1−0

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

include/uapi/rdma/ib_user_verbs.h+1−1

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

include/xen/arm/page.h+0−10

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

ipc/shm.c+2−2

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

kernel/bpf/core.c+1−1

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

kernel/bpf/devmap.c+4−2

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

kernel/bpf/syscall.c+4−2

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

kernel/bpf/verifier.c+6−1

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

kernel/cgroup/cgroup.c+8−0

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

kernel/cpu.c+370−142

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

kernel/events/core.c+2−1

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

kernel/events/ring_buffer.c+15−5

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

kernel/exit.c+10−13

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

kernel/extable.c+31−14

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

kernel/fork.c+18−0

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

kernel/futex.c+22−11

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

kernel/irq/chip.c+1−1

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

kernel/irq/generic-chip.c+0−1

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

kernel/irq/irqdomain.c+2−2

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

kernel/irq/manage.c+4−0

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

kernel/kcmp.c+1−1

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

kernel/locking/rwsem-xadd.c+27−0

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

kernel/memremap.c+3−1

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

kernel/params.c+16−19

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

kernel/power/suspend.c+11−7

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

kernel/rcu/tree.c+10−0

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

kernel/sched/core.c+23−1

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

kernel/sched/debug.c+0−2

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

kernel/seccomp.c+326−18

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

kernel/smpboot.c+8−17

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

kernel/sysctl.c+11−16

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

kernel/trace/blktrace.c+12−6

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

kernel/trace/ftrace.c+0−14

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

kernel/trace/trace.c+16−3

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

kernel/trace/trace.h+2−0

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

kernel/trace/trace_mmiotrace.c+1−0

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

kernel/trace/trace_output.c+6−15

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

kernel/trace/trace_sched_wakeup.c+4−4

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

kernel/trace/trace_stack.c+0−15

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

kernel/watchdog.c+238−405

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

kernel/watchdog_hld.c+111−85

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

lib/Kconfig.debug+2−1

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

lib/idr.c+2−2

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

lib/iov_iter.c+4−2

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

lib/kobject_uevent.c+41−8

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

lib/lz4/lz4_decompress.c+2−2

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

lib/ratelimit.c+3−1

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

lib/rhashtable.c+5−4

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

mm/compaction.c+5−8

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

mm/filemap.c+16−2

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

mm/ksm.c+4−1

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

mm/list_lru.c+6−6

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

mm/madvise.c+10−2

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

mm/memcontrol.c+17−6

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

mm/memory.c+1−1

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

mm/memory_hotplug.c+4−3

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

mm/oom_kill.c+16−0

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

mm/page_alloc.c+2−1

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

mm/percpu-stats.c+1−1

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

mm/percpu.c+4−0

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

mm/rodata_test.c+1−1

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

mm/slab_common.c+15−7

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

mm/swap.c+2−2

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

mm/swap_state.c+11−0

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

mm/z3fold.c+5−5

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

net/8021q/vlan_core.c+6−0

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

net/bluetooth/Kconfig+0−10

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

net/bluetooth/hci_sock.c+0−6

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

net/ceph/osdmap.c+25−10

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

net/compat.c+7−0

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

net/core/dev.c+7−2

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

net/core/ethtool.c+2−0

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

net/core/filter.c+23−13

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

net/core/rtnetlink.c+3−0

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

net/core/sock.c+6−1

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

net/dsa/slave.c+18−13

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

net/ipv4/inet_connection_sock.c+4−2

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

net/ipv4/inetpeer.c+2−2

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

net/ipv4/ip_gre.c+7−5

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

net/ipv4/ip_input.c+15−10

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

net/ipv4/ip_vti.c+2−1

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

net/ipv4/route.c+26−20

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

net/ipv4/tcp_ipv4.c+5−4

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

net/ipv4/tcp_output.c+9−34

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

net/ipv4/udp.c+18−6

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

net/ipv6/addrconf.c+23−9

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

net/ipv6/ip6_gre.c+12−10

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

net/ipv6/ip6_tunnel.c+6−2

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

net/ipv6/ip6_vti.c+2−1

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

net/ipv6/udp.c+1−0

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

net/l2tp/l2tp_core.c+10−6

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

net/l2tp/l2tp_core.h+5−1

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

net/l2tp/l2tp_eth.c+2−49

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

net/l2tp/l2tp_ppp.c+4−4

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

net/netfilter/ipset/ip_set_hash_gen.h+13−1

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

net/netfilter/nf_nat_core.c+6−6

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

net/netlink/af_netlink.c+5−2

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

net/packet/af_packet.c+19−9

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

net/sched/cls_flower.c+9−6

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

net/sched/cls_matchall.c+1−0

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

net/sched/sch_generic.c+1−0

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

net/sched/sch_hfsc.c+19−4

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

net/sctp/sctp_diag.c+3−1

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

net/smc/af_smc.c+9−7

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

net/smc/smc.h+1−1

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

net/smc/smc_clc.c+5−5

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

net/smc/smc_clc.h+1−2

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

net/smc/smc_close.c+15−12

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

net/smc/smc_core.c+12−4

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

net/smc/smc_ib.c+1−0

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

net/smc/smc_pnet.c+3−1

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

net/smc/smc_rx.c+2−0

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

net/smc/smc_tx.c+8−4

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

net/smc/smc_wr.c+1−1

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

net/sunrpc/xprtrdma/frwr_ops.c+1−1

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

net/tipc/msg.c+1−1

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

net/wireless/nl80211.c+6−0

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

scripts/Makefile.build+2−0

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

scripts/checkpatch.pl+1−1

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

scripts/dtc/dtx_diff+9−13

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

scripts/mkversion+0−6

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

scripts/package/Makefile+0−5

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

scripts/package/builddeb+1−21

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

scripts/package/mkspec+4−10

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

scripts/spelling.txt+33−0

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

security/apparmor/.gitignore+1−0

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

security/apparmor/Makefile+41−2

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

security/apparmor/apparmorfs.c+39−6

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

security/apparmor/domain.c+2−2

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

security/apparmor/file.c+30−0

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

security/apparmor/include/apparmor.h+2−0

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

security/apparmor/include/audit.h+30−9

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

security/apparmor/include/domain.h+5−0

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

security/apparmor/include/ipc.h+6−0

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

security/apparmor/include/label.h+1−0

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

security/apparmor/include/mount.h+54−0

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

security/apparmor/include/net.h+114−0

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

security/apparmor/include/perms.h+3−2

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

security/apparmor/include/policy.h+13−0

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

security/apparmor/include/sig_names.h+98−0

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

security/apparmor/ipc.c+99−0

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

security/apparmor/label.c+19−17

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

security/apparmor/lib.c+3−2

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

security/apparmor/lsm.c+472−0

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

security/apparmor/mount.c+696−0

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

security/apparmor/net.c+184−0

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

security/apparmor/policy.c+87−79

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

security/apparmor/policy_ns.c+2−0

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

security/apparmor/policy_unpack.c+87−18

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

security/commoncap.c+3−3

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

security/keys/Kconfig+1−3

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

security/keys/big_key.c+65−74

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

security/keys/internal.h+1−1

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

security/keys/key.c+4−2

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

security/keys/keyctl.c+8−5

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

security/keys/keyring.c+19−18

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

security/keys/proc.c+2−6

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

security/keys/process_keys.c+4−2

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

security/keys/request_key_auth.c+33−41

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

security/smack/smack_lsm.c+25−30

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

sound/core/compress_offload.c+1−2

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

sound/core/pcm_compat.c+1−0

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

sound/pci/asihpi/hpioctl.c+8−4

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

sound/pci/echoaudio/echoaudio.c+3−3

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

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

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

sound/usb/card.c+20−0

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

sound/usb/quirks.c+2−0

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

sound/usb/usx2y/usb_stream.c+4−2

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

tools/arch/s390/include/uapi/asm/kvm.h+6−0

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

tools/arch/x86/include/asm/cpufeatures.h+2−0

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

tools/arch/x86/include/asm/disabled-features.h+3−1

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

tools/include/asm-generic/hugetlb_encode.h+34−0

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

tools/include/uapi/asm-generic/mman-common.h+3−11

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

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

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

tools/include/uapi/drm/i915_drm.h+49−2

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

tools/include/uapi/linux/bpf.h+20−12

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

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

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

tools/include/uapi/linux/mman.h+23−1

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

tools/objtool/Documentation/stack-validation.txt+3−3

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

tools/objtool/arch/x86/decode.c+11−6

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

tools/objtool/check.c+29−14

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

tools/objtool/elf.c+20−13

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

tools/perf/MANIFEST+2−85

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

tools/perf/arch/s390/util/Build+0−1

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

tools/perf/arch/s390/util/sym-handling.c+0−29

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

tools/perf/util/callchain.c+21−14

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

tools/perf/util/evsel.c+6−1

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

tools/perf/util/symbol-elf.c+1−7

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

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

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

tools/perf/util/syscalltbl.c+1−1

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

tools/testing/nvdimm/test/nfit.c+0−3

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

tools/testing/selftests/Makefile+11−7

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

tools/testing/selftests/bpf/bpf_util.h+9−8

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

tools/testing/selftests/breakpoints/Makefile+4−4

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

tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc+2−0

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

tools/testing/selftests/futex/Makefile+6−3

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

tools/testing/selftests/intel_pstate/Makefile+2−0

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

tools/testing/selftests/intel_pstate/run.sh+5−6

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

tools/testing/selftests/lib.mk+40−8

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

tools/testing/selftests/memfd/run_tests.sh+0−0

File mode changed from 100644 to 100755.

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

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

tools/testing/selftests/net/.gitignore+1−0

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

tools/testing/selftests/net/Makefile+3−3

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

tools/testing/selftests/net/msg_zerocopy.c+1−1

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

tools/testing/selftests/net/netdevice.sh+1−1

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

tools/testing/selftests/net/reuseaddr_conflict.c+114−0

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

tools/testing/selftests/seccomp/Makefile+13−5

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

tools/testing/selftests/seccomp/seccomp_benchmark.c+99−0

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

tools/testing/selftests/seccomp/seccomp_bpf.c+527−101

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

tools/testing/selftests/sigaltstack/sas.c+4−0

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

tools/testing/selftests/sync/Makefile+19−5

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

tools/testing/selftests/timers/set-timer-lat.c+7−6

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

tools/testing/selftests/watchdog/Makefile+1−6

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

virt/kvm/eventfd.c+0−2

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